CV / MobileNet

MobileNetV2

ImageNet classification with configurable Top-K results, browser preview, and REST API access.

2 téléchargements
Précision
RKNN

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
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 -1

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

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

Détails du modèle

MobileNetV2 sur reComputer RK3576 et RK3588

Cette page est adaptée des README MobileNetV2 de reComputer-RK-CV. Le service exécute la classification ImageNet avec RKNN-Toolkit-Lite2 et fournit un aperçu Web, un flux MJPEG, un contrôle d’état et une REST API.

Informations sur le modèle

PropriétéValeur
TâcheClassification d’images
EntréeImage 224 x 224
SortieÉtiquettes ImageNet Top-K et scores de confiance configurables
Modèle RK3576model/rk3576_mobilenet_v2.rknn
Modèle RK3588model/rk3588_mobilenet_v2.rknn
Étiquettesmodel/synset.txt

Exécuter le service

RK3576

bash
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 -1

RK3588

bash
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

Ouvrez http://<BOARD_IP>:8000 pour la page Web ou http://<BOARD_IP>:8000/docs pour OpenAPI. Remplacez --camera_id -1 par l’identifiant d’une caméra mappée, ou utilisez --video_path video/test.mp4 pour la vidéo fournie.

Modes d’entrée et arguments de démarrage

L’application accepte une image téléversée, une image d’un MP4 téléversé choisie par horodatage, une vidéo locale en boucle ou une image caméra. La vidéo locale est prioritaire.

ArgumentValeur par défautDescription
--model_pathObligatoireModèle RKNN choisi pour le SoC cible.
--camera_id1Indice de caméra ; utilisez -1 pour le mode téléversement uniquement.
--video_pathAucunChemin du MP4 local. Remplace --camera_id.
--host0.0.0.0Adresse d’écoute FastAPI.
--port8000Port du service.

Pour une caméra USB, mappez le nœud correspondant, par exemple --device /dev/video0:/dev/video0, et passez --camera_id 0.

REST API

Endpoint : POST /api/models/mobilenet/predict

Les champs multipart sont file, video, timestamp, conf et topk. topk accepte les valeurs de 1 à 20 et vaut 5 par défaut.

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilenet/predict" \
  -F "file=@bell.jpg" -F "topk=5" -F "conf=0.01"

Pour classer l’image située à 5.5 secondes dans un MP4 :

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilenet/predict" \
  -F "video=@test.mp4" -F "timestamp=5.5" -F "topk=3"

Exemple de réponse :

json
{
  "success": true,
  "model": "mobilenet",
  "source": "uploaded image",
  "predictions": [
    {"class": "n02123045 tabby, tabby cat", "confidence": 0.91}
  ],
  "image": {"width": 640, "height": 480}
}

GET /api/config renvoie le conf_thresh global. Mettez-le à jour avec POST /api/config et un JSON tel que {"conf_thresh":0.1}. La valeur conf de la requête remplace le seuil global pour cette requête.

EndpointFonction
GET /api/healthPlateforme, chemin du modèle et état de préparation.
GET /api/video_feedAperçu MJPEG annoté.
POST /api/video/uploadTéléverser un JPG, JPEG, PNG, BMP ou MP4.
POST /api/video/analyzeDémarrer une analyse asynchrone avec le filename téléversé.
GET /api/video/statusProgression et état d’erreur.
GET /api/video/listFichiers téléversés et générés.
GET /api/video/download/{filename}Télécharger un résultat généré.

Remplacement du modèle

Le prétraitement conserve l’ordre BGR requis, applique softmax et filtre les résultats Top-K. Un modèle de remplacement doit conserver la disposition d’entrée, l’ordre des canaux, la normalisation et le format de sortie. Mettez à jour synset.txt si les classes changent. Les téléversements et résultats sont stockés sous workspace/ ; définissez RK_CV_WORKSPACE pour changer de répertoire.

Compiler localement

Exécutez depuis la racine du dépôt upstream :

bash
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_mobilenet

Entrées et sorties

Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.