CV / ResNet
ResNet50V2
ResNet50V2 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-resnet50v2:latest \
python3 web_classification.py --model_path model/rk3576_resnet50-v2-7.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": "resnet50-v2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "resnet50-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 ResNet50V2-README-Dateien in reComputer-RK-CV. Der Dienst führt ImageNet-Klassifikation auf der Rockchip-NPU aus und bietet Browser-, MJPEG-, Zustands- und REST-Schnittstellen.
Modellinformationen
| Eigenschaft | Wert |
|---|---|
| Aufgabe | Bildklassifikation |
| Eingabe | RGB-Bild mit 224 x 224 |
| Ausgabe | Konfigurierbare Top-K-ImageNet-Labels und Konfidenzwerte |
| RK3576-Modell | model/rk3576_resnet50-v2-7.rknn |
| RK3588-Modell | model/rk3588_resnet50-v2-7.rknn |
| Labels | model/synset.txt |
Schritt A: Images abrufen
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-resnet50v2:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-resnet50v2: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-resnet50v2:latest \
python3 web_classification.py \
--model_path model/rk3576_resnet50-v2-7.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-resnet50v2:latest \
python3 web_classification.py \
--model_path model/rk3588_resnet50-v2-7.rknn --camera_id -1Öffnen Sie http://<BOARD_IP>:8000 für die Webseite oder http://<BOARD_IP>:8000/docs für OpenAPI.
🔌 API-Dokumentation
1. Modellinferenz-Schnittstelle (Predict)
Endpunkt: POST /api/models/resnet50v2/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/resnet50v2/predict" \
-F "file=@dog_224x224.jpg" -F "topk=5" -F "conf=0.01"curl -X POST "http://<BOARD_IP>:8000/api/models/resnet50v2/predict" \
-F "video=@test.mp4" -F "timestamp=5.5" -F "topk=3"Antwortformat (JSON):
{
"success": true,
"model": "resnet50v2",
"source": "uploaded image",
"predictions": [
{"class": "n02099601 golden retriever", "confidence": 0.89}
],
"image": {"width": 224, "height": 224}
}2. Schnittstelle zur Systemkonfiguration (Config)
GET /api/config liefert conf_thresh; aktualisieren Sie ihn per JSON über POST /api/config. Anfrage-conf hat Vorrang.
| Endpunkt | Zweck |
|---|---|
GET /api/health | Dienst, Plattform, Modell und Bereitschaft. |
GET /api/video_feed | Annotierte MJPEG-Vorschau. |
POST /api/video/upload | Bild oder MP4 hochladen. |
POST /api/video/analyze | Einen hochgeladenen filename analysieren. |
GET /api/video/status | Verarbeitungsfortschritt und Fehler. |
GET /api/video/list | Hochgeladene und erzeugte Dateien. |
GET /api/video/download/{filename} | Ergebnis herunterladen. |
3. Befehlszeilenargumente
Die Anwendung akzeptiert ein hochgeladenes Bild, einen gewählten Frame aus einer hochgeladenen MP4-Datei, ein lokales Video in Schleife oder einen Kameraframe.
| 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 die Kamera. |
--host | 0.0.0.0 | FastAPI-Listenadresse. |
--port | 8000 | Dienstport. |
Ordnen Sie /dev/videoN dem Container zu, wenn Kamera N gewählt wird.
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 Laufzeit skaliert auf 224 x 224, konvertiert BGR nach RGB, wendet softmax an und filtert Top-K-Ergebnisse. Ein Ersatzmodell muss Eingabelayout, Normalisierung, Kanalreihenfolge und Ausgabeformat beibehalten. Aktualisieren Sie bei anderen Klassen synset.txt. Laufzeitdateien liegen unter workspace/; RK_CV_WORKSPACE ändert den Ort.
Lokal bauen
docker build -f docker/rk3576/resnet50v2.dockerfile \
-t rk3576-resnet50v2:local src/rk3576_resnet50v2
docker build -f docker/rk3588/resnet50v2.dockerfile \
-t rk3588-resnet50v2:local src/rk3588_resnet50v2Eingaben und Ausgaben
Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.