【Hello AI 科技致善】每一个被辞退的"无故爆发"背后:给特殊就业者做的一只压力检测桌宠

【Hello AI 科技致善】每一个被辞退的"无故爆发"背后:给特殊就业者做的一只压力检测桌宠

项目地址:https://github.com/YUHAO-corn/banban-desktop-pet
面向人群:心智障碍就业者,及所有长期伏案工作、容易撑过头的打工人
技术栈:Python · MediaPipe · Electron · 100% 本地运行

BanBan 压力提醒演示:从正常陪伴到黄牌、红牌提醒

BanBan 压力提醒演示


:pushpin: 摘要

BanBan 是一只 macOS 桌面宠物,为心智障碍就业者(孤独症谱系、精神障碍康复者、轻度智力障碍等)在办公场景下的压力积累问题做一个缓冲。

它用摄像头观察四类面部压力线索——皱眉、眯眼、嘴唇紧绷、表情冻结,在人过载前举黄牌、红牌,弹出一句气泡提醒"先停一下"。不替代就业支持员,只在支持员不在场的时候,替他们看一眼。

启动时做 10 秒个人平静基线校准,减少因人而异的误判。摄像头数据本地处理,识别完即删,不联网不上传。


:bullseye: 真实场景与需求

先说一下我是谁

我曾做过一段社工工作,那时候接触过一些心智障碍群体的就业支持,对这个群体本身有一点耳闻。这次黑客松选题时一看到"心智障碍群体就业"这个方向,基本没犹豫。

"有所耳闻"和"能做出一个有用的产品"之间差很远,所以我又重新做了一轮调研:

  • 关注了暖星社区(国内较早关注心智障碍者的公益组织)的公众号
  • 看了几部纪录片:《星星的少年》《蜗牛人生》,以及一部叫《善工家园》的
  • 翻了一线就业支持员、特教老师、心智障碍者家属在小红书和微信公众号上的记录
  • 去一个社区日间照料机构实地走访,看这个群体在受支持的环境下是怎么工作的

下面这一节,是这轮调研里让我印象最深的东西。

目标人群

心智障碍就业者不是一类人,而是一组场景接近但需求各异的群体:

子群体 就业中的典型处境
孤独症谱系 可以胜任重复性岗位,但容易感官过载、社交耗竭,回到工位后停留在内耗里出不来
精神障碍康复者 能力通常没问题,但焦虑、抑郁、创伤反应可能突然袭来,不愿向同事暴露
轻度智力障碍 能完成任务,但遇到催促、指令变化、多步骤切换时容易紧张、卡死

这些情况不一样,但有一个共同点——压力积累的时候,他们自己未必意识得到,身边也未必有人能看出来。

痛点——一个具体的真实场景

《善工家园》那部片子里有一个男孩。他不主动说话,按着简单的指令慢慢做事。辅导员一直陪着他,不敢走远,因为只要同事语速突然变快,或者手头的任务换一个,他就会僵在那儿,手足无措。

但给他几分钟,他是能转过弯的。他是能做事的。

问题不是他不能工作,是没人在他快卡死的那一刻轻轻提醒他一下。

这种情况不是个案。公开资料里反复出现的几个数字:

  • 中国心智障碍群体规模约 1200 万
  • 这一群体的就业率不足 5%
  • 专业就业支持员资源稀缺,一个支持员通常对接十几甚至几十个就业者

现实里的困境大致是这样一个循环:雇主担心"没人看着会出事",不敢聘用;好不容易上岗,支持员没法时时刻刻在身边;压力和过载在无声处累积,当事人自己没意识到;某一刻"突然崩溃",在雇主眼里就是不稳定,于是辞退;然后下一次就业更难。

现有方案及不足

方案 实际感受
专业就业支持员 真正有效,但资源稀缺,无法 1v1 常驻
定时休息闹钟、番茄钟 和当事人真实状态脱钩——不累的时候吵人,真累的时候还没到点
通用情绪识别 SDK 多数为"情绪分类"(开心、难过、愤怒等),而心智障碍者很多是述情障碍,没有明显情绪表情
家属、同事口头提醒 依赖人在场,也依赖当事人愿意暴露状态,隐私和尊严成本高

共同的缺口是同一个:没有一个不依赖人力、不暴露状态、能在过载前主动轻提醒的工具。


:microscope: 为什么这个群体的压力更难被看见

这一节想认真回答一个问题:对心智障碍就业者来说,"压力积累"为什么会变成一个特别棘手的问题?公开的临床文献和就业支持手册里,这件事有几条相对共识的解释:

