猫头虎AI开源项目分享:如何手搓了一套AI导盲眼镜,可以盲道导航、过马路辅助、物品识别、实时语音交互,方案开源
大家好,我是猫头虎。最近因为市场原因忙了一阵子,更新少了不少,欢迎大家多多催更 😄。 今天给大家分享一个最近发现的完整开源、成本不到 150 元、实际可跑的 AI 导盲眼镜项目:基于 ESP32 + 本地 AI 模型,实现盲道导航、过马路辅助、物品识别和实时语音交互。
一句话体验是这样的:
你对系统说一句「帮我过马路」, 眼镜摄像头开始工作,系统实时播报: 「前方 3 米有斑马线,现在绿灯,可以通行」。
功能可扩展,比如你想加个「找公交站」: 直接在 workflow_blindpath.py 里加逻辑,就能做盲道+公交一体导航。
更重要的是:方案完全开源,其他人也可以通过手机或电脑,以第一视角实时看到画面,进行远程协助。
1️⃣ 项目整体介绍:一套真的能跑的“AI导盲眼镜”
这个项目是一个面向视障人士的智能导航与辅助系统,集成了:
-
盲道导航 -
过马路辅助 -
物品识别与查找 -
实时语音交互 -
视频流监控与远程协助
系统基于 ESP32、Python 后端和多种 AI 模型组合实现。 再次强调一遍:
⚠️ 本项目仅用于技术交流与学习,请勿直接用于真实视障用户场景。
👉 项目代码开源地址(记得 Star 一下支持我):GitHub:https://github.com/MaoTouHU/OpenAIglasses_for_Navigation
👉 模型下载地址(下载后放到 model/ 目录):ModelScope:https://www.modelscope.cn/models/archifancy/AIGlasses_for_navigation
2️⃣ 功能总览:从盲道到物品,从过马路到对话
🟡 盲道导航:实时识别+语音引导+避障
盲道导航能力主要包括:
-
实时盲道检测:基于 YOLO 分割模型实时识别盲道 -
智能语音引导:提供精准的方向指引(左转、右转、直行等) -
障碍物检测与避障:自动识别前方障碍物并规划避障路线 -
转弯检测:自动识别急转弯并提前提醒 -
光流稳定:使用 Lucas-Kanade 光流算法稳定掩码,减少抖动
结构解读:
核心体验就是:系统不仅能看到盲道,还能“理解方向”和“规避障碍”,并通过语音实时告诉你怎么走。
🚦 过马路辅助:斑马线 + 红绿灯一体引导
过马路辅助主要做了三件事:
-
斑马线识别:实时检测斑马线的位置和方向
-
红绿灯识别:基于颜色和形状的红绿灯状态检测
-
对齐与通行引导:
-
引导用户对准斑马线中心 -
绿灯时语音提示可以通行
你只需要一句话:「帮我过马路」, 系统就会开始帮你找斑马线 → 判断红绿灯 → 对齐方向 → 提示何时安全通行。
🔍 物品识别与查找:从“帮我找红牛”到“我已经拿到了”
这一块更偏“生活助手”,主要能力包括:
-
智能物品搜索: 支持语音指令,比如:
-
「帮我找一下红牛」 -
「帮我找一下 AD 钙奶」 -
「帮我找矿泉水」 -
实时目标追踪: 使用 YOLO-E 开放词汇检测 + ByteTrack 追踪
-
手部引导: 结合 MediaPipe 手部检测,引导用户手部靠近物品
-
抓取检测: 检测手部握持动作,确认物品已拿到
-
多模态反馈: 视觉标注 + 语音引导 + 物体居中提示
效果示意(物品识别界面):
整体体验流程类似这样: 你说「帮我找一下红牛」 → 系统在画面中标出红牛 → 语音提示你往左/右调整 → 手部靠近时进一步引导 → 检测到握持动作后确认【已拿到】。
🎙️ 实时语音交互:指令、对话、场景理解一把梭
语音交互模块基于阿里云 DashScope 提供的能力:
-
语音识别(ASR): 基于 Paraformer 实时语音识别
-
多模态对话: 使用 Qwen-Omni-Turbo,支持图像 + 文本输入、语音输出
-
智能指令解析: 自动判断你是在:
-
发导航指令 -
查找物品 -
还是在普通聊天 / 咨询 -
上下文感知: 在不同模式(导航/过马路/查找物品)下自动过滤无关指令,避免误触发
📹 视频与音频处理:实时流+远程协助
这一层主要解决「可视化和协同」问题:
-
实时视频流: WebSocket 推流,支持多客户端同时观看(比如亲友、志愿者远程协助) -
音视频同步录制: 自动保存带时间戳的录像和音频文件,方便回放和调试 -
IMU 数据融合: 接收 ESP32 的 IMU 数据,用于姿态估计 -
多路音频混音: 支持系统语音、AI 回复、环境音同时播放
🎨 可视化与交互:浏览器面板 + 3D 姿态可视化
可视化部分面向开发和远程协助场景,包括:
-
Web 实时监控:浏览器端实时查看处理后的视频流 -
IMU 3D 可视化:Three.js 实时渲染设备姿态 -
状态面板:显示导航状态、检测信息、FPS 等 -
中文友好:所有界面和语音使用中文,支持自定义字体
Web 端主要效果示意:
3️⃣ 系统整体定位与开源说明
再强调一下项目定位:
一个面向视障人士的智能导航与辅助系统, 集成了盲道导航、过马路辅助、物品识别、实时语音交互等功能。
但 ⚠️ 非常重要的提醒:
-
本项目仅为交流学习使用 -
请勿直接给真实视障人群使用 -
项目内仅包含代码 -
模型单独提供(下载后放置在 /model文件夹)
模型地址(再次附上):https://www.modelscope.cn/models/archifancy/AIGlasses_for_navigation
4️⃣ 环境与硬件要求
💻 开发/服务器端(跑模型的那台机器)
-
CPU:Intel i5 或以上(推荐 i7 / i9) -
GPU:NVIDIA(支持 CUDA 11.8+,推荐 RTX 3060 或以上) -
内存:8GB RAM(推荐 16GB) -
存储:10GB 可用空间
🕶️ 客户端设备(可选)
-
ESP32-CAM 或其他支持 WebSocket 的摄像头 -
麦克风(语音输入) -
扬声器 / 耳机(语音输出)
🧾 软件要求
-
操作系统:Windows 10/11, Ubuntu 20.04+,macOS 10.15+ -
Python:3.9 - 3.11 -
CUDA:11.8 或更高版本(如果需要 GPU 加速) -
浏览器:Chrome 90+ / Firefox 88+ / Edge 90+
🔑 API 密钥
需要申请阿里云 DashScope API Key:
-
用途:
-
Paraformer(ASR) -
Qwen-Omni 对话 -
申请地址:https://dashscope.console.aliyun.com/
5️⃣ 快速上手:从克隆到跑起来
下面保留全部原始命令与代码块,方便你直接复制粘贴。
1. 克隆项目
git clone https://github.com/yourusername/aiglass.git
cd aiglass/rebuild1002
这里你可以替换成自己的仓库路径或上面的开源链接。
2. 安装依赖
创建虚拟环境(推荐)
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
安装 Python 包
pip install -r requirements.txt
安装 CUDA 和 cuDNN(GPU 加速)
请参考 NVIDIA CUDA Toolkit 安装指南
3. 下载模型文件
将以下模型文件放入 model/ 目录:
|
|
|
|
|
|---|---|---|---|
yolo-seg.pt |
|
|
|
yoloe-11l-seg.pt |
|
|
|
shoppingbest5.pt |
|
|
|
trafficlight.pt |
|
|
|
hand_landmarker.task |
|
|
|
实际使用时,可以参考 ModelScope 提供的模型包。
4. 配置 API 密钥
创建 .env 文件:
# .env
DASHSCOPE_API_KEY=your_api_key_here
或者你懒得搞环境变量,也可以直接在代码中硬编码(不推荐):
# app_main.py, line 50
API_KEY = "your_api_key_here"
5. 启动系统
python app_main.py
系统会在 http://0.0.0.0:8081 启动服务,用浏览器打开即可看到实时监控界面。
6. 连接设备(可选 ESP32)
如果你使用的是 ESP32-CAM:
-
烧录 compile/compile.ino到 ESP32 -
修改 WiFi 配置,使其和服务器在同一网络 -
ESP32 会自动连接到 WebSocket 端点
6️⃣ 系统架构:从设备到云,再回到耳机里
为了方便理解,完整架构图如下:
┌─────────────────────────────────────────────────────────────┐
│ 客户端层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 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 |
|
| 导航统领 | navigation_master.py |
|
| 盲道导航 | workflow_blindpath.py |
|
| 过马路导航 | workflow_crossstreet.py |
|
| 物品查找 | yolomedia.py |
|
| 语音识别 | asr_core.py |
|
| 语音合成 | omni_client.py |
|
| 音频播放 | audio_player.py |
|
| 视频录制 | sync_recorder.py |
|
| 桥接 IO | bridge_io.py |
|
如果你想扩展功能,比如刚刚提到的「找公交站」, 只需要在对应 workflow 里添加新逻辑,无需重写底层架构。
7️⃣ 使用说明:你可以这样跟它说话
语音指令(无唤醒词,直接说)
系统当前支持如下中文语音指令:
👉 导航控制
"开始导航" / "盲道导航" → 启动盲道导航
"停止导航" / "结束导航" → 停止盲道导航
"开始过马路" / "帮我过马路" → 启动过马路模式
"过马路结束" / "结束过马路" → 停止过马路模式
👉 红绿灯检测
"检测红绿灯" / "看红绿灯" → 启动红绿灯检测
"停止检测" / "停止红绿灯" → 停止检测
👉 物品查找
"帮我找一下 [物品名]" → 启动物品搜索
示例:
- "帮我找一下红牛"
- "找一下AD钙奶"
- "帮我找矿泉水"
"找到了" / "拿到了" → 确认找到物品
👉 智能对话
"帮我看看这是什么" → 拍照识别
"这个东西能吃吗" → 物品咨询
任何其他问题 → AI 对话
导航状态机:系统在不同模式下的行为
系统内部有一套状态机,会在多个模式之间自动切换:
-
IDLE - 空闲状态
-
等待用户指令 -
显示原始视频流 -
CHAT - 对话模式
-
与 AI 进行多模态对话 -
暂停导航功能 -
BLINDPATH_NAV - 盲道导航
-
实时方向修正 -
障碍物检测 -
ROTATION:旋转对准盲道 -
TRANSLATION:平移至盲道中心 -
ONBOARDING:上盲道引导
-
NAVIGATING:沿盲道行走
-
MANEUVERING_TURN:转弯处理
-
AVOIDING_OBSTACLE:避障
-
CROSSING - 过马路模式
-
SEEKING_CROSSWALK:寻找斑马线 -
WAIT_TRAFFIC_LIGHT:等待绿灯 -
CROSSING:过马路中 -
SEEKING_NEXT_BLINDPATH:寻找对面盲道 -
ITEM_SEARCH - 物品查找
-
实时检测目标物品 -
引导手部靠近 -
确认抓取 -
TRAFFIC_LIGHT_DETECTION - 红绿灯检测
-
实时检测红绿灯状态 -
语音播报颜色变化
Web 监控界面与 WebSocket
打开 http://localhost:8081,你能看到:
-
实时视频流(带导航标注) -
状态面板(当前模式、检测信息、FPS) -
IMU 3D 可视化 -
语音识别结果与 AI 回复
对应的 WebSocket 端点如下:
|
|
|
|
|---|---|---|
/ws/camera |
|
|
/ws/viewer |
|
|
/ws_audio |
|
|
/ws_ui |
|
|
/ws |
|
|
/stream.wav |
|
|
8️⃣ 配置与调优:从环境变量到性能参数
环境变量(.env)
# 阿里云 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 # 启用语音播报
修改模型路径
如果你自定义了模型存放路径,可以在对应文件中修改,例如:
# 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"
性能调优参数示例
根据你机器的性能,可以做一些精简加速:
# 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 # 特征点最小间距
)
9️⃣ 二次开发与调试:给想折腾的你
添加新的语音指令
-
在 app_main.py的start_ai_with_text_custom()函数中添加逻辑:
# 检查新指令
if "新指令关键词" in user_text:
# 执行自定义逻辑
print("[CUSTOM] 新指令被触发")
await ui_broadcast_final("[系统] 新功能已启动")
return
-
如果你想修改“哪些语句才会被认为是有效指令”,可以调整:
# 修改 allowed_keywords 列表
allowed_keywords = ["帮我看", "帮我找", "你的新关键词"]
扩展导航功能
例如你要加一个新导航模式,可以:
-
在 workflow_blindpath.py添加状态变量和处理逻辑:
# 在 BlindPathNavigator.__init__() 中初始化
self.your_new_state_var = False
# 在 process_frame() 中处理
def process_frame(self, image):
if self.your_new_state_var:
# 自定义处理逻辑
guidance_text = "新状态引导"
# ...
-
在 navigation_master.py增加状态机入口:
class NavigationMaster:
def start_your_new_mode(self):
self.state = "YOUR_NEW_MODE"
# 初始化逻辑
集成新模型
-
编写一个模型封装类:
# your_model_wrapper.py
class YourModelWrapper:
def __init__(self, model_path):
self.model = load_your_model(model_path)
def detect(self, image):
# 推理逻辑
return results
-
在 app_main.py中加载:
your_model = YourModelWrapper("model/your_model.pt")
-
在对应工作流中进行调用:
results = your_model.detect(image)
调试小技巧
-
开启详细日志:
# app_main.py 顶部
import logging
logging.basicConfig(level=logging.DEBUG)
-
查看帧率和耗时瓶颈:
# yolomedia.py
PERF_DEBUG = True # 打印处理时间
-
分模块测试:
# 测试盲道导航
python test_cross_street_blindpath.py
# 测试红绿灯检测
python test_traffic_light.py
# 测试录制功能
python test_recorder.py
🔚 总结 & 彩蛋
这套 AI 导盲眼镜项目,核心亮点可以简单概括为三点:
-
成本可控:整体硬件成本控制在 150 元左右,适合个人开发者和学生党折腾。
-
方案完整:从 ESP32 端采集 → 后端 AI 推理 → 导航逻辑 → 语音交互 → Web 可视化 → 远程协助,一条龙打通。
-
高度可扩展:你可以很容易地加上:
-
「找公交站」 -
「帮我识别门牌号」 -
「统计货架上某类商品数量」 -
……
如果你已经看到这里了,强烈建议:
-
⭐ 给仓库点个 Star 支持一下 -
🍵 Fork 下来本地跑一跑 -
🛠️ 改一个小功能,比如在 workflow_blindpath.py里加一个你自己的导航提示逻辑
AI 开源分享 GitHub:https://github.com/MaoTouHU/OpenAIglasses_for_Navigation

