在这篇文章中,我们分享了OpenCV 3.4.3的 Docker镜像,以及最近发布的OpenCV 3.4.4和OpenCV 4.0。除OpenCV外,该图像还具有dlib和Facial Landmark Detection示例代码。
每天我们收到一些关于OpenCV和Dlib安装的帖子的电子邮件和评论。即使有详细和经过测试的说明,有时人们也难以启动并运行系统。因此,我们一直在考虑为那些一直在努力解决安装问题的人们提供解决方案。
解决此问题的一种方法是提供安装了所有库的虚拟机(VM)。使用VM的一个巨大缺点是人们需要下载的大文件。有时它可以是10s的GB。
解决此问题的更智能和更新的方法是提供Docker镜像。通常,Docker镜像大小比VM小得多。例如,我们的Docker镜像大小仅为1 GB(压缩大小)。此外,它的启动速度比VM快得多,并且与VM相比,通常可以更快地运行应用程序。Docker只是可以让您的生活变得非常简单的极简事物之一。
此外,正如我们将看到的,可以在Windows,Ubuntu和MacOS上使用相同的docker镜像。如果您不熟悉OpenCV安装,或者想要试用新的OpenCV-3.4.4和OpenCV-4.0(2018年11月20日发布),而不是实际安装在您的系统上,这款docker镜像非常适合您。
这篇文章分为五个部分
第1部分:如何在Linux,MacOS和Windows上安装Docker。
第2节:如何使用OpenCV的 Docker镜像。此图像还附带预安装的dlib。
第3节:如何在Docker Image上运行Facial Landmark Detection演示代码
第4节:如何更改Docker镜像。
如何在Ubuntu,MacOS和Windows上安装Docker。
(一)要在Ubuntu 16.04上安装docker,首先将官方Docker存储库的GPG密钥添加到系统:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
(二)将Docker存储库添加到APT源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
(三)接下来,使用新添加的repo中的Docker包更新包数据库:
sudo apt-get update
(四)确保您要从Docker repo而不是默认的Ubuntu 16.04 repo安装:
apt-cache policy docker-ce
(五)您应该看到类似于以下内容的输出:
docker-ce:
Installed: (none)
Candidate: 17.03.1~ce-0~ubuntu-xenial
Version table:
17.03.1~ce-0~ubuntu-xenial 500
500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
17.03.0~ce-0~ubuntu-xenial 500
500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
(六)最后,安装Docker:
sudo apt-get install -y docker-ce
(一)要在MacOS桌面上安装Docker,首先要访问Docker Store并下载适用于Mac的Docker Community Edition。
(二)双击Docker.dmg以打开安装程序,然后将Moby将鲸鱼拖到Applications文件夹。
(三)双击Applications文件夹中的Docker.app以启动Docker。
(四)启动后,系统会提示您使用系统密码授权Docker.app。需要特权访问才能安装网络组件和Docker应用程序的链接。
顶部状态栏中的鲸鱼表示Docker正在运行,并且可以从终端访问。
(一)下载并安装适用于Windows的Docker Toolbox。安装程序将Docker Toolbox,VirtualBox和Kitematic添加到“ 应用程序”文件夹中。
(二)在桌面上,找到Docker QuickStart终端图标。
(三)双击Docker QuickStart图标以启动预配置的Docker Toolbox终端。
bash
Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v18.06.1-ce
(default) Downloading C:\Users\imsau\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso
(四)按enter键,安装将自动开始。完成后,文件将出现在
\ users \ username \ .docker \ machine \ cache \ boot2docker.iso。
如果系统显示“ 用户帐户控制”提示以允许VirtualBox对您的计算机进行更改,请选择“ 是”。
终端为您设置Docker Toolbox做了几件事。完成后,终端显示$提示符。
docker镜像已更新为启用X11-Forwarding,现在还包含一个测试安装的示例。使用docker pull获取最新图像。
要使用泊坞窗图像,请使用以下说明:
docker pull spmallick/opencv-docker:opencv
一旦下载了图像,我们就可以使用以下命令启动它
docker run --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -p 5000:5000 -p 8888:8888 -it spmallick/opencv-docker:opencv /bin/bash
我们花一点时间详细检查一下这个命令:
-v /tmp/.X11-unix:/tmp/.X11-unix有助于X11转发,因此我们可以使用cv :: imshow等函数。
-e用于传递环境变量。
-it启动交互式会话
-p设置一个前进端口。此标志将容器的端口映射到主机系统上的端口。
/ bin / bash在启动时运行.bashrc文件
该图像具有的OpenCV 3.4.3安装在的/ usr /本地,OpenCV的3.4.4在〜/安装/ OpenCV的-3.4.4和的OpenCV 4.0.0在〜/安装/ OpenCV的主。
使用Python环境:
对于OpenCV 3.4.3,
workon OpenCV-3.4.3-py3
ipython
进入iPython提示后,执行
import cv2
cv2.__version__
exit()
要停用虚拟环境,请使用
deactivate
类似地,对于OpenCV 3.4.4和OpenCV 4.0.0,
workon OpenCV-3.4.4-py3
ipython
进入iPython提示后,执行
import cv2
cv2.__version__
exit()
要停用虚拟环境类型
deactivate
workon OpenCV-master-py3
ipython
进入iPython提示后,执行
import cv2
cv2.__version__
exit()
为了在docker镜像上测试OpenCV和dlib的安装,我们提供了一个可以试用的Facial Landmark检测示例。
(一)首先,我们确保拥有最新的docker镜像。
docker pull spmallick/opencv-docker:opencv
(二)接下来,我们运行前面部分中指定的docker镜像。
docker run --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -p 5000:5000 -p 8888:8888 -it spmallick/opencv-docker:opencv /bin/bash
(三)创建docker容器并运行后,您将在/ root / - common,demo和installation中找到3个文件夹。该演示文件夹包含C ++和Python的面部标志检测代码的版本。
(四)要运行Python脚本,请按照以下步骤操作。说明适用于OpenCV-4.0.0。对于OpenCV-3.4.3和OpenCV-3.4.4,只需更改前面讨论的环境。
cd ~/demo/python
source activate OpenCV-master-py3
python facialLandmarkDetector.py
source deactivate
(五)要运行C ++代码,请按照以下步骤操作:
cd ~/demo/cpp/
您将找到3个文件夹,每个文件夹安装一个OpenCV版本。文件夹中存在的CMakeLists.txt文件可用作该特定OpenCV版本的构建代码的参考。
cd OpenCV-3.4.4/build
cmake ..
cmake --build . --config Release
cd ..
./build/facialLandmarkDetector
默认情况下,您在docker镜像中所做的任何更改都不会保存。
要提交对docker镜像所做的更改,我们需要按照以下步骤操作。我们将以下面的终端图像为例
(一)查找容器ID:找到它的最简单方法是在docker容器中记下root @后面的文本。例如,在上图中,docker容器ID为56a07cf4614c。另请注意,每次使用docker run创建新容器时,Container ID都会有所不同。
(二)进行更改:在上面的示例中,我们创建一个简单文件HelloUser.sh,从命令行运行时输出一些文本。
(三)退出:完成更改后,我们需要使用exit命令退出容器。
(四)提交更改:最后,要提交对docker镜像所做的更改,请使用以下命令
sudo docker commit CONTAINER_ID NAME_OF_DOCKER_IMAGE
在我们的例子中,我们使用
sudo docker commit 56a07cf4614c my-docker-image
(五)检查图像:您希望确保在运行以下命令时显示已提交的docker镜像
docker images
(六)使用图像:下次要使用此docker镜像时,只需使用以下命令:
docker run --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -p 5000:5000 -p 8888:8888 -it NAME_OF_DOCKER_IMAGE /bin/bash
在我们的具体示例中,我们使用
docker run -u 0 -it -p 8888:8888 -p 5000:5000 my-docker-ima