1. 程式人生 > >LabelImg在Docker on Mac上成功安裝

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)的問題

2、LabelImg 是一款圖形視窗的工具,執行LabelImg,需要能在docker容器中啟動圖形視窗

3、Docker on Mac和Docker on Linux在硬體使用上稍有不同,導致網路很多文章的方法對於Docker on Mac是不生效的

二、問題解決:

1、本人自己採用官網提供的tzutalin/py2qt4映象,本次成功啟動LabelImg,也基於此映象。

     自個手動生成映象,應該回在qt安裝上遇到問題,感覺按照LabelImg的官網的指引,應該是能安裝成功的,以後有時間再驗證一下。

 2、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跑起來的,

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窗口出現了

四、參考文章