---
# System prepended metadata

title: Third Eye Demo 步驟
tags: [third eye, hscc]

---

# Third Eye Demo 步驟

###### tags: `hscc` `third eye`

## Basic

- file location
    - `Download/celinechiu/darknet`
    - `Home/jee-oxygen/eclipse`
- ipcam address
    - MAC `00:18:fb:41:0c:b7`
    - IP `192.168.1.127`
- raspberry pi
    - IP `192.168.1.113
    - MAC `B8:27:EB:91:87:D5`
    - PASSWORD `raspberry`
- java version
    - `javac -version`
        - javac 1.8.0_181
    - `java -version`
        - openjdk version "1.8.0_181"
- tomcate version
    - `apache-tomcat-7.0.79`
    - `usr/local/tomcat/apache-tomcat-7.0.79`
- python module
    - numba
        - `pip install numba`
    - matplotlib
        - `pip install matplotlib==2.2.3`
        - 預設安裝的 3.0.0 不支援 python 2.X
    - _tkinter
        - `sudo apt-get install python-tk`
    - skimage
        - 要先升級 pip 版本才能成功安裝
        - `pip install --upgrade pip`
        - `sudo pip install scikit-image==0.13.1`
    - sklearn
        - `sudo pip install sklearn`
    - filterpy
        - `sudo pip install filterpy`
    - cffi
        - `sudo pip install cffi`

### 執行 darknet 遇到 ImportError: No module named sort

修改 `.bashrc`

```
sudo nano ~/.bashrc
```

加入

```
export PYTHONPATH=$PYTHONPATH:/home/hscc/nctu/HSCC/the-third-eye/darknet/src
```

Reload

```
source ~/.bashrc
```


### 升級 pip 遇到問題不能查看版本和安裝套件

[pip2安装matplotlib, scikit-image](https://blog.csdn.net/math_computer/article/details/83211380)

修改 `/usr/bin/pip` 

```
sudo nano /usr/bin/pip
```

將 `pip` 改成 `pip._internal`

```
from pip import main
from pip._internal import main
```



## Step

- 修改 `indoorMap.java` 中的 59-70 行的 beacon 位置
- 執行 `Hello.java`
    - 如果發生 port 8080 占用
        - `sudo netstat -anp | grep 8080`
        - 將顯示的 process kill
    - 成功後會出現 `HTTP Status 404` 的頁面
        - 如果沒出現，關掉 eclipse 終端的 Server Tab 重新執行
- SSH 連進 raspberry pi 執行 `PositionClient2.py`
    - `sudo pyton PositionClinet2.py`
    - 執行前先去看裡面的 IP 位置是否正確
        - line: 24 `serverAddr = "http://192.168.1.105:8080/"`
    - 如果 Beacon 有任何一顆沒電，都有可能發生錯誤
- 修改 Beacon 的相對位置
    - `image.c` (line: 454)
    - ```
        CvPoint2D32f  src_coordinate[4] = {cvPoint2D32f(58, 87), cvPoint2D32f(577, 68), cvPoint2D32f(610, 280), cvPoint2D32f(25, 297)};
        ```
    - 分別對應
    - |1(右上)|3(右下)|6(左下)|4(左上)|
        |:-:|:-:|:-:|:-:|
        |(100, 120)|(100, 1240)|(540, 1240)|(540, 120)|
    - ```
        CvPoint2D32f  dst_coordinate[4] = {cvPoint2D32f(100, 120),cvPoint2D32f(100, 1240),cvPoint2D32f(540, 1240),cvPoint2D32f(540, 120)};
        ```

- 進到 `Download/celinechiu/darknet` 執行 darknet
    - `./darknet detector demo cfg/nctu_delta.data  cfg/nctu_delta.cfg weights/nctu_delta_200.weights rtsp://192.168.1.127/medias1 -thresh 0.3`
    - `./darknet detector demo cfg/nctu_delta.data  cfg/nctu_delta.cfg weights/nctu_delta_200.weights rtsp://admin:admin@140.113.86.137:554/medias1 -thresh 0.3`

## 修改 yolo ID

fusion.c (line: 176, 178)

```
sprinf(result, "ID:01 hung")

sprinf(result, "ID:02 chiu")
```

