惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
N
News and Events Feed by Topic
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
T
Tailwind CSS Blog
博客园_首页
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
A
About on SuperTechFans
I
InfoQ
S
Securelist
Last Week in AI
Last Week in AI
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
腾讯CDC
大猫的无限游戏
大猫的无限游戏
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog
美团技术团队
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
罗磊的独立博客
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
S
Secure Thoughts
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Latest news
Latest news
Recent Announcements
Recent Announcements
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 热门话题
Security Latest
Security Latest
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
在家做一个魔法师,智能家居也可以动「手」不动口 - 少数派
2024-07-24 · via 少数派

前言

相信很多读者和我一样,都有一个巫师梦,等着自己的那只猫头鹰送来霍格沃茨的入学通知书。世界各地的麻瓜们也在乐此不疲地使用科技构筑自己的魔法世界。前段时间B站就有一个视频大火,使用自制魔杖控制家居设备,很是浪漫!1但很多巫师丢失魔杖后只能任人摆布,还是邓布利多和伏地魔的无杖施法更吸引人,本麻瓜当然更向往这种高阶法术(不是)。

哈利·波特与火焰杯

无杖施法虽然摆脱了魔杖,但还是至少要挥一挥手,摆个 pose 的。那么是否有识别我的姿态和手势,来理解我的意图的方法呢。

经过调研,使用机器视觉是一个可行的方案,我发现不少人已经做了相关尝试,甚至商用摄像头也初步做过简单手势控制功能。而大多数开源项目采用 Mediapipe 方案,这是一个 Google 开源的手势识别套件,使用简单,但缺陷在于仅支持单人、近距离识别。2且多数项目仅仅在 PC 上调用 Mediapipe 库做了一些简单的特性演示,没有进一步扩展实用功能。

我曾计划在自己的服务器上实现该项目,但考虑到项目对实时性要求高,采用了边缘计算(Edge Computing)方案。对物联网而言,边缘计算意味着许多控制将通过本地设备实现而无需交由云端,大大提升处理效率,由于更加靠近用户,还可提供更快的响应。但是,边缘设备上部署需要克服额外的困难,包括模型的转换与调整,精度与实时性能的权衡。

最终,基于边缘设备(香橙派),我开发了一个手势自动化项目,「Gesture-Based-Home-Automation」。

效果展示

由于少数派附件的大小限制,难以展示长时高清的动画;本文所有演示将人与被控主体放在同一个画面,且手部尽可能正对镜头以展示手势细节;画面有裁剪、无加速。

「Gesture-Based-Home-Automation」的关键特性有:

  • 支持多人场景,通过「抬手」动作触发手势识别;
  • 低延迟,手势识别延迟 30ms,「抬手」检测延迟 50ms,低延迟能更好地支撑复杂手势并提高「跟手」体验;
  • 长距离,能识别超过 5 米距离的手势信号,大体能覆盖单个空间;
  • 空间定位,能粗略地识别人体、手部在空间中的位置;
  • 复杂手势组合,支持左右手识别与跟踪,支持 5 种静态手势、4 种动态手势、4 种触发模式,通过相互组合并结合手部旋转状态、空间位置,可以定义无穷种手势信号。3

下面展示了项目的部分关键特性。第一组为手部的 5 种基础手势与手掌旋转状态识别;第二组为左右手识别与跟踪、长距离手部定位与手势识别;第三组图为「抬手」触发与基础的开关灯控制演示;第四组图,通过空间定位与手势指令,呼唤扫地机器人前往人体地点进行清扫。(这里使用的是石头 G10S。)常规的做法是「点开 app-进入设备-设置-指哪到哪-点选-确认」,而语音控制无法完成该指令。

以上先演示了部分基础指令,下面先介绍其基本原理,然后引入「高级手势控制」,将更加符合人们习惯的动态手势转译为控制信号,进行更复杂的控制,更多演示可以跳转至高级手势与智能控制章节部分查看。

硬件概况

硬件组成:一个香橙派 5 Pro (Orange Pi 5 Pro)4,一个 5V4A 电源,一个 USB 摄像头。

Orange Pi 5 Pro,尺寸 89mm*56mm*1.6mm,采用了瑞芯微 RK3588S 处理器,四核 A76 + 四核 A55,主频 2.4GHz,集成 ARM Mali-G610;内嵌的 NPU 支持 INT4/INT8/INT16 混合运算,算力 6TOPS,4GB LPDDR5,Wi-Fi 5、BLE。支持 Orange Pi OS、Ubuntu、Android 12、Debian 等操作系统。摄像头为无畸变 86° 视角,1080P/30FPS 的 USB 摄像头。

这颗 6TOPS 的 NPU 是我选择香橙派 5 Pro 的主要理由,我们需要在上面做各种神经网络推理,同时它的价格足够低,总成本约 650 元。

香橙派 5 Pro

手势识别流程

