mrfakename's picture
Fix card metadata: task, tags, cleanup
e8d799a verified
|
Raw History Blame Contribute Delete
20 kB
---
license: mit
language:
- zh
pipeline_tag: object-detection
tags:
- yolo
- image-segmentation
- assistive-technology
- accessibility
- navigation
- visually-impaired
- smart-glasses
---
> Mirror of [archifancy/AIGlasses_for_navigation](https://www.modelscope.cn/models/archifancy/AIGlasses_for_navigation) from ModelScope. All credit to the original authors. Not an official release from them. License unchanged (mit).
# AI ๆ™บ่ƒฝ็›ฒไบบ็œผ้•œ็ณป็ปŸ ๐Ÿค–๐Ÿ‘“
<img width="2481" height="1708" alt="1" src="https://github.com/user-attachments/assets/e8dec4a6-8fa6-4d94-bd66-4e9864b67daf" />
<img width="2480" height="1708" alt="2" src="https://github.com/user-attachments/assets/bc7d1aac-a9e9-4ef8-9d67-224708d0c9fd" />
<img width="2481" height="1708" alt="4" src="https://github.com/user-attachments/assets/6dd19750-57af-4560-a007-9a7059956b53" />
<div align="center">
ไธ€ไธช้ขๅ‘่ง†้šœไบบๅฃซ็š„ๆ™บ่ƒฝๅฏผ่ˆชไธŽ่พ…ๅŠฉ็ณป็ปŸ๏ผŒ้›†ๆˆไบ†็›ฒ้“ๅฏผ่ˆชใ€่ฟ‡้ฉฌ่ทฏ่พ…ๅŠฉใ€็‰ฉๅ“่ฏ†ๅˆซใ€ๅฎžๆ—ถ่ฏญ้Ÿณไบคไบ’็ญ‰ๅŠŸ่ƒฝใ€‚ ๆœฌ้กน็›ฎไป…ไธบไบคๆตๅญฆไน ไฝฟ็”จ๏ผŒ่ฏทๅ‹ฟ็›ดๆŽฅ็ป™่ง†้šœไบบ็พคไฝฟ็”จใ€‚
ไปฃ็ ๅœจ https://github.com/AI-FanGe/OpenAIglasses_for_Navigation.git
## โœจ ๅŠŸ่ƒฝ็‰นๆ€ง
### ๐Ÿšถ ็›ฒ้“ๅฏผ่ˆช็ณป็ปŸ
- **ๅฎžๆ—ถ็›ฒ้“ๆฃ€ๆต‹**๏ผšๅŸบไบŽ YOLO ๅˆ†ๅ‰ฒๆจกๅž‹ๅฎžๆ—ถ่ฏ†ๅˆซ็›ฒ้“
- **ๆ™บ่ƒฝ่ฏญ้Ÿณๅผ•ๅฏผ**๏ผšๆไพ›็ฒพๅ‡†็š„ๆ–นๅ‘ๆŒ‡ๅผ•๏ผˆๅทฆ่ฝฌใ€ๅณ่ฝฌใ€็›ด่กŒ็ญ‰๏ผ‰
- **้šœ็ข็‰ฉๆฃ€ๆต‹ไธŽ้ฟ้šœ**๏ผš่‡ชๅŠจ่ฏ†ๅˆซๅ‰ๆ–น้šœ็ข็‰ฉๅนถ่ง„ๅˆ’้ฟ้šœ่ทฏ็บฟ
- **่ฝฌๅผฏๆฃ€ๆต‹**๏ผš่‡ชๅŠจ่ฏ†ๅˆซๆ€ฅ่ฝฌๅผฏๅนถๆๅ‰ๆ้†’
- **ๅ…‰ๆต็จณๅฎš**๏ผšไฝฟ็”จ Lucas-Kanade ๅ…‰ๆต็ฎ—ๆณ•็จณๅฎšๆŽฉ็ ๏ผŒๅ‡ๅฐ‘ๆŠ–ๅŠจ
### ๐Ÿšฆ ่ฟ‡้ฉฌ่ทฏ่พ…ๅŠฉ
- **ๆ–‘้ฉฌ็บฟ่ฏ†ๅˆซ**๏ผšๅฎžๆ—ถๆฃ€ๆต‹ๆ–‘้ฉฌ็บฟไฝ็ฝฎๅ’Œๆ–นๅ‘
- **็บข็ปฟ็ฏ่ฏ†ๅˆซ**๏ผšๅŸบไบŽ้ขœ่‰ฒๅ’Œๅฝข็Šถ็š„็บข็ปฟ็ฏ็Šถๆ€ๆฃ€ๆต‹
- **ๅฏน้ฝๅผ•ๅฏผ**๏ผšๅผ•ๅฏผ็”จๆˆทๅฏนๅ‡†ๆ–‘้ฉฌ็บฟไธญๅฟƒ
- **ๅฎ‰ๅ…จๆ้†’**๏ผš็ปฟ็ฏๆ—ถ่ฏญ้Ÿณๆ็คบๅฏไปฅ้€š่กŒ
### ๐Ÿ” ็‰ฉๅ“่ฏ†ๅˆซไธŽๆŸฅๆ‰พ
- **ๆ™บ่ƒฝ็‰ฉๅ“ๆœ็ดข**๏ผš่ฏญ้ŸณๆŒ‡ไปคๆŸฅๆ‰พ็‰ฉๅ“๏ผˆๅฆ‚"ๅธฎๆˆ‘ๆ‰พไธ€ไธ‹็บข็‰›"๏ผ‰
- **ๅฎžๆ—ถ็›ฎๆ ‡่ฟฝ่ธช**๏ผšไฝฟ็”จ YOLO-E ๅผ€ๆ”พ่ฏๆฑ‡ๆฃ€ๆต‹ + ByteTrack ่ฟฝ่ธช
- **ๆ‰‹้ƒจๅผ•ๅฏผ**๏ผš็ป“ๅˆ MediaPipe ๆ‰‹้ƒจๆฃ€ๆต‹๏ผŒๅผ•ๅฏผ็”จๆˆทๆ‰‹้ƒจ้ ่ฟ‘็‰ฉๅ“
- **ๆŠ“ๅ–ๆฃ€ๆต‹**๏ผšๆฃ€ๆต‹ๆ‰‹้ƒจๆกๆŒๅŠจไฝœ๏ผŒ็กฎ่ฎค็‰ฉๅ“ๅทฒๆ‹ฟๅˆฐ
- **ๅคšๆจกๆ€ๅ้ฆˆ**๏ผš่ง†่ง‰ๆ ‡ๆณจ + ่ฏญ้Ÿณๅผ•ๅฏผ + ๅฑ…ไธญๆ็คบ
### ๐ŸŽ™๏ธ ๅฎžๆ—ถ่ฏญ้Ÿณไบคไบ’
- **่ฏญ้Ÿณ่ฏ†ๅˆซ๏ผˆASR๏ผ‰**๏ผšๅŸบไบŽ้˜ฟ้‡Œไบ‘ DashScope Paraformer ๅฎžๆ—ถ่ฏญ้Ÿณ่ฏ†ๅˆซ
- **ๅคšๆจกๆ€ๅฏน่ฏ**๏ผšQwen-Omni-Turbo ๆ”ฏๆŒๅ›พๅƒ+ๆ–‡ๆœฌ่พ“ๅ…ฅ๏ผŒ่ฏญ้Ÿณ่พ“ๅ‡บ
- **ๆ™บ่ƒฝๆŒ‡ไปค่งฃๆž**๏ผš่‡ชๅŠจ่ฏ†ๅˆซๅฏผ่ˆชใ€ๆŸฅๆ‰พใ€ๅฏน่ฏ็ญ‰ไธๅŒ็ฑปๅž‹ๆŒ‡ไปค
- **ไธŠไธ‹ๆ–‡ๆ„Ÿ็Ÿฅ**๏ผšๅœจไธๅŒๆจกๅผไธ‹ๆ™บ่ƒฝ่ฟ‡ๆปคๆ— ๅ…ณๆŒ‡ไปค
### ๐Ÿ“น ่ง†้ข‘ไธŽ้Ÿณ้ข‘ๅค„็†
- **ๅฎžๆ—ถ่ง†้ข‘ๆต**๏ผšWebSocket ๆŽจๆต๏ผŒๆ”ฏๆŒๅคšๅฎขๆˆท็ซฏๅŒๆ—ถ่ง‚็œ‹
- **้Ÿณ่ง†้ข‘ๅŒๆญฅๅฝ•ๅˆถ**๏ผš่‡ชๅŠจไฟๅญ˜ๅธฆๆ—ถ้—ดๆˆณ็š„ๅฝ•ๅƒๅ’Œ้Ÿณ้ข‘ๆ–‡ไปถ
- **IMU ๆ•ฐๆฎ่žๅˆ**๏ผšๆŽฅๆ”ถ ESP32 ็š„ IMU ๆ•ฐๆฎ๏ผŒๆ”ฏๆŒๅงฟๆ€ไผฐ่ฎก
- **ๅคš่ทฏ้Ÿณ้ข‘ๆทท้Ÿณ**๏ผšๆ”ฏๆŒ็ณป็ปŸ่ฏญ้Ÿณใ€AI ๅ›žๅคใ€็Žฏๅขƒ้ŸณๅŒๆ—ถๆ’ญๆ”พ
### ๐ŸŽจ ๅฏ่ง†ๅŒ–ไธŽไบคไบ’
- **Web ๅฎžๆ—ถ็›‘ๆŽง**๏ผšๆต่งˆๅ™จ็ซฏๅฎžๆ—ถๆŸฅ็œ‹ๅค„็†ๅŽ็š„่ง†้ข‘ๆต
- **IMU 3D ๅฏ่ง†ๅŒ–**๏ผšThree.js ๅฎžๆ—ถๆธฒๆŸ“่ฎพๅค‡ๅงฟๆ€
- **็Šถๆ€้ขๆฟ**๏ผšๆ˜พ็คบๅฏผ่ˆช็Šถๆ€ใ€ๆฃ€ๆต‹ไฟกๆฏใ€FPS ็ญ‰
- **ไธญๆ–‡ๅ‹ๅฅฝ**๏ผšๆ‰€ๆœ‰็•Œ้ขๅ’Œ่ฏญ้Ÿณไฝฟ็”จไธญๆ–‡๏ผŒๆ”ฏๆŒ่‡ชๅฎšไน‰ๅญ—ไฝ“
## ๐Ÿ’ป ็ณป็ปŸ่ฆๆฑ‚
### ็กฌไปถ่ฆๆฑ‚
- **ๅผ€ๅ‘/ๆœๅŠกๅ™จ็ซฏ**๏ผš
- CPU: Intel i5 ๆˆ–ไปฅไธŠ๏ผˆๆŽจ่ i7/i9๏ผ‰
- GPU: NVIDIA GPU๏ผˆๆ”ฏๆŒ CUDA 11.8+๏ผŒๆŽจ่ RTX 3060 ๆˆ–ไปฅไธŠ๏ผ‰
- ๅ†…ๅญ˜: 8GB RAM๏ผˆๆŽจ่ 16GB๏ผ‰
- ๅญ˜ๅ‚จ: 10GB ๅฏ็”จ็ฉบ้—ด
- **ๅฎขๆˆท็ซฏ่ฎพๅค‡**๏ผˆๅฏ้€‰๏ผ‰๏ผš
- ESP32-CAM ๆˆ–ๅ…ถไป–ๆ”ฏๆŒ WebSocket ็š„ๆ‘„ๅƒๅคด
- ้บฆๅ…‹้ฃŽ๏ผˆ็”จไบŽ่ฏญ้Ÿณ่พ“ๅ…ฅ๏ผ‰
- ๆ‰ฌๅฃฐๅ™จ/่€ณๆœบ๏ผˆ็”จไบŽ่ฏญ้Ÿณ่พ“ๅ‡บ๏ผ‰
### ่ฝฏไปถ่ฆๆฑ‚
- **ๆ“ไฝœ็ณป็ปŸ**: Windows 10/11, Linux (Ubuntu 20.04+), macOS 10.15+
- **Python**: 3.9 - 3.11
- **CUDA**: 11.8 ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ๏ผˆGPU ๅŠ ้€Ÿๅฟ…้œ€๏ผ‰
- **ๆต่งˆๅ™จ**: Chrome 90+, Firefox 88+, Edge 90+๏ผˆ็”จไบŽ Web ็›‘ๆŽง๏ผ‰
### API ๅฏ†้’ฅ
- **้˜ฟ้‡Œไบ‘ DashScope API Key**๏ผˆๅฟ…้œ€๏ผ‰๏ผš
- ็”จไบŽ่ฏญ้Ÿณ่ฏ†ๅˆซ๏ผˆASR๏ผ‰ๅ’Œ Qwen-Omni ๅฏน่ฏ
- ็”ณ่ฏทๅœฐๅ€๏ผšhttps://dashscope.console.aliyun.com/
## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹
### 1. ๅ…‹้š†้กน็›ฎ
```bash
git clone https://github.com/yourusername/aiglass.git
cd aiglass/rebuild1002
```
### 2. ๅฎ‰่ฃ…ไพ่ต–
#### ๅˆ›ๅปบ่™šๆ‹Ÿ็Žฏๅขƒ๏ผˆๆŽจ่๏ผ‰
```bash
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
```
#### ๅฎ‰่ฃ… Python ๅŒ…
```bash
pip install -r requirements.txt
```
#### ๅฎ‰่ฃ… CUDA ๅ’Œ cuDNN๏ผˆGPU ๅŠ ้€Ÿ๏ผ‰
่ฏทๅ‚่€ƒ [NVIDIA CUDA Toolkit ๅฎ‰่ฃ…ๆŒ‡ๅ—](https://developer.nvidia.com/cuda-downloads)
### 3. ไธ‹่ฝฝๆจกๅž‹ๆ–‡ไปถ
ๅฐ†ไปฅไธ‹ๆจกๅž‹ๆ–‡ไปถๆ”พๅ…ฅ `model/` ็›ฎๅฝ•๏ผš
| ๆจกๅž‹ๆ–‡ไปถ | ็”จ้€” | ๅคงๅฐ | ไธ‹่ฝฝ้“พๆŽฅ |
|---------|------|------|---------|
| `yolo-seg.pt` | ็›ฒ้“ๅˆ†ๅ‰ฒ | ~50MB | [ๅพ…่กฅๅ……] |
| `yoloe-11l-seg.pt` | ๅผ€ๆ”พ่ฏๆฑ‡ๆฃ€ๆต‹ | ~80MB | [ๅพ…่กฅๅ……] |
| `shoppingbest5.pt` | ็‰ฉๅ“่ฏ†ๅˆซ | ~30MB | [ๅพ…่กฅๅ……] |
| `trafficlight.pt` | ็บข็ปฟ็ฏๆฃ€ๆต‹ | ~20MB | [ๅพ…่กฅๅ……] |
| `hand_landmarker.task` | ๆ‰‹้ƒจๆฃ€ๆต‹ | ~15MB | [MediaPipe Models](https://developers.google.com/mediapipe/solutions/vision/hand_landmarker#models) |
### 4. ้…็ฝฎ API ๅฏ†้’ฅ
ๅˆ›ๅปบ `.env` ๆ–‡ไปถ๏ผš
```bash
# .env
DASHSCOPE_API_KEY=your_api_key_here
```
ๆˆ–ๅœจไปฃ็ ไธญ็›ดๆŽฅไฟฎๆ”น๏ผˆไธๆŽจ่๏ผ‰๏ผš
```python
# app_main.py, line 50
API_KEY = "your_api_key_here"
```
### 5. ๅฏๅŠจ็ณป็ปŸ
```bash
python app_main.py
```
็ณป็ปŸๅฐ†ๅœจ `http://0.0.0.0:8081` ๅฏๅŠจ๏ผŒๆ‰“ๅผ€ๆต่งˆๅ™จ่ฎฟ้—ฎๅณๅฏ็œ‹ๅˆฐๅฎžๆ—ถ็›‘ๆŽง็•Œ้ขใ€‚
### 6. ่ฟžๆŽฅ่ฎพๅค‡๏ผˆๅฏ้€‰๏ผ‰
ๅฆ‚ๆžœไฝฟ็”จ ESP32-CAM๏ผŒ่ฏท๏ผš
1. ็ƒงๅฝ• `compile/compile.ino` ๅˆฐ ESP32
2. ไฟฎๆ”น WiFi ้…็ฝฎ๏ผŒ่ฟžๆŽฅๅˆฐๅŒไธ€็ฝ‘็ปœ
3. ESP32 ่‡ชๅŠจ่ฟžๆŽฅๅˆฐ WebSocket ็ซฏ็‚น
## ๐Ÿ—๏ธ ็ณป็ปŸๆžถๆž„
### ๆ•ดไฝ“ๆžถๆž„
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๅฎขๆˆท็ซฏๅฑ‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ ESP32-CAM โ”‚ โ”‚ ๆต่งˆๅ™จ โ”‚ โ”‚ ็งปๅŠจ็ซฏ โ”‚ โ”‚
โ”‚ โ”‚ (่ง†้ข‘/้Ÿณ้ข‘) โ”‚ โ”‚ (็›‘ๆŽง็•Œ้ข) โ”‚ โ”‚ (่ฏญ้ŸณๆŽงๅˆถ) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ WebSocket โ”‚ HTTP/WS โ”‚ WebSocket
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ FastAPI ไธปๆœๅŠก (app_main.py) โ”‚ โ”‚
โ”‚ โ”‚ - WebSocket ่ทฏ็”ฑ็ฎก็† โ”‚ โ”‚
โ”‚ โ”‚ - ้Ÿณ่ง†้ข‘ๆตๅˆ†ๅ‘ โ”‚ โ”‚
โ”‚ โ”‚ - ็Šถๆ€็ฎก็†ไธŽๅ่ฐƒ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ ASR ๆจกๅ— โ”‚ โ”‚ Omni ๅฏน่ฏ โ”‚ โ”‚ ้Ÿณ้ข‘ๆ’ญๆ”พ โ”‚ โ”‚
โ”‚ โ”‚ (asr_core) โ”‚ โ”‚(omni_client)โ”‚ โ”‚(audio_player)โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚
โ”‚ ๅบ”็”จๅฑ‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๅฏผ่ˆช็ปŸ้ข†ๅฑ‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ NavigationMaster (navigation_master.py) โ”‚ โ”‚
โ”‚ โ”‚ - ็Šถๆ€ๆœบ๏ผšIDLE/CHAT/BLINDPATH_NAV/ โ”‚ โ”‚
โ”‚ โ”‚ CROSSING/TRAFFIC_LIGHT/ITEM_SEARCH โ”‚ โ”‚
โ”‚ โ”‚ - ๆจกๅผๅˆ‡ๆขไธŽๅ่ฐƒ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ ็›ฒ้“ๅฏผ่ˆช โ”‚ โ”‚ ่ฟ‡้ฉฌ่ทฏๅฏผ่ˆช โ”‚ โ”‚ ็‰ฉๅ“ๆŸฅๆ‰พ โ”‚ โ”‚
โ”‚ โ”‚(blindpath) โ”‚ โ”‚ (crossstreet) โ”‚ โ”‚(yolomedia) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๆจกๅž‹ๆŽจ็†ๅฑ‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ YOLO ๅˆ†ๅ‰ฒ โ”‚ โ”‚ YOLO-E ๆฃ€ๆต‹ โ”‚ โ”‚ MediaPipe โ”‚ โ”‚
โ”‚ โ”‚ (็›ฒ้“/ๆ–‘้ฉฌ็บฟ) โ”‚ โ”‚ (ๅผ€ๆ”พ่ฏๆฑ‡) โ”‚ โ”‚ (ๆ‰‹้ƒจๆฃ€ๆต‹) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ ็บข็ปฟ็ฏๆฃ€ๆต‹ โ”‚ โ”‚ ๅ…‰ๆต็จณๅฎš โ”‚ โ”‚
โ”‚ โ”‚(HSV+YOLO) โ”‚ โ”‚(Lucas-Kanade)โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๅค–้ƒจๆœๅŠกๅฑ‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ ้˜ฟ้‡Œไบ‘ DashScope API โ”‚ โ”‚
โ”‚ โ”‚ - Paraformer ASR (ๅฎžๆ—ถ่ฏญ้Ÿณ่ฏ†ๅˆซ) โ”‚ โ”‚
โ”‚ โ”‚ - Qwen-Omni-Turbo (ๅคšๆจกๆ€ๅฏน่ฏ) โ”‚ โ”‚
โ”‚ โ”‚ - Qwen-Turbo (ๆ ‡็ญพๆๅ–) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
### ๆ ธๅฟƒๆจกๅ—่ฏดๆ˜Ž
| ๆจกๅ— | ๆ–‡ไปถ | ๅŠŸ่ƒฝ |
|------|------|------|
| **ไธปๅบ”็”จ** | `app_main.py` | FastAPI ๆœๅŠกใ€WebSocket ็ฎก็†ใ€็Šถๆ€ๅ่ฐƒ |
| **ๅฏผ่ˆช็ปŸ้ข†** | `navigation_master.py` | ็Šถๆ€ๆœบ็ฎก็†ใ€ๆจกๅผๅˆ‡ๆขใ€่ฏญ้Ÿณ่Š‚ๆต |
| **็›ฒ้“ๅฏผ่ˆช** | `workflow_blindpath.py` | ็›ฒ้“ๆฃ€ๆต‹ใ€้ฟ้šœใ€่ฝฌๅผฏๅผ•ๅฏผ |
| **่ฟ‡้ฉฌ่ทฏๅฏผ่ˆช** | `workflow_crossstreet.py` | ๆ–‘้ฉฌ็บฟๆฃ€ๆต‹ใ€็บข็ปฟ็ฏ่ฏ†ๅˆซใ€ๅฏน้ฝๅผ•ๅฏผ |
| **็‰ฉๅ“ๆŸฅๆ‰พ** | `yolomedia.py` | ็‰ฉๅ“ๆฃ€ๆต‹ใ€ๆ‰‹้ƒจๅผ•ๅฏผใ€ๆŠ“ๅ–็กฎ่ฎค |
| **่ฏญ้Ÿณ่ฏ†ๅˆซ** | `asr_core.py` | ๅฎžๆ—ถ ASRใ€VADใ€ๆŒ‡ไปค่งฃๆž |
| **่ฏญ้Ÿณๅˆๆˆ** | `omni_client.py` | Qwen-Omni ๆตๅผ่ฏญ้Ÿณ็”Ÿๆˆ |
| **้Ÿณ้ข‘ๆ’ญๆ”พ** | `audio_player.py` | ๅคš่ทฏๆทท้Ÿณใ€TTS ๆ’ญๆ”พใ€้Ÿณ้‡ๆŽงๅˆถ |
| **่ง†้ข‘ๅฝ•ๅˆถ** | `sync_recorder.py` | ้Ÿณ่ง†้ข‘ๅŒๆญฅๅฝ•ๅˆถ |
| **ๆกฅๆŽฅ IO** | `bridge_io.py` | ็บฟ็จ‹ๅฎ‰ๅ…จ็š„ๅธง็ผ“ๅ†ฒไธŽๅˆ†ๅ‘ |
## ๐Ÿ“– ไฝฟ็”จ่ฏดๆ˜Ž
### ่ฏญ้ŸณๆŒ‡ไปค
็ณป็ปŸๆ”ฏๆŒไปฅไธ‹่ฏญ้ŸณๆŒ‡ไปค๏ผˆ่ฏด่ฏๆ—ถๆ— ้œ€ๅ”ค้†’่ฏ๏ผ‰๏ผš
#### ๅฏผ่ˆชๆŽงๅˆถ
```
"ๅผ€ๅง‹ๅฏผ่ˆช" / "็›ฒ้“ๅฏผ่ˆช" โ†’ ๅฏๅŠจ็›ฒ้“ๅฏผ่ˆช
"ๅœๆญขๅฏผ่ˆช" / "็ป“ๆŸๅฏผ่ˆช" โ†’ ๅœๆญข็›ฒ้“ๅฏผ่ˆช
"ๅผ€ๅง‹่ฟ‡้ฉฌ่ทฏ" / "ๅธฎๆˆ‘่ฟ‡้ฉฌ่ทฏ" โ†’ ๅฏๅŠจ่ฟ‡้ฉฌ่ทฏๆจกๅผ
"่ฟ‡้ฉฌ่ทฏ็ป“ๆŸ" / "็ป“ๆŸ่ฟ‡้ฉฌ่ทฏ" โ†’ ๅœๆญข่ฟ‡้ฉฌ่ทฏๆจกๅผ
```
#### ็บข็ปฟ็ฏๆฃ€ๆต‹
```
"ๆฃ€ๆต‹็บข็ปฟ็ฏ" / "็œ‹็บข็ปฟ็ฏ" โ†’ ๅฏๅŠจ็บข็ปฟ็ฏๆฃ€ๆต‹
"ๅœๆญขๆฃ€ๆต‹" / "ๅœๆญข็บข็ปฟ็ฏ" โ†’ ๅœๆญขๆฃ€ๆต‹
```
#### ็‰ฉๅ“ๆŸฅๆ‰พ
```
"ๅธฎๆˆ‘ๆ‰พไธ€ไธ‹ [็‰ฉๅ“ๅ]" โ†’ ๅฏๅŠจ็‰ฉๅ“ๆœ็ดข
็คบไพ‹๏ผš
- "ๅธฎๆˆ‘ๆ‰พไธ€ไธ‹็บข็‰›"
- "ๆ‰พไธ€ไธ‹AD้’™ๅฅถ"
- "ๅธฎๆˆ‘ๆ‰พ็Ÿฟๆณ‰ๆฐด"
"ๆ‰พๅˆฐไบ†" / "ๆ‹ฟๅˆฐไบ†" โ†’ ็กฎ่ฎคๆ‰พๅˆฐ็‰ฉๅ“
```
#### ๆ™บ่ƒฝๅฏน่ฏ
```
"ๅธฎๆˆ‘็œ‹็œ‹่ฟ™ๆ˜ฏไป€ไนˆ" โ†’ ๆ‹็…ง่ฏ†ๅˆซ
"่ฟ™ไธชไธœ่ฅฟ่ƒฝๅƒๅ—" โ†’ ็‰ฉๅ“ๅ’จ่ฏข
ไปปไฝ•ๅ…ถไป–้—ฎ้ข˜ โ†’ AI ๅฏน่ฏ
```
### ๅฏผ่ˆช็Šถๆ€่ฏดๆ˜Ž
็ณป็ปŸๅŒ…ๅซไปฅไธ‹ไธป่ฆ็Šถๆ€๏ผˆ่‡ชๅŠจๅˆ‡ๆข๏ผ‰๏ผš
1. **IDLE** - ็ฉบ้—ฒ็Šถๆ€
- ็ญ‰ๅพ…็”จๆˆทๆŒ‡ไปค
- ๆ˜พ็คบๅŽŸๅง‹่ง†้ข‘ๆต
2. **CHAT** - ๅฏน่ฏๆจกๅผ
- ไธŽ AI ่ฟ›่กŒๅคšๆจกๆ€ๅฏน่ฏ
- ๆš‚ๅœๅฏผ่ˆชๅŠŸ่ƒฝ
3. **BLINDPATH_NAV** - ็›ฒ้“ๅฏผ่ˆช
- **ONBOARDING**: ไธŠ็›ฒ้“ๅผ•ๅฏผ
- ROTATION: ๆ—‹่ฝฌๅฏนๅ‡†็›ฒ้“
- TRANSLATION: ๅนณ็งป่‡ณ็›ฒ้“ไธญๅฟƒ
- **NAVIGATING**: ๆฒฟ็›ฒ้“่กŒ่ตฐ
- ๅฎžๆ—ถๆ–นๅ‘ไฟฎๆญฃ
- ้šœ็ข็‰ฉๆฃ€ๆต‹
- **MANEUVERING_TURN**: ่ฝฌๅผฏๅค„็†
- **AVOIDING_OBSTACLE**: ้ฟ้šœ
4. **CROSSING** - ่ฟ‡้ฉฌ่ทฏๆจกๅผ
- **SEEKING_CROSSWALK**: ๅฏปๆ‰พๆ–‘้ฉฌ็บฟ
- **WAIT_TRAFFIC_LIGHT**: ็ญ‰ๅพ…็ปฟ็ฏ
- **CROSSING**: ่ฟ‡้ฉฌ่ทฏไธญ
- **SEEKING_NEXT_BLINDPATH**: ๅฏปๆ‰พๅฏน้ข็›ฒ้“
5. **ITEM_SEARCH** - ็‰ฉๅ“ๆŸฅๆ‰พ
- ๅฎžๆ—ถๆฃ€ๆต‹็›ฎๆ ‡็‰ฉๅ“
- ๅผ•ๅฏผๆ‰‹้ƒจ้ ่ฟ‘
- ็กฎ่ฎคๆŠ“ๅ–
6. **TRAFFIC_LIGHT_DETECTION** - ็บข็ปฟ็ฏๆฃ€ๆต‹
- ๅฎžๆ—ถๆฃ€ๆต‹็บข็ปฟ็ฏ็Šถๆ€
- ่ฏญ้Ÿณๆ’ญๆŠฅ้ขœ่‰ฒๅ˜ๅŒ–
### Web ็›‘ๆŽง็•Œ้ข
ๆ‰“ๅผ€ๆต่งˆๅ™จ่ฎฟ้—ฎ `http://localhost:8081`๏ผŒๅฏไปฅ็œ‹ๅˆฐ๏ผš
- **ๅฎžๆ—ถ่ง†้ข‘ๆต**๏ผšๆ˜พ็คบๅค„็†ๅŽ็š„่ง†้ข‘๏ผŒๅŒ…ๆ‹ฌๅฏผ่ˆชๆ ‡ๆณจ
- **็Šถๆ€้ขๆฟ**๏ผšๅฝ“ๅ‰ๆจกๅผใ€ๆฃ€ๆต‹ไฟกๆฏใ€FPS
- **IMU ๅฏ่ง†ๅŒ–**๏ผš่ฎพๅค‡ๅงฟๆ€ 3D ๅฎžๆ—ถๆธฒๆŸ“
- **่ฏญ้Ÿณ่ฏ†ๅˆซ็ป“ๆžœ**๏ผšๆ˜พ็คบ่ฏ†ๅˆซ็š„ๆ–‡ๅญ—ๅ’Œ AI ๅ›žๅค
### WebSocket ็ซฏ็‚น
| ็ซฏ็‚น | ็”จ้€” | ๆ•ฐๆฎๆ ผๅผ |
|------|------|---------|
| `/ws/camera` | ESP32 ็›ธๆœบๆŽจๆต | Binary (JPEG) |
| `/ws/viewer` | ๆต่งˆๅ™จ่ฎข้˜…่ง†้ข‘ | Binary (JPEG) |
| `/ws_audio` | ESP32 ้Ÿณ้ข‘ไธŠไผ  | Binary (PCM16) |
| `/ws_ui` | UI ็Šถๆ€ๆŽจ้€ | JSON |
| `/ws` | IMU ๆ•ฐๆฎๆŽฅๆ”ถ | JSON |
| `/stream.wav` | ้Ÿณ้ข‘ไธ‹่ฝฝๆต | Binary (WAV) |
## โš™๏ธ ้…็ฝฎ่ฏดๆ˜Ž
### ็Žฏๅขƒๅ˜้‡
ๅˆ›ๅปบ `.env` ๆ–‡ไปถ้…็ฝฎไปฅไธ‹ๅ‚ๆ•ฐ๏ผš
```bash
# ้˜ฟ้‡Œไบ‘ API
DASHSCOPE_API_KEY=sk-xxxxx
# ๆจกๅž‹่ทฏๅพ„๏ผˆๅฏ้€‰๏ผŒไฝฟ็”จ้ป˜่ฎค่ทฏๅพ„ๅฏไธ้…็ฝฎ๏ผ‰
BLIND_PATH_MODEL=model/yolo-seg.pt
OBSTACLE_MODEL=model/yoloe-11l-seg.pt
YOLOE_MODEL_PATH=model/yoloe-11l-seg.pt
# ๅฏผ่ˆชๅ‚ๆ•ฐ
AIGLASS_MASK_MIN_AREA=1500 # ๆœ€ๅฐๆŽฉ็ ้ข็งฏ
AIGLASS_MASK_MORPH=3 # ๅฝขๆ€ๅญฆๆ ธๅคงๅฐ
AIGLASS_MASK_MISS_TTL=6 # ๆŽฉ็ ไธขๅคฑๅฎนๅฟๅธงๆ•ฐ
AIGLASS_PANEL_SCALE=0.65 # ๆ•ฐๆฎ้ขๆฟ็ผฉๆ”พ
# ้Ÿณ้ข‘้…็ฝฎ
TTS_INTERVAL_SEC=1.0 # ่ฏญ้Ÿณๆ’ญๆŠฅ้—ด้š”
ENABLE_TTS=true # ๅฏ็”จ่ฏญ้Ÿณๆ’ญๆŠฅ
```
### ไฟฎๆ”นๆจกๅž‹่ทฏๅพ„
ๅฆ‚ๆžœๆจกๅž‹ๆ–‡ไปถไธๅœจ้ป˜่ฎคไฝ็ฝฎ๏ผŒๅฏไปฅๅœจ็›ธๅบ”ๆ–‡ไปถไธญไฟฎๆ”น๏ผš
```python
# workflow_blindpath.py
seg_model_path = "your/custom/path/yolo-seg.pt"
# yolomedia.py
YOLO_MODEL_PATH = "your/custom/path/shoppingbest5.pt"
HAND_TASK_PATH = "your/custom/path/hand_landmarker.task"
```
### ่ฐƒๆ•ดๆ€ง่ƒฝๅ‚ๆ•ฐ
ๆ นๆฎ็กฌไปถๆ€ง่ƒฝ่ฐƒๆ•ด๏ผš
```python
# yolomedia.py
HAND_DOWNSCALE = 0.8 # ๆ‰‹้ƒจๆฃ€ๆต‹้™้‡‡ๆ ท๏ผˆ่ถŠๅฐ่ถŠๅฟซ๏ผŒ็ฒพๅบฆ้™ไฝŽ๏ผ‰
HAND_FPS_DIV = 1 # ๆ‰‹้ƒจๆฃ€ๆต‹ๆŠฝๅธง๏ผˆ2=้š”ๅธง๏ผŒ3=ๆฏ3ๅธง๏ผ‰
# workflow_blindpath.py
FEATURE_PARAMS = dict(
maxCorners=600, # ๅ…‰ๆต็‰นๅพ็‚นๆ•ฐ๏ผˆ่ถŠๅฐ‘่ถŠๅฟซ๏ผ‰
qualityLevel=0.001, # ็‰นๅพ็‚น่ดจ้‡
minDistance=5 # ็‰นๅพ็‚นๆœ€ๅฐ้—ด่ท
)
```
## ๐Ÿ› ๏ธ ๅผ€ๅ‘ๆ–‡ๆกฃ
### ๆทปๅŠ ๆ–ฐ็š„่ฏญ้ŸณๆŒ‡ไปค
1. ๅœจ `app_main.py` ็š„ `start_ai_with_text_custom()` ๅ‡ฝๆ•ฐไธญๆทปๅŠ ๏ผš
```python
# ๆฃ€ๆŸฅๆ–ฐๆŒ‡ไปค
if "ๆ–ฐๆŒ‡ไปคๅ…ณ้”ฎ่ฏ" in user_text:
# ๆ‰ง่กŒ่‡ชๅฎšไน‰้€ป่พ‘
print("[CUSTOM] ๆ–ฐๆŒ‡ไปค่ขซ่งฆๅ‘")
await ui_broadcast_final("[็ณป็ปŸ] ๆ–ฐๅŠŸ่ƒฝๅทฒๅฏๅŠจ")
return
```
2. ๅฆ‚้œ€ไฟฎๆ”นๆŒ‡ไปค่ฟ‡ๆปค่ง„ๅˆ™๏ผš
```python
# ไฟฎๆ”น allowed_keywords ๅˆ—่กจ
allowed_keywords = ["ๅธฎๆˆ‘็œ‹", "ๅธฎๆˆ‘ๆ‰พ", "ไฝ ็š„ๆ–ฐๅ…ณ้”ฎ่ฏ"]
```
### ๆ‰ฉๅฑ•ๅฏผ่ˆชๅŠŸ่ƒฝ
1. ๅœจ `workflow_blindpath.py` ๆทปๅŠ ๆ–ฐ็Šถๆ€๏ผš
```python
# ๅœจ BlindPathNavigator.__init__() ไธญๅˆๅง‹ๅŒ–
self.your_new_state_var = False
# ๅœจ process_frame() ไธญๅค„็†
def process_frame(self, image):
if self.your_new_state_var:
# ่‡ชๅฎšไน‰ๅค„็†้€ป่พ‘
guidance_text = "ๆ–ฐ็Šถๆ€ๅผ•ๅฏผ"
# ...
```
2. ๅœจ `navigation_master.py` ๆทปๅŠ ็Šถๆ€ๆœบ็Šถๆ€๏ผš
```python
class NavigationMaster:
def start_your_new_mode(self):
self.state = "YOUR_NEW_MODE"
# ๅˆๅง‹ๅŒ–้€ป่พ‘
```
### ้›†ๆˆๆ–ฐๆจกๅž‹
1. ๅˆ›ๅปบๆจกๅž‹ๅŒ…่ฃ…็ฑป๏ผš
```python
# your_model_wrapper.py
class YourModelWrapper:
def __init__(self, model_path):
self.model = load_your_model(model_path)
def detect(self, image):
# ๆŽจ็†้€ป่พ‘
return results
```
2. ๅœจ `app_main.py` ไธญๅŠ ่ฝฝ๏ผš
```python
your_model = YourModelWrapper("model/your_model.pt")
```
3. ๅœจ็›ธๅบ”็š„ๅทฅไฝœๆตไธญ่ฐƒ็”จ๏ผš
```python
results = your_model.detect(image)
```
### ่ฐƒ่ฏ•ๆŠ€ๅทง
1. **ๅฏ็”จ่ฏฆ็ป†ๆ—ฅๅฟ—**๏ผš
```python
# app_main.py ้กถ้ƒจ
import logging
logging.basicConfig(level=logging.DEBUG)
```
2. **ๆŸฅ็œ‹ๅธง็އ็“ถ้ขˆ**๏ผš
```python
# yolomedia.py
PERF_DEBUG = True # ๆ‰“ๅฐๅค„็†ๆ—ถ้—ด
```
3. **ๆต‹่ฏ•ๅ•ไธชๆจกๅ—**๏ผš
```bash
# ๆต‹่ฏ•็›ฒ้“ๅฏผ่ˆช
python test_cross_street_blindpath.py
# ๆต‹่ฏ•็บข็ปฟ็ฏๆฃ€ๆต‹
python test_traffic_light.py
# ๆต‹่ฏ•ๅฝ•ๅˆถๅŠŸ่ƒฝ
python test_recorder.py
```
## ๐Ÿ“„ ่ฎธๅฏ่ฏ
ๆœฌ้กน็›ฎ้‡‡็”จ MIT ่ฎธๅฏ่ฏ - ่ฏฆ่ง [LICENSE](LICENSE) ๆ–‡ไปถ