1. 述情障碍(Alexithymia)

“述情障碍"指的是"识别、理解、用语言表达自己情绪的能力受损”。这不是心智障碍者独有的现象,但在孤独症谱系人群中,述情障碍的共病率远高于普通人群——不同研究给出的数字差异较大,较常见的区间是 40%–60%

它导致的直接结果是:当事人自己可能体感已经不适了,却说不清是哪里不对,也说不出"我快撑不住了"这句话。外界看到的只是突然的沉默、走开、或某一刻的爆发——所谓"无故",其实只是信号没有被翻译出来而已。

2. 感官处理差异(Sensory Processing)

孤独症谱系、感统失调、部分精神障碍康复者中,常见感官输入阈值异常——对声音、光照、触感、人群密度的耐受度比普通人窄得多。普通办公室里"背景噪音"“同事经过”"空调声"这类对多数人可忽略的刺激,对他们可能是持续消耗

感官过载的累积过程很安静:当事人通常不会抱怨,但会慢慢变僵、变冷、变得不再回应,直到某个临界点——而那个临界点对外部看起来几乎毫无预兆。

3. 执行功能与切换成本

轻度智力障碍和部分孤独症谱系者的执行功能(task switching、working memory、inhibition control)通常偏弱。这意味着:

  • 被临时打断,恢复原任务需要更长时间
  • 指令一变,需要重新理解整个流程
  • 多步骤任务容易在某一步卡住,自己无法跳过

当场景叠加(催促 + 指令变化 + 人声干扰),他们不是"不想做",是认知负荷瞬间爆表。外部看到的是"僵在那儿",内部是一场他们自己也控制不了的风暴。

这三件事合在一起意味着什么

意味着对这个群体来说,岗位上的"崩溃"几乎不会有明显的情绪预警——因为他们自己可能都没法用语言定位自己的状态。传统的"察言观色""情绪识别 API"在这类场景下基本失灵。

真正能被捕捉的,只剩下身体最底层、最诚实的那一层反应:眉间肌肉的紧绷、眼轮匝肌的收缩、唇部肌群的抿紧、整张脸的僵硬度。这就是 BanBan 为什么只抓"压力线索"而不抓"情绪类别"的根本原因——不是技术偷懒,是这个群体真实的样子就是这样。


:bar_chart: 这件事国内有人做过吗?——市场与现有产品调研

做这个项目前,我系统梳理了国内现有的心智障碍支持与就业辅助产品,大致分四类:

类别 代表产品 做的是什么 缺口
行为干预 / ABA 训练平台 ALSOLIFE、大米和小米、恩启 面向家长、康复师,基于 ABA 应用行为分析做能力评估和训练课程 重心在"康复训练"环节,几乎不覆盖"已就业者在岗位中的实时支持"
孤独症标准化评估量表 PEP-3、M-CHAT、ABC 量表(线上化版本) 结构化评估儿童的发展阶段与能力维度 针对学龄前与学龄期儿童,不是为成年就业者设计的
公益资源平台 暖星社区、星宝自闭症网 家长互助、政策信息、康复资源 以社区和信息为主,不提供就业场景中的工具
通用情绪识别 / 番茄钟 App Apple Face ID 情绪识别、Forest、番茄 Todo 面向大众做情绪分类或时间管理 不考虑心智障碍群体的特殊性,对述情障碍人群几乎无效

这里面有一个明显的空白:“就业后、岗位中、实时的、不依赖人力的、不暴露状态的压力支持工具”——几乎没有

这也能和公开数据对得上:中国残疾人联合会发布的《残疾人事业统计年鉴》多次提到,心智障碍群体的就业稳定率低于其他障碍类别,就业支持员资源严重不足。公益机构(如晓更基金会、融爱融乐、慧灵)的实践手册中,"岗位中的情绪支持和即时干预"被反复列为支持员最耗时、最难覆盖的环节。

换句话说,这个缺口是真实的,不是我拍脑袋造出来的。

BanBan 在这个版图里的位置

就业者在岗位上、没有人陪伴、压力在悄悄升高的那个瞬间。

这个瞬间以前要靠支持员、靠同事、靠运气。BanBan 想做的,是把这个瞬间稳定地交给一只桌面上的小动物


类型:macOS 桌面应用(Electron + 本地 Python 后端)

一句话:一只陪你工作的桌面宠物,在你快撑不住的时候举牌提醒你停一下。

针对前面的痛点,BanBan 分别做了什么

