CV / RetinaFace

RetinaFace

reComputer RK3588

Gesichtserkennung und Schätzung von fünf Gesichtspunkten mit RetinaFace, beschleunigt durch RKNN.

52 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Bereitstellen
sudo docker run --rm --privileged --net=host -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-retinaface:latest \
  python web_service.py --platform rk3588 --model_dir /app/model --camera_id -1 --host 0.0.0.0 --port 8000

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "retinaface-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "retinaface-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Modelldetails

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Schnellstart

1. Docker installieren

Führen Sie auf dem Entwicklungsboard die folgenden Befehle aus, um Docker zu installieren:

bash
# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
# Aliyun
sudo sh get-docker.sh --mirror Aliyun
# systemd
sudo systemctl enable docker
sudo systemctl start docker

2. Projekt ausführen (ein Befehl, Vorschau in zwei Modi)

Diese Seite beschreibt den RetinaFace-Dienst aus reComputer-RK-CV. Er erkennt Gesichter und fünf Gesichtsmarken mit RKNN-Beschleunigung und bietet Bild-, Kamera-, lokale Video- und Uploadvideo-Modi.

Modellinformationen

EigenschaftWert
Aktives Modellmodel/retinaface_mobile.rknn
Enthaltene Alternativemodel/retinaface_resnet50.rknn
EingabeLetterbox-RGB mit 320 x 320
AusgabeGesichtsbox, Konfidenz und fünf Landmarken
NMSFester IoU-Schwellenwert 0.5

Schritt A: Images abrufen

bash
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-retinaface:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-retinaface:latest

Schritt B: Mit einem Klick ausführen

Für RK3576:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-retinaface:latest \
  python web_service.py --platform rk3576 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

Für RK3588:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-retinaface:latest \
  python web_service.py --platform rk3588 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

Öffnen Sie http://<BOARD_IP>:8000 oder /docs. Ordnen Sie für eine Kamera /dev/videoN zu und verwenden Sie --camera_id N, oder übergeben Sie --video video/test.mp4 für ein lokales Video.


🔌 API-Dokumentation

1. Gesichtserkennungs-Schnittstelle (Predict)

Endpunkt: POST /api/models/retinaface/predict

Anfrageparameter (Multipart/Form-Data):

Laden Sie file hoch; threshold legt die Gesichtskonfidenz für diese Anfrage fest.

Anwendungsbeispiele:

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/retinaface/predict" \
  -F "file=@test.jpg" -F "threshold=0.5"

Jedes Ergebnis enthält confidence, box als [x1,y1,x2,y2] und fünf landmarks. Aktualisieren Sie den Vorschau-/Videoschwellenwert mit POST /api/config und JSON wie {"threshold":0.5}.

Antwortformat (JSON):

json
{
  "success": true,
  "model": "retinaface",
  "result": {
    "count": 1,
    "faces": [
      {
        "confidence": 0.96,
        "box": [120, 80, 310, 290],
        "landmarks": [[166, 145], [255, 144], [210, 190], [176, 232], [247, 231]]
      }
    ]
  }
}

2. Schnittstelle zur Systemkonfiguration (Config)

Aktuelle Konfiguration abrufen

  • Endpunkt: GET /api/config

Systemkonfiguration aktualisieren

  • Endpunkt: POST /api/config
  • JSON: {"threshold":0.5}

Das allgemeine Feld topk ist für Dienstkompatibilität reserviert und wird nicht verwendet. NMS nutzt einen festen IoU-Schwellenwert von 0.5.

EndpunktZweck
GET /api/healthPlattform, Modellnamen und Bereitschaft.
GET /api/video_feedNeueste Gesichtsboxen und Landmarken als MJPEG.
POST /api/video/uploadMP4 hochladen.
POST /api/video/analyzeEinen hochgeladenen filename analysieren.
GET /api/video/statusFortschritt und Fehler.
GET /api/video/listHochgeladene und erzeugte MP4-Dateien.
GET /api/video/download/{filename}Ergebnis herunterladen.

Der Upstream-Konstruktor lädt derzeit ausdrücklich retinaface_mobile.rknn. Für retinaface_resnet50.rknn müssen Sie task_runtime.py ändern und dasselbe Drei-Ausgabe-Layout prüfen; ein Docker-Befehlsparameter reicht nicht. Frames werden auf 320 x 320 letterboxed, von BGR nach RGB konvertiert, mit Prior-Boxen und fünf Landmarken decodiert, auf Quellkoordinaten zurückgeführt, nach Konfidenz gefiltert und mit NMS verarbeitet.

3. Befehlszeilenargumente

ArgumentStandardBeschreibung
--platformErforderlichrk3576 oder rk3588.
--model_dirmodelRetinaFace-RKNN-Dateien und test.jpg.
--camera_id-1Kameraindex; -1 deaktiviert die Aufnahme.
--video, --video_pathKein WertLokales Video in Schleife; überschreibt die Kamera.
--host / --port0.0.0.0 / 8000Dienstadresse und Port.

RKNN_LOG_LEVEL=0 blendet bestätigte harmlose Meldungen zur Initialisierung statischer Formen aus. Entfernen Sie es bei der RKNN-Startdiagnose.


Echtzeit-Videostream (Video Feed)

Rufen Sie den neuesten annotierten MJPEG-Stream für die Browservorschau ab:

  • Endpunkt: GET /api/video_feed
  • Beispiel: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Entwicklerleitfaden (Empfehlungen für den Produktionseinsatz)

Lokal bauen

bash
docker build -f docker/rk3576/retinaface.dockerfile \
  -t rk3576-retinaface:local src/rk3576_retinaface

docker build -f docker/rk3588/retinaface.dockerfile \
  -t rk3588-retinaface:local src/rk3588_retinaface

Eingaben und Ausgaben

Input: image, video frame, or camera frame. Output: face boxes, confidence scores, and five landmarks.