Die Arbeit von zu Hause aus hat begonnen, und der Preis für WEB-Kameras ist in die Höhe geschossen. Es fiel mir schwer, die Auflösung und Bildrate zu ändern, als ich mit openCV mit der Henachoko-Kamera aufnahm, die ich in dieser Zeit gekauft hatte. Deshalb werde ich es zusammenfassen.
Bei der Verwendung von openCV in Jetson, als ich versuchte, den Code der WEB-Kamera zu ändern, wurde gesagt, dass es sich um eine nicht behandelte Eigenschaft in der Menge von CAP_PROP_FOURCC handelt. Geben Sie also v4l2src ein, verwenden Sie gstreamer, um Appsink auszugeben, und verwenden Sie dies als Argumentzeichenfolge von videoCapture. Ich habe den Code und die Auflösung der Kamera geändert, indem ich als angegeben habe.
Normalerweise Wie in [[Python] Webkamera-Rahmengröße und FPS-Einstellungen mit OpenCV] gezeigt (https://qiita.com/Kazuhito/items/cc6b8a0bd75cf9689bf9)
Auflösung ändern
cap=videoCapture(0)
video_input.set(cv2.CAP_PROP_FPS, 30)
video_input.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
video_input.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
Sie können die Auflösung ändern, indem Sie so etwas tun. Zu diesem Zeitpunkt müssen die Auflösung und die FPS des Änderungsziels von der Kamera unterstützt werden. Diese Liste kann mit dem Befehl v4l2-ctl oder dergleichen abgerufen werden. Das Folgende ist die Ausgabe der Henachoko-Zielkamera dieses Mal.
XavierNX:~/docker/darknet/work$ v4l2-ctl -d /dev/video1 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x180
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
XavierNX:~/docker/darknet/work$
Wenn Sie nicht über v4l2-ctl verfügen, können Sie es mit apt install v4l-utils installieren.
--Problem 1: OpenCV versucht, die Kamera mit YUYV zu öffnen Im obigen Ausgabebeispiel versucht OPENCV, das erste YUYV mit 640 x 360-30 FPS zu öffnen (ich bin mir nicht sicher, ob es das erste ist). Sofern Sie dieses Verhalten nicht ändern und die Kamera auf das MJPG-Format umschalten, können Sie mit dieser Henachoko-Kamera nur andere Auflösungen als 640 x 360 einstellen. --Problem 2: In VideoCaptureProperties können Sie das Format mit CAP_PROPFOUR ändern Es kann auf Jetson nicht geändert werden.
Siehe OpenCV-Kamera wird schneller geladen und Verzögerungszeit kürzer
Auflösung ändern
import cv2
cap=cv2.VideoCapture(1)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'));
video_input.set(cv2.CAP_PROP_FPS, 30)
video_input.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
video_input.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
while True:
ret, frame_read = cap.read()
cv2.imshow('Read',frame_read )
cv2.waitKey(30)
cap.release()
Ich fühle mich wie es funktioniert. Aber aus irgendeinem Grund, wenn ich es versuche, auf JETSON
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (1184) setProperty OpenCV | GStreamer warning: GStreamer: unhandled property
Ich kann nicht zu MJPG wechseln. Wenn Sie sich tatsächlich [OpenCV 4.11 git CAP_gstreamer.cpp] ansehen (https://github.com/opencv/opencv/blob/4.1.1/modules/videoio/src/cap_gstreamer.cpp), ist CAP_PROP_FORCC die eingestellte Funktion. Es ist nicht definiert und ich habe das Gefühl, dass es geschrieben wurde, um in eine nicht behandelte Eigenschaft zu fallen. Da es mit MAC funktioniert, scheint die Implementierung beim Öffnen eines VIDEO-Geräts mit videoCapture einen anderen Code zu verwenden, aber die Operation mit Jetson scheint die im Code vorgesehene Operation zu sein.
Ich habe diesen Pfad aufgegeben und die Codec-Auflösung und die FPS geändert, indem ich v4l2src und appsink mit gstreamer angegeben habe.
Ändern Sie die Auflösung v4l2src
import cv2
src = 'v4l2src device=/dev/video1 ! image/jpeg,width=1280, height=720, framerate=(fraction)30/1 !jpegdec !videoconvert ! appsink'
cap=cv2.VideoCapture(src)
while(cap.isOpened()):
ret, frame_read = cap.read()
cv2.imshow('Read',frame_read )
cv2.waitKey(30)
cap.release()
~
Außerdem können Sie, wenn Sie den Videoeingangsteil von gstreamer neu schreiben, verschiedene Dinge tun, und es scheint Spaß zu machen. Dokumentation von v4l2src Wenn Sie nach den Parametern von gst-launch-1.0 suchen, werden Sie verschiedene Dinge finden.
Recommended Posts