Mettez DeepStream SDK Python Binding dans Jetson Nano et essayez la détection d'objets

Aperçu

DeepStream

En utilisant le SDK DeepStream, l'inférence à grande vitesse est possible même avec Jetson Nano (YOLO v3-TIny semble produire environ 25 FPS). Cette fois, j'utiliserai DeepStream SDK pour créer un programme qui acquiert les résultats d'inférence de Python. En passant, à propos du SDK DeepStream, Article détaillé sur Macnica est répertorié, il est donc bon de s'y référer.

environnement

Terminal: Jetson Nano Image: JetPack 4.2.2. DeepStream SDK:v4.0.2 Python Binding:v0.5α

Installation de DeepStream

Vois ici [SDK Deep Stream avec Jetson Nano pour détecter les objets en temps réel et fournir RTSP](https://www.space-i.com/post-blog/jetson-nano%E3%81%A7deepstream-sdk% E3% 80% 80usb% E3% 82% AB% E3% 83% A1% E3% 83% A9% E6% 98% A0% E5% 83% 8F% E3% 81% 8B% E3% 82% 89% E6% A4% 9C% E7% 9F% A5% EF% BC% 86iphone% E3% 81% A7% E3% 82% B9% E3% 83% 88% E3% 83% AA% E3% 83% BC% E3% 83% A0 /)

Installation de DeepStream Python Binding

Téléchargez «DeepStream Python Apps and Bindings» depuis ce site Screenshot from 2020-04-24 19-01-24.jpg Enregistrez dans n'importe quel emplacement et décompressez

$ tar -xjvf deepstream_python_v0.5.tbz2 
deepstream_python_v0.5/
deepstream_python_v0.5/LICENSE.txt
deepstream_python_v0.5/ds_pybind_0.5.tbz2
deepstream_python_v0.5/LicenseAgreement.pdf
deepstream_python_v0.5/README

De plus, décompressez "ds_pybind_0.5.tbz2"

$ cd deepstream_python_v0.5/
$ ls
LICENSE.txt  LicenseAgreement.pdf  README  ds_pybind_0.5.tbz2
~/deepstream_python_v0.5$ tar -xjvf ds_pybind_0.5.tbz2 

Poursuivez l'installation en vous référant à deepstream_python_v0.5 / README. Tout d'abord, placez la liaison Python dans le répertoire d'installation du SDK DeepStream.

$ tar -xjvf ds_pybind_v0.5.tbz2
$ cp -r python /opt/nvidia/deepstream/deepstream-4.0/sources/

À ce stade, vérifiez que la structure des dossiers est la suivante

/opt/nvidia/deepstream/deepstream-4.0/sources/python/bindings
/opt/nvidia/deepstream/deepstream-4.0/sources/python/apps$ ls
common            deepstream-test2  deepstream-test4  
deepstream-test1  deepstream-test3  

Installez Gst-python.

   $ sudo apt-get install python-gi-dev
   $ export GST_LIBS="-lgstreamer-1.0 -lgobject-2.0 -lglib-2.0"
   $ export GST_CFLAGS="-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include"
   $ git clone https://github.com/GStreamer/gst-python.git
   $ cd gst-python
   $ git checkout 1a8f48a
   $ ./autogen.sh PYTHON=python3
   $ ./configure PYTHON=python3
   $ make
   $ sudo make install

Modifiez le fichier de configuration de Jetson Nano.

Cette fois, nous allons définir l'exemple de programme deepstream-test1 comme exemple. Tout d'abord, allez dans deepstream-test1.

$ cd /opt/nvidia/deepstream/deepstream-4.0/sources/python/apps/deepstream-test1
$ ls
README                dstest1_pgie_config.txt  
deepstream_test_1.py  

"Dstest1_pgie_config.txt" dans ce fichier est le fichier de configuration par défaut, mais comme il s'agit du fichier de configuration pour Jetson AGX Xavier, il doit être modifié pour Jetson Nano. Par conséquent, créez un nouveau fichier appelé "dstest_jetson_nano_config.txt" ci-dessous. Copiez et collez le contenu suivant tel quel.

dstest_jetson_nano_config.txt


[property]
gpu-id=0
net-scale-factor=0.0039215697906911373
model-file=../../../../samples/models/Primary_Detector_Nano/resnet10.caffemodel
proto-file=../../../../samples/models/Primary_Detector_Nano/resnet10.prototxt
model-engine-file=../../../../samples/models/Primary_Detector_Nano/resnet10.caffemodel_b8_fp16.engine
labelfile-path=../../../../samples/models/Primary_Detector_Nano/labels.txt
batch-size=8
process-mode=1
model-color-format=0
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=2
num-detected-classes=4
interval=0
gie-unique-id=1
output-blob-names=conv2d_bbox;conv2d_cov/Sigmoid
#parse-bbox-func-name=NvDsInferParseCustomResnet
#custom-lib-path=/path/to/libnvdsparsebbox.so
#enable-dbscan=1

[class-attrs-all]
threshold=0.2
group-threshold=1
## Set eps=0.7 and minBoxes for enable-dbscan=1
eps=0.2
#minBoxes=3
roi-top-offset=0
roi-bottom-offset=0
detected-min-w=0
detected-min-h=0
detected-max-w=0
detected-max-h=0

Modifiez également deepstream_test_1.py comme suit.

deepstream_test_1.py


    - pgie.set_property('config-file-path', "dstest1_pgie_config.txt")
    + pgie.set_property('config-file-path', "dstest_jetson_nano_config.txt")

   - streammux.set_property('width', 1920)
   + streammux.set_property('width',Largeur de la vidéo)
    - streammux.set_property('height', 1080)
    + streammux.set_property('height',Hauteur de la vidéo)

Il est difficile de vérifier et de régler la résolution vidéo à l'avance, c'est donc aussi une bonne idée d'essayer d'obtenir la résolution vidéo en utilisant OpenCV. Par exemple, comme ça

deepstream_test_1.py


    import cv2
    cap = cv2.VideoCapture(args[1])
    ret, frame = cap.read()
    width = len(frame[0])
    height = len(frame)
    print (f"width:{width}, height:{height}")
    streammux.set_property('width', width)
    streammux.set_property('height', height)

Courir

Créez un fichier vidéo de test dans le même répertoire que deepstream_test_1.py et exécutez la commande suivante pour afficher le résultat de l'inférence DeepStream à l'écran. En outre, il semble qu'il faudra environ 5 minutes pour que le résultat de l'inférence soit affiché.

$ python3 deepstream_test_1.py "Fichier vidéo"

Screenshot from 2020-04-28 11-04-20.png

Si ça ne marche pas

Si cela ne fonctionne pas, vérifiez les points suivants.

Recommended Posts

Mettez DeepStream SDK Python Binding dans Jetson Nano et essayez la détection d'objets
Détection d'objets à l'aide de Jetson Nano (YOLOv3) - (1) Paramètres Jetson Nano-
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essai de reconnaissance faciale facile avec Jetson Nano et caméra Web
Orienté objet en python
Essayez gRPC en Python
Essayez 9 tranches en Python
Essayez de le faire avec GUI, PyQt en Python
Analyse d'image avec l'API Object Detection à essayer en 1 heure
Essayez simplement de recevoir un webhook avec ngrok et Python
Méthodes d'objet chaîne en Python
Comparaison d'objets nuls en Python
Essayez LINE Notify avec Python
Pile et file d'attente en Python
Implémentons Yuma dans Python 3
Résumé de la détection de visage en Python
Variables Python et ID d'objet
Unittest et CI en Python
Dessinez une illusion d'aquarelle avec détection des contours en Python3 et openCV3
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python