《2025 DigiKey AI应用创意挑战赛》AI智能仓库
本帖最后由 eefocus_3961249 于 2026-2-1 20:51 编辑# AI 智能仓库 项目概览
本项目是一个面向桌面小物品的 **AI 智能仓库** 系统:通过摄像头或上传图片进行 AI 识别(TFLite + 参考图匹配),输出置信度与候选标签,自动推荐仓位并驱动灯光引导;前端提供仓库格子、物品与识别结果的可视化与确认流程,并通过Arduino的led矩阵,可视化的表示当前仓库仓位的占用情况以及指引物品应当放置的仓位。
---
## 功能介绍
解决的痛点:
假如我们日常中有很多小物品要分类摆放到对应的盒子中,可能会给一些盒子贴标签或是记住它们的位置,但如果你有很多很多小分类,寻找一遍标签也挺麻烦,因此本项目采用图形识别的算法,对需要归纳放到指定位置的物品做一个识别,并指示你应当放到哪个位置中,减轻你的收纳压力。(实用价值还有待发掘~ 比如能搭配机械臂,自动将杂乱的桌子进行存放与拾取,那简直就是懒人但又喜欢收纳的人的福音~)
- 物品/仓位管理:支持查看、创建物品与仓位
- 物品图片采集:上传参考图,用于 `hist` 识别
- AI 图像识别:摄像头拍照或上传图片识别
- 智能推荐与自动放置:无推荐时自动选空位并占位
- 一键确认:点击识别结果/候选即可保存图片并确认放置
- 仓位灯光引导:识别后闪烁对应格子
- Web UI:拖拽物品标签设置默认摆放位置;识别结果与候选列表展示
项目整体示意图(带壳子的树莓派5、arduino R4、网页端、摄像头):
!(https://www.eefocus.com/forum/data/attachment/forum/202602/01/205056dzutibbuj6gbxvj6.png)
网页前端展示:
!(https://www.eefocus.com/forum/data/attachment/forum/202602/01/195208k5xrb6015bjzsrl6.png)
树莓派与Arduino状态大图:
!(https://www.eefocus.com/forum/data/attachment/forum/202602/01/205103o225i552ih9zyyy0.png)
---
## 演示视频
((https://www.bilibili.com/video/BV1996bBgE2G/))
---
## AI 核心能力
- **视觉识别**:TFLite 模型推理(Top‑K 分类)与参考图相似匹配两种,因为模型推理的只能覆盖一部分训练好的物品,另一部分就需要我们靠拍照做采集,做相似度进行分类
- **置信度与候选排序**:输出置信度、候选列表,又我们手动确认
- **智能推荐**:基于历史放置与默认位置进行仓位推荐
- **自动分配**:无推荐时自动选空位并占位
- **数据采集**:识别图片可一键保存为样本,持续积累数据
--
## AI 识别与放置策略
1. **识别引擎**
- `hist`:使用参考图(item_images)做直方图 + ORB 特征匹配。
- `tflite`:使用 TFLite 分类模型(.tflite)进行 Top-K 推理。
- `auto`:优先 TFLite,若低置信度或标签不映射则回退 `hist`。
2. **标签映射**
- TFLite 输出标签来自 `labels.txt`。
- `label_map.json` 用于将英文标签映射成中文显示或物品名称/ID。
- `tflite_allowlist.txt` 用于过滤非“桌面小物品”标签。
- 未映射的标签仍可显示,但不会绑定到物品库。
3. **推荐仓位**
- 优先最近一次放置记录(placements)。
- 其次使用物品 `default_box_id`。
- 若物品从未放置且有空位,可自动分配并写入 placements 与 default_box_id。
4. **灯光引导**
- 识别结果中包含推荐仓位后,后端发送灯光指令(pulse/blink/steady)。
---
## 技术栈
### 后端
- Python 3.11
- FastAPI + Uvicorn(HTTP API / 静态文件)
- SQLite(库存、物品、识别、放置记录)
- OpenCV + NumPy(相似匹配引擎)
- TensorFlow Lite Interpreter(TFLite 模型推理,已改为仅使用 TensorFlow)
### 前端
- 原生 HTML / CSS / JavaScript
- 通过 REST API 与后端通信
### 硬件 / 外设
- 摄像头(OpenCV 捕获)
- Arduino UNO R4 WiFi LED 矩阵(灯光引导)
---
## TFLite 与相似度识别
**TFLite 识别**
- 通过 TensorFlow Lite 分类模型(`.tflite`)进行图像分类,输出 Top‑K 标签与置信度。
- 推理流程:读取图像 → 统一尺寸/归一化 → Interpreter 推理 → Softmax/量化还原 → Top‑K 排序。
- 与业务结合:通过 `label_map.json` 映射中文标签,通过 `tflite_allowlist.txt` 过滤非桌面小物品标签。
**相似度识别(参考图匹配)**
- 使用已采集的参考图(item_images)做“视觉相似度”匹配。
- 组合特征:HSV 颜色直方图相关性 + ORB 特征匹配。
- 结果以每个物品的最高分作为候选,低置信度会被抑制或提示。
---
## Arduino 作用与功能
- **角色**:作为“灯光执行端”,接收后端的指引请求,将推荐仓位映射到 LED 矩阵上并执行显示。
- **功能**:
- 接收 `grid/row/col/box_label` 等参数
- 支持三种显示模式:`pulse` / `blink` / `steady`
- 根据仓位映射表点亮对应 LED
- **与后端的连接**:后端通过 HTTP 调用(`ARDUINO_GUIDE_URL`)发送指令。
---
## 具体效果展示(行为描述)
1. **识别成功 + 推荐仓位**
- 前端显示识别结果(物品名 + 置信度 + 推荐仓位)。
- 结果整行可点击:保存图片并确认放置。
- 仓位格子高亮(UI 中带边框/动效)。
- Arduino LED 对应格子亮灯(默认 `pulse`)。
2. **自动分配空位(新物品)**
- 识别结果标注“已自动分配”。
- UI 中对应格子自动填入物品名。
- 数据库写入 placements,并更新 default_box_id。
3. **手动拖拽放置**
- 拖拽物品或 TFLite 标签到格子,UI 立即显示物品名。
- 后端记录 placements。
- LED 同步指引(可选)。
4. **清空仓位**
- 双击格子变为“空”。
- 后端清空该 box 的 placements,并删除该物品的全部图片。
5. **识别失败 / 低置信度**
- 前端提示识别失败或低置信度。
- 不触发灯光指引。
---
## 项目结构
- `backend/`:FastAPI + SQLite + 识别引擎
- `frontend/`:原生 HTML/CSS/JS 前端页面
- `scripts/`:辅助脚本(建库、生成 label_map、TFLite 测试)
- `arduino/`:UNO R4 WiFi LED 矩阵控制代码
- `data/`:数据库、模型与采集图片
---
## 运行与配置(一键式运行)
- 运行入口:`./run_demo.sh`
- 常用环境变量(`envxxxx.txt`):
- `DESKSTORE_TFLITE_MODEL`:TFLite 模型路径
- `DESKSTORE_TFLITE_LABELS`:labels.txt
- `DESKSTORE_LABEL_MAP`:label_map.json (翻译映射)
- `DESKSTORE_TFLITE_ALLOWLIST`:tflite_allowlist.txt(实际采纳并列举的label)
- `DESKSTORE_DETECT_ENGINE`:`hist` / `tflite` / `auto`
- `DESKSTORE_CAMERA_INDEX`:摄像头索引
---
## 整体架构图(Mermaid)
```mermaid
flowchart LR
subgraph Frontend
UI
UI -- REST API --> API
end
subgraph Backend
API
DB[(SQLite)]
Vision
Policy
LabelMap
API --> DB
API --> Vision
Vision --> LabelMap
Vision --> Policy
Policy --> API
end
subgraph VisionEngines
TFLite
Hist
Vision --> TFLite
Vision --> Hist
end
subgraph Devices
Cam
LED
end
Cam --> Vision
API --> LED
Vision --> API
```
```
**架构图说明**
- **Frontend**:用户操作入口,展示仓库格子、识别结果与确认按钮,通过 REST API 请求后端。
- **Backend**:核心调度层,负责识别、放置策略、数据存储与设备控制。
- **Vision Service**:封装 AI 识别能力,统一输出候选标签与置信度。
- **Recognition Engines**:
- `TFLite`:分类模型推理,输出 Top‑K 标签。
- `Histogram + ORB`:参考图相似度匹配,适合小样本。
- **Placement Policy**:把“识别结果”转成“推荐仓位 / 自动占位”。
- **Label Map + Allowlist**:把英文标签映射到中文,并过滤非桌面小物品。
- **Devices**:摄像头提供输入,Arduino LED 负责位置指引与常亮占用。
```
---
## 设计目标
- AI 驱动:自动识别与智能推荐作为核心能力
- 可解释:置信度 + 候选列表 + 人工确认闭环
- 人机协同:一键确认放置与灯光引导
- 可扩展:支持更换模型或引入自定义训练集
- 轻量架构:SQLite + 原生前端快速迭代
## 项目源码
已剔除tflite模型文件(自行下载到data\models目录下)
页:
[1]