2021年6月16日水曜日

Jetson nanoで OpenCV 4.xを野良ビルドしたら pythonから cv2.VideoCaptureでコケた時

 Jetson Nanoで GPU 有効化されたOpenCVを野良ビルドしたら

cap = cv2.VideoCapture(input_video,

みたいな処理で

[ERROR:0] global /home/jetson/opencv/modules/videoio/src/cap.cpp (116) open VIDEOIO(GSTREAMER): raised OpenCV exception:

OpenCV(4.1.1) /home/jetson/opencv/modules/videoio/src/cap_gstreamer.cpp:144: error: (-215:Assertion failed) ptr in function 'get'

というエラーでコケる。


原因は GStreamerが有効化されると OpenCVのフラグ構成上

  cv::CAP_GSTREAMER = 1800,

  cv::CAP_FFMPEG = 1900,

GSTREAMER(数値が低いほう)が優先順位が高いらしい。

じゃー、どうしたら OpenCVのバックエンド切り替えられるのかというと


cap = cv2.VideoCapture(input_video, apiPreference=cv2.CAP_FFMPEG)


とVideoCaptureに apiPreferenceを指定せよとのこと。