keeneyes 发表于 2018-1-15 21:00:06

IPCAM摄像头+树莓派+百度人脸识别+百度TTS 打造免费人脸识别

本帖最后由 keeneyes 于 2018-1-16 09:33 编辑

手头有一个淘宝的摄像头,不到百元的货,当时随便买的,还有树莓派,一天突然想做个人脸识别,摄像头对着门口,回家时一句“Welcom back”,幸(ge)福(bi)满满。
于是搜索之,发现本论坛有很多大神的资料,如本地的Dlib,百度的,微软的。
经过一定的分析,Dlib依靠本地性能,树莓派识别在5秒左右,5秒后才“Welcom back”怎么提高幸(ge)福(bi)度?微软方案没试,怕网络不稳定,直接选用百度的云识别服务
整个识别过程最长3秒,最少1.几秒就搞定,还是很高效的,树莓派无人移动时CPU占用2%左右,识别时CPU占用少于15%

考虑到树莓派是我的家庭网络中心,需要负担的不只一个任务,所以太忙的活我树莓派不干,把活分出去,看摄像头有个功能当画面有移动时,自动上传图片到FTP服务器,试了一下,居然少于1秒就能上传,于是定下这么一个流程:
摄像头检测到画面有移动——摄像头上传图片到树莓派指定FTP路径下——树莓派每0.5秒检查下路径是否有文件,如果有进行30秒识别流程——树莓派每0.5秒获取摄像头现场图片(百度QPS是2)——如果检测到人员,则进行TTS播报。


下面开始请细则(最近比较忙,说要搞定离家场景,一直没搞,先发个进门识别吧,如果哪位有成员离家判断的方案,欢迎讨论),另外最近太忙,很多没时间写文字,直接给链接,见谅。
准备工作:
1:注册百度开发者账号并创建一个包括人脸识别的百度应用:
http://ai.baidu.com/docs#/Begin/top
    注:整个过程免费,提供每秒最高2次,每天无限量的调用,够用了。


2:注册需要识别的人脸,参考本论坛文章:
https://bbs.hassbian.com/thread-791-1-1.html


摄像头配置:实验中发现淘宝不知牌子摄像头不支持rstp,支持的是HTTP,于是谷歌浏览器开发模式,发现了他有一个好接口,获取实现画面图片,JPG格式,还能直接发给百度!而且具备报警上传文件功能
于是配置摄像头:


当然之前需要把树莓派设置成FTP服务器,网上教程很多,我就不放了(懒。。。。)


树莓派配置:
1:安装MQTT,用于记录人员在家信息(论坛有自己找,又懒。。。。。)
2:安装百度API:
http://ai.baidu.com/docs#/Face-Python-SDK/top
或执行pip install baidu-aip(注意:后面脚本用的是pthon2.7,所以这里需要安装在PY2.7下,如python2.7 setup.py install
3:把附件中的文件复制过去,执行python2.7 camrea.py
脚本主要功能介绍:


      camrea_jpg_url = ("http://%s:%s/snapshot.cgi?loginuse=%s&loginpas=%s" % (camrea_ip,camrea_port,camrea_user,camrea_password))——这个就是摄像头获取实时JPG的接口
      while True:
                #如果存在上传的图片,进行30秒的监控流程
                if os.listdir(work_path) and flag_begin == "ON":
                        client_baidu = AipFace(APP_ID, API_KEY, SECRET_KEY)
                        fin=0
                        for i in range(0,60):
                              if fin==1:
                                        break
                              #对摄像头进行截图
                              f = urllib2.urlopen(camrea_jpg_url)
                              camrea_data = f.read()
                              re = client_baidu.identifyUser(groupId, camrea_data);————直接把读到的数据向百度人脸识别接口送
                              rejson = json.dumps(re,ensure_ascii=False)
                              rejson =json.loads(rejson)
                              #判断返回是否有人
                              if rejson.has_key('result_num'):
                                        print "YES"
                                        for result in rejson["result"]:
                                                #判断人员的相似度
                                                if result["scores"] > similarity:————如果相似值大于设定数(80)则认为是同一人
                                                      who = result["uid"]————记录下人员,过会通过MQTT传输。
                                                      fin = 1
                                                else:
                                                      print "I dont know you"
                              else:
                                        print "nobody"
                              time.sleep(0.5)



4:设置脚本为开机启动


HA配置部分
1:设置百度TTS:https://bbs.hassbian.com/thread-809-1-1.html
2:设置MQTT
3:配置configuration.yaml:
**** Hidden Message *****


4:配置automations.yaml:


**** Hidden Message *****



OK,收工,离家场景没搞定,年后忙完再接着吧。




ylh_lf 发表于 2018-1-15 21:08:29

沙发,收藏备用,谢谢分享

jesson 发表于 2018-1-15 21:11:51

高。逼格满满的,我也打算搞这个,不知道赛扬J1900 做本地识别需要几秒?

raspberry0316 发表于 2018-1-15 21:18:47

火钳刘明

neroxps 发表于 2018-1-15 21:20:56

本帖最后由 neroxps 于 2018-1-15 21:25 编辑

厉害,先看看再说,利用摄像头的触发上传的确是个不错的选择。但是这样必须人特意将脸对着门才行吧?

s6066131 发表于 2018-1-15 21:38:08

好东西,学习了

keeneyes 发表于 2018-1-15 21:50:19

neroxps 发表于 2018-1-15 21:20
厉害,先看看再说,利用摄像头的触发上传的确是个不错的选择。但是这样必须人特意将脸对着门才行吧?
...

不用,我手头这个摄像头只要有图像变化就会上传,然后我在程序中开启30秒,第秒2次的识别,如果识别到人脸,则TTS,如果30秒内没识别到人脸,就认为是误触发,其它还可以实现不是数据库的人,就报警的。

windgo 发表于 2018-1-15 23:11:11

厲害了
來學習學習

发表于 2018-1-15 23:26:24

隐形的大神,赞赞赞!发现论坛里,这不知名杂牌摄像头出镜率很高啊:lol:lol

13014778888 发表于 2018-1-15 23:32:25


好东西,学习了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: IPCAM摄像头+树莓派+百度人脸识别+百度TTS 打造免费人脸识别