imshow()를 위한 docker container 실행
docker 안에서 opencv-python과 webcam을 연결해서 cv2.imshow()를 하려면 container를 생성할 때 몇몇 option을 추가해 줘야 한다.
만약 option 없이 docker container 내부에서 imshow()를 할 경우 다음과 같은 에러가 발생한다.
'getStreadmChannelGroup Camera index out of range'
# docker container를 만들기 전에 'xhost +'를 terminal에 친다.
xhost +
# 필수 option
-v /tmp/.X11-unix/:/tmp/.X11-unix
--env QT_X11_NO_MITSHM=1
--device=/dev/video0:/dev/video0
-e DISPLAY=$DISPLAY
ex)
xhost +
docker run -ti -v /tmp/.X11-unix/:/tmp/.X11-unix --env QT_X11_NO_MITSHM=1 --device=/dev/video0:/dev/video0 -e DISPLAY=$DISPLAY --name test pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel /bin/bash
각 option에 대한 설명은 밑의 링크 블로그에 설명되어 있고, 혹시 몰라 빠져도 되는 option이 있나 하나하나 지우면서 test해 봤는데 하나라도 빠지면 제대로 imshow()되지 않는다.
참고)
opencv-python 설치
docker container를 실행하였으면 나면 다음과 같이 opencv-python을 설치해준다.
pip install opencv-python
# *libGL*.*so*.*1 오류가 발생할 경우*
apt-get install libgl1-mesa-glx
#libgthread-2.0.so.0 오류가 발생할 경우
apt-get install libglib2.0-0
#libSM.so.6 오류가 발생할 경우
apt-get install libsm6 libxext6 libxrender-dev
만약, pip install opencv-python을 그냥 설치를 하면 최신 opencv version(작성 기준: 4.7.0.68)이 설치가 되는데 다음과 같은 오류가 발생할 수도 있다.
"The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support If yoou are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowInage'"
해당 부분에 대해 오류 문구처럼 libgtk2.0-dev와 pkg-config를 설치하였지만, 내 경우에는 해결되지는 않았고, opencv-python version을 downgrade 하는 방법만 찾았다.
pip install opencv-python==4.0.1.23
or
pip install opencv-python==4.0.0.21
참고)
python code 실행 결과
설치가 완료되면 webcam 실행 코드를 실행하면 문제없이 실행되는 것을 볼 수 있다.
python webcam code
참고)
'Development > Docker' 카테고리의 다른 글
[Docker] /var/run/docker.sock permission denied (0) | 2023.02.02 |
---|---|
[Docker] /var/lib/docker/overlay2/<folder name> no such file or directory (0) | 2022.10.05 |
[Docker] nvidia-docker2 deb패키지로 설치 (0) | 2022.09.29 |
ubuntu 압축파일로 docker 설치 (0) | 2022.09.27 |
[Docker] ascii codec can't decode byte error (0) | 2022.03.14 |
댓글