[Tips] JetPack에서 opencv 사용하기
포스트
취소

[Tips] JetPack에서 opencv 사용하기

아키텍처가 다르기 때문인지, pc 개발환경에서 잘 작동하던 코드들이 JetPack에서는 작동하지 않았다.

KFQ 최종 프로젝트에서 사용한 카메라 영상 송수신 모듈을 개발하는 중 발생하였다.

opencv를 사용할 때, 특히 VideoCapture를 사용함에 있어서 참고하면 될 것 같다.

오류 메세지

1
2
3
import cv2
capture = cv2.VideoCapture(0)
후략..

Screenshot from 2021-12-03 15-44-57

1
2
3
4
5
6
7
8
9
10
11
$ python cam_server.py
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (1757) handleMessage OpenCV \
 | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error.
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (886) open OpenCV \
 | GStreamer warning: unable to start pipeline
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV \
 | GStreamer warning: GStreamer: pipeline have not been created
select timeout
VIDIOC_DQBUF: Resource temporarily unavailable
OpenCV(4.1.1) /home/nvidia/host/build_opencv/nv_opencv/modules/imgcodecs/src/grfmt_base.capp:145: error: (-10:Unknown error code -10) \
Raw image encoder error: Empty JPEG image (DNL not supported) in function 'throwOnEror'

원인

파악중

arm64, x86_64, i386 등.. 아키텍처의 차이로 인한 것일까..? 잘 모르겠다..


해결 방법

1
2
3
4
5
6
7
import cv2
capture = cv2.VideoCapture("nvarguscamerasrc sensor-id=0 ! video/x-raw(memory:NVMM), 
    width=640, height=480, format=(string)NV12, 
    framerate=(fraction)20/1 ! nvvidconv flip-method=0 ! video/x-raw, 
    width=640, height=480, format=(string)BGRx ! videoconvert ! video/x-raw, 
    format=(string)BGR ! appsink", cv2.CAP_GSTREAMER)
후략..

VideoCapture 내부에 위와 같은 코드로 수정을 해주어 해결하였다.

Screenshot from 2021-12-03 15-48-17

정상적으로 작동하는 모습을 확인하였다.


참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.