227 lines
6.5 KiB
Markdown
227 lines
6.5 KiB
Markdown
# KL630 Host Stream Firmware
|
||
|
||
即時影像語義分割系統,運行於 Kneron KL630 (Cortex-A7, uClibc)。
|
||
透過 IMX662 DOL-HDR 雙曝光攝影機進行 STDC 語義分割,並將結果以 RTSP 串流或 HDMI 輸出。
|
||
|
||
**技術細節 → [`docs/technical_report.md`](docs/technical_report.md)**
|
||
|
||
---
|
||
|
||
## 目錄結構
|
||
|
||
```
|
||
kl630_build/
|
||
├── web_serve.py # Web 控制台(主要使用)
|
||
├── build_and_serve.py # CLI 版本(不需要瀏覽器)
|
||
├── compile.sh # Docker 內 ARM 交叉編譯腳本
|
||
├── Dockerfile # kl630-dev image 定義
|
||
├── requirements.txt # Python 套件清單
|
||
│
|
||
├── src/
|
||
│ ├── host_stream/ # 主程式(初始化、推論迴圈、結果處理)
|
||
│ ├── app_flow/ # VMF pipeline 控制
|
||
│ ├── pre_post/ # YOLOv5 前後處理
|
||
│ └── stdc/ # STDC 語義分割後處理
|
||
│
|
||
├── include/
|
||
│ ├── stdc/ # stdc_post_process.h(分析結果結構)
|
||
│ └── fake/ # SDK 缺少時的 stub headers
|
||
│
|
||
├── ini/
|
||
│ └── host_stream.ini # 執行期設定(model、stream、ISP、FEC 參數)
|
||
│
|
||
│
|
||
├── lib/ # 裝置端 .so 函式庫(VMF SDK)
|
||
├── docs/
|
||
│ └── technical_report.md # 完整技術文件
|
||
└── build/ # 編譯輸出(由 compile.sh 產生)
|
||
```
|
||
|
||
---
|
||
|
||
## 快速開始
|
||
|
||
### 前置條件
|
||
|
||
- [Docker Desktop](https://www.docker.com/products/docker-desktop/) 已安裝並執行中
|
||
- Python 3.8+
|
||
|
||
### 安裝
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
| 套件 | 用途 |
|
||
|------|------|
|
||
| `flask` | Web 控制台 + HTTP file server |
|
||
| `opencv-python` | RTSP 串流預覽(內建 FFmpeg,無需另外安裝)|
|
||
|
||
### 啟動
|
||
|
||
```bash
|
||
python web_serve.py
|
||
```
|
||
|
||
瀏覽器開啟 `http://localhost:8080/`
|
||
|
||
---
|
||
|
||
## 新機器首次設定 SOP
|
||
|
||
全新 KL630 裝置依序執行以下步驟:
|
||
|
||
### Step 1 — Compile
|
||
|
||
在 Web 控制台按 **Compile**。
|
||
- 自動建立 Docker image(若不存在)
|
||
- 交叉編譯 ARM binary
|
||
- 複製 binary / INI / 腳本到 `build/`
|
||
|
||
> 若 binary 已是最新版本,可跳過此步驟直接從 Step 2 開始。
|
||
|
||
### Step 2 — 設定 Output Mode
|
||
|
||
在 **INI Settings** 面板選擇輸出模式(預設 RTSP):
|
||
|
||
| 組合 | RTSP | HDMI | 啟動腳本 |
|
||
|------|------|------|---------|
|
||
| RTSP 串流 | ON | OFF | `demo_rtsp.sh` |
|
||
| HDMI 顯示 | OFF | ON | `demo_hdmi.sh` |
|
||
| RTSP + HDMI 同時 | ON | ON | `demo_rtsp_hdmi.sh`(INI voc_enable=1)|
|
||
| 純推論(無輸出) | OFF | OFF | 直接啟動 binary |
|
||
|
||
### Step 3 — Deploy to KL630
|
||
|
||
按 **Deploy to KL630**,自動透過 Telnet 完成:
|
||
1. 停止舊 firmware
|
||
2. 下載 binary、INI、NEF 模型
|
||
3. 下載 `demo_rtsp.sh`、`demo_hdmi.sh`、`demo_rtsp_hdmi.sh`
|
||
4. 設定 VOC 輸出模式
|
||
5. 啟動 firmware
|
||
|
||
### Step 4 — First-time ISP Setup
|
||
|
||
按 **First-time ISP Setup**。
|
||
寫入 DOL-HDR 所需的 flash 參數(`dwStatisticsSrcType=2`、`bGTREnable=1`),
|
||
**只需執行一次**,設定永久保留在 flash,重新 Deploy 不會被覆蓋。
|
||
|
||
> 跳過此步驟影像會過暗或曝光不正確。
|
||
|
||
### Step 5 — 魚眼鏡頭校正(FEC)
|
||
|
||
在 **INI Settings** 面板設定 Fish-Eye Correction:
|
||
|
||
| 參數 | 推薦設定 | 說明 |
|
||
|------|---------|------|
|
||
| FEC | ON | 開啟魚眼校正 |
|
||
| **Mode** | **4 — 180° Two Direction** | 天花板魚眼鏡頭推薦模式,同時展開水平與垂直方向 |
|
||
| Install Type | 0 — Ceiling | 天花板安裝 |
|
||
| EIS | 視需求 | 電子防手震 |
|
||
|
||
按 **Apply to Device + Restart** 套用並重啟 firmware。
|
||
|
||
|
||
---
|
||
|
||
## Web 控制台功能說明
|
||
|
||
### Network Config
|
||
設定 **Host IP**(這台 PC)、**KL630 IP**、**HTTP Port**、**Docker Image**。
|
||
按 Save 後自動更新 `deploy.sh` 的 `HOST_URL`。
|
||
|
||
### HTTP Server Files
|
||
列出 `build/` 目錄下所有可下載的檔案,以及裝置端手動部署指令:
|
||
```sh
|
||
wget http://<host_ip>:8080/deploy.sh -O /tmp/deploy.sh && sh /tmp/deploy.sh
|
||
```
|
||
|
||
### RTSP Stream Preview
|
||
直接在網頁預覽 KL630 串流,不需要開 VLC。
|
||
按 **▶ Start Stream** 即可,連線失敗時 6 秒內回報錯誤。
|
||
|
||
---
|
||
|
||
## Actions
|
||
|
||
| 按鈕 | 說明 |
|
||
|------|------|
|
||
| **Compile** | Docker 交叉編譯 ARM binary,複製到 `build/` |
|
||
| **Deploy to KL630** | Telnet 部署 binary / INI / NEF / 腳本,依 Output Mode 啟動 firmware |
|
||
| **First-time ISP Setup** | 新機器一次性 ISP flash 設定(DOL-HDR 參數) |
|
||
| **Write Autostart** | 寫入開機自動啟動腳本 `/etc/init.d/S99firmware` |
|
||
|
||
---
|
||
|
||
## INI Settings
|
||
|
||
### Fish-Eye Correction (FEC)
|
||
|
||
| 參數 | 說明 |
|
||
|------|------|
|
||
| FEC ON/OFF | 開啟或關閉魚眼校正(`fec_mode = 0` 為關閉)|
|
||
| Mode 1 | Single Region |
|
||
| Mode 2 | 180° All Direction |
|
||
| Mode 3 | 180° One Direction |
|
||
| **Mode 4** | **180° Two Direction(推薦)** |
|
||
| Mode 5 | PT Mode |
|
||
| Install Type | Ceiling / Table / Wall(`initial_fec_app_type`)|
|
||
| EIS | 電子防手震(`eis_enable`)|
|
||
| DrawBox | H.264 burn-in 偵測框(`DrawBoxEnable`)|
|
||
|
||
### Output Mode
|
||
|
||
| 選項 | 說明 |
|
||
|------|------|
|
||
| RTSP | H.264 RTSP 串流輸出,由 `demo_rtsp.sh` 管理 |
|
||
| HDMI | VOC HDMI 顯示輸出,由 `demo_hdmi.sh` 管理 |
|
||
|
||
- **Save INI(disk only)** — 更新本地 `ini/host_stream.ini`,下次 Deploy 時推送至裝置
|
||
- **Apply to Device + Restart** — 立即 Telnet 更新裝置 INI 並重啟 firmware
|
||
|
||
### Model Settings
|
||
|
||
切換推論模型(NEF 檔)、ModelId、JobId,支援上傳新 NEF。
|
||
**Apply to Device + Restart** 會下載 NEF 到裝置並依目前 Output Mode 重啟。
|
||
|
||
---
|
||
|
||
## Terminal
|
||
|
||
Output Log 下方有命令輸入列,可直接在網頁對 KL630 下指令:
|
||
|
||
```sh
|
||
cat /tmp/fw.log # 查看 firmware 啟動 log
|
||
cat /tmp/rtsp_demo.log # 查看 RTSP demo log
|
||
ps | grep firmware # 確認 firmware 是否在執行
|
||
killall kp_firmware_host_stream
|
||
```
|
||
|
||
---
|
||
|
||
## CLI 版本(不需要瀏覽器)
|
||
|
||
```bash
|
||
python build_and_serve.py # 編譯 + 檢查 + 啟動 HTTP server
|
||
python build_and_serve.py --no-build # 跳過編譯,直接 serve
|
||
python build_and_serve.py --port 9090
|
||
```
|
||
|
||
---
|
||
|
||
## Firmware 執行結果(console log)
|
||
|
||
```
|
||
[STDC] frame=42 mov=1 diff=4.2 bunker=0.0% car=8.3% grass=0.0% greenery=12.1% person=0.0% pond=0.0% road=71.4% tree=8.2%
|
||
[STDC] ON ROAD
|
||
[STDC WARN] CAR 8.3%
|
||
```
|
||
|
||
---
|
||
|
||
## 詳細說明
|
||
|
||
IMX662 DOL-HDR 雙曝光設定、STDC 語義分割架構、新裝置部署 SOP、故障排查:
|
||
|
||
**[`docs/technical_report.md`](docs/technical_report.md)**
|