不按功能 A、B、C 罗列,直接把问题和解法对齐给你看:

痛点 BanBan 的解法
心智障碍者没有明显"情绪表情",传统情绪识别抓不到 不做情绪分类,只做压力线索识别。抓皱眉、眯眼、嘴唇紧绷、表情冻结这四类微表情——身体最先诚实做出来的反应
每个人平静时的表情基线不一样,绝对阈值容易误报 启动时做 10 秒个人平静基线校准,后续算相对变化,不再用统一阈值一刀切
过载是一个持续状态,不是一瞬间 Electron 主进程跑一个状态机,压力持续 30 秒以上达到 60 才进入提醒态,提醒后 5 分钟冷却,避免频繁打扰
生硬弹窗对这类群体可能是二次刺激 换成桌宠举牌加气泡,黄牌到红牌,一句"先停一下嘛,喝口水,把思路捋一捋",像同事轻拍肩膀,不是警报
这类人群对隐私极度敏感,办公场合又涉及同事和机密文件 100% 本地,不联网不上传;Monitor 面板的预览图做过马赛克背景加主要人脸区域的处理,识别完即删
关掉摄像头就没用了,就变成一次性噱头 关掉摄像头它也还是一只桌宠,可以拖、可以点,待机时像呼吸一样浮动

三种状态一眼看懂

正常陪伴 → 黄牌提醒 → 红牌提醒:BanBan 的三种状态

  • 正常陪伴(stress < 50):安静待在屏幕一角,呼吸式浮动,偶尔点头
  • 黄牌提醒(stress 50~75 持续 30 秒):举起黄牌,轻度警示
  • 红牌提醒(stress ≥ 75):举起红牌并弹出气泡——“先停一下嘛,喝口水,把思路捋一捋。”

Monitor 面板:让使用者自己也能看懂

Monitor 面板:个人基线校准、压力线索信号条、隐私预览

Monitor 是一个可选的侧边面板,展示几样东西:

  • 当前压力分数(0–100)和状态
  • 四类压力线索的实时信号条
  • 校准状态(未开始、校准中、已完成)
  • 隐私预览:马赛克背景加主要人脸区域,让使用者确认摄像头选对了、自己在画面里,但不露同事或屏幕内容
  • 摄像头状态、后端状态、最新样本时间

这部分挺重要的——很多心智障碍者本身就对"看不见的监控"非常警觉。Monitor 让一切可见、可确认、可自己关。

技术选型

选型 为什么
后端 Python 3 + MediaPipe FaceLandmarker + OpenCV 本地跑;blendshapes 直出微表情系数,不需要自己训练
桥接 本地 JSON 文件(/tmp/banban_stress.json)+ 隐私预览图 解耦后端和前端,一方挂掉另一方不受影响
状态机 Electron 主进程 统一管窗口、轮询、冷却逻辑
桌宠 HTML + Canvas + 逐帧 spritesheet 拖拽、点击、呼吸动画都更自然
隐私 所有临时文件退出即清理,不写持久日志 对齐"识别即删"的承诺

:hammer_and_wrench: 用 SOLO 实现的过程

我不是程序员,本职工作在完全另一条赛道。这次能做出 BanBan,是和 TRAE SOLO 结对搞出来的。整个过程我的心态其实挺简单:讲清背景和目标,剩下的一起推。

从像素小猫到 SVG 浣熊再到现在的 BanBan:三代形象演进

任务拆解

把黑客松命题拆成 5 个阶段,每段让 SOLO 独立完成,我来验证:

阶段 产出
:one: 需求共创 把心智障碍群体就业场景的调研材料喂给 SOLO,一起讨论"压力线索识别"这个切入点,敲定不做情绪分类
:two: 后端压力识别 Python + MediaPipe FaceLandmarker,提取 blendshapes 映射成四类压力信号,写入本地 JSON
:three: Electron 状态机 轮询 JSON,维护 idle / alert / cooldown 三个状态,驱动桌宠 UI,管理 Monitor 面板
:four: 桌宠 UI 从纯 SVG 小团子换成 AI 生图帧,再做成逐帧 spritesheet 合成动画
:five: 精度校准 + 隐私预览 引入个人平静基线、Monitor 预览图马赛克处理、临时文件清理