在家居场景中,我们的关键需求是全天候运行、使用流畅。具体分析下来,手势使用频率相对不高,这决定了我们并不需要时时刻刻获取手势信息,而为了兼顾长时间运行,设计了这样一个流程:

  • 常规时间中,运行多人人体关键点检测,输出人体关键点和框;该阶段的特点是资源消耗低,实时性较差(约 50ms),主打一个够用就好;
  • 当任一一只手腕高于肩部时,停止人体关键点检测,同时在该人体框内进行手部检测,根据人体关键点匹配左右手,将裁剪的手部图像传入手部关键点检测;该阶段为过渡阶段,耗时约 20ms,将人体关键点检测转换为手部关键点检测,同时输出该帧的头部位置与大小;
  • 启动多线程检测手部关键点(最多 2 只手),识别手势,同时预测下一帧的手部位置;只要手部检测的置信度足够高,会一直保持在该阶段,该阶段资源消耗较高,实时性较强(约 29ms),对于 30FPS 的摄像头而言,几乎可以跑满帧率;快速移动手掌或遮挡双手,或双手都丢失预测位置,自动回到人体关键点检测流程。
手势识别框架

在常规时间中(生活中的绝大多数时间),系统保持较低的功耗运行。需要手势控制时,又能快速切换模式,并实时地检测。设计切换信号(手腕高于肩部)可以避免误触发。基本满足了全天候运行、使用流畅的需求。小目标的检测往往是具有挑战的,通过人体框的裁剪,采用 Top-Down 模式,实现最远 5 米的手势识别,基本可以覆盖屋内的环境了。

模型选择方面,个人水平有限,考虑到时间成本,贯彻了「拿来主义」,搜刮了一些优秀的模型。但在过程中,转换为 3588 NPU 的模型格式时,又出现了各种问题,包括 rknn 的各种 bug,算子不支持等。后续会根据需要更换模型。当前版本的模型选择如下:

  • 多人人体关键点检测:Yolo v8 pose (nano),转换为 rknpu 模型 rknn,使用 INT8 量化,追求较高的速度而牺牲精度;
  • 手部与头部检测:Gold Yolo (nano),fp16,输出的手部位置为第一帧位置,要求较高的精度;
  • 手部关键点检测:RTMPose (m),fp16,同时要求较高精度和较高速度。

空间位置估计

为了获取目标在空间中的位置,需要先估算深度,即目标距相机的距离(光轴方向)。常用的深度估计方法主要包括双目视觉深度估计和单目视觉深度估计。双目视觉使用两个相机,类似于人类的双眼。通过捕捉从两个不同视角的图像,利用视差来估计物体的深度信息。单目视觉的挑战在于,单个相机只能提供二维图像,没有直接的深度信息。因此,需要借助一些额外的信息来推断深度,如通过训练深度神经网络,利用标注数据来学习从单目图像中估计深度;利用物体的已知尺寸、平行线的消失点、阴影等几何特征来推断深度;通过分析物体在多帧图像中的移动情况来估计深度。

空间位置估计

双目相机比单目相机贵得多,我想控制住预算,同时,我们只要十分粗略的空间位置,对精度要求很低。通过实验发现,在多数生活情况下,Gold Yolo 识别出的头部检测框宽度相对稳定(即使头部发生旋转),因此我们使用头部的宽度信息来标定人体距离相机的深度。获取头部宽度像素数,进而得到人体深度值,与相机的视角、拍摄像素计算,可以得到 (x, y, z) 坐标,组合得到每个手掌的 (x, y, z) 坐标值。该值为相机局部坐标系下的坐标,通过坐标变换,转换为全局坐标系下的坐标值:只需预设相机 x 轴和 y 轴在全局坐标系中的向量、相机原点在全局坐标系中的坐标值即可,分别为「vector_x」「vector_y」和「vector_o」。

手势控制信号

获取手部的 21 个关键点坐标后,通过计算关节点的弯曲角度得到每个手指的弯曲状态(弯曲或伸直),组合每个手指的弯曲状态,定义了 5 种手势:「握拳」/「fist」,「一」/「one」,「二」/「two」,「三」/「ok」,「五」/「open」。由于拇指非常容易被遮挡,其弯曲状态容易误判,因此在这 5 种手势的判断过程中,拇指的状态不纳入考虑,即「四指张开」=「五指张开」。

基础手势控制信号

使用手掌的关键点(0、5、9、13号关键点),计算得到手掌的「旋转角度」/「rotation」。从人的视角看,五指竖直向上为 0,逆时针为正,顺时针为负,单位为弧度,范围(-pi,pi)。

记录每一次检测的食指指尖坐标,获得手指移动轨迹,用线性回归拟合趋势线,根据纵横比和趋势线系数判断手势,分类为 4 种轨迹「上滑」/「UP」,「下滑」/「DOWN」,「左滑」/「LEFT」,「右滑」/「RIGHT」。拟合趋势线前会移除离群点,增加判断的准确性。轨迹判断具有冗余度,允许轨迹有一定倾角。这里只预设了最简单的 4 种轨迹,读者可以根据需要自行编写判断轨迹类别(如顺时针、逆时针)。对于更为复杂的手势,可以参考 hand-gesture-recognition-using-mediapipe 项目,训练轨迹分类模型。

