Fügen Sie DeepStream SDK Python Binding in Jetson Nano ein und versuchen Sie die Objekterkennung

Überblick

DeepStream

Mit dem DeepStream SDK ist auch mit Jetson Nano eine Hochgeschwindigkeitsinferenz möglich (YOLO v3-TIny scheint etwa 25 FPS zu produzieren). Dieses Mal werde ich DeepStream SDK verwenden, um ein Programm zu erstellen, mit dem das Inferenzergebnis von Python abgerufen werden kann. Über DeepStream SDK ist übrigens Detaillierter Artikel über Macnica aufgeführt, daher ist es gut, darauf zu verweisen.

Umgebung

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

DeepStream-Installation

Siehe hier [Deep Stream SDK mit Jetson Nano zur Erkennung von Objekten in Echtzeit und Bereitstellung von 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 /)

DeepStream Python Binding Installation

Laden Sie "DeepStream Python Apps and Bindings" von [dieser Site] herunter (https://developer.nvidia.com/deepstream-download). Screenshot from 2020-04-24 19-01-24.jpg An einem beliebigen Ort speichern und entpacken

$ 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

Entpacken Sie außerdem "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 

Fahren Sie mit der Installation fort, während Sie auf deepstream_python_v0.5 / README verweisen. Legen Sie zunächst Python Binding im DeepStream SDK-Installationsverzeichnis ab.

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

Überprüfen Sie zu diesem Zeitpunkt, ob die Ordnerstruktur wie folgt ist

/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  

Installieren Sie 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

Ändern Sie die Konfigurationsdatei für Jetson Nano.

Dieses Mal werden wir das Beispielprogramm deepstream-test1 als Beispiel setzen. Gehen Sie zuerst in den 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" in dieser Datei ist die Standardeinstellungsdatei. Da dies jedoch die Einstellungsdatei für Jetson AGX Xavier ist, muss sie für Jetson Nano geändert werden. Erstellen Sie daher unten eine neue Datei mit dem Namen "dstest_jetson_nano_config.txt". Kopieren Sie den folgenden Inhalt und fügen Sie ihn so ein, wie er ist.

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

Ändern Sie außerdem deepstream_test_1.py wie folgt.

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',Videobreite)
    - streammux.set_property('height', 1080)
    + streammux.set_property('height',Videohöhe)

Es ist mühsam, die Videoauflösung im Voraus zu überprüfen und einzustellen. Daher ist es auch eine gute Idee, die Videoauflösung mit OpenCV zu ermitteln. Zum Beispiel so

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)

Lauf

Erstellen Sie eine Testvideodatei im selben Verzeichnis wie deepstream_test_1.py und führen Sie den folgenden Befehl aus, um das DeepStream-Inferenzergebnis auf dem Bildschirm anzuzeigen. Es scheint auch, dass es ungefähr 5 Minuten dauern wird, bis das Inferenzergebnis angezeigt wird.

$ python3 deepstream_test_1.py "Videodatei"

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

Wenn es nicht funktioniert

Wenn es nicht funktioniert, überprüfen Sie die folgenden Punkte.

--Überprüfen Sie, ob der Speicherort der Pyhon-Bindung unter DeepStream SDK korrekt ist.
→ Ist der Ordner deepstream-test * unter deepstream-4.0 / sources / python / apps ordnungsgemäß vorhanden?

Recommended Posts

Fügen Sie DeepStream SDK Python Binding in Jetson Nano ein und versuchen Sie die Objekterkennung
Objekterkennung mit Jetson Nano (YOLOv3) - (1) Jetson Nano-Einstellungen-
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Einfacher Gesichtserkennungsversuch mit Jetson Nano und Webkamera
Objektorientiert in Python
Versuchen Sie gRPC in Python
Probieren Sie 9 Slices in Python aus
Versuchen Sie es mit GUI, PyQt in Python
Bildanalyse mit Objekterkennungs-API zum Ausprobieren in 1 Stunde
Versuchen Sie einfach, einen Webhook mit ngrok und Python zu erhalten
String-Objektmethoden in Python
Nullobjektvergleich in Python
Versuchen Sie LINE Notify mit Python
Stapel und Warteschlange in Python
Lassen Sie uns Yuma in Python 3 implementieren
Zusammenfassung der Gesichtserkennung in Python
Python-Variablen und Objekt-IDs
Unittest und CI in Python
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen