CV / ArcFace
ArcFace MobileFaceNet
ArcFace-gezichtsherkenning (2,04M parameters, 99,4% LFW) op reComputer R Series met Hailo-8 of Hailo-10H.
Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.
Aan de slag
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.mp4REST API
Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.
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())Modeldetails
reComputer R Series (CM5 + Hailo-8)ArcFace MobileFaceNet op reComputer R Series (CM5 + Hailo-8)
ArcFace met een MobileFaceNet-backbone extraheert via HailoRT 512-dimensionale gezichtsembeddings op Hailo-8. De embedding wordt gebruikt voor gezichtsverificatie en -identificatie; de vergelijking zelf gebeurt in de client met cosinusgelijkenis.
Deze pagina is gericht op reComputer R Series (CM5 + Hailo-8) met een PCIe-Hailo-8-versneller.
Modelinformatie
| Eigenschap | Waarde |
|---|---|
| Architectuur | ArcFace met MobileFaceNet-backbone |
| Taak | Gezichtsherkenning (embedding-extractie) |
| Invoer | 112x112x3 RGB (letterbox, normalisatie in de HEF gecompileerd) |
| Uitvoer | 512-dimensionale gezichtsembedding |
| Parameters | 2.04M |
| LFW-nauwkeurigheid | 99,4% (Hailo Model Zoo-referentie) |
| HEF | Hailo Model Zoo v2.19.0, Hailo-8 |
De nauwkeurigheid is de Hailo Model Zoo-referentie; het is geen op de CM5 gemeten benchmark.
Hardware en hostinstellingen
| Onderdeel | Waarde |
|---|---|
| Board | reComputer R Series met Raspberry Pi CM5 |
| Versneller | Hailo-8 via PCIe, beschikbaar als /dev/hailo0 |
| Runtime | HailoRT 4.23.x |
| Python in de container | 3.11, aarch64 |
Installeer de Hailo-8-pakketten op de host en controleer of stuurprogramma en apparaat gereed zijn voordat u de container start:
sudo apt update
# Beide kandidaten moeten 4.23.x zijn vóór installatie.
apt-cache policy hailort hailort-pcie-driver
sudo apt install hailort=4.23.0 hailort-pcie-driver=4.23.0
sudo reboot
# Na herstart
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0De verwachte HailoRT-versie voor deze image is 4.23.x. Ga niet verder als apt-cache policy HailoRT 5.x selecteert; die runtime is voor Hailo-10H en past niet bij deze Hailo-8-container.
Uitvoeren met de demo-video
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.mp4Open http://<Board_IP>:8000 voor de webpreview. Elk frame wordt geannoteerd met de embedding-dimensie en de REST API retourneert de volledige 512-dimensionale vector.
USB-cameramodus
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 | Methode | Doel |
|---|---|---|
/ | GET | Webpreview-interface |
/api/models/arcface_mobilefacenet/predict | POST | Gezichtsembedding (JSON) |
/api/video_feed | GET | MJPEG-previewstream |
/api/config | GET / POST | Runtime-drempels lezen of wijzigen |
/api/video/upload | POST | Bronvideo uploaden |
/api/video/analyze | POST | Offline video-analyse starten |
/api/video/status | GET | Voortgang van de analyse lezen |
/api/video/download/{filename} | GET | Geannoteerd resultaat downloaden |
Gezichtsverificatie is geen apart endpoint: vergelijk twee geretourneerde embeddings in de client met cosinusgelijkenis (normaliseer beide vectoren eerst met L2).
Implementatienotities
- De HEF bevat een eigen normalisatielaag, dus de applicatie letterboxt naar 112x112, converteert BGR naar RGB en stuurt uint8-pixels ongewijzigd door.
- De embedding wordt gelezen uit de
arcface_mobilefacenet/fc1-uitvoer wanneer de vstream-naam beschikbaar is; anders wordt de eerste uitvoertensor gebruikt. De eerste inferentie logt alle vstream-namen en shapes zodat de mapping op de hardware te controleren is. - Lege embeddings of embeddings met niet-eindige waarden worden geweigerd in plaats van als geldig resultaat teruggegeven.
Ontwikkelnotities
- Bronmodule:
src/rpi5_hailo8_arcface_mobilefacenet/ - Dockerfile:
docker/hailo8/arcface_mobilefacenet.dockerfile - Container:
ghcr.io/seeed-projects/recomputer-hailo8-cv/arcface_mobilefacenet:latest - HEF:
model/arcface_mobilefacenet.hef(4.100.573 bytes) - De module gebruikt de HailoRT 4.23 VStreams-API en een Hailo-8-specifieke HEF.
Invoer en uitvoer
Invoer: afbeelding (112x112 RGB). Uitvoer: 512-dimensionale gezichtsembedding; de vergelijking gebeurt in de client.