用到的 SOLO 能力

  • 多轮对话理解需求:我不会用一段精心设计的 prompt 把产品一次性描述清楚,全程都是"讲现状、讨论、调整、继续讲"。SOLO 能稳定承接上下文,我不用每次重新铺背景。
  • 跨语言跨层联调:同一轮对话里同时改 Python 后端、Electron 主进程、HTML / Canvas 前端、本地 JSON 桥接协议,不用手工切项目。
  • 自动化调试:遇到问题直接让 SOLO 读日志、改代码、重启验证,我不用逐行理解每一个 bug。
  • 素材落地:AI 生成的角色图片帧切成 spritesheet、写动画状态机、接进真实窗口——这种算不上算法但很繁琐的活,SOLO 处理得比我自己来快得多。

几个有代表性的 Prompt

Prompt 1:方向共创

“我要参加一个黑客松比赛,面向心智障碍群体就业支持。这个群体很多人是述情障碍,没有明显喜怒哀乐,传统情绪识别抓不到。我们讨论一下到底识别什么、怎么识别。”

SOLO 建议:不做情绪分类,做压力线索识别。用 MediaPipe blendshapes 抓皱眉、眯眼、嘴唇紧绷、表情冻结这几类微表情,映射成 0–100 压力分。

Prompt 2:换技术路线

“原本用 SVG 代码直接画桌宠,但效果太僵。我刚看到有人用’先生图再逐帧合成动画’的做法,你觉得可行吗?我俩都没做过。”

SOLO 说可以试,然后自己把 AI 生成的帧切好、排好 spritesheet、写好动画状态切换。我只负责生图。

Prompt 3:解决压力识别误判

“我平静坐着就 60 分了,稍微皱下眉就报警。这不行,区间太小了。”

SOLO 提了一个关键设计:每个人平静时表情本来就不一样,用绝对阈值不公平。在启动时做 10 秒基线校准,后续按相对变化算分。这个改动把精度从"勉强能用"推到"可以交作业"。

真实踩过的坑

# 问题 解决
1 压力识别误判率高——平静状态 60 分,皱一下眉就警报,区间太窄 引入 10 秒个人平静基线校准,算相对差值而非绝对阈值
2 桌宠 UI 做得太僵——SVG 代码画的团子缺乏生动感 改用 AI 生图加逐帧 spritesheet 合成动画,角色表现力上来了
3 提醒太频繁让人烦——压力一过阈值就弹,反而变成新的压力源 加入 30 秒持续阈值加 5 分钟冷却,状态机保证一个完整周期只提醒一次
4 隐私预览太真——原本 Monitor 显示的预览图直接是摄像头原图,同事和屏幕全露 改为马赛克背景加主要人脸区域,只保留"我看见了自己"的确认感
5 退出时临时文件没清——/tmp/banban_stress.json 和预览图会残留 Electron 退出钩子统一清理,不写持久日志

这几个坑看起来是技术问题,实际上每一个都是在回答同一个问题:这个工具到底替谁做决定?


:wrapped_gift: 成果展示

GitHub 仓库

https://github.com/YUHAO-corn/banban-desktop-pet

启动方式(macOS)

# 安装依赖
pip3 install mediapipe opencv-python
cd electron && npm install

# 启动(Electron 会自动拉起 Python 后端)
npm start

首次启动时 macOS 会询问摄像头权限,允许后即用。所有数据本地处理,不联网、不上传、识别即删。

关键体验

场景 你会看到
首次启动 10 秒基线校准倒计时,建议保持平常的工作表情
正常工作 BanBan 安静陪你,呼吸式浮动,偶尔点头
压力上升 黄牌竖起,轻度警示,不打扰
过载 红牌加气泡:“先停一下嘛,喝口水,把思路捋一捋”
关掉摄像头 识别停止,但 BanBan 依然可以拖拽、点击、陪着你
打开 Monitor 看到压力分数、四类线索信号、校准状态、隐私预览

:white_check_mark: 验证方式与下一步

已完成的验证

类型 内容
端到端闭环 摄像头到 MediaPipe 到压力计算到 JSON 到 Electron 状态机到桌宠 UI 到气泡提醒,完整跑通
基线校准有效性 自己对比校准前后:平静状态误报从"稍皱眉即警报"降到"持续绷紧 30 秒才警报"
长时使用 我自己连续用了几个工作日。它举黄牌的那一刻,我几乎每次都是真的在硬撑,比我自己觉察得早
隐私模型 退出应用后 /tmp/banban_stress.json 和预览图都被清理,不留本地持久数据

还没做完、接下来想做的

  • 邀请真实的就业支持员、特教老师试用,用他们的视角评估是不是真的在帮到就业者
  • 适配 Windows(目前只在 macOS 跑通)
  • 压力趋势记录——可选地给使用者看"今天你绷了几小时",帮助自我觉察
  • 和心智障碍公益机构对接,看看能否在社区日间照料、庇护工场这类场景做小规模试用

