---
# System prepended metadata

title: yolo + opencv

---

# yolo + opencv
## 環境
- host machine: mac
- docker: docker desktop for mac
- docker image: adnrv/opencv
- x window: [XQuartz](https://www.xquartz.org)
## 下載程式與檔案
```
mkdir yolo
cd yolo
git clone https://github.com/pjreddie/darknet darknet_joe
git clone https://github.com/AlexeyAB/darknet darknet_alexey

mkdir weights
wget -P weights https://pjreddie.com/media/files/darknet.weights
wget -P weights https://pjreddie.com/media/files/yolov3-tiny.weights
```
## 啟動x window
- 偏好設定->安全性，開啟「允許從網路用戶端連線」：![](https://i.imgur.com/PooMxZ4.jpg)
- 執行XQuartz
- 允許指定host連入：```xhost + 192.168.9.144```。請換成自己host machine的ip
## 建立與啟動容器
- 從dockerhub下載image，約858MB，需要一點時間
    ```
    docker pull adnrv/opencv
    ```
- 啟動容器，記得視實際情況修改ip address及掛載的目錄路徑。啟動完成後，就會進入容器內的console上。
    ```
    docker run --name yolo-opencv -it -e DISPLAY=192.168.9.144:0 -v /tmp/.X11-unix:/tmp/.X11-unix -v /Users/huzhongwei/Development/python/yolo:/root/yolo adnrv/opencv bash
    ```
- 由於那個image用的ubuntu是19.04，不是LTS，所以在更新與安裝套件時會發生套件清單Not Found的問題。先備份原本的/etc/apt/sources.list，然後編輯它（可以先cp到host machine上做編輯，然後再cp回容器內），把「archive.ubuntu.com」、「security.ubuntu.com」都置換成「old-releases.ubuntu.com」
- 安裝vim，它是最常用的文字編輯器
    ```
    apt-get update
    apt-get install vim
    ```
## 編繹darknet並進行第一個運作測試
由於啟動容器時已經用mount volume的方式把下載回來的程式與檔案掛載到容器內的/root/yolo目錄上了，所以在容器內可以直接使用它們。
- 建立第一個專案
    ```
    cd /root/yolo
    cp -r darknet_alexey 20200513
    ```
- 修改Makefile，GPU、CUDNN、AVX、OPENMP、LIBSO都維持原值0，只把opencv改成1
    ```
    cd 20200513/
    vi Makefile 
    ```
- 編繹darknet：```make -j4```
- 執行第一個物件偵測試驗
    ```
    ./darknet detector test cfg/coco.data cfg/yolov3-tiny.cfg ../weights/yolov3-tiny.weights data/dog.jpg -thresh 0.5
    ```
  偵測結果就會透過x window顯示在host machine上：![](https://i.imgur.com/jE6R3Hj.jpg)
  