資料夾 tag_pic 中的 tag_pic.txt 修改圖片的名稱

```
unknown.jpg
ID:01 hung
ID:02 chiu
valuable object.JPG
```

## 建立 Pi

- 需要檔案
    - PositionClient2.py
    - blescan.py

- 修改 wifi config

```
network={
        ssid="OpenWrt"
        psk="1234567890"
        key_mgmt=WPA-PSK
}
```

- 在 boot 目錄下新增空白文件，命名 `ssh`，之後可以靠 `pi@192.168.1.180` 控制

```
sudo apt-get install python-bluez # BLE 套件
sudo apt-get install i2c-tools # I2C 套件
```

- 確認 I2C 位置，查看是否有偵測到 `GY-521` 和 `GY-271`
    - 1e `GY-271`
    - 68 `GY-521`

```
sudo ls -al /dev/*i2c*
sudo i2cdetect -y 1
```

```
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
```

- 修改 ID 和 Server IP
    - 在 PositionClient2.py 中

```
ID = "ID=001"
serverAddr = "http://192.168.1.118:8080/"
```

## 加入 Streaming

demo.c (line: 242)

```
//show_image(disp, "Demo");
send_mjpeg(disp, 8090, 200, 95);
```

demo.c (line: 277)

這個好像都不會被 call 到，還是拿掉比較保險

```
//show_image(disp, "Demo");
```

mjpeg_streaming.h (line: 23)

原本是使用 `darknet.h` 但是因為 third-eye 裡面都把東西移到 `image.h` 裡面

```
#include "darknet.h"
```

一定要加 `extern "C"`，不然 cpp 會 call 不到原本 c 裡面定義的 function (not reference to ...)

```
extern "C" {
    #include "image.h"
}
```

Makefile (line: 57)

`OBJ= ` 後面加上 `mjpeg_streaming.o`

```
OBJ=mjpeg_streaming.o
```

Makefile (line: 68-74)

將 `gcc` 編譯的地方改成 `g++`

`CXX` 在 Makefile (line: 20) 已經有宣告了 `CXX=g++`

```
$(EXEC): $(OBJS)
	#$(CC) $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS)
	$(CXX) $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS)

$(OBJDIR)%.o: %.cpp  $(DEPS)
	#$(CC) $(COMMON) $(CFLAGS) -c $< -o $@ 
	$(CXX) $(COMMON) $(CFLAGS) -c $< -o $@ 
```

### 遇到的錯誤

如果在 `demo.c` 中加入 `#include "mjpeg_streaming.h"` 會發生錯誤

不加的話 `demo.c` 一樣可以讀到 `send_mjpeg` (???)

```
In file included from ./src/demo.c:18:0:
./src/mjpeg_streaming.h:23:8: error: expected identifier or ‘(’ before string constant
 extern "C" {
        ^
compilation terminated due to -Wfatal-errors.
Makefile:77: recipe for target 'obj/demo.o' failed
make: *** [obj/demo.o] Error 1
```


## Yolo 的結果

```
draw_box_width(im, left, top, right, bot, width, red, green, blue);
```
```
void draw_box_width(image a, int x1, int y1, int x2, int y2, int w, float r, float g, float b)
```




## Move to Docker

### Install Java

install

```
sudo apt-get update
sudo apt-get install default-jre
sudo apt-get install default-jdk
```

check OpenJDK version

```
$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
```

check JRE version

```
$ javac -version
javac 1.8.0_181
```

### Install TomCat 7

https://tomcat.apache.org/download-70.cgi
https://www.cnblogs.com/EasonJim/p/7202844.html

```
wget http://apache.stu.edu.tw/tomcat/tomcat-7/v7.0.91/bin/apache-tomcat-7.0.91.tar.gz
sudo cp apache-tomcat-7.0.91.tar.gz /opt/
cd /opt/
sudo tar zxvf apache-tomcat-8.5.16.tar.gz
cd apache-tomcat-7.0.91/
sudo /opt/apache-tomcat-7.0.91/bin/startup.sh
```

訪問 `127.0.0.1:8080`

```
sudo /opt/apache-tomcat-7.0.91/bin/shutdown.sh
```