诚实说一下目前的局限

  • 压力识别在侧脸、强光、戴眼镜反光的情况下精度会下降
  • 目前气泡只有一句,多样化和对不同人群的适配还没做
  • 这是一个原型,不是医疗产品,不替代医生、心理咨询师、专业就业支持员

:light_bulb: 一点感受

做这个项目之前,我对"压力在心智障碍就业者身上怎么一点点积累"这件事,其实只有书面上的理解。做完这轮调研、看完那些纪录片、亲手把这只桌宠做出来之后,我比以前更清楚一件事:

对这类群体来说,最难的不是做事,是没人在那一刻轻轻提醒他们一下。

BanBan 替代不了一个活生生的就业支持员。但如果它能在一个支持员顾不过来的时刻、在一个没有家属陪伴的工位上,替他们看出"这个人绷了太久了",那已经够了。

顺便也希望这只小东西能提醒到正在看这篇帖子的你:今天如果累了,就先停一下。


:folded_hands: 感谢 TRAE SOLO 和公益赛道

作为一个非技术背景的人,如果没有 SOLO 这种"讲清楚你要什么,剩下的一起推"的协作方式,我大概率做不出这个东西。

这次让我有了一个正当的理由,把以前做社工时候放在心上、但一直没机会动手的事,真的做出来一个雏形。

欢迎评论区聊聊:

  • 你会不会也是那个"看起来没事、但其实在硬撑"的人?
  • 如果你自己是心智障碍者的家属、同事、雇主,非常衷心希望你能提供建议,你觉得这只桌宠要怎么改,才能真的在你那个场景里用得上?

# 1

发帖后一直在想,有个小细节应该单独讲一下:启动前 10 秒的"平静基线校准"。

▎ 其实这个功能是我们踩了很久的坑才加上的。最早版本没有它,结果测试时发现:我在
平静状态下压力分就已经是 60 分了,到了 70分才报警——区间太小,稍微皱一下眉就触发。

▎ 后来和 SOLO讨论,它提了一句"不同人的默认表情是有差异的",我才反应过来:绝对值识别根本不公平。特别是对心智障碍群体来说,他们的平静状态可能本身就和大多数人不太一样。

▎ 加了基线校准之后,80分的标准才真正达到。这可能是整个项目里我最满意的一次"共创推翻原方案"。

我是一个社区义工,曾经也作为辅导员,辅导过一些特殊人群就业。

他们真的远远没有我们想的那么差劲,相反,他们很用心。他们只是需要一些帮助。而情绪管理,是我作为辅导员给他们上的最多的一课。

这是一个很有意义的项目。

谢谢!希望您作为辅导员,能够给我提供一些您接触到的真实场景:

  1. 您认为它们(情绪)都是在什么时候爆发的?
  2. 您是怎么给它们做情绪疏导并帮助到它们的?

我非常希望这个宠物不只是能够去做识别,而是也要能做到情绪疏导,能够更好帮上它们。

当上级给他们讲不清楚东西的时候,他们会很纠结。

所以如果这个产品真的要帮忙的话,可能需要打通一个环节:去改变环境,而不是改变人。

例如,我们会带他们去阳台站一会儿,在安静的情况下晒一晒太阳,转移一下注意力。

为什么不火 :angry: ,我真的很喜欢这个风格!

啥时候可以有windows版啊啊啊 :pleading_face:

感谢你的作品的喜爱!我也特别喜欢这种又怀旧又有点潮潮的感觉

我抓紧更新一下~

因为之前考虑到,如果是在 Windows 的话,可能很多电脑本身不像MacBook一样没有摄像头,不太好去检测用户的压力,所以就先没有做

但是本身作为一只桌面宠物来运行也是没有问题的。

等我更新之后,我第一时间通知你哦。

谢谢你的建议!谢谢你加入这款产品的共创。你觉得我们接下来让它检测到压力的时候,应该做哪些功能会比较好呢?

我目前有几个想法:

  1. 当压力特别大的时候,去通知他的紧急联系人(比如辅导员、主管或者家人),由人来引导他。因为在这种情况下,宠物可能已经无法起到治愈作用了。
  2. 假如压力不是那么大,可以提醒他去阳台透透气或者去喝口水。
  3. 另外一个可能更实际的想法是,给他播放一两分钟治愈系的小视频(比如好看的风景或温馨的动画),通过这种方式转移一下注意力。