1. 为什么要在物联网浏览器里做人脸识别
1.1 物联网浏览器到底是个什么东西
先把这个概念讲清楚。很多人一听"物联网浏览器",下意识以为是手机上那种浏览器套壳,其实差得远。我在项目里接触到的IoTBrowser,本质上是运行在工控机、边缘网关、自助终端、门禁一体机上的定制浏览器内核,产品形态可能是一个exe程序、一个Android APK,或者一个嵌入式的WebView容器。它背后往往是Chromium内核,但做了一层面向设备的封装,比如可以调用本地的串口、USB摄像头、身份证阅读器、扫码枪这些外设能力。
为什么不能直接用Chrome?因为现场设备的环境太特殊了。工控机上可能没有显示器,可能触摸屏老化,可能网络隔离,可能不允许安装任何软件。IoTBrowser这种容器就是为这种场景设计的:它把Web页面当成唯一的人机交互入口,同时通过JS桥接接口把设备能力暴露给前端。换句话说,你写的还是HTML和JavaScript,但跑的却是生产环境里的一台24小时开机的工业设备。
人脸识别这个功能放到物联网浏览器里做,其实是把两边的东西拉到了一起。一边是前端JS生态里成熟的计算机视觉库,比如face-api.js、MediaPipe、TensorFlow.js;另一边是物联网终端的真实业务需求,比如访客登记、员工考勤、陌生人告警。直接在浏览器里跑人脸识别,省去了部署独立客户端、训练C++模型、维护Python服务的成本,一套前端代码同时覆盖Windows和Android终端,这个优势在现场项目里特别明显。
1.2 为什么用JS而不是原生开发
很多人问过我一个问题:人脸识别这种重计算的东西,为什么不用C++配合OpenCV,或者用Python调深度学习框架,非要跑到JS里来做?
我的回答分两层。第一层是业务层面的原因:物联网终端的管理后台、业务逻辑、界面渲染,早就用Web技术栈写完了,人脸识别只是其中一个模块。如果为了这个模块再引入一套原生开发流程,等于要在每个终端上单独编译、单独部署、单独维护,团队的人力和时间根本扛不住。用JS做,识别功能就是一个页面里的脚本,业务代码和人脸识别代码之间通过普通的函数调用就能打通,不需要开发跨语言通信组件,这对小团队来说意义重大。
第二层是技术层面的原因:现在浏览器端跑人脸识别已经不是天方夜谭了。WebAssembly把深度学习推理引擎搬到了浏览器里,face-api.js这样的库直接把模型封装成了几个简单的API,TensorFlow.js甚至支持WebGL后端,可以调用GPU算力。在终端设备上做一轮人脸检测和特征提取,耗时普遍在几十毫秒到几百毫秒之间,完全够用。而且JS的异步特性非常适合处理视频流这种持续到达的数据,回调模型非常自然。
当然,JS方案也有天花板,这个后文会细说。但就目前工业现场的绝大多数场景而言,JS在人脸识别上的表现已经足够支撑业务落地了。接下来我就把整个开发过程完整拆开,从技术选型到代码实现,再到现场排障,一条条讲透。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与方案拆解
2.1 摄像头数据怎么拿
物联网浏览器里拿摄像头数据,走的是WebRTC的getUserMedia接口。这个接口的兼容性在Chromium内核的设备上基本没有问题,但现场设备五花八门,驱动质量参差不齐,踩坑概率并不低。核心问题在于:设备上有多个摄像头时,默认设备不一定是你要用的那个人脸识别摄像头;摄像头被其他进程占用时,getUserMedia会直接报错;部分设备在HTTPS环境下才能正常调用,纯HTTP环境下摄像头接口是被浏览器策略禁用的。
针对这几个问题,我在项目里做了一个摄像头探测和选择机制,大致思路是:先用navigator.mediaDevices.enumerateDevices()把设备列表拉出来,过滤出videoinput类型的设备,然后把设备ID和中文名展示在配置页里,让现场实施人员自己选。这个设计虽然土,但在生产环境里非常管用——远程排查摄像头选错问题,比写一堆自动判定的逻辑高效得多。
容错处理也很重要。摄像头被占用的情况在Windows工控机上尤其常见,比如设备厂商的调试工具、远程桌面软件、甚至某些杀毒软件都会抢占摄像头。我在代码里对NotReadableError和NotFoundError都做了明确的用户提示,而不是让页面静默失败。还有一个细节是facingMode参数,在门禁机上如果装了多个方向的摄像头,通过facingMode: "user"往往能优先选到正面摄像头,这个参数在不同设备上的表现差异很大,建议实际到现场测试为准。
2.2 人脸检测模型怎么选
浏览器端能跑的人脸检测模型,主流的有三套方案:face-api.js自带的Tiny Face Detector和SSD MobileNet、Google的MediaPipe Face Detection、纯Te
