2026-04-07 14:37:04 +08:00

174 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 專案健檢報告 — KNEO Academy
## 基本資訊
- **專案名稱**KNEO AcademyInnovedus AI Playground
- **版本**v2.0
- **程式碼來源**:本地路徑 `C:\Users\sungs\Documents\abin\KNEO-Academy`
- **主要語言**Python 3.12
- **最後更新時間**2026-04-04
- **Git branch**main
---
## 技術堆疊
| 層級 | 技術 | 版本 |
|------|------|------|
| GUI 框架 | PyQt5 | 5.15.11 |
| 電腦視覺 | OpenCV | 4.10.0.84 |
| AI 推論 SDK | KneronPLUS | 3.1.2 |
| AI 推論(通用) | PyTorch, TensorFlow, ONNX Runtime | 最新 |
| 音訊 | librosa, sounddevice | — |
| 打包 | PyInstaller | 6.12.0 |
| 加密 | PyArmor | — |
---
## 專案結構概覽
```
KNEO-Academy/
├── main.py # Entry pointAppControllerQStackedWidget 管理頁面)
├── src/
│ ├── config.py # 全域常數、路徑、顏色、DeviceType enum
│ ├── controllers/
│ │ ├── device_controller.py # Kneron dongle 掃描、連接、韌體上傳
│ │ ├── inference_controller.py # 推論工具選擇、model 載入、queue 管理
│ │ └── media_controller.py # 相機、影片捕捉
│ ├── models/
│ │ ├── inference_worker.py # 標準推論 worker thread動態載入 script.py
│ │ ├── custom_inference_worker.py # 自定義模型推論 workerYOLOv5 後處理)
│ │ └── video_thread.py # 相機影像擷取 thread
│ ├── views/
│ │ ├── mainWindows.py # 主應用視窗(推論結果顯示、工具選擇)
│ │ ├── selection_screen.py # 首頁選擇畫面
│ │ ├── login_screen.py # 工具程式登入頁
│ │ └── utilities_screen.py # 裝置管理工具頁
│ ├── services/
│ │ ├── device_service.py # 掃描 Kneron 裝置(含 timeout 機制)
│ │ ├── file_service.py # 檔案上傳服務
│ │ └── script_service.py # 推論腳本執行服務
│ └── utils/
│ ├── config_utils.py # 設定工具
│ └── image_utils.py # QImage ↔ NumPy 轉換
├── uxui/ # 靜態 UI 資源PNG、SVG、GIF
├── dist/
│ └── test.iss # Inno Setup 安裝包設定
├── flowchart.md # 裝置連接流程設計圖Mermaid
└── env.txt # pip 套件清單
```
**資料目錄(執行期,存在 %LOCALAPPDATA%/Kneron_Academy/**
```
uploads/ # 使用者上傳的圖片/影片
utils/
config.json # 全域 plugin 設定
{mode}/{model}/
script.py # 推論腳本
config.json # 模型設定
*.nef # 模型檔
firmware/
{device}/
fw_scpu.bin
fw_ncpu.bin
```
---
## 應用頁面流程
```
SelectionScreen首頁
├── → LoginScreen → UtilitiesScreen裝置管理工具需登入
└── → MainWindowDemo AI App直接進入
```
---
## 主要功能清單
| 功能 | 描述 | 狀態 |
|------|------|------|
| 頁面路由 | QStackedWidget 管理多頁面切換 | ✅ 完成 |
| 裝置掃描 | 掃描連接的 Kneron dongleKL520 / KL720 | ✅ 完成 |
| 裝置連接 | 連接裝置並上傳 firmware | ✅ 完成 |
| 裝置中斷 | 安全中斷連接 | ✅ 完成 |
| Video 推論 | 相機即時推論QThread + queue | ✅ 完成 |
| Image 推論 | 上傳圖片單次推論 | ✅ 完成 |
| 動態 Script 載入 | 從 utils/ 目錄動態 import script.py | ✅ 完成 |
| 自定義模型推論 | 上傳 .nef + firmware使用 YOLOv5 後處理 | ✅ 完成 |
| Plugin 系統 | 透過 config.json 定義 mode/model 結構 | ✅ 完成 |
| APP 打包 | PyInstaller 打包 + Inno Setup 安裝包 | ✅ 有設定 |
| 登入驗證 | Server 驗證(詳細流程見 flowchart.md | 🔄 設計中(有 flowchart |
| Dongle 授權管理 | KN 號碼查詢、授權卡驗證 | 🔄 設計中(有 flowchart |
---
## 文件完整度
| 文件類型 | 狀態 | 位置 | 備註 |
|---------|------|------|------|
| README | ✅ 有 | `README.md` | 完整,含安裝、架構、功能說明 |
| 流程圖 | ⚠️ 部分 | `flowchart.md` | 僅有裝置連接/授權流程,缺主 App 完整流程 |
| PRD / 需求文件 | ❌ 無 | — | 無正式產品需求文件 |
| 架構設計文件 | ❌ 無 | — | 無正式架構文件 |
| API 文件 | ❌ 無 | — | 無script.py 介面未有規格文件) |
| 設計稿 | ⚠️ 部分 | `uxui/` | 有 UI 資源圖,無 Wireframe 或設計規格 |
| TDD技術設計文件 | ❌ 無 | — | 無 |
| 測試文件 | ❌ 無 | — | README 提到 tests/ 目錄,但實際不存在 |
| 部署文件 | ⚠️ 部分 | `dist/test.iss` | 有 Inno Setup 設定,無完整部署指南 |
---
## 程式碼健康度
| 項目 | 狀態 | 備註 |
|------|------|------|
| 測試覆蓋率 | ❌ 無測試 | tests/ 目錄不存在 |
| 程式碼組織 | ✅ 良好 | MVC 架構清晰,職責分明 |
| Docstring 完整度 | ✅ 良好 | 主要類別和方法均有完整 docstring |
| 錯誤處理 | ⚠️ 部分 | 多處使用 try/except但部分只 print 不處理 |
| Thread 安全 | ⚠️ 待確認 | Queue 管理有,但 UI 更新路徑需確認 |
| 技術債 | ⚠️ 少量 | debug print 語句散落在 controller 中 |
---
## 基礎設施
| 項目 | 狀態 | 備註 |
|------|------|------|
| Docker | ❌ 無 | 桌面應用,暫不需要 |
| CI/CD | ❌ 無 | 無自動化建置/測試流程 |
| 打包 | ✅ 有 | PyInstaller + Inno Setup |
| 加密 | ⚠️ 計畫中 | PyArmor 已列在計畫中 |
| 監控 | ❌ 無 | 無 |
---
## 目前正在修改的檔案git status
以下檔案有未提交的修改:
- `src/controllers/device_controller.py`
- `src/controllers/inference_controller.py`
- `src/models/custom_inference_worker.py`
- `src/models/video_thread.py`
- `src/services/device_service.py`
- `src/views/utilities_screen.py`
---
## 缺失項目摘要
**高優先:**
- PRD / 需求文件(產品功能邊界不清晰)
- 測試(完全沒有自動化測試)
**中優先:**
- 架構文件 / TDDplugin script.py 介面規格未文件化)
- 完整流程圖(主 App 推論流程尚未有流程圖)
**低優先:**
- 部署完整指南
- 設計規格文件Wireframe + Design Tokens