V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v2410117
V2EX  ›  程序员

关于本地人体识别,该如何优化,求大佬提建议

  •  1
     
  •   v2410117 · 2022-02-16 09:35:42 +08:00 · 6489 次点击
    这是一个创建于 1013 天前的主题,其中的信息可能已经有所发展或是发生改变。

    家里装了个海康的摄像头,想用于区域人数识别开关灯等操作,我目前的操作流程为

    海康设置区域入侵检测,当区域检测事件触发后,开灯 然后每 10 秒一次使用 Python 调用摄像头拍照,然后 OpenCV 进行拍照后的图片裁剪 然后使用 yolo 进行人数统计,当区域人数为 0 后进行关灯操作

    流程已经被我调通了,但就是速度实在是有点慢, 事件触发到图片裁剪完成还好,基本也就 1 秒多 使用 yolo 进行图片识别的时候,基本要 10 秒才能有反馈结果 而且进行识别的时候,CPU 基本跑到 7 80 (一台 2014 的 macmini 8+256 )

    想请大佬指点一点,有没有什么优化的方案,能提高识别速度

    备注:使用过百度的 AI 识别,确实速度能提升到 1-2 秒识别出结果(但毕竟是家里的图片,不想传到网络识别)

    目前在考虑是否单独用个机器进行这项人体识别操作(主要 macmini 还挂有其他任务),如果单独用机器跑这个人体识别,应该用什么机器呢(个人对硬件确实小白)

    请大佬们指教!

    84 条回复    2024-04-25 22:11:00 +08:00
    murmur
        1
    murmur  
       2022-02-16 09:38:08 +08:00   ❤️ 1
    瞎折腾,本来智能家居是简化操作改善体验的,你这一通操作下来折腾个半死效果可能还不好

    如果是人来开灯直接用人体传感器,然后各种联动,还要什么摄像头

    如果是监测比如有 3 个人以上开灯,我建议放弃
    czfy
        2
    czfy  
       2022-02-16 09:39:16 +08:00
    为什么要 “区域人数识别开关灯” ?
    v2410117
        3
    v2410117  
    OP
       2022-02-16 09:40:24 +08:00
    @murmur 开灯是没问题,主要是关灯,没有啥办法知道啥时候该关灯
    v2410117
        4
    v2410117  
    OP
       2022-02-16 09:44:39 +08:00
    @czfy 主要是关灯,开灯其实还好!因为不知道什么时候关灯,小米的人体传感器也基本上只能设置延迟多少分钟关灯
    czfy
        5
    czfy  
       2022-02-16 09:48:37 +08:00
    我问的是 “为什么”...就是识别开关灯用来干什么
    murmur
        6
    murmur  
       2022-02-16 09:48:42 +08:00
    @v2410117

    https://post.smzdm.com/p/aq0xqdxx/

    我认为这根本不是问题
    root99527
        7
    root99527  
       2022-02-16 09:50:03 +08:00
    可优化的点太多了。
    python->C++
    inference 框架替换
    模型压缩
    neroxps
        8
    neroxps  
       2022-02-16 09:50:43 +08:00
    emmm 智能家居通病,开灯容易关灯难。
    人在哪里,人想干嘛,智障家居终极难题。
    murmur
        9
    murmur  
       2022-02-16 09:51:03 +08:00
    我大概知道你什么问题了,你怕的是人体传感器检测不到静止的人是把,这的却比较麻烦
    murmur
        10
    murmur  
       2022-02-16 09:51:54 +08:00
    testv 那种玩法是在每个椅子的坐垫下面放了压力传感器,这样无论是人动还是人坐凳子上都能检测到人在
    neroxps
        11
    neroxps  
       2022-02-16 09:52:33 +08:00
    @murmur #6 用过就知道这些都是问题~楼主要做到人走灯灭,而不是人走灯等几分钟灯才灭。
    也不是人久坐不动灯又灭,即使是存在传感器,也有很多 bug ,风扇 阳光 都是干扰项~

    甚至还有人研究高精雷达,算法监听心跳。卷的很。
    murmur
        12
    murmur  
       2022-02-16 09:54:24 +08:00
    @neroxps 那绿米那个高精度传感器呢,不过好像这个只能给苹果用
    v2410117
        13
    v2410117  
    OP
       2022-02-16 09:55:47 +08:00
    @murmur 绿米那个我也看过,价格贵不说,关键范围不大,我一个摄像头可以看到入户加整个客厅+餐厅,所以才考虑这种人体识别
    whypool
        14
    whypool  
       2022-02-16 09:56:07 +08:00 via Android   ❤️ 1
    这玩意不就是几十块钱的红外感应开关?
    neroxps
        15
    neroxps  
       2022-02-16 09:56:30 +08:00   ❤️ 1
    曾经我还疯狂的想过使用使用传感器装在门框计算人数。

    尝试过红外对射(安装难度大) vl53l0x 激光测距(需要 2 组传感器)

    ST 做的 demo ,开源
    &ab_channel=STMicroelectronics

    激光测距也一样逃不过阳光干扰,地砖反射等干扰问题。最终躺平。关灯就用语音场景。
    neroxps
        16
    neroxps  
       2022-02-16 09:57:04 +08:00
    @murmur #12 阳光 风扇 都会对其干扰。范围也是个问题。价格也是个问题。简而言之,不实用。
    yaoyao1128
        17
    yaoyao1128  
       2022-02-16 09:57:30 +08:00 via iPhone
    个人的建议是 别用这个逻辑进行 过于麻烦 以及家里用不太实用……

    感觉可以考虑的方案
    人在传感器 人体传感器
    人体传感器 判断无人后 画面识别完全无变动超过多久自动关灯
    v2410117
        18
    v2410117  
    OP
       2022-02-16 09:58:31 +08:00
    @whypool 红外感应能开灯,但是没办法控制啥时候关灯,静止的时候无解
    v2410117
        19
    v2410117  
    OP
       2022-02-16 09:59:37 +08:00
    @yaoyao1128 对的,我就是这样考虑的,当无人后画面识别超过 2-3 次无人,就关灯,就不再进行检测了
    dcty
        20
    dcty  
       2022-02-16 10:00:16 +08:00   ❤️ 2
    一看标题以为这都进化到“本地人”识别了
    v2410117
        21
    v2410117  
    OP
       2022-02-16 10:00:52 +08:00
    @dcty 哈哈,这个难度更大
    v2410117
        22
    v2410117  
    OP
       2022-02-16 10:02:36 +08:00
    @neroxps 我其实装摄像头是为了家里小孩,然后在网上看到有人用摄像头这样操作,所以想试试,做出来的效果也算可以(除了识别速度)
    i979491586
        23
    i979491586  
       2022-02-16 10:02:44 +08:00
    我也想做一套这个系统,我目前想法是,用一个类似 airtag 大小的信号发射器放到拖鞋里(入户要换鞋),然后每个房间放置 3 个接收器,3 个接收器数据进行计算,判断人的位置,位置结果在 homeassistant 实现联动,你觉得这个方案怎么样?
    neroxps
        24
    neroxps  
       2022-02-16 10:04:39 +08:00
    @v2410117 #22 yolo 我搞过,后来发现至少得搞个 N 卡显卡才能爽~或者更换支持 AI 加速的嵌入式机器,投入太大没兴趣了。
    v2410117
        25
    v2410117  
    OP
       2022-02-16 10:07:41 +08:00
    @i979491586 想法可以,但是实行很难,除非是只有你一个人住,而且有强制换拖鞋的习惯,不然但凡多一个人,习惯不同,就 gg 了
    v2410117
        26
    v2410117  
    OP
       2022-02-16 10:09:05 +08:00
    @neroxps 要这样投入的话,确实很大了!
    neroxps
        27
    neroxps  
       2022-02-16 10:09:43 +08:00
    @i979491586 #23 有这样的方案。https://espresense.com/

    但是 esp32 蓝牙和 wifi 一起工作的时候信号飘的很 https://github.com/dalehumby/ESPHome-Apple-Watch-detection

    iPhone 和 AppleWatch 会一直广播一个蓝牙信标 https://github.com/furiousMAC/continuity/blob/master/messages/nearby_info.md 通过这个信标能判断手表是带着,还是充电。但我实际测试 esp32 蓝牙和 wifi 一起工作的时候,信号飘的很,有时候手表放 esp32 隔壁信号依然超过阈值,不靠谱。

    用笔记本外接 USB 蓝牙接收器就很好,可以直接判断距离都行。
    yaoyao1128
        28
    yaoyao1128  
       2022-02-16 10:11:04 +08:00 via iPhone
    @v2410117 重点在于无人检测 个人感觉用传感器作为判断标准 如果传感器认为有人就不需要跑图片的识别了 之后识别图片 识别的时候也没有太大必要考虑从人数入手 直接根据是否存在画面变动就可以 如果家里有宠物的话加一个高度判断就好了
    v2410117
        29
    v2410117  
    OP
       2022-02-16 10:14:17 +08:00
    @yaoyao1128 对哈,你这个话倒是提醒我了,直接使用图片对比,2 次图片没有变化的情况下,就无人,这个对比可比识别来的快多了
    neroxps
        30
    neroxps  
       2022-02-16 10:16:50 +08:00
    @v2410117 #29 不行的,这样久坐不动一样是无人。然后就传来老婆的咆哮。
    v2410117
        31
    v2410117  
    OP
       2022-02-16 10:18:11 +08:00
    @neroxps 老哥,这个咆哮吓退了我,惊
    ldyisbest
        32
    ldyisbest  
       2022-02-16 10:19:02 +08:00
    试试 nanodet 这个很快
    neroxps
        33
    neroxps  
       2022-02-16 10:19:02 +08:00
    @v2410117 #31 这不是智障家居的常态吗。哈哈,每个玩智障家居都会收到家里人吐槽,除非独居。
    v2410117
        34
    v2410117  
    OP
       2022-02-16 10:19:15 +08:00
    @neroxps 为啥海康摄像头几百块钱,它就能做到实时监控并且发出警告呢,是因为自家设计芯片啥的么,感觉网上没有那种低成本精度又高的方案
    RickyC
        35
    RickyC  
       2022-02-16 10:21:16 +08:00
    人体识别。好像从未听说过。只能面容识别吧?
    InvincibleDream
        36
    InvincibleDream  
       2022-02-16 10:25:42 +08:00
    要不搞个加速棒试试? https://coral.ai/products/accelerator/
    shyrock
        37
    shyrock  
       2022-02-16 10:28:05 +08:00
    @dcty #20 同以为是‘本地人’识别,心说这思路恐怕要上方言识别。。。
    xylxAdai
        38
    xylxAdai  
       2022-02-16 10:30:30 +08:00
    人在传感器。。可以看看。
    kssdxw
        39
    kssdxw  
       2022-02-16 10:36:22 +08:00
    可以试试 OpenPose 人体姿态识别,有 cpu 方案我拿我的 3800X 测试 1080P 视频能做到十几帧。
    ykk
        40
    ykk  
       2022-02-16 10:36:24 +08:00
    cpu 跑的慢很正常,换体量更小的模型,转 onnx ,优化代码,IO 和 process 并行
    westoy
        41
    westoy  
       2022-02-16 10:38:08 +08:00
    一张 3090 解千愁....
    ylls
        42
    ylls  
       2022-02-16 10:38:24 +08:00
    买一个海康的 AI 摄像头 然后在海康 AI 开放平台训练模型 导入到摄像头 直接用摄像头识别呗
    v2410117
        43
    v2410117  
    OP
       2022-02-16 10:40:45 +08:00
    @ylls 卧槽,还可以导入摄像头???????????有这等操作吗,惊了
    neroxps
        44
    neroxps  
       2022-02-16 10:41:01 +08:00
    @v2410117 #34 emm 他就是吃这行饭的,嵌入式处理,应该是他摄像头里面的芯片做图像对比之类,超过阈值就上传事件给 nvr (超脑)进行后端比对。前后端结合减轻 NVR 负载,NVR 也能在进一步校验,超脑那种实时性也不是很高,我们曾经做过围墙监控,用超脑做布防,一下雨就呱呱叫(不过是很早之前了,现在估计有优化。)

    现在也有很多公司做摄像头处理机器,使用嵌入式 linux 取流简单分析触发,再用服务器加显卡跑 AI 。这些都不是我们普通人家里能投入的,送我电费我也交不起。
    laipidov
        45
    laipidov  
       2022-02-16 10:43:23 +08:00
    可以看一下 ncnn 这个框架,搞一下量化,看看速度能不能满足要求
    neroxps
        46
    neroxps  
       2022-02-16 10:44:56 +08:00
    @ylls #42 说个价格让我死心。
    xiaozhishang91
        47
    xiaozhishang91  
       2022-02-16 10:45:34 +08:00
    @InvincibleDream 这个我用过,体积小,速度快,性能也强,吊打 NCS2
    Ediacaran
        48
    Ediacaran  
       2022-02-16 10:46:34 +08:00 via iPhone   ❤️ 2
    做过类似的东西,可以提供个思路:

    1. 用小分辨率图片,320 240 足够了
    2. 先做图片变动判断,两图差的绝对值之和
    3. 换 mobilenetv1
    4. 替换后两层,只输出是否有人的信息,需要找数据集 finetune 一下。

    在 n3150 小主机上跑,跑一帧大概一秒吧,具体时间不记得了
    orqzsf1
        49
    orqzsf1  
       2022-02-16 10:48:48 +08:00
    可以试下试下存在感应器,就是有点贵。。我现在是通过喊 Siri 关灯,或者 不在家 / ha 扫手环做忘记关灯,你可以研究下
    i979491586
        50
    i979491586  
       2022-02-16 10:54:24 +08:00
    @v2410117 可以看一下 apple 的 ibeacon 技术,精度高,省电,淘宝有卖,瓶盖大小续航也不错,放到拖鞋的后跟挺好的
    i979491586
        51
    i979491586  
       2022-02-16 10:55:26 +08:00
    @neroxps 可以看一下 apple 的 ibeacon 技术,精度高,省电,淘宝有卖,瓶盖大小续航也不错,有的公司用来做室内导航
    ylls
        52
    ylls  
       2022-02-16 10:58:06 +08:00
    @neroxps 摄像头单价不一样 单摄像头几百到几千 型号 DS-2XA8 开头的吧
    ksc010
        53
    ksc010  
       2022-02-16 11:08:27 +08:00
    这个模型是你自己训练的还是别人的 ,要不要换个其他的模型试试,感觉只是识别人数应该没这么慢
    另外 opencv 也能识别标记人体
    lixile
        54
    lixile  
       2022-02-16 11:20:29 +08:00
    @v2410117 几百块的 3516 款型就支持你的功能,海思芯片,完全可以全部摄像机完成。
    3516 人体检测应该能支持同时 60 人以上的检测,家里面完全无压力,精度全靠模型优化,商用很常见了。

    另外完全有现成方案,3516D 、3516A 款型 搜索人群密度 之类的关键词,应该有支持的款型
    zx4824
        55
    zx4824  
       2022-02-16 11:22:42 +08:00   ❤️ 1
    Yeelight Pro P20 人在传感器上手体验

    https://post.smzdm.com/p/aenogmwk/
    ykk
        56
    ykk  
       2022-02-16 11:26:42 +08:00
    @lixile #54 海思量化是一个 individual 可以完成的吗[doge]
    tfdetang
        57
    tfdetang  
       2022-02-16 11:47:12 +08:00
    模型侧的优化点就是用更轻量的 yolo 模型,比如基于 MobileNet 的 Yolo 或者各种蒸馏过的 Lite Nano 版本,基本要比原版快一个数量级,对于你这个简单场景应该不太有性能损失;

    如果是用另一台机器进行识别,我觉得 macmini 完全够用了,最好用现成的推理框架而不是简单的 py 包调用。推理框架可以本地编译一下,性能又能有非常大的提升;
    jie170601
        58
    jie170601  
       2022-02-16 12:20:10 +08:00 via Android
    想到两个不用摄像头的:

    1. 出入口想办法检测到人出或者人入,像停车场那样来统计

    2. 最近第一次进无人超市,发现它那标签似乎成本很低,可以在家人衣服上都放一个
    koebehshian
        59
    koebehshian  
       2022-02-16 13:17:52 +08:00
    用过 yolo 直接读海康视频,在 jetson_nano 上,用 yolo 的 tiny 模型,可以识别框内是否有人,速度一秒 6 帧
    disk
        60
    disk  
       2022-02-16 13:45:17 +08:00
    我记得油管的 linus 做过一个视频讲了全屋动态检查,用到了加速棒,配合现成的框架感觉还行。
    feitxue
        61
    feitxue  
       2022-02-16 13:56:50 +08:00
    之前用的虹软的 sdk,你可以研究下,人脸跟踪还 ok 的.
    不上传服务器.本地识别.
    https://ai.arcsoft.com.cn/
    WoodsGao
        62
    WoodsGao  
       2022-02-16 14:12:53 +08:00
    这种情况没必要用检测模型,直接整个小的分类模型就可以解决了,macmini 跑一张要 10 秒也太夸张了,看下分辨率是不是太高了
    gscsnm
        63
    gscsnm  
       2022-02-16 16:47:38 +08:00
    我现在是在门口放了个按钮,每次出门按一下,执行出门程序。。
    aimnzo
        64
    aimnzo  
       2022-02-16 16:58:33 +08:00
    海康有智能摄像机可直接输出人数统计结果
    ijse
        65
    ijse  
       2022-02-16 17:05:46 +08:00
    如果 ha 的话,可以通过快捷指令判断 手机连接 wifi 自动触发操作
    FightPig
        66
    FightPig  
       2022-02-16 17:18:37 +08:00
    yolo 这么慢么?上次看有人做的调用挺快的,
    Dawnnnnnn
        67
    Dawnnnnnn  
       2022-02-16 17:31:45 +08:00
    @zx4824 有个疑问,猫猫移动会被误识别吗?看原理就是红外检测,红外检测现在的技术能判断是人还是猫吗
    ijustdo
        68
    ijustdo  
       2022-02-16 18:13:38 +08:00
    我树莓派 4 都没你那么慢,你这需求直接用 python 掉 face_recognition 基于 dlib 就 ok ,https://github.com/ghostwwl/my_raspbian/blob/master/gcam/main.py 碰到指定人录像发消息
    bilberry
        69
    bilberry  
       2022-02-16 18:25:48 +08:00
    **Pyroelectric 热释电传感器**了解下
    bilberry
        70
    bilberry  
       2022-02-16 18:30:41 +08:00
    @bilberry
    https://s2.loli.net/2022/02/16/VeRLPrldCovtyGH.png
    学校全都是这种传感器,都没有开关的
    encro
        71
    encro  
       2022-02-16 19:15:13 +08:00
    居然没有一个人讨论为什么慢?
    凭借我学了几天的 OpenCV 知识,只用 OpenCV 直接二值化之后检测应该很快的啊。
    encro
        72
    encro  
       2022-02-16 19:18:54 +08:00
    收回上面的话,
    中间已经有几位讨论了。
    alanse7en
        73
    alanse7en  
       2022-02-16 20:07:16 +08:00
    因为你要做的事情很简单,就是检测是否有人
    首先是不需要那么复杂的模型,第二个就是可以降低分辨率之后再输入到模型进行预测
    documentzhangx66
        74
    documentzhangx66  
       2022-02-16 20:15:53 +08:00
    给你一个新思路:不关灯。

    1.房子每个角落全部部署光感小夜灯,那种不超过 3W 的。

    2.小夜灯不关。要找东西时,手动开关大灯。

    这样做的优势是,家里很温馨,像个酒店,不找东西时根本不需要开大灯。
    luckykong
        75
    luckykong  
       2022-02-16 20:46:24 +08:00
    搞一张本地没有人,只有家具和设备的图片。

    当长时间没有移动,不确定是否有人的时候,去和没有人的图片做对比。 如果有差异,再去识别差异的这部分里是不是有人。。
    rpman
        76
    rpman  
       2022-02-17 05:04:18 +08:00
    如果画面长期静止,才触发模型判别关灯。入侵检测触发开灯。
    rpman
        77
    rpman  
       2022-02-17 05:05:09 +08:00
    优化推理速度你是做不到的,放弃吧
    xsen
        78
    xsen  
       2022-02-17 06:59:25 +08:00
    海康有支持客流统计的摄像头,iDS-****系列的
    可以划定监测区域、检测线与监测方向,检测到有人员进出、可通过 http 实时上报
    ljkWeb
        79
    ljkWeb  
       2022-02-17 09:36:55 +08:00
    监控房间里符合人体的热源这种不知道可不可行
    wtfv233
        80
    wtfv233  
       2022-02-17 09:38:47 +08:00
    关于关灯:HomeKit 有超过某个定位区域自动关灯的设置的,你打开家庭 App 看看
    opengps
        81
    opengps  
       2022-02-17 09:51:31 +08:00
    我买了个红外感应的传感器,二十块。接入到照明线路上,电源常开,红外感应不到人就能断电,感应到人就能通电
    lingxipaofan
        82
    lingxipaofan  
       2022-02-17 10:32:38 +08:00
    海康摄像头好像本身就支持入侵检测啊,你可以看看海康开放 sdk 能不能实现你要的功能
    abccccabc
        83
    abccccabc  
       2022-02-17 11:35:59 +08:00
    这个功能不错:晚上有人进入摄像头区域,开灯,并且拍照。小偷一进来,吓个半死。
    byteboy
        84
    byteboy  
       213 天前
    全屋安装了 7 个 aqara 的人体存在传感器( FP1 )后,全部清净了,基本没有自动开关不了的灯。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5865 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:27 · PVG 14:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.