docker에서 matplotlib.pyplot으로 이미지를 띄울 수는 있었지만 cv2.imshow는 계속 에러가 났다. docker에서 GUI는 하기 힘들겠다고 생각하여 그냥 이미지를 저장해서 확인하고 있었는데 너무 불편했다. 앞으로 cv2.imshow를 사용할 일이 많을 것 같아서 해결하려고 마음을 먹고 이것저것 해보았다.
그 결과 아래의 명령어들로 docker에서 cv2.imshow를 할 수 있게 되었다!!!!!
$ 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 이름을 넣으면 된다docker container를 실행시킨 후 opencv를 설치한다. 설치하고 실행하는 과정에서 에러가 발생할 수 있는데 아래의 방법으로 따라하면 된다
# pip install opencv-python
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
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 +
이렇게 이미지를 볼 수 있다!!!
특정 라이브러리를 설치한 후 cv2와 관련한 에러가 발생할 수 있다.
이런 경우는 그 라이브러리를 설치하면서 opencv 버전이 변경되는 등의 변화가 발생했기 때문이다.
그럴때는 opencv를 삭제했다가 다시 설치하면 된다!
# pip uninstall opencv-python
# pip install opencv-python