---
# System prepended metadata

title: YOLO 深度學習實務應用 (Part 2)
tags: [edu, sju]

---

###### tags `edu` `sju`
> 最後更新 [name=Jed Hung - 2019/10/31]
###### 本頁連結 - https://hackmd.io/@jed/B1oO8fdqH
# YOLO 深度學習實務應用 (Part 2)

## Step 1. Server node
at Raspberry Pi 3
```
git clone https://github.com/burningion/poor-mans-deep-learning-camera
cd poor-mans-deep-learning-camera
cd Camera-Server
python app.py
```

Before continue, get your ip address at Raspberry Pi side first
```
ifconfig eth0
```
if you use Wi-Fi
```
ifconfig wlan0
```
## Step 2. Client node
at Computer or Notebook
> cat /proc/cpuinfo | grep "model name"
```=
model name	: Intel(R) Core(TM) i3-8109U CPU @ 3.00GHz
model name	: Intel(R) Core(TM) i3-8109U CPU @ 3.00GHz
model name	: Intel(R) Core(TM) i3-8109U CPU @ 3.00GHz
model name	: Intel(R) Core(TM) i3-8109U CPU @ 3.00GHz
```
> free -h
```=
              total        used        free      shared  buff/cache   available
Mem:           7.7G        1.5G        3.4G        414M        2.8G        5.5G
Swap:          2.0G          0B        2.0G
```
> cat /etc/os-release 
```=
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
```
### Install YOLO v3
```
sudo apt update
sudo apt install python-opencv
sudo apt install libopencv-dev
sudo apt install git
sudo apt install python-pip
pip install requests
pip2 install Pillow
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
```
### Get weights
```
wget https://pjreddie.com/media/files/yolov3-tiny.weights
```
### Get images
Test `http://<IP address for your Raspberry Pi>:5000/image.jpg` first
> vim rpi_video.py
```python=
from subprocess import Popen, PIPE
import threading
from io import BytesIO
from time import sleep
import os, fcntl
import cv2
import requests
from PIL import Image
import numpy as np

#spawn darknet process
yolo_proc = Popen(["./darknet",
                   "detect",
                   "./cfg/yolov3-tiny.cfg",
                   "./yolov3-tiny.weights",
                   "-thresh","0.1"],
                   stdin = PIPE, stdout = PIPE)

fcntl.fcntl(yolo_proc.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)

while True:
    try:
        stdout = yolo_proc.stdout.read()
        if 'Enter Image Path' in stdout:
            try:
               im = cv2.imread('predictions.jpg')
               print(im.shape)
               cv2.imshow('yolov3-tiny',im)
               key = cv2.waitKey(1)
            except Exception:
               pass
            r = requests.get('http://10.118.126.240:5000/image.jpg') # replace with your ip address
            curr_img = Image.open(BytesIO(r.content))
            #curr_img_cv2 = cv2.cvtColor(np.array(curr_img), cv2.COLOR_RGB2BGR)
            curr_img.save('frame.jpg')
            yolo_proc.stdin.write('frame.jpg\n')
        if len(stdout.strip())>0:
            print('get %s' % stdout)
    except Exception:
        pass
```
```
sudo python ./rpi_video.py
```