如何在docker,Ubuntu上运行我的scrip python openCV



我是第一次使用docker。我正在使用此图像opencvcourses/opencv-docker。我试着用openCV运行一个scrip,但首先我要解释如何用print和numpy 运行一个简单的代码

我在我的ubuntu本地目录上有我的脚本(ej.py(:/home/noemi/Escoritorio/contentores/cont1/ej.py

import numpy as np
print('Esto es una prueba ok')
print(np.pi)

我用下一个命令运行docker

docker run -it -v /home/noemi/Escritorio/contenedores/cont1:/home opencvcourses/opencv-docker

而且,我的剧本很管用!我得到这个

Esto es una prueba ok
3.141592653589793

但是当我添加到我的脚本(ej.py(openCV代码时

import cv2
import numpy as np
img1 = np.zeros((6,8,1),np.uint8)
cv2.imshow('imagen-zeros',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

并尝试使用相同的命令

docker run -it -v /home/noemi/Escritorio/contenedores/cont1:/home opencvcourses/opencv-docker

出现此错误

Traceback (most recent call last):
File "ej.py", line 6, in <module>
cv2.imshow('imagen-zeros',img1)
cv2.error: OpenCV(4.5.1) /home/opencv/modules/highgui/src/window_gtk.cpp:624: error: (-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'

拜托,我不知道发生了什么

我在阅读这篇文章时找到了解决方案https://www.programmersought.com/article/15656181875/

我在我的ubuntu位置上有一个名为ej.py的脚本/home/noemi/Escoritorio/contentores/cont1

import cv2
import numpy as np
print('Esto es una prueba ok')
print(np.pi)
img = cv2.imread('gato.jpg')
cv2.imshow('imagen-zeros',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

要使用docker image运行我的代码,请执行以下步骤:

$ xhost +local:docker
$ docker run -it --device /dev/video0:/dev/video0 -v $(pwd):/home -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -p 5000:5000 -p 8888:8888 opencvcourses/opencv-docker

上一个命令创建一个容器并打开镜像bash。这里写python3ej.py如下:

root@ee4316d99815:/home# python3 ej.py

它起作用了!我的代码显示图像

如果你想再次执行容器,请尝试以下操作:

  1. 使用以下内容识别容器的ID:$docker ps-a
  2. 使用以下内容启动容器:$docker启动(像这样的ID容器ee4316d99815(
  3. 使用以下内容执行容器:$docker exec-it ee4316d99815/bin/bash
  4. 用python3 ej.py再试一次

如果你想关闭xhost,你应该使用$xhost-local:docker

docker run命令

docker run -it -v /home/noemi/Escritorio/contenedores/cont1:/home opencvcourses/opencv-docker

解释

  1. 将DISPLAY环境变量值设置为与HOST的值相同

--env DISPLAY=$DISPLAY

  1. 帮助X11转发,以便我们可以使用cv::imshow等函数

-v /tmp/.X11-unix:/tmp/.X11-unix

让我知道这是否能相应地更新这个答案。

来源

  • 在Ubuntu、MacOS或Windows上安装OpenCV Docker镜像
  • 没有与主机名关联的地址
  • 错误:(-2:未指定的错误(无法初始化函数"cvInitSystem"中的GTK后端

最新更新