CV / MobileNet
MobileNetV2
MobileNetV2 image classification accelerated by RKNN on reComputer RK3576 and RK3588.
Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.
Erste Schritte
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilenet:latest \
python3 web_classification.py --model_path model/rk3576_mobilenet_v2.rknn --camera_id -1REST API
Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "mobilenet-v2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "mobilenet-v2-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())Modelldetails
Schnellstart
1. Docker installieren
Führen Sie auf dem Entwicklungsboard die folgenden Befehle aus, um Docker zu installieren:
# 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 docker2. Projekt ausführen (ein Befehl, Vorschau in zwei Modi)
Diese Seite basiert auf den MobileNetV2-README-Dateien in reComputer-RK-CV. Der Dienst führt ImageNet-Klassifikation mit RKNN-Toolkit-Lite2 aus und bietet Webvorschau, MJPEG-Stream, Zustandsprüfung und REST API.
Modellinformationen
| Eigenschaft | Wert |
|---|---|
| Aufgabe | Bildklassifikation |
| Eingabe | Bild mit 224 x 224 |
| Ausgabe | Konfigurierbare Top-K-ImageNet-Labels und Konfidenzwerte |
| RK3576-Modell | model/rk3576_mobilenet_v2.rknn |
| RK3588-Modell | model/rk3588_mobilenet_v2.rknn |
| Labels | model/synset.txt |
Schritt A: Images abrufen
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilenet:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilenet:latestSchritt B: Mit einem Klick ausführen
Für RK3576:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilenet:latest \
python3 web_classification.py \
--model_path model/rk3576_mobilenet_v2.rknn --camera_id -1Für RK3588:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilenet:latest \
python3 web_classification.py \
--model_path model/rk3588_mobilenet_v2.rknn --camera_id -1Öffnen Sie http://<BOARD_IP>:8000 für die Webseite oder http://<BOARD_IP>:8000/docs für OpenAPI. Ersetzen Sie --camera_id -1 durch eine zugeordnete Kamera-ID oder verwenden Sie --video_path video/test.mp4 für das enthaltene Video.
🔌 API-Dokumentation
1. Modellinferenz-Schnittstelle (Predict)
Endpunkt: POST /api/models/mobilenet/predict
Anfrageparameter (Multipart/Form-Data):
Optionale Felder sind file, video, timestamp, conf und topk; topk reicht von 1 bis 20, conf von 0.0 bis 1.0. Ohne Upload wird die aktive Videoquelle verwendet.
Anwendungsbeispiele:
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilenet/predict" \
-F "file=@bell.jpg" -F "topk=5" -F "conf=0.01"So klassifizieren Sie einen Frame bei 5.5 Sekunden in einer MP4-Datei:
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilenet/predict" \
-F "video=@test.mp4" -F "timestamp=5.5" -F "topk=3"Antwortformat (JSON):
{
"success": true,
"model": "mobilenet",
"source": "uploaded image",
"predictions": [
{"class": "n02123045 tabby, tabby cat", "confidence": 0.91}
],
"image": {"width": 640, "height": 480}
}2. Schnittstelle zur Systemkonfiguration (Config)
GET /api/config liefert das globale conf_thresh. Aktualisieren Sie es mit POST /api/config und JSON wie {"conf_thresh":0.1}. Ein conf auf Anfrageebene überschreibt den globalen Schwellenwert für diese Anfrage.
| Endpunkt | Zweck |
|---|---|
GET /api/health | Plattform, Modellpfad und Bereitschaft. |
GET /api/video_feed | Annotierte MJPEG-Vorschau. |
POST /api/video/upload | JPG, JPEG, PNG, BMP oder MP4 hochladen. |
POST /api/video/analyze | Asynchrone Analyse über den hochgeladenen filename starten. |
GET /api/video/status | Fortschritt und Fehlerstatus. |
GET /api/video/list | Hochgeladene und erzeugte Dateien. |
GET /api/video/download/{filename} | Erzeugtes Ergebnis herunterladen. |
3. Befehlszeilenargumente
Die Anwendung akzeptiert ein hochgeladenes Bild, einen per Zeitstempel gewählten Frame aus einer hochgeladenen MP4-Datei, ein lokales Video in Schleife oder einen Kameraframe. Das lokale Video hat Vorrang.
| Argument | Standard | Beschreibung |
|---|---|---|
--model_path | Erforderlich | Für den Ziel-SoC ausgewähltes RKNN-Modell. |
--camera_id | 1 | Kameraindex; -1 steht für reinen Uploadbetrieb. |
--video_path | Kein Wert | Pfad zur lokalen MP4-Datei. Überschreibt --camera_id. |
--host | 0.0.0.0 | FastAPI-Listenadresse. |
--port | 8000 | Dienstport. |
Ordnen Sie für eine USB-Kamera den passenden Geräteknoten zu, zum Beispiel --device /dev/video0:/dev/video0, und übergeben Sie --camera_id 0.
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)
Modell ersetzen
Die Vorverarbeitung behält die erforderliche BGR-Kanalreihenfolge bei, wendet softmax an und filtert Top-K-Ergebnisse. Ein Ersatzmodell muss Eingabelayout, Kanalreihenfolge, Normalisierung und Ausgabeformat beibehalten. Aktualisieren Sie bei anderen Klassen synset.txt. Uploads und Ausgaben liegen unter workspace/; mit RK_CV_WORKSPACE wählen Sie ein anderes Verzeichnis.
Lokal bauen
Im Stammverzeichnis des Upstream-Repositorys ausführen:
docker build -f docker/rk3576/mobilenet.dockerfile \
-t rk3576-mobilenet:local src/rk3576_mobilenet
docker build -f docker/rk3588/mobilenet.dockerfile \
-t rk3588-mobilenet:local src/rk3588_mobilenetEingaben und Ausgaben
Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.