V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
uIPC
V2EX  ›  分享创造

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

  uIPC · 4 天前 · 3515 次点击

背景

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

现有产品

在一次冲浪过程中发现了有不少让手机充当网络摄像头的 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 接入
第 1 条附言  ·  4 天前

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

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