[Docker] docker에서 cv2.imshow (GUI) 사용하기

happy_quokka·2024년 1월 9일
0

Docker

목록 보기
7/7

docker에서 matplotlib.pyplot으로 이미지를 띄울 수는 있었지만 cv2.imshow는 계속 에러가 났다. docker에서 GUI는 하기 힘들겠다고 생각하여 그냥 이미지를 저장해서 확인하고 있었는데 너무 불편했다. 앞으로 cv2.imshow를 사용할 일이 많을 것 같아서 해결하려고 마음을 먹고 이것저것 해보았다.

그 결과 아래의 명령어들로 docker에서 cv2.imshow를 할 수 있게 되었다!!!!!

1. docker container 생성

$ xhost +
$ docker run -it --net=host --ipc=host -v /home/nahye/dev_practice/:/workspace -v /tmp/.X11-unix:/tmp/.X11-unix --device=/dev/video0:/dev/video0 -e DISPLAY=$DISPLAY --env QT_X11_NO_MITSHM=1 --name "torch_gui" pytorch/pytorch /bin/bash
  • -v <local 저장소 경로>:<docker 저장소> : local의 저장소와 docker를 연결한다
  • -v /tmp/.X11-unix:/tmp/.X11-unix : host의 x window 연결
  • --device=/dev/video0:/dev/video0 : 웹캠을 사용할 때 필요한 부분으로 카메라 연결에 필요하다
  • pytorch/pytorch : 이 부분은 원하는 image 이름을 넣으면 된다

2. opencv 설치 및 실행

docker container를 실행시킨 후 opencv를 설치한다. 설치하고 실행하는 과정에서 에러가 발생할 수 있는데 아래의 방법으로 따라하면 된다

opencv 설치

# pip install opencv-python

libGL 에러

ImportError: libGL.so.1: cannot open shared object file: No such file or directory
  • 해결
# apt-get update -y
# apt-get -y install libgl1-mesa-glx
# apt-get -y install libglib2.0-0

xcb 에러

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/opt/conda/lib/python3.10/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.
  • 해결
# apt install make g++ pkg-config libgl1-mesa-dev libxcb*-dev libfontconfig1-dev libxkbcommon-x11-dev python libgtk-3-dev
  • 또는 컨테이너 밖에서 아래 명령어를 실행하고 컨테이너에 접속하면 해결된다
$ xhost +

3. 실행 결과

이렇게 이미지를 볼 수 있다!!!

4. 그 후 다른 라이브러리와 충돌할 경우

특정 라이브러리를 설치한 후 cv2와 관련한 에러가 발생할 수 있다.
이런 경우는 그 라이브러리를 설치하면서 opencv 버전이 변경되는 등의 변화가 발생했기 때문이다.
그럴때는 opencv를 삭제했다가 다시 설치하면 된다!

# pip uninstall opencv-python
# pip install opencv-python

reference

https://blog.naver.com/cheeryun/222383212241

0개의 댓글