【欧时RS x Arduino】02 手势识别Demo
# 背景我此次申请的测评的项目是手势识别控制风扇,先找 Arduino App Lab 相关的示例工程,熟悉手势识别应用。
在 Arduino App Lab 中找到了一个示例工程 Detect Objects on Camera,专门用于演示摄像头的实施目标检测功能。
必须使用 Network Mode :在 Arduino App Lab 中通过 Wi\-Fi 连接开发板,而非直接USB连接模式。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165205sgqwrajdmgdqnraz.png)
# 实例说明
这个示例使用预训练模式,对摄像头实时视频流进行目标检测。
工作流程为:持续获取摄像头帧 \-\-\> 通过 `video_objectdetection `Brick 进行AI处理 \-\-\> 在检测结果周围显示边界框。应用通过交互式网页界面进行管理。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165217cw0tg00q70g4g4mx.png)
# Bricks 说明
- web\_ui 创建网页界面,用于显示分类结果与模型控制选项
- `video_objectdetection `对摄像头实时视频流中的物体进行分类与检测
其中 video\_objectdetection 默认使用的模型是 General purpose object detection \- YoloX nano。也可以手动修改为下方的 Hand gestures,这个才是我项目中使用的模型。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165304xkdg75emaa7zk1dr.png)
# 代码解读
这个示例主要代码在 python,还有一部分网页代码,在 assets 目录下。
其中 python 代码最关键,如下:
```Python
# SPDX-FileCopyrightText: Copyright (C) Arduino s.r.l. and/or its affiliated companies
#
# SPDX-License-Identifier: MPL-2.0
from arduino.app_utils import App
from arduino.app_bricks.web_ui import WebUI
from arduino.app_bricks.video_objectdetection import VideoObjectDetection
from datetime import datetime, UTC
ui = WebUI()
detection_stream = VideoObjectDetection(confidence=0.5, debounce_sec=0.0)
ui.on_message("override_th", lambda sid, threshold: detection_stream.override_threshold(threshold))
# Register a callback for when all objects are detected
def send_detections_to_ui(detections: dict):
for key, values in detections.items():
for value in values:
entry = {
"content": key,
"confidence": value.get("confidence"),
"timestamp": datetime.now(UTC).isoformat()
}
ui.send_message("detection", message=entry)
detection_stream.on_detect_all(send_detections_to_ui)
App.run()
```
**关键说明:**
- `VideoObjectDetection `内部持续从摄像头获取帧,运行预训练模型(或自定义 Edge Impulse 模型),并输出检测结果字典。
- `on_detect_all `在每一帧有检测结果时触发回调。
- `WebUI `负责托管前端页面(端口 7000)并提供双向 WebSocket 通信。
- `App.run()` 启动内部事件循环,保持检测流与消息通信持续运行。
**前端逻辑(index\.html \+ app\.js)**
- 通过 iframe 加载摄像头视频流(自动重试 /embed 直到可用)。
- 监听 WebSocket 消息 detection,更新:
- 最近 5 次检测记录(含百分比与时间戳)。
- 特殊物体(猫、狗、杯子、手机、时钟、盆栽)的 GIF 与文字反馈。
- 滑块/输入框调整置信度阈值,通过 `ui.send_message("override_th", value) `实时回传后端。
- 连接断开时显示错误提示。
# 演示:通用物体识别
Brick 使用默认的 General purpose object detection \- YoloX nano 模型。
键盘识别,置信度 82%
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165319fqp051njqkf0tzb7.png)
鼠标识别,错误地识别成了 cell phone ,置信度 56%
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165329wswzsc66eeiiiji4.png)
人生果,识别错了,误识别为 mouse 置信度 81%
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165339miyexu58cpgeypx3.png)
经过查证,General purpose object detection \- YoloX nano 可以的物体列表如下,有80种常见物体:
- airplane(飞机)
- apple(苹果)
- backpack(背包)
- banana(香蕉)
- baseball bat(棒球棒)
- baseball glove(棒球手套)
- bear(熊)
- bed(床)
- bench(长椅)
- bicycle(自行车)
- bird(鸟)
- boat(船)
- book(书)
- bottle(瓶子)
- bowl(碗)
- broccoli(西兰花)
- bus(公交车)
- cake(蛋糕)
- car(汽车)
- carrot(胡萝卜)
- cat(猫)
- cell phone(手机)
- chair(椅子)
- clock(时钟)
- couch(沙发)
- cow(牛)
- cup(杯子)
- dining table(餐桌)
- dog(狗)
- donut(甜甜圈)
- elephant(大象)
- fire hydrant(消防栓)
- fork(叉子)
- frisbee(飞盘)
- giraffe(长颈鹿)
- hair drier(吹风机)
- handbag(手提包)
- hot dog(热狗)
- horse(马)
- keyboard(键盘)
- kite(风筝)
- knife(刀)
- laptop(笔记本电脑)
- microwave(微波炉)
- motorcycle(摩托车)
- mouse(鼠标)
- orange(橙子)
- oven(烤箱)
- parking meter(停车计时器)
- person(人)
- pizza(披萨)
- potted plant(盆栽)
- refrigerator(冰箱)
- remote(遥控器)
- sandwich(三明治)
- scissors(剪刀)
- sheep(羊)
- sink(水槽)
- skateboard(滑板)
- skis(滑雪板)
- snowboard(单板滑雪)
- spoon(勺子)
- sports ball(运动球)
- stop sign(停车标志)
- suitcase(行李箱)
- surfboard(冲浪板)
- teddy bear(泰迪熊)
- tennis racket(网球拍)
- tie(领带)
- toaster(烤面包机)
- toilet(马桶)
- toothbrush(牙刷)
- traffic light(交通信号灯)
- train(火车)
- truck(卡车)
- tv(电视)
- umbrella(雨伞)
- vase(花瓶)
- wine glass(酒杯)
- zebra(斑马)
# 演示:手势识别
Brick 选择 Hand gestures。这是一款轻量级视觉模型,可检测四种手势:中性握拳(neutral fist)、张开手掌(five)、V 手势(和平手势),以及竖起大拇指(点赞)。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165350azl12mwl7wm13rlo.png)
以下截图是我多次换手势、摆弄位置、调整光照,最终的识别结果。总的来说 good, five 识别效果最好,其他两种 neut, peace 识别效果不好。
此外,手势在画面中的比例也影响识别效果,太大、太小都不能顺利识别。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165404u0ivho9toz6ofh30.png)
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165430pc7c9prmrfe1rwmc.png)
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165442laeaxhabtjevfajv.png)
!(//m.qjumbo.com/forum/data/attachment/forum/202610/31/165453s5c7fgzhh4xth44f.png)
视频演示,链接地址:
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=117499299370710&bvid=BV1csHg6pEfL&cid=43032643941&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
页:
[1]