LabelImg在Docker on Mac上成功安装
LabelImg作为图片标注工具,是在进行图片识别和视频分类等机器学习任务的训练集准备,不可少的工具,官网地址:https://github.com/tzutalin/labelImg
现在心情久久不能平静,终于在Docker(Docker on mac)的容器中,成功跑起来LabelImg了,经过了两天的煎熬和屡败屡试,现在很不及待记录下来解决方案,希望能够帮到遇到同样问题,煎熬中的小伙伴。
本人机器学习环境都制作成docker镜像,通过运行docker容器执行相关任务。docker直接用mac上安装的docker
一、主要问题:
1、LabelImg用python编写和采用qt作为它的图形界面,qt的安装遇到不少问题,主要是不同版本pyqt4(python2)和pyqt5(python3)的问题,比如报错:make: *** No rule to make target 'qt5py3'. Stop.
2、LabelImg 是一款图形窗口的工具,运行LabelImg,需要能在docker容器中启动图形窗口
过程报:cannot connect to X server等等错误
3、Docker on Mac和Docker on Linux在硬件使用上稍有不同,导致网络很多文章的方法对于Docker on Mac是不生效的
过程报:cannot open display "unix/private/tmp/com.apple.launchd.**org.macosforge.xquartz:0" 等等错误
二、问题解决:
1、本人自己采用官网提供的tzutalin/py2qt4镜像,本次成功启动LabelImg,也基于此镜像。
自个手动生成镜像,应该回在qt安装上遇到问题,感觉按照LabelImg的官网的指引,应该是能安装成功的,以后有时间再验证一下。
2、docker容器必须通过x11进行图形窗口的显示。
《微信分享】林帆:Docker运行GUI软件的方法》 比较清晰说明docker通过x11的显示图形窗口。
但上文中的-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY,在docker on mac中并不生效,该方案是对于docker on linux的,生效方案下面给出。
mac目前的版本都不自带x11,可以下载安装xquartz,xquartz就是目前apple官方的x11方案。xquartz的版本必须用2.7.10,不能用最新的2.7.11版本。
3、通过下文的大神的方法,稍做修改,把labelimg跑起来的,
《Docker for Mac and GUI applications》
open -a XQuartz
ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
xhost + $ip
docker run -d --name labelimg -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-unix -v /Develop/AI/docker/tensorflow/notebooks:/root/notebooks tzutalin/py2qt4
关键语句:-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$ip:0
三、具体步骤
1、下载labelimg镜像,在mac终端执行(前提条件:已安装和启动docker)
docker pull tzutalin/py2qt4
2、运行docker容器,在mac终端执行
open -a XQuartz
ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
xhost + $ip
docker run -it -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-unix -v /Develop/AI/docker/tensorflow/notebooks:/root/notebooks tzutalin/py2qt4
3、在容器终端中执行(注意是容器里执行的哦),git和make install 在非第一次是不需要再执行了,在容器终端中,进入指定目录,执行python ./labelImg.py,即可。
cd /root/notebooks/labelimg
git clone https://github.com/tzutalin/labelImg.git
cd /root/notebooks/labelimg/labelImg
make
python ./labelImg.py
4、期待已久的LabelImg窗口出现了
四、参考文章
https://fredrikaverpil.github.io/2016/07/31/docker-for-mac-and-gui-applications
https://www.****.net/article/2015-07-30/2825340
https://blog.****.net/u012746060/article/details/81183006
https://hub.docker.com/r/tzutalin/py2qt4/
https://pjreddie.com/projects/pascal-voc-dataset-mirror/
https://forums.docker.com/t/how-to-run-gui-apps-in-containiers-in-osx-docker-for-mac/17797/7