撸猫神器 uIPCat!让闲置手机作为边缘视觉计算终端

19 天前
 uIPC

背景

本人是一个搞嵌入式软件开发的铲屎官,外出时经常有远程撸猫的需求,之前尝试过各种市面上的网络摄像头,但大部分摄像头画质跟手机的比起来说还是有很大的差距,并且把一个摄像头放在家里也让人没有那么安全感。

现有产品

在一次冲浪过程中发现了有不少让手机充当网络摄像头的 APP ,刚好自己有一台闲置的 iPhone SE1 。试玩了一圈此类 APP , 大部分只能局域网内实时预览,比较成熟商业化的是一个台湾公司做的阿福管家,但在大陆使用延时和稳定性还是比较一般,并且免费使用的限制太多了,最终得到的画面可能还不如原来的网络摄像头。

实现

在各种的限制下,我就尝试自己开发一个,自己没客户端开发背景,自己有过 WebRTC 底层的调试移植开发经历,略懂上层的 JavaScript WebRTC 应用接口的。如果是基于客户端开发,有多个平台需要兼容,这学习成本有点高,搞不来。

于是我选中一个天生为跨平台而生的方案:Web APP

用浏览器去实现在一个 IPCamera 功能对应的技术栈如下:

  1. 实时预览:原生支持 WebRTC ,省掉流媒体接口和 P2P ICE 的开发调试
  2. 本地存储:基于 IndexedDB 做大容量视频存储
  3. 云端储存:很方便实现第三方对象云存储
  4. 本地 CV:基于 TensorFlow.js ,在浏览器端就可以实现对象识别录像和报警
  5. 端到端加密:借助 URI fragment 特性可实现本地密钥生成,无需经过服务端传输和存储

最终实现效果:https://uipcat.com/

实时视频流预览:

当然,也可以用来摸鱼:

只需要扫码即刻部署:

如何使用

无需注册,在主预览设备打开 https://uipcat.com/,用手机扫码即可作为摄像头节点,保存预览设备跳转到的 URL 作为访问摄像头的唯一权限。

本地 CV

市场上大部分的网络摄像头产品提供了对象侦测功能,但他们的实现基本是需要将图片传到厂家服务端上识别。手机主芯片的算力是远超网络摄像头芯片,所以可以在直接在手机浏览器本地拍对象侦测模型。uIPCat 在本地默认集成了 MediaPipe 的通用对象侦测模型,可以满足绝大部分识别任务,后续开加上自定义模型,部署自己训练的模型,定制识别自己关注的对象。

在对象识别的前置,加了一个画面变化侦测,如有画面变化超过了定义的阈值,才会触发识别处理。

目前开放了绝大部分参数的自定义,后面会简化这个配置。

视频存储

目前默认使用本地存储,数据会被存储在本地浏览器的 IndexedDB ,它本不是完全可靠的存储方案,各浏览器有些许差异。云存储适配了 AList v3 的 API 接口,可以通过 AList 将数据间接存到各个主流的如 S3 等主流储存或云盘方案,支持的存储列表

HomeKit 支持

通过 go2rtc 开源项目接入 HomeKit 平台,该功能目前正在测试中,后续开放。

隐私安全

对于大部分人来说,隐私安全是一个网络摄像头的重中之重。现有市面上的网络摄像头设备,你的隐私安全大部分是基于你对品牌厂家的信任,从实现的技术角度上说,他们是有权限可以直接访问你的摄像头,更别说大部分厂家提供了云存储直接分析处理识别你图片或视频的服务。

uIPCat 基于 WebRTC 链路本身就是基于 DTLS 和 SRTP 加密标准了,重点在于保障信令的安全。uIPCat 信令采用端到端加密方案,在主预览设备本地生成密钥,加密方法 AES-GCM ,密钥附带到 URI fragment 通过二维码线下传输到摄像头节点,加密后的信令数据通过 MQTT 通道传输。

URI fragment 既上图 # 号后字段,它不会传递给服务器端。

开发计划

4844 次点击
所在节点    分享创造
72 条回复
stefwoo
11 天前
node 可以息屏吗?目前我只要息屏,浏览器就停止工作了。
stefwoo
11 天前
我还有一个旧手机报错,系统是安卓 4.4 ,浏览器是 chrome 。

500
b.replaceAll is not a function

@uIPC
uIPC
11 天前
@stefwoo hi
#62 安卓在 5.0 之后才开始支持 WebRTC ,所以 4.4 无法原生支持。
#61 绝大部分的手机在息屏时会直接把摄像头硬件级别的休眠了,所以只能尝试把屏幕亮度降到最低保持常亮。
stefwoo
11 天前
@uIPC 哦。
那太容易烧屏了。
Fred0410
10 天前
@CharlesRey 诺基亚都出来了,6
liuw666
9 天前
@uIPC #63 replaceAll 不存在 加个 polyfill 应该就可以吧
simo
9 天前
这个牛啊
johnwonderful
9 天前
这么厉害,有空试试
zyhedwards
5 天前
@uIPC 部署 mqtt 节点需要费用吗?成本大概多少
uIPC
5 天前
@zyhedwards 需要的,如果连接数在 1000 以下,国内的那种 99 元一年的小机就够了。
zyhedwards
5 天前
@uIPC 感谢解答。 成功打洞获取节点数据后,后续是不是就走 P2P 了?这样看其实带宽流量成本也不是很高?
uIPC
4 天前
@zyhedwards #71 网络类型的不同,P2P 有一定的打通失败率,这时候就需要 TURN 中继,但如果能打得通,就不需要服务端有流量成本了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1049594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX