CV / ArcFace
ArcFace MobileFaceNet
reComputer R Series (CM5 + Hailo-10H)
Reconnaissance faciale ArcFace (2,04 M paramètres, 99,4 % LFW) sur reComputer R Series avec Hailo-8 ou Hailo-10H.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
sudo docker run --rm \
--name cm5-hailo-arcface \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/arcface_mobilefacenet:latest \
python web_detection.py --model_path model/arcface_mobilefacenet.hef --video_path video/test.mp4API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl -X POST "http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predict" \
-F "file=@face.jpg"import requests
resp = requests.post(
"http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predict",
files={"file": open("face.jpg", "rb")},
timeout=30,
)
print(resp.json())Détails du modèle
reComputer R Series (CM5 + Hailo-10H)ArcFace MobileFaceNet sur reComputer R Series (CM5 + Hailo-10H)
ArcFace avec un backbone MobileFaceNet extrait des embeddings faciaux de 512 dimensions sur Hailo-10H via HailoRT. L'embedding sert à la vérification et à l'identification des visages ; la comparaison elle-même est faite côté client par similarité cosinus.
Cette page cible reComputer R Series (CM5 + Hailo-10H) avec un accélérateur PCIe Hailo-10H.
Informations du modèle
| Propriété | Valeur |
|---|---|
| Architecture | ArcFace avec backbone MobileFaceNet |
| Tâche | Reconnaissance faciale (extraction d'embeddings) |
| Entrée | 112x112x3 RGB (letterbox, normalisation compilée dans le HEF) |
| Sortie | Embedding facial de 512 dimensions |
| Paramètres | 2.04M |
| Précision LFW | 99,4 % (référence Hailo Model Zoo) |
| HEF | Hailo Model Zoo v5.4.0, Hailo-10H |
La précision est la référence Hailo Model Zoo ; ce n'est pas un benchmark mesuré sur CM5.
Matériel et configuration de l'hôte
| Élément | Valeur |
|---|---|
| Carte | reComputer R Series avec Raspberry Pi CM5 |
| Accélérateur | Hailo-10H via PCIe, exposé comme /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python dans le conteneur | 3.13, aarch64 |
Installez les paquets Hailo-10H sur l'hôte et vérifiez que le pilote et le périphérique sont prêts avant de démarrer le conteneur :
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# Après redémarrage
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Exécution avec la vidéo de démonstration
sudo docker run --rm \
--name cm5-hailo-arcface \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/arcface_mobilefacenet:latest \
python web_detection.py --model_path model/arcface_mobilefacenet.hef --video_path video/test.mp4Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu web. Chaque image est annotée avec la dimension de l'embedding et la REST API renvoie le vecteur complet de 512 dimensions.
Mode caméra USB
sudo docker run --rm \
--name cm5-hailo-arcface \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
--device /dev/video0:/dev/video0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/arcface_mobilefacenet:latest \
python web_detection.py --model_path model/arcface_mobilefacenet.hef --camera_id 0REST API
POST http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predictcurl -X POST "http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predict" \
-F "file=@face.jpg"{
"success": true,
"source": "uploaded image",
"embedding": [0.023, -0.156, 0.089, "..."],
"dimension": 512,
"image": { "width": 1280, "height": 720 }
}| Endpoint | Méthode | Rôle |
|---|---|---|
/ | GET | Interface d'aperçu web |
/api/models/arcface_mobilefacenet/predict | POST | Embedding facial (JSON) |
/api/video_feed | GET | Flux d'aperçu MJPEG |
/api/config | GET / POST | Lire ou modifier les seuils d'exécution |
/api/video/upload | POST | Téléverser une vidéo source |
/api/video/analyze | POST | Lancer l'analyse vidéo hors ligne |
/api/video/status | GET | Lire la progression de l'analyse |
/api/video/download/{filename} | GET | Télécharger le résultat annoté |
La vérification faciale n'est pas exposée comme endpoint dédié : comparez deux embeddings renvoyés par similarité cosinus côté client (normalisez d'abord les deux vecteurs en L2).
Fichiers HEF
| HEF | Taille | Remarques |
|---|---|---|
arcface_mobilefacenet.hef | 2,666,496 bytes | Build Hailo-10H, Model Zoo v5.4.0 |
Notes d'implémentation
- Le HEF contient sa propre couche de normalisation : l'application applique un letterbox 112x112, convertit BGR en RGB et transmet les pixels uint8 tels quels.
- L'embedding est lu sur la sortie
fc1lorsque le nom du vstream est exposé ; sinon le premier tenseur de sortie est utilisé. La première inférence journalise tous les noms et shapes de vstreams. - Les embeddings vides ou contenant des valeurs non finies sont rejetés au lieu d'être renvoyés comme résultat valide.
Notes de développement
- Module source :
src/hailo10h_arcface_mobilefacenet/ - Dockerfile :
docker/hailo10h/arcface_mobilefacenet.dockerfile - Conteneur :
ghcr.io/seeed-projects/recomputer-hailo10h-cv/arcface_mobilefacenet:latest - Le module utilise l'API InferModel de HailoRT 5.1.1 et un HEF dédié à Hailo-10H.
Entrées et sorties
Entrée : image (112x112 RGB). Sortie : embedding facial de 512 dimensions ; la comparaison est faite côté client.