CV / ArcFace
ArcFace MobileFaceNet
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-hailo8-arcface \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo8-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-8)ArcFace MobileFaceNet sur reComputer R Series (CM5 + Hailo-8)
ArcFace avec un backbone MobileFaceNet extrait des embeddings faciaux de 512 dimensions sur Hailo-8 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-8) avec un accélérateur PCIe Hailo-8.
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 v2.19.0, Hailo-8 |
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-8 via PCIe, exposé comme /dev/hailo0 |
| Runtime | HailoRT 4.23.x |
| Python dans le conteneur | 3.11, aarch64 |
Installez les paquets Hailo-8 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
# Les deux candidats doivent être en 4.23.x avant l'installation.
apt-cache policy hailort hailort-pcie-driver
sudo apt install hailort=4.23.0 hailort-pcie-driver=4.23.0
sudo reboot
# Après redémarrage
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0La version HailoRT attendue pour cette image est 4.23.x. Ne continuez pas si apt-cache policy sélectionne HailoRT 5.x ; ce runtime cible Hailo-10H et n'est pas compatible avec ce conteneur Hailo-8.
Exécution avec la vidéo de démonstration
sudo docker run --rm \
--name cm5-hailo8-arcface \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo8-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-hailo8-arcface \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
--device /dev/video0:/dev/video0 \
-v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo8-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).
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
arcface_mobilefacenet/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 pour vérifier la correspondance sur le matériel. - 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/rpi5_hailo8_arcface_mobilefacenet/ - Dockerfile :
docker/hailo8/arcface_mobilefacenet.dockerfile - Conteneur :
ghcr.io/seeed-projects/recomputer-hailo8-cv/arcface_mobilefacenet:latest - HEF :
model/arcface_mobilefacenet.hef(4 100 573 octets) - Le module utilise l'API VStreams de HailoRT 4.23 et un HEF dédié à Hailo-8.
Entrées et sorties
Entrée : image (112x112 RGB). Sortie : embedding facial de 512 dimensions ; la comparaison est faite côté client.