总结下来,单次单手检测具有 5 种手势  4 种轨迹  N 种旋转角度类别,通过左右手的组合以及空间位置的判断,可以获得数千种手势控制信号。

高级手势与智能控制

现在我们已经能获取每一个时刻的手势信号了,即使对检测结果已经进行了初步处理,但是还是会有一些漏检误检。除此之外,我们还要将人类习惯的动态手势转译为控制信号。这里参考 GitHub - geaxgx/depthai_hand_tracker) 构建了一个 HandController 类。

HandController 基于事件循环,提前在配置中定义一个手势动作列表。手势动作将手势(例如,右手的 OPEN 姿势)与回调(识别手势时调用的函数)相关联。根据回调的运行时间和频率设置了 4 个模式:

  • enter(默认):当手势开始时,触发一次事件;
  • enter_leave:触发两个事件,一个是手势开始时,一个是手势结束时;
  • period:只要手势保持不变,事件就会定期触发;
  • continuous:每一帧都会触发事件。
触发模式

同时引入以下三个参数:

  • first_trigger_delay:由于手势识别中会出现误报,我们通常不希望在识别姿势的第一帧上触发事件。以秒为单位的「first_trigger_delay」指定手势在触发相应事件之前必须保持多长时间;
  • next_trigger_delay:当模式为 period 时,两个连续事件之间的延迟(以秒为单位);
  • max_missing_frames:由于模型并不完美,因此会出现假阴性。比如,手在 20 帧中保持着「ONE」手势,但模型在 20 帧中的几帧中没有识别出「ONE」姿势。max_missing_frames 是允许丢失的帧数的最大值,超出该值,当前手势结束。

下面举几个例子说明使用方法,更多高级手势可以由读者根据手势控制信号和 4 种控制模式自由组合而成(如单手单手势+多轨迹的组合,单手 0 多手势+时序组合判断等)。

  • 挥手下一个电视节目。采用 enter_leave 模式,基础手势为「OPEN」,触发两个事件,判断手势开始时的「rotation」是否在 (-1.5, -0.3) 内,手势结束时的「rotation」是否在 (0.3, 1.5) 内,max_missing_frames 设置为较大值 10,即允许挥动过程中的较长时间的漏检误检。结束的时候握拳,即结束该手势信号,如果想中断该信号,则将手旋转至区间外结束手势即可。
  • 连续调节电视音量。采用 period 模式,基础手势为左手「TWO」,右手「ONE」,手向左倾持续减小音量,向右倾则持续增加音量。
  • Blink控制。采用 enter 模式,基础手势为左手「OPEN」,通过累计触发次数来判断是否发出信号,累计次数为 2,最短间隔为 40 帧,超时自动重置。作为对比,我们首先慢速切换手势,无信号发出;快速「Blink」,信号发出。

家居的智能控制比较简单,可以直接在回调函数中调用相关 API 进行控制,如此例中的 Sony Bravia 电视5。也可以通过 Node-Red、n8n、Home Assistant 中的无代码组件设置触发流程。

代码示例中,提供了一个 Flask API 服务,调用可以暂停或恢复服务,以降低能耗或在特定情况下避免误触发:如人离家时,通过小米无线按钮,暂停服务;如人在家健身时,肢体变化较大,可能造成控制信号的误触发,需要暂停服务。当然,还有更多的切换方式,如通过人体存在传感器切换服务,或使用其它智能语音切换服务,或通过特定手势暂停服务,或通过无检测阈值暂停服务等等。

展望

项目源码托管在 Github。考虑到项目的独立性,同时时间有限,有很多想法没融入到该项目中,欢迎大家一起讨论。

  • 如果需要更高精度的人体定位,贵的方法就是用双目相机,便宜的方案我觉得可以加一个毫米波雷达定位人体。但毫米波雷达方案和单目方案都有一个缺陷:手部深度默认与人体是一致的(即处于同一个平面),比如我需要在地面(xz平面)画一个区域让机器人清扫,则无法实现;
  • 也许可以通过3D人体姿态来重定位手部位置;我们在手部检测阶段同时检测了头部,如果加一个头部的姿态估计模型获取人脸朝向,可能可以做到"指哪打哪"、"看哪打哪";6人体关键点信息也可成为控制信号的构成;
  • 边缘设备的安装。新家做了无主灯,每个房间都有可供电的48V轨道,我计划在轨道上做一个20W转接口,将香橙派上墙,更加美观,俯拍可以更好地避免遮挡和逆光;
  • 该项目的资源占用不算高,人体检测约NPU单核12%,手势检测约NPU3核32%,感觉还有资源可以在多个房间同时部署,视频通过rtsp串流到同一个香橙派上,当然串流会带来更大的延迟;追求极致的性能需用C++重构。
  • 依赖光学图像进行识别,在低照度下,有些相机会提高曝光时间、降低帧率,可能会影响体验,同时,极低照度环境功能失效。