CV / ResNet
ResNet50V2
ResNet50V2 image classification accelerated by RKNN on reComputer RK3576 and RK3588.
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 --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 -1API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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())Détails du modèle
Démarrage rapide
1. Installer Docker
Exécutez les commandes suivantes sur la carte de développement pour installer Docker :
# 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. Exécuter le projet (une commande, aperçu double mode)
Cette page est adaptée des README ResNet50V2 de reComputer-RK-CV. Le service exécute la classification ImageNet sur le NPU Rockchip et fournit des interfaces navigateur, MJPEG, contrôle d’état et REST.
Informations sur le modèle
| Propriété | Valeur |
|---|---|
| Tâche | Classification d’images |
| Entrée | Image RGB 224 x 224 |
| Sortie | Étiquettes ImageNet Top-K et scores de confiance configurables |
| Modèle RK3576 | model/rk3576_resnet50-v2-7.rknn |
| Modèle RK3588 | model/rk3588_resnet50-v2-7.rknn |
| Étiquettes | model/synset.txt |
Étape A : télécharger les images
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:latestÉtape B : exécuter en un clic
Pour 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 -1Pour 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 -1Ouvrez http://<BOARD_IP>:8000 pour la page Web ou http://<BOARD_IP>:8000/docs pour OpenAPI.
🔌 Documentation de l’API
1. Interface d’inférence du modèle (Predict)
Endpoint : POST /api/models/resnet50v2/predict
Paramètres de requête (Multipart/Form-Data) :
Les champs facultatifs sont file, video, timestamp, conf et topk ; topk va de 1 à 20 et conf de 0.0 à 1.0. Sans téléversement, la source vidéo active est utilisée.
Exemples d’utilisation :
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"Format de réponse (JSON) :
{
"success": true,
"model": "resnet50v2",
"source": "uploaded image",
"predictions": [
{"class": "n02099601 golden retriever", "confidence": 0.89}
],
"image": {"width": 224, "height": 224}
}2. Interface de configuration système (Config)
GET /api/config renvoie conf_thresh ; mettez-le à jour en JSON avec POST /api/config. Le conf de la requête est prioritaire.
| Endpoint | Fonction |
|---|---|
GET /api/health | Service, plateforme, modèle et état de préparation. |
GET /api/video_feed | Aperçu MJPEG annoté. |
POST /api/video/upload | Téléverser une image ou un MP4. |
POST /api/video/analyze | Analyser un filename téléversé. |
GET /api/video/status | Progression du traitement et erreurs. |
GET /api/video/list | Fichiers téléversés et générés. |
GET /api/video/download/{filename} | Télécharger un résultat. |
3. Arguments de ligne de commande
L’application accepte une image téléversée, une image choisie dans un MP4 téléversé, une vidéo locale en boucle ou une image caméra.
| Argument | Valeur par défaut | Description |
|---|---|---|
--model_path | Obligatoire | Modèle RKNN choisi pour le SoC cible. |
--camera_id | 1 | Indice de caméra ; utilisez -1 pour le mode téléversement uniquement. |
--video_path | Aucun | Chemin du MP4 local ; remplace la caméra. |
--host | 0.0.0.0 | Adresse d’écoute FastAPI. |
--port | 8000 | Port du service. |
Mappez /dev/videoN dans le conteneur lors de la sélection de la caméra N.
Interface de flux vidéo en temps réel (Video Feed)
Obtenez le dernier flux MJPEG annoté pour l’aperçu dans le navigateur :
- Endpoint:
GET /api/video_feed - Exemple d’utilisation:
<img src="http://<BOARD_IP>:8000/api/video_feed">
🛠️ Guide du développeur (recommandations de production)
Remplacement du modèle
Le runtime redimensionne l’entrée en 224 x 224, convertit BGR en RGB, applique softmax et filtre les résultats Top-K. Un modèle de remplacement doit conserver la disposition d’entrée, la normalisation, l’ordre des canaux et le format de sortie attendus. Mettez à jour synset.txt si les classes changent. Les fichiers sont stockés sous workspace/ ; définissez RK_CV_WORKSPACE pour changer cet emplacement.
Compiler localement
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_resnet50v2Entrées et sorties
Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.