『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 59488|回复: 47

[插件集成] 搬运2个摄像头人体插件和一个人脸识别插件(都是本地)

  [复制链接]

4

主题

30

帖子

415

积分

论坛技术达人

积分
415
金钱
385
HASS币
10
发表于 2021-2-10 12:07:37 | 显示全部楼层 |阅读模式
本帖最后由 acdxxx188 于 2021-2-11 09:59 编辑

最近放假了,准备把百度的人体识别接入,来充当人体感应,想感应室外门口有没有人来,做一些自动化,但是插件写到一半就看见@guitengyue大神分享的纯本地方案,想着不用重复造轮子了,但是我的摄像头也不支持动作检测和上传图片,就到网上搜了一下,发现下面几款本地化的软件
第一款人体物体识别插件(Frigate
搬运地链接:https://community.home-assistant.io/t/local-realtime-person-detection-for-rtsp-cameras/103107
这款不需要摄像头接入homeassistant,他是直接接入frigate里,可以当NVR来使用,动态检测,可以保存短视频,提供addon repository接入homeassistant界面比较友好,无需写配置文件(但是本身需要写配置文件)
有两种方法安装
如果你是HASSOS的话,直接在前端Supervisor > Add-on Store > 右上角三个点>Repositories,里面输入https://github.com/blakeblackshear/frigate-hass-addons,点ADD,就会出现插件
frigate hassio.png
点击Frigate NVR>Install 安装就可以了,根据下面配置文件配置,命名frigate.yml,放入你的config目录,然后在网页上启动


docker安装方式,我也是这种,因为不想绑定在hassos上
首先第一步先建好3个文件夹,clips,config,recordings
照下面写好配置文件,命名config.yml,保存在刚刚建好的config目录下(add-on安装的话保存frigate.yml,放在homeassistant的config目录)

# 检测硬件,目前就先这么配置
detectors:
  coral:
    type: cpu
# mqtt,必须
mqtt:
  # mqtt的服务地址
  host: 192.168.3.22
  # mqtt的用户
  user: xxxxxx
  # mqtt的密码
  password: xxxxx
# 摄像头接入
cameras:
  # 摄像头名称,自定义
  fristcamera:
    ffmpeg:
      inputs:
        # 摄像头地址
        - path: rtsp://admin:[email protected]:554/Streaming/Channels/1
          # 要开启的功能,下面这些功能,不需要就删掉
          roles:
            # 检测功能
            - detect
            # 短片剪辑功能
            - clips
            # 录像功能
            - record
            # 像外提供播放功能(一个坑,要确定你的摄像头是不是h265编码的,如果是就不要开启这个,不然就会一直报错)
            - rtmp
    # 摄像头画面的分辨率,一定要准确,不然会花屏,先在本地电脑上用软件播放,查看下分辨率,填入下面,
    width: 2560
    height: 1440
    fps: 3
    detect:
      # 开启检测
      enabled: True
    # 不检测的区域,可以先不设置在网页游览器里复制过来
    motion:
      mask:
        - 1198,134,1243,299,1552,289,1530,0,0,0,0,145
        - 482,1440,457,408,0,416,0,1440
    # 区域,可以先不设置在网页游览器里复制过来
    zones:
      zone_0:
        coordinates: 766,1440,1103,591,1241,442,1616,535,1697,193,1802,1440
    # 剪辑
    clips:
      # 是否开启
      enabled: True
      # 拍摄前3秒
      pre_capture: 3
      #拍摄后5秒
      post_capture: 5
      retain:
        # 保留录像天数
        default: 5
        # 特定的物体保留天数
        objects:
          person: 10
    # 快照
    snapshots:
      enabled: True
      # 在快照上打印时间戳 默认False
      timestamp: False
      # 在快照上绘制边界框 默认False
      bounding_box: True
      # 裁剪快照 默认False
      crop: False
      # 将快照大小调整为的高度(默认值:原始大小)
      #height: 175
      retain:
        # 默认保留天数(默认值:如下所示)
        default: 10
        # 每个对象的保留天数
        objects:
          person: 15
objects:
  # 选择需要检测的物体,能选择的列表在labelmap.txt
  track:
    - person
    - bicycle
    - car
    - motorcycle
    - cat
    - dog
  # 定制过滤器减少误报
  filters:
    person:
      # 检测到的对象的边框的最小面积,宽度*高度(默认:0)
      #min_area: 0
      # 检测到的对象的边框的最大面积,宽度*高度 (默认: 24000000)
      #max_area: 100000
      # 启动跟踪的对象的最低分数 (默认: 0.5)
      min_score: 0.5
      # 将被跟踪对象的计算分数的最小十进制百分比视为真实正值 (默认: shown below)
      threshold: 0.7
启动docker,我是esxi里的Ubuntu,至于你是其他平台或其他方式启动,请参加官网:https://blakeblackshear.github.io/frigate/
#启动Frigate
docker run --rm \
--name frigate \
--privileged \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
-v (刚刚建好的clips路径):/media/frigate/clips \
-v (刚刚建好的recordings路径):/media/frigate/recordings \
-v (刚刚建好的config路径):/config:ro \
-v /etc/localtime:/etc/localtime:ro \
-e FRIGATE_RTSP_PASSWORD='password' \
-p 5000:5000 \
-p 1935:1935 \
blakeblackshear/frigate:0.8.1-amd64
启动后,本地游览器输入http://{宿主机的IP}:5000,能看见摄像头画面就成功了


接入homeassistant
插件下载地址:https://github.com/blakeblackshear/frigate-hass-integration
把里面的custom_components目录下的frigate目录 放入自己custom_components目录里
重启homeassistant
重启成功后,在配置-集成-右下角添加集成-里面搜索frigate,点击后,输入frigate的IP,(如果是Add-on Store添加的,输入http://ccab4aaf-frigate:5000或http://ccab4aaf-frigate-beta:5000)
下一步后,选择区域就完成了
示例11111.png
添加的实体有:
传感器
摄像头
一些感应开关
而且传感器和摄像头都是根据配置文件里的object分类的,比如我配置了人,自行车,摩托车,汽车,猫,狗,它们各自有一个传感器和摄像头
并且摄像头会捕捉最佳照片显示过来,可以供其他插件使用,比如人脸识别,狗脸识别,猫脸识别,汽车牌照识别等等,你自己发挥
实体张氏.png
还有一个比较厉害的功能,可以在前端媒体游览器里直接观看捕获的录像和图片
点击媒体游览器,里面多了一个Frigate,点击即可观看,前提是配置rtmp
媒体游览器123.png

其余的自己发挥吧
优化建议
这款插件占资源挺大的,下面是我自己的优化建议
首先摄像头的分辨率不要太大,毕竟只是物体识别,如果要做人脸识别,现在的摄像头基本上都有主码流和子码流,可以物体识别用子码流分辨率小,人脸识别用主码流
最好在配置文件里配置motion.mask,来去掉一些不需要识别的区域,比如摄像头在外面,外面路上的行人车辆我们就不需要识别了,可以用motion.mask遮住不识别
操作步骤:
先打开frigate网页,点击需要的摄像头 > masks & zones > MOTION MASKS边上的add,然后在摄像头上单击点,让点围城一个封闭区域,红色部分就是遮住不识别区域,完成后,点copy,复制到配置文件,具体看配置文件

                               
登录/注册后可看大图
通过上面这些操作,接入2个摄像头我的CPU使用率降到的60%,我是3215U,装exsi,Ubuntu分配2CPU,2G内存,其他设备自己测试
插件还支持Google Coral Accelerator,但是国内买不到,某宝代购的开价1000+,想想还是算了,有能力自己测试
https://coral.ai/products/

第二款人体物体识别插件(deepstack-object)@guitengyue大神分享过的,补充homeassistant插件
搬运地链接:https://community.home-assistant.io/t/face-and-person-detection-with-deepstack-local-and-free/92041这块需要先把摄像头接入homeassistant,具体接入方法论坛搜索吧
首先也需要找个地方运行docker,来启动deepstack
我的deepstack启动命令
#首先创建一个docker网络:
docker network create --driver bridge deepstack-network
创建一个目录用来保存数据,必须全英文,启动deepstack
#启动deepstack (我的是esxi里的Ubuntu ,所以用的是x64,其他平台可以看https://docs.deepstack.cc/里)
docker run -d -e VISION-DETECTION=True -e VISION-FACE=True -v (你刚刚创建目录的路径):/datastore -p 5000:5000 --network deepstack-network --name deepstack deepquestai/deepstack:latest
运行后,本地游览器输入http://{宿主机的IP}:5000,能打开网页就算成功

这里推荐另一个插件,也是homeassistant插件的作者弄得,可以直接网页打开上传图片识别,用来测试
github链接:https://github.com/robmarkcole/deepstack-ui
#运行deepstack-ui
docker run -d -p 8501:8501 -e DEEPSTACK_IP='deepstack' -e DEEPSTACK_PORT='5000' --network deepstack-network --name dDEEPSTACK_PORTeepstack-ui robmarkcole/deepstack-ui:latest
运行后,本地游览器输入http://{宿主机的IP}:8501,就可以在里面上传图片进行识别
Snipaste_2021-02-10_10-09-12.png

1.加入homeassistant
下载homeassistant插件的github链接:https://github.com/robmarkcole/HASS-Deepstack-object
把里面的custom_components下的deepstack_object的文件夹放入自己的custom_components文件夹下
configuration.yaml文件里输入

image_processing:
  - platform: deepstack_object
    # deepstack的ip地址
    ip_address: 192.168.3.12
    # deepstack的端口
    port: 5000
    # deepstack的密码,上面docker启动没有设置
    #api_key: mysecretkey
    # 你自己训练的模型名称,训练模型参加官网
    # custom_model: mask
    # 置信度,默认80
    # confidence: 80
    # 下面roi开头的为检测区域,可以在deepstack_ui网页里设置后,填入下方
    # roi_x_min: 0.35
    # roi_x_max: 0.8
    # roi_y_min: 0.4
    # roi_y_max: 0.8
    # 图片保存的地址,最好保存在media目录下,每个平台madia目录都不一样
    save_file_folder: /mnt/f/python/baidu-renti-homeassistant/config/media
    # 是否按时间保存检测到的人
    save_timestamped_file: True
    # 是否保存最后一次检测的图片
    always_save_latest_jpg: True
    # 保存图片的缩放
    scale: 0.75
    # 检测目标列表
    targets:
      # 检测目标: 人,置信度默认
      - target: person
      # 检测目标:汽车,置信度40
      - target: car
        confidence: 40
    # 接入的摄像头id
    source:
      - entity_id: camera.menkou
填好后,重启,就可以见到实体了
22222.png

他是不会自动扫描的,需要有服务调用才进行识别
比如下面我每5秒调用一次的自动化功能
配置-自动化-新建自动化-从空的模板新建

触发条件

触发条件


动作

动作

保存,就可以了

如果你把上面保存目录设置在media目录的话,在前端直接打开媒体游览器,进入文件夹,可看到检测到物体的图片,点击即可观看
媒体游览器.png
然后是事件触发,比如检测到人后,你需要检测到的参数做自动化(下面示例下,检测到后,在前段通知)
配置-自动化-新建自动化-从空的模板新建
触发
通知触发条件.png
动作
通知动作.png

title: >-
  {{ trigger.event.data.entity_id.split(".")[1] }}发现了{{
  trigger.event.data.object_type }}
message: >-
  {{ trigger.event.data.object_type }}可信度为:{{
  trigger.event.data.confidence}},位置为{{ trigger.event.data.centroid.x
  }},{{trigger.event.data.centroid.y }}

具体能返回的参数,自己事件监听一下,跟github上文档写的返回数据不一样
结果展示
通知示例.png
然后你可以尽情的发挥了

人脸识别插件Deepstack-face
也是出自跟第2款插件一样的作者
搬运地链接:https://community.home-assistant.io/t/face-and-person-detection-with-deepstack-local-and-free/92041
启动docker方式,跟第2款插件一样,不说了,下面就介绍下接入homeassistant下载插件地址:https://github.com/robmarkcole/HASS-Deepstack-face
把里面的custom_components下的deepstack_face 的文件夹放入自己的custom_components文件夹下
configuration.yaml文件里输入

image_processing:
  - platform: deepstack_face
    # deepstack的ip地址
    ip_address: 192.168.3.12
    # deepstack的端口
    port: 5000
    # deepstack的密码,上面docker启动没有设置
    #api_key: mysecretkey
    # timeout: 5
    # 是否只检测人脸,设为True为检测人脸识别,不然只检测是否有人脸
    detect_only: False
    # 检测的图片保存目录,是否有没有人脸都保存的目录,目录必须事先建好
    save_file_folder: /media/camera_pic/face
    # 是否有没有人脸都保存
    save_timestamped_file: False
    # 检测到人脸是否保存
    save_faces: True
    # 检测到的人脸保存目录,目录必须事先建好
    save_faces_folder: /media/camera_pic/face/
    # 是否在人脸上显示框框
    show_boxes: True
    # 摄像头id
    source:
      - entity_id: camera.fristcamera_person
        # 名字
        name: face_counter
重启homeassistant后即可看见实体 Snipaste_2021-02-10_13-57-13.png
由于我的摄像头是户外的,位置比较高,人脸识别都没识别成功过,大家可以试试
人脸识别也不会自己调用的,必须调用image_processing.scan服务才会扫描识别
比如跟第一款插件联动
第一款插件检测到人体,他会把图片用一个摄像头返回过来,配置文件配置为那个摄像头,然后等触发就调用,自动化如下
添加自动化
触发条件
触发.png
动作
动作.png
下面是注册人脸
注册人脸也是调用服务
首先把你的人脸保存到homeassistant上的某个目录
打开前端 开发者工具>服务,选择image_processing.deepstack_teach_face
在下面填入
name: 你的名字,英文的
file_path: 你保存的人脸图片地址

如下图片所示
注册人脸.png
点击调用,如果没有任何错误提示,表示注册成功
如果检测到人脸,可以在自动化中监听事件image_processing.detect_face,来获取人脸信息,可参照第2款插件那样设置


评分

参与人数 3金钱 +33 HASS币 +10 收起 理由
firewater + 8 膜拜大神!
whswhs + 5 墙都不扶,就服楼主!
+ 20 + 10 厉害了word楼主!

查看全部评分

回复

使用道具 举报

16

主题

382

帖子

2656

积分

金牌会员

Rank: 6Rank: 6

积分
2656
金钱
2274
HASS币
10
发表于 2021-2-10 15:04:51 | 显示全部楼层
楼主厉害啊
回复

使用道具 举报

22

主题

319

帖子

3991

积分

论坛元老

Rank: 8Rank: 8

积分
3991
金钱
3667
HASS币
30
发表于 2021-2-10 16:10:23 | 显示全部楼层
这个本地插件要强烈支持
回复

使用道具 举报

15

主题

636

帖子

2205

积分

金牌会员

Rank: 6Rank: 6

积分
2205
金钱
1569
HASS币
0
发表于 2021-2-10 17:37:16 | 显示全部楼层
请问下楼主,这插件想跑起来,得需要什么样的配置的宿主机啊。。。
N1能跑不?
回复

使用道具 举报

24

主题

739

帖子

3874

积分

论坛元老

Rank: 8Rank: 8

积分
3874
金钱
3130
HASS币
20
发表于 2021-2-10 17:54:38 | 显示全部楼层
强烈要求群主,这个帖子必须射精!!!
回复

使用道具 举报

4

主题

30

帖子

415

积分

论坛技术达人

积分
415
金钱
385
HASS币
10
 楼主| 发表于 2021-2-10 18:48:14 | 显示全部楼层
telanx 发表于 2021-2-10 17:37
请问下楼主,这插件想跑起来,得需要什么样的配置的宿主机啊。。。
N1能跑不? ...

不清楚,你可以试一下,反正docker几条命令,很方便
我8G内存,intel 3215U,装esxi,分配2G内存加2核cpu,跑第一个,CPU直接跑满,不过看官网文档,可以外挂Coral Accelerator ,想搞个试一下,没地方买
第2和第3个,3秒检测一次,CPU在60%左右
回复

使用道具 举报

33

主题

2196

帖子

5845

积分

论坛元老

Rank: 8Rank: 8

积分
5845
金钱
3649
HASS币
60
QQ
发表于 2021-2-10 19:35:33 | 显示全部楼层
厉害了,膜拜。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

8

主题

871

帖子

5224

积分

论坛元老

Rank: 8Rank: 8

积分
5224
金钱
4353
HASS币
0
发表于 2021-2-10 21:22:41 | 显示全部楼层
学习学习
回复

使用道具 举报

20

主题

311

帖子

1487

积分

金牌会员

Rank: 6Rank: 6

积分
1487
金钱
1176
HASS币
0
发表于 2021-2-11 00:12:18 | 显示全部楼层
过年有的玩了
回复

使用道具 举报

0

主题

100

帖子

933

积分

高级会员

Rank: 4

积分
933
金钱
833
HASS币
0
发表于 2021-2-13 20:58:44 | 显示全部楼层
楼主牛逼了,回去了试下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-28 16:51 , Processed in 0.600091 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表