爱意满满的作品展示区。
uIPC

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

  uIPC · Jun 14, 2024 · 13939 views
This topic created in 877 days ago, the information mentioned may be changed or developed.

背景

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

现有产品

在一次冲浪过程中发现了有不少让手机充当网络摄像头的 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/

实时视频流预览: image

当然,也可以用来摸鱼: image

只需要扫码即刻部署: image

如何使用

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

本地 CV

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

image

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

image

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

视频存储

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

HomeKit 支持

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

隐私安全

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

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

image

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

开发计划

  • 接入 Home Assistant ,通过自定义 MQTT 推送对象侦测报警
  • 开放设备接入 SDK ,可自行接入如树莓派、ESP32 等 DIY 设备。
  • 开放摄像头节点 API 能力,作为多模态大模型的前置边缘视觉处理器(正如标题党那样)
  • 自定义模型,提供在线模型训练方法
  • 更多类型的云存储 API 接入
Supplement 1  ·  Jun 14, 2024

在 Settings 可以设置选择摄像头: image

76 replies  •  2026-05-22 20:08:58 +08:00
wensonsmith
wensonsmith
Jun 14, 2024
1
666, 不错的项目啊
shyrock
shyrock
Jun 14, 2024
2
感兴趣。
Ericality
Ericality
Jun 14, 2024
3
耳目一新的感觉 马一下回家试试
R4rvZ6agNVWr56V0
R4rvZ6agNVWr56V0
Jun 14, 2024
4
非常可以
dapang1221
dapang1221
Jun 14, 2024
5
太强了,一堆旧手机有用了
forvvvv123
forvvvv123
Jun 14, 2024
6
nb 啊
Ziuc
Ziuc
Jun 14, 2024
7
很强,学习了
uIPC
uIPC
OP
Jun 14, 2024
8
感谢各位大佬支持,之前一直是自用,首次公开放出来,欢迎大家试用多提意见。
Zaner
Zaner
Jun 14, 2024
9
只能使用前置摄像头吗?
uIPC
uIPC
OP
Jun 14, 2024
10
@moonbeama 在 Settings 里可以改变摄像头
amber0317
amber0317
Jun 14, 2024
11
技术很强,完成度也很高,支持一波
Yukineko
Yukineko
Jun 14, 2024
12
不错噢,之前也有想法训练个模型通过摄像头识别猫是否在喝水/吃饭
outcastveron
outcastveron
Jun 14, 2024
13
非常 nb 的项目,支持!!
jazz1988
jazz1988
Jun 14, 2024
14
厉害,非常棒
BQsummer
BQsummer
Jun 14, 2024
15
手机长时间插电源会不会鼓包完全看人品
cincout
cincout
Jun 14, 2024
16
太厉害了
uIPC
uIPC
OP
Jun 14, 2024
17
@Yukineko 完全可以!如果直接扔到多模态大模型里,甚至都可以不用训练专用模型,猫是否在睡觉,吃东西还是拉翔,都可以直接高识别率识别出来,配合 Home Assistant 可以做很多原来难以实现的智能家居场景联动。
shyling
shyling
Jun 14, 2024
18
有点东西!
7gugu
7gugu
Jun 14, 2024
19
有点牛逼,下班试试看
uIPC
uIPC
OP
Jun 14, 2024
20
@BQsummer 是的,发热是导致鼓包主要原因,我花了很多时间优化本地 CV 发热问题,现在已经好很多了。如果不开本地画面侦测,CPU 占用极低,基本只需要维持一路 MQTT 在线就好了,摄像头不工作时可以处于休眠状态。
duffercn
duffercn
Jun 14, 2024
21
这个太酷了!
Jesmora
Jesmora
Jun 14, 2024
22
我比较笨,iOS 如何切换到后置摄像头
fenghao0108
fenghao0108
Jun 14, 2024
23
这方案吊炸天啊
uIPC
uIPC
OP
Jun 14, 2024
24
@Jesmora 哈,是我体验没做好,在 Settings 可以设置选择摄像头,我后面优化下这个设置的位置。
povsister
povsister
Jun 14, 2024 via iPhone
25
厉害,抽空研究看看
yinghu183
yinghu183
Jun 14, 2024 via iPhone
26
牛逼的项目,期待接入 homeassistant 。
PqgpNgA0wk
PqgpNgA0wk
Jun 14, 2024
27
感觉这个项目已经做的挺全,还有 us 链路
uIPC
uIPC
OP
Jun 14, 2024
28
@PqgpNgA0wk 部署了中国区和美国区两个 MQTT 信令节点,还两个 coturn P2P 打洞和 TURN 中继节点。
uIPC
uIPC
OP
Jun 14, 2024❤️1
29
@yinghu183 已经在开发了,我自己也是重度的 homeassistant 用户,一定会支持好的。
XMV2e4PmK5F85h17
XMV2e4PmK5F85h17
Jun 14, 2024
30
一个手机扫码后 可以看到画面了 但是没有看到 setting 在哪里 另外 怎么用另外一个手机查看呢
1044523901
1044523901
Jun 14, 2024
31
蹲开源
ixwen
ixwen
Jun 14, 2024
32
@uIPC #24 这个感觉放在首页 切换主体旁边会方便点
XMV2e4PmK5F85h17
XMV2e4PmK5F85h17
Jun 14, 2024
33
好像有点问题 另外一个手机查看的时候 看不到画面
uIPC
uIPC
OP
Jun 14, 2024
34
@Sniper000 在预览端设置,摄像头节点扫完码就可以不用动了,设置都在另外一个手机完成的。
uIPC
uIPC
OP
Jun 14, 2024
35
@1044523901 会先开源设备接入 SDK ,主站的前端是我现学现用的,后面代码成熟见得了人了可以考虑开源。
uIPC
uIPC
OP
Jun 14, 2024
36
@ixwen 好主意,我看下怎么比较好的放到主页,现在控制栏被按钮占满了,原来是在那里的。
uIPC
uIPC
OP
Jun 14, 2024
37
@Sniper000 正常是支持多设备同时看一个摄像头节点的,你方便把浏览器版本信息发我下吗?我看下测下是不是兼容问题。
slowman
slowman
Jun 14, 2024
38
神了
lucifer9
lucifer9
Jun 14, 2024
39
主要问题还是手机不好固定啊
尤其是要兼顾视角和充电的位置
07aPzknB16ui9Cp3
07aPzknB16ui9Cp3
Jun 14, 2024
40
手机当监控最大的问题是过热,所以还是得上专门的摄像头
chancat
chancat
Jun 14, 2024 via Android
41
我用阿福管家
swordspoet
swordspoet
Jun 14, 2024
42
厉害了
Michelangelono
Michelangelono
Jun 15, 2024
43
可以搞个大屏视图,就是一个界面同时显示多个监控画面
brianinzz
brianinzz
Jun 15, 2024
44
厉害!
Voren
Voren
Jun 15, 2024
45
手机扫描二维码后
打开的网页
手机也是一片黑,PC 也停留在二维码,貌似没有任何用
gosby
gosby
Jun 15, 2024 via Android
46
马赛克砖块儿好像用的是 UTC 时间比实际会慢 8 个小时
stefwoo
stefwoo
Jun 16, 2024 via Android
47
长期插电怕鼓包,可以把电池改成大电容,我改过一个。
uIPC
uIPC
OP
Jun 16, 2024
48
@Michelangelono 嗯嗯,这个计划搞,类似虚拟 NVR 。
uIPC
uIPC
OP
Jun 16, 2024
49
@stefwoo 是的,淘宝有那个去掉电池的电芯 ic 可以换。
uIPC
uIPC
OP
Jun 16, 2024
50
@gosby 这个是热力图组件的一个 bug ,设置时区不生效,我关注下。
uIPC
uIPC
OP
Jun 16, 2024
51
@wuzzispacelake 如果手机充电本身不发热,其实也还好,各有各的应用场景吧,你可以当作软路由和硬路由的区别。
CharlesRey
CharlesRey
Jun 16, 2024
52
或许是我这个手机太旧了,并不支持😂😂😂😂😂😂![IMG_4840.JPG]( https://p0.meituan.net/dpplatform/3a2f60d206a28538b7a54290cf4a89c07091115.jpg)
CharlesRey
CharlesRey
Jun 16, 2024
53
或许是我这个手机太旧了,并不支持😂😂😂😂😂😂![]( https://p0.meituan.net/dpplatform/3a2f60d206a28538b7a54290cf4a89c07091115.jpg)
CharlesRey
CharlesRey
Jun 16, 2024
54
或许是我这个手机太旧了,并不支持😂😂😂😂😂😂[]( https://p0.meituan.net/dpplatform/3a2f60d206a28538b7a54290cf4a89c07091115.jpg)
stefwoo
stefwoo
Jun 16, 2024 via Android
55
nokia 。哈哈哈哈。
uIPC
uIPC
OP
Jun 16, 2024
56
@CharlesRey 牛逼,可以装 chrome 吗?至少是浏览器支持了 WebRTC 才可以,目前主流的都支持。
Xushet
Xushet
Jun 17, 2024
57
@BQsummer #15 手机设置智能断充就好了
midpoint
midpoint
Jun 17, 2024
58
很有意思,不错的想法
stonesirsir
stonesirsir
Jun 18, 2024
59
@BQsummer 这个确实也算一个问题
52lvqiang
52lvqiang
Jun 19, 2024
60
非常棒,感谢分享!
stefwoo
stefwoo
Jun 22, 2024 via Android
61
node 可以息屏吗?目前我只要息屏,浏览器就停止工作了。
stefwoo
stefwoo
Jun 22, 2024 via Android
62
我还有一个旧手机报错,系统是安卓 4.4 ,浏览器是 chrome 。

500
b.replaceAll is not a function

@uIPC
uIPC
uIPC
OP
Jun 22, 2024
63
@stefwoo hi
#62 安卓在 5.0 之后才开始支持 WebRTC ,所以 4.4 无法原生支持。
#61 绝大部分的手机在息屏时会直接把摄像头硬件级别的休眠了,所以只能尝试把屏幕亮度降到最低保持常亮。
stefwoo
stefwoo
Jun 22, 2024 via Android
64
@uIPC 哦。
那太容易烧屏了。
Fred0410
Fred0410
Jun 23, 2024
65
@CharlesRey 诺基亚都出来了,6
nowtg
nowtg
Jun 24, 2024 via iPhone
66
@uIPC #63 replaceAll 不存在 加个 polyfill 应该就可以吧
simo
simo
Jun 24, 2024
67
这个牛啊
johnwonderful
johnwonderful
Jun 24, 2024
68
这么厉害,有空试试
zyhedwards
zyhedwards
Jun 28, 2024
69
@uIPC 部署 mqtt 节点需要费用吗?成本大概多少
uIPC
uIPC
OP
Jun 28, 2024
70
@zyhedwards 需要的,如果连接数在 1000 以下,国内的那种 99 元一年的小机就够了。
zyhedwards
zyhedwards
Jun 28, 2024
71
@uIPC 感谢解答。 成功打洞获取节点数据后,后续是不是就走 P2P 了?这样看其实带宽流量成本也不是很高?
uIPC
uIPC
OP
Jun 29, 2024
72
@zyhedwards #71 网络类型的不同,P2P 有一定的打通失败率,这时候就需要 TURN 中继,但如果能打得通,就不需要服务端有流量成本了。
opopoipipip
opopoipipip
Oct 9, 2024
73
这个厉害,支持!
chancat
chancat
Apr 25, 2025 via Android
74
今天回来看看了...emm 我的浏览器无论手机还是 pc,出于安全和隐私和防止某无良 b 网站偷跑 pcdn,必禁用 webrtc
chancat
chancat
Apr 25, 2025 via Android
75
@chancat 还有禁用 quic 直接路由规则拉入黑洞
evanki
evanki
May 22
76
26 年了,开源不👀
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   544 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 131ms · UTC 22:21 · PVG 06:21 · LAX 14:21 · JFK 17:21
♥ Do have faith in what you're doing.