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.
Terminal: Jetson Nano Bild: JetPack 4.2.2. DeepStream SDK:v4.0.2 Python Binding:v0.5α
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 /)
Laden Sie "DeepStream Python Apps and Bindings" von [dieser Site] herunter (https://developer.nvidia.com/deepstream-download). 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
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)
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"
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?
`$ GST_DEBUG = 3 python3 deepstream_test_1.py Bei Ausführung mit" Videodatei "`
wird die GST-Debug-Option aktiviert und das detaillierte Startprotokoll auf der Konsole angezeigt.Recommended Posts