我为opencv和面部识别创建了一个docker镜像,以简化设置过程。
但是identify.py脚本需要X Server来显示图像结果。到目前为止,这是我所做的:
sudo docker run -t -d --name opencv opencv:latest
sudo docker exec -it opencv bash /extract-embeddings.sh
sudo docker exec -it opencv bash /train-model.sh
到目前为止一切都很好。最后一步是将结果显示在图像中的实际比较。
sudo docker exec -it opencv bash /face-recognition.sh
它给出输出:
[INFO] loading face detector...
[INFO] loading face recognizer...
No protocol specified
: cannot connect to X server :0
我尝试使用以下命令运行容器:
sudo docker run -t -d --name opencv -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix opencv:latest
但这没有帮助。
答案 0 :(得分:6)
尝试运行此
xhost +
sudo docker run --rm -ti --net=host --ipc=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --env="QT_X11_NO_MITSHM=1" <image_name> <arguments>
其他人可能会面临图像无法在屏幕上渲染或出现空白屏幕而没有图像的问题,因为他们在运行docker图像时将--env="_X11_NO_MITSHM=1"
添加到上述脚本中。它将解决问题。
有关更多信息,我建议您查看以下参考文献。
答案 1 :(得分:2)
xauth似乎是查看图像的问题。 详细信息在Can you run GUI applications in a Docker container?
答案 2 :(得分:0)
可能还需要 XAuthority
。
首先,确保定义了主机的 $XAUTHORITY
。
其次,将以下参数添加到 docker run
命令:
-v $XAUTHORITY:/tmp/.XAuthority -e XAUTHORITY=/tmp/.XAuthority
完整命令示例:
sudo docker run --rm -ti --net=host --ipc=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $XAUTHORITY:/tmp/.XAuthority -e XAUTHORITY=/tmp/.XAuthority --env="QT_X11_NO_MITSHM=1" <image_name> <arguments>