Loading... [ ](https://www.bilibili.com/video/BV1X3411p7Gq/) # 介绍 我最近在研究从一个普通的IP摄像头,部署成一个智能的可接入的摄像头,通过软件层面**本地**实现这些功能。 其实市面上有很多针对家庭的摄像头了,但是他们的AI和视频文件是发送云端的,用户没有很多控制,我这套教程则是摄像头可以**完全的隔离互联网**,数据全部是在自己的手上,自动化也不依赖互联网。 ## 摄像头选择 必须是IP摄像头,支持`rtsp`推流。我买的是工厂DIY那种的,大家淘宝搜IP 摄像头应该就能找到。 像小米之类的摄像头是不开放`rtsp`推流的,买设备之前记得问清楚!!! # 准备工作 ## 安装home assistant 首先你要先安装home assistant,本教程的home assistant是直接使用社区安装的 https://www.bilibili.com/video/BV1Jq4y157rU/ ## 安装MQTT 直接社区安装`mosquitto`,全部默认安装,**不要打开认证**,名字要和应用名一样 ## home assistant安装MQTT集成   host是`mosquitto.ix-mosquitto.svc.cluster.local` 端口是默认的端口 # Frigate Frigate是一个NVR服务(录制保存监控视频),它是支持一些物品的检测,如检测到人移动自动录像和截图等,它也可以检测猫、狗、自行车等等。有非常多的参数,[官方文档](https://docs.frigate.video/)注释写的也比较全 ## 应用安装 社区里其实有这个软件,但是是在孵化器,而且功能比较复杂,需要完全的代码重构,在进入稳定版之前不建议使用,所以我们使用custom app自己安装。 在安装之前我们需要先写一个配置文件 大家自行创建存放frigate的数据集或者文件夹,在文件夹下创建`config.yml` ``` mqtt: host: mosquitto.ix-mosquitto.svc.cluster.local port: 1883 birdseye: enabled: False mode: motion width: 1280 height: 720 objects: track: - person # - car # - motorcyle # - cat # - dog # Optional: list of objects to track from labelmap.txt (default: shown below) ffmpeg: output_args: record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac cameras: cam: mqtt: timestamp: False bounding_box: False crop: True quality: 100 height: 500 ffmpeg: inputs: - path: rtsp://你的相机地址 roles: - detect - rtmp - record detect: height: 720 width: 1280 fps: 5 record: enabled: True # Optional: timeout for highest scoring image before allowing it # to be replaced by a newer image. (default: shown below) retain: days: 30 snapshots: enabled: True ``` 上面这套配置就是自动检测有人自动录像截图,并会推送到MQTT,更多配置去看官网吧。这个软件的探测官方推荐是使用谷歌的Coral TPU,但是这个东西不好买,默认是使用CPU。 接下来在文件夹创建一个文件夹用来存放截图,录像等 然后安装软件,使用custom app  名字最好和我一样 应用名称:frigate Container Repository:blakeblackshear/frigate Container Tag:stable-amd64nvidia   mountPath:/config/config.yml  mountPath:/media/frigate  mountPath:/tmp/cache  其他默认就行 部署完成后,你应该可以访问,看到你是摄像头的实时画面。 ## 安装home assistant集成  在HACS安装frigate集成,重启  然后安装集成,地址是`frigate-custom-app.ix-frigate.svc.cluster.local`,端口5000,一般会自动发现! # 安装double-take ## 介绍 这个软件可以把frigate和deepstack链接一起。frigate检测到人推送到double-take,double-take将截图发送给deepstack进行AI识别,同时double-take还提供人脸识别到某人将事件推送到MQTT等等推送。我们就是利用这一点可以做到自动化 ## 安装 安装之前,请自行创建文件夹或者数据集用来存放文件。double-take我已经开发到社区,直接默认安装就行,把储存改为hostpath,挂载到你创建的文件夹就行,其他默认安装  ## 配置  ``` mqtt: host: mosquitto.ix-mosquitto.svc.cluster.local topics: # mqtt topic for frigate message subscription frigate: frigate/events # mqtt topic for home assistant discovery subscription homeassistant: homeassistant # mqtt topic where matches are published by name matches: double-take/matches # mqtt topic where matches are published by camera name cameras: double-take/cameras detect: match: # save match images save: true # include base64 encoded string in api results and mqtt messages # options: true, false, box base64: false # minimum confidence needed to consider a result a match confidence: 60 # hours to keep match images until they are deleted purge: 168 # minimum area in pixels to consider a result a match min_area: 1000 unknown: # save unknown images save: true # include base64 encoded string in api results and mqtt messages # options: true, false, box base64: false # minimum confidence needed before classifying a name as unknown confidence: 40 # hours to keep unknown images until they are deleted purge: 8 # minimum area in pixels to keep an unknown result min_area: 0 frigate: url: http://frigate-custom-app.ix-frigate.svc.cluster.local:5000 # object labels that are allowed for facial recognition labels: - person attempts: # number of times double take will request a frigate latest.jpg for facial recognition latest: 10 # number of times double take will request a frigate snapshot.jpg for facial recognition snapshot: 10 # process frigate images from frigate/+/person/snapshot topics mqtt: true # add a delay expressed in seconds between each detection loop delay: 0 image: # height of frigate image passed for facial recognition height: 500 # only process images from specific cameras cameras: - cam # - garage # only process images from specific zones zones: # - camera: garage # zone: driveway detectors: deepstack: url: http://deepstack.ix-deepstack.svc:10049 key: 等会要设置的deepstack密码 timeout: 15 ``` double-take是可以设置登录的账号密码的,我这里就不设置了,具体请参考[官方](https://github.com/jakowenko/double-take) # 安装deepstack 这个应用是用来提供AI服务的,社区里已经有了,直接安装即可,记得名字要和应用名一样  这里可以选择使用CPU/GPU处理,如果选择GPU的话,下面资源也要选上你的显卡   其他默认即可 # double-take教程 以上设置好之后,你会看到所有的灯变成绿色  ## 训练 你可以去摄像头下面走一圈,回来之后立刻就会发现double-take match下面出现你的图片  点击add new,创建你的名字,然后选下面你的图片  点击训练,理论上训练越多识别越精确 # 自动化 在设置自动化之前,我们要先了解一下double-take能给出哪些接口。我们可以在home assistant的MQTT集成中看到,已经自动发现了传感器  其中`double_take_cam`传感器会在检测到人的时候输出一个人数,然后在30s后恢复为0,我们可以利用这个传感器检测是否有人,相当于人体传感器。 `double_take_unknown` 传感器会在人脸识别不出,或者识别到未知人的时候输出一个json,里面包含时间,截图文件名,甚至可以设置base64图像 `double_take_sagit`,这个传感器是因为我训练了我自己的图片,所以检测到我,就会输出json,和unknown一样 其实这些传感器都是MQTT发布的,他们在MQTT的主题为: double_take_cam:double-take/cameras/cam (cam是frigate和double-take配置文件里面配置的摄像机名字) double_take_unknown:double-take/matches/unknown double_take_sagit:double-take/matches/sagit 知道这些之后我们就可以设置自动化了,double-take官方一个home assistant的自动化示例,但是我觉得home assistant的自动化不如node-red好用。所以我们直接使用node-red ## 安装node-red node-red安装社区版,一直下一步默认安装就好了,没什么好讲的 ## 配置node-red 安装好之后,我们需要配置node-red和ha(homeassistant缩写ha)链接   我们需要安装`node-red-contrib-home-assistant-websocket` 安装之后在左边可以找到ha的一些组件  我们随便拖一个到流程画布里面,双击打开,设置新的ha节点  Base URL:http://home-assistant.ix-home-assistant.svc.cluster.local:8123 [到社区生成内部DNS](https://truecharts.org/manual/Quick-Start%20Guides/06-linking-apps/) Access Token获取方法,到ha里面创建  完成之后点击部署 ## 检测到人,自动执行 上面说到,double-take提供了人体传感,可以使用这个当做人体传感器使用  如图,检测到人,判断灯是否开着,如果关着,那就开灯    ## 检测到sagit,自动发送telegram 也可以实现检测到某人,通知,警报等等操作,我这里用的是tg 机器人,网上也有很多用微信企业的,server酱的一些教程,根据自己需求更改吧  这里我们需要使用MQTT来订阅double-take,获取信息   然后转化json为对象  然后设置函数  ``` var $filename = msg.payload.match.filename; var url = 'https://xxxx:9443/api/storage/matches/'+$filename; msg.payload = { chatId: '86358xxxx', type: 'message', content: 'Sagit!抓住你了!'+url } return msg; ``` 解读一下 double-take可以直接调用它的链接直接查看图片,而推送的json里面是没有给出链接的,但是给出了文件名  经过转化json为对象,我们可以直接调用msg.payload.match.filename来获取文件名,所以变量$filename获取文件名,再与我们的链接组合就可以拿到截图完整的地址了! 同理,我们可以获取时间,名字,等等 我用的telegram插件为[node-red-contrib-telegrambot](https://flows.nodered.org/node/node-red-contrib-telegrambot) tg如何设置机器人我就不说了,网上很多,这个插件设置方法官方也有(填机器人名,token,chartid)  一些其他的通知方法,如微信等,都要自己去查看发信的规则,如何调用,大家自行测试吧 最后修改:2022 年 06 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 3 如果觉得我的文章对你有用,请随意赞赏
17 条评论
遇到了一个问题,mqtt并没有发现Doubletake的传感器,已经取消了mqtt的密码认证,开启了匿名登录,不知道问题出在哪里
全都弄好了但是mqtt没自动发现doubletake咋办呀
mqtt也好了 就是每次deepstack延时比较高 每次打开doubletake他都是红点过一小会才绿
卡在double-take的启动, 我的double-take安装版本是1.12.1_2.0.28, 部署失败的原因是Startup probe failed: dial tcp 172.16.0.23:3000: connect: connection refused
求解
这个要看日志
测试了各种方法各种版本都无法运行frigate...然后在另一台黑群晖的docker里成功运行了...想了想把这台也装了黑裙...但是依旧无法运行frigate...现在怀疑这是不是这电脑CPU太老缺指令集导致的无法运行...
有可能
DNS设置公网的114.114.114.114和内网的192.168.1.1 都一样,绕了半天弯路把桥接弄好后才用NAS的IP连接成功,现在又卡Frigate了,按照教程装完然后一直“Back-off restarting failed container”
我都在怀疑是不是因为内存不够的原因...物理机内存8G free 0.8G
确实不够
物理机全新安装truenas,就在按照教程装了个HA...现在就直接内存不够了...truenas到底要什么配置才够用啊  ̄﹃ ̄
越高越好
卡MQTT安装,nas里面安装UP主的教程安装HA的时候网卡里面没有桥接的br0,所以都是直接映射物理网卡,mosquitto那边同样映射物理网卡,mosquitto装完我用端口扫描工具确认过NAS的1883端口处于开放状态证明已经映射成功,但是在HA里MQTT填NAS地址端口默认就提示:“无法连接到服务器。”,求解
用的内部DNS的吗
卡在HA安装mqtt这一步,要求填Broker、端口号、用户名、密码,填入mosquitto.ix-mosquitto.svc.cluster.local连不上。
请问有没有车牌识别功能?ヾ(´・ ・`。)ノ"
用tplink摄像头的可以参考https://security.tp-link.com.cn/service/detail_article_4432.html