이번엔 jetson nano의 docker container 에 opencv-python 4.5.1 버전을 설치해 보고 설치 과정 중 내가 격은 에러 사항과
해결 방법을 기록한다.

 

참고로 nvidia에서 제공하는 l4t-ml docker image에는 opencv가 이미 설치되어있다. pytorch, tensorflow도 설치 되어있다. 

빌드하느라 고생하기 싫은 분들은 저런 도커 이미지를 사용하는게 훠얼씬 시간절약 및 정신 건강에 좋다.

 

 
설치 과정은 아래 link되어있는 페이지에 소개된 내용을 따라 했다. 이런 좋은 가이드를 올려주신 개발자 분에게 감사드리고 싶다.
참조 페이지: link

 

로그인 또는 가입하여 보기

Facebook에서 게시물, 사진 등을 확인하세요.

ko-kr.facebook.com


유일한 다른 점은 나는 host에 직접 설치 한게 아니라 이전 포스팅([jetson nano] docker를 이용한 개발 환경 세팅) 에서 다운 받은 'l4t-pytorch:r32.6.1-pth1.8-py3 ' docker image 에 opencv 4.5.1 을 설치 했다는 것이다.

패키지 업데이트 및 설치

apt update a
pt install -y python3-pip python3-dev python3-numpy
apt install -y libcanberra-gtk* libgtk2.0-dev 
apt install -y libtbb2 libtbb-dev libavresample-dev libvorbis-dev libxine2-dev 
apt install -y curl

나의 경우 위의 명령을 실행하면 아래와 같이 libopencv와 관련된 log가 무수히 많이 발생했다.

간단한 opencv 동작 테스트 때는 문제가 되지 않았다. 

/sbin/ldconfig.real: File '/usr/loib/aarch64-linux-gnu/libopencv_imgproc.so is emptry, not checked'

 

 

math, video, image format 관련 library 설치

apt install -y libxvidcore-dev libx264-dev libgtk-3-dev 
apt install -y libjpeg-dev libpng-dev libtiff-dev 
apt install -y libmp3lame-dev libtheora-dev libfaac-dev libopencore-amrnb-dev 
apt install -y libopencore-amrwb-dev libopenblas-dev libatlas-base-dev 
apt install -y libblas-dev liblapack-dev libeigen3-dev libgflags-dev 
apt install -y protobuf-compiler libprotobuf-dev libgoogle-glog-dev 
apt install -y libavcodec-dev libavformat-dev gfortran libhdf5-dev 
apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 
apt install -y libv4l-dev v4l-utils qv4l2 v4l2ucp libdc1394-22-dev

 

opencv 다운로드 및 압축해제

curl -L https://github.com/opencv/opencv/archive/4.5.1.zip -o opencv-4.5.1.zip curl -L https://github.com/opencv/opencv_contrib/archive/4.5.1.zip -o opencv_contrib-4.5.1.zip unzip opencv-4.5.1.zip unzip opencv_contrib-4.5.1.zip cd opencv-4.5.1/ mkdir build cd build cmake -D WITH_CUDA=ON \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules \ -D WITH_GSTREAMER=ON \ -D WITH_LIBV4L=ON \ -D BUILD_opencv_python2=ON \ -D BUILD_opencv_python3=ON \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_EXAMPLES=OFF \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules \ -D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \ -D CUDA_ARCH_BIN="5.3" \ -D CUDA_ARCH_PTX="" \ -D WITH_CUDNN=ON \ -D WITH_CUBLAS=ON \ -D ENABLE_FAST_MATH=ON \ -D CUDA_FAST_MATH=ON \ -D OPENCV_DNN_CUDA=ON \ -D ENABLE_NEON=ON \ -D WITH_QT=OFF \ -D WITH_OPENMP=ON \ -D WITH_OPENGL=ON \ -D BUILD_TIFF=ON \ -D WITH_FFMPEG=ON \ -D WITH_TBB=ON \ -D BUILD_TBB=ON \ -D WITH_EIGEN=ON \ -D WITH_V4L=ON \ -D OPENCV_ENABLE_NONFREE=ON \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_opencv_python3=TRUE \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D BUILD_EXAMPLES=OFF .. make -j4 sudo make install


여기 까지 하고 나면 cv2==4.5.1 버전의 설치는 완료 된다. 에러도 없이 아주 잘 설치 된다.
cv2==3.2.0 버전에서 잘동작 하던 카메라 영상을 받아오는 스크립트를 실행 시키면 아래와 같은 에러가 발생한다.

No protocol specified nvbuf_utils: Could not get EGL display connection
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: No such file or directory (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 205) 
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 106) 
[ WARN:0] global /home/download/opencv-4.5.1/modules/videoio/src/cap_gstreamer.cpp (961) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1 
No protocol specified Unable to init server: Could not connect: Connection refused Traceback (most recent call last): 
File "show.py", line 10, in <module> cv2.imshow('img', img)
cv2.error: OpenCV(4.5.1) 
/home/download/opencv-4.5.1/modules/highgui/src/window_gtk.cpp:624: 
error: (-2:Unspecified error) 
Can't initialize GTK backend in function 'cvInitSystem'

카메라가 문제인가 하고 gst-launch-1.0으로 영상 출력을 확인했더니 xvimagesink 가 없어 패키지를 설치했다.

gstreamer1.0-x 를 설치 하면 된다.

$ gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! xvimagesink 
error occcur: no element xvimagesink 
$ apt install gstreamer1.0-x

xvimagesink설치 후 다시 gst-launch-1.0으로 카메라 영상 출력을 시도해보았다.

역시 안된다. 

이때 든생각이 docker에서 display 넘겼었나...? 

컨테이너를 종료하고 

도커를 다시 실행했다. 이번엔 아래 처럼 xhost + 를 입력해 

모든 호스트에 대해 그래픽 요청을 허용 하도록 하고 (접근제어 안한다는 뜻)

DISPLAY도 잊지 않고 넘겼다.

xhost +
docker run -it --rm --runtime nvidia --network host --priviledged -e DISPLAY=$DISPLAY
~~~ nvcr.io/nvidia/l4t-ml:r32.5.0-py3

그리고 다시 gst-launch-1.0으로 카메라를 테스트 하고 영상 출력이 정상인것을 확인후 opencv 테스트 프로그램을 실행했다.

잘된다. 

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! xvimagesink 
#run show.py again 
python3 show.py


#complete

 

+ Recent posts