#iotsatpn
saturday 2019
Internet of Things
Custom Vision On Edge Device
#disatpn#iotsatpn
Alessio Biasiutti
Azure Solution Architect
alessiobiasiutti
abiasiutti@altitudo.com
@biasiuttiale
#iotsatpn
Agenda
• Edge device come, quando, perché?
• Demo
• Architettura
• Raspberry PI
• IoT Edge / IoT Hub
• Custom Vision
• Edge Stream Analytics
• Riepilogo
#iotsatpn
Edge device come, quando, perché?
• Necessità di comandi e controlli Low-latency
• Connettività limitata al cloud
• Bandwidth limitata
• Compliance
• Privacy
• Necessità di limitare i dati verso il cloud (immagini, video, audio)
• Si ha bisogno di AI/ML all’interno del device
#iotsatpn
Applicazioni
Articoli mancanti negli
scafali dei supermercati
#disatpn#iotsatpn
Applicazioni
Rilevamento persone in coda
o in una stanza
5 min10 min
20 min
#disatpn#iotsatpn
Applicazioni
Rilevamento traffico
Parcheggi
#disatpn#iotsatpn
Applicazioni
Analisi audio e vibrazioni per
rilevamento anomalie
#iotsatpn
Demo
#iotsatpn
Cosa Serve?
Camera Capture
Custom Vision
Stream Analytics
Power BI
IoT Edge Runtime
Raspberry Pi 3 B+
IoT Hub ASA
Azure
Azure
Container
Regestry
#iotsatpn
Hardware – Raspberry PI 3+
• Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
• 1GB LPDDR2 SDRAM
• 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth
4.2, BLE
• Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
• Full-size HDMI
• 4 USB 2.0 ports
• CSI camera port for connecting a Raspberry Pi camera
• DSI display port for connecting a Raspberry Pi touchscreen display
• 4-pole stereo output and composite video port
• Micro SD port for loading your operating system and storing data
• 5V/2.5A DC power input
• Power-over-Ethernet (PoE) support (requires separate PoE HAT)
#iotsatpn
IoT Edge
• Multiple architectures (Intel or ARM CPUs)
• Raspberry Pi
• Industrial PCs
• Dedicated field gateways
• Servers
• IoT Edge Runtime
• IoT Edge Hub
• IoT Edge Agent
• Edge Hub
• Si concentra sulla comunicazione
• Esterna (AMQP e MQTT)
• OT – Edge
• Edge – IoT Hub: in caso di perdita di connessione
bufferizza i dati in locale
• Ricezione comandi
#iotsatpn
IoT Edge - Modules
• Modulo IoT Edge
• Visual Studio o Visual Studio Code
• Container in cui gira un servizio di qualunque tipo
• C, C# (.Net Core 2.1), Java, Node.js, and Python
• Azure Functions in C# (.Net Core 2.1)
• Azure Stream Analytics Edge
• Machine Learning
• Deployment manifest
• Descrive come si colelgano fra loro e quali moduli/versione di container/variabili di ambiente)
• Max 20 moduli per deployment
• L’unico engine supportato in produzione è Moby (open source)
• Per sviluppo va bene anche Docker
• Module Twins
#iotsatpn
IoT Edge - Communication
• IoT Edge Hub
• Internal communication
• Collegamento tra output e
input dei moduli
• IoT Edge Agent
• Inizializza i moduli
• Controlla che siano running
• Download manifest
• Download Immagini dei
moduli
• Verifica delle immagini dei
moduli prima di eseguirli
#iotsatpn
IoT Hub - Firmware update / Monitor
#iotsatpn
Modulo Custom Vision
Pro
• Non serve sapere nulla di AI / Reti Neurali / Python
• Non serve HW dedicato
• Ideale per creare prototipi velocemente
• Ideale anche per ambienti di produzione
• Sicurezza e privacy
#iotsatpn
Custom Vision Object Detection
#iotsatpn
Custom Vision Container
• App
• App.py: start server http
• Labels.txt
• Model.pb: modello TensorFlow
• Object_detection.py: engine
• Predict.py: modulo per eseguire
l’evalute del modello
• DockerFile
• ReadMe.txt
• REST API per valutazione
immagini
#iotsatpn
Valutazione Immagine
• Molti risultati con probabilità
bassa
• Impostare un filtro
• Eliminare quelli sovrapposti
#iotsatpn
Camera Capture Container
• Modulo Python
• Utilizzo di OpenCV
• Chiama direttamente Custom Vision via HTTP
• Riquadra l’immagine con i bounding box di ritorno da
CV
• Emette l’immagine via WebSocket (debug)
• Ricompilare OpenCV per Arm32v7
#disatpn#iotsatpn
Stream Analytics Edge
• Query SQL
• Funzionalità simili alla versione
cloud
• UDF in C# (no JavaScript)
• Conta il numero di oggetti e
trasforma il risultato complesso di
Custom Vision
#disatpn#iotsatpn
Query
WITH
BBOX AS (
SELECT
C.Created,
P.arrayvalue.tagName as TagName,
P.arrayvalue.probability
FROM
camera as C Timestamp by Created
CROSS APPLY GetArrayElements(C.predictions) AS P
WHERE
P.arrayvalue.probability > 0.4
),
STATS AS (
SELECT
Created,
TagName,
COUNT(*) AS Quantity,
AVG(Probability) AS Probability
FROM
BBOX
GROUP BY
Created, TagName, TUMBLINGWINDOW(ss, 5)
)
SELECT
TagName,
System.Timestamp as TimeStamp,
AVG(Quantity) AS Quantity,
SUM(Quantity*Probability)/SUM(Quantity) as Probability
INTO
IoTHub
FROM
Stats
GROUP BY
TagName, TUMBLINGWINDOW(ss, 5)
• Input
#disatpn#iotsatpn
Stream Analytics Edge
• Input
• Output
#disatpn#iotsatpn
Deployment manifest
#disatpn#iotsatpn
Tips and Tricks
#disatpn#iotsatpn
Deploy
Container
Camera Capture
Stream Analytics
Engine
Deployment
manifest
Job Definition
Container
Custom Vision
#iotsatpn
Visual Studio Code
• Cosa si può fare
• Creare moduli
• Crare deployment descriptor
• Dubug
• Publish
• Gestire container
• Comandare docker
#disatpn#iotsatpn
Riepilogando
Camera Capture
Custom Vision
Stream Analytics
Power BI
IoT Edge Runtime
Raspberry Pi 3 B+
IoT Hub ASA
Azure
Azure
Container
Regestry
#iotsatpn
Power BI
• Streaming Dataset
• Dataset creato alla prima ricezione di un dato
• 1,000,000 rows per ora
• 15KB per pacchetto
• 1 una chiamata all’API per secondo
• Limitare l’invio dei dati altrimenti ci possono essere dei problemi con
l’aggiornamento del grafico
#disatpn#iotsatpn
Uno sguardo veloce al codice
#disatpn#iotsatpn
Question Time
#disatpn#iotsatpn
Grazie!

Custom vision on edge device