基于Python&Facepp打的造智能监控系统
外发送8个40K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时器开始计时,再次等待捕捉echo的下降沿,当捕捉到下降沿,读出计时器的时间,这就是超声波在空气中运行的时间,按照 测试距离=(高电平时间*声速(340M/S))/2 就可以算出超声波到障碍物的距离。
接着,当distance发生明显的变化时候,可以认定,有运动物体的产生。这时候,就会调用下一下函数camrun()
camrun()
可能会觉得上图函数有点多余,其实不然,图示的这种是适合于小区的只有一个门口的家庭,想想也对,
当使用两个摄像头的时候,就会用到如图的函数,这里用到了最简单的多线程thread,(PS:本人能力有限,暂时还没法理解threading这个自定义的多线程方法,),可以在运行cam()的时候,使得cam(0),和cam(1)的基本同时运行
cam(i)
这个函数的主要功能就是图像的运动检测,当有运动物体时,便会将图片以"%Y%m%d%H%M%S’+’_’+str(0)"的格式记录下来,有时候可能存在两个摄像头同时工作记录,导致记录下来的图片日期一样,为了避免这个Error产生,在日期的后面加上了摄像头"i"的标识,用来进行分辨!
这里采用时间来控制camera.release(),当运行的时间==10s时候,便会退出cam(i),这个时间基本要和camrun()里的time.sleep()相同。
这里也做了一个异常处理。避免了因为摄像头没有插好,或这因为前一个运行的cam()还没有结束释放导致的camera busy等而造成运行中断!
checkcycle()
这个函数就是写了一个无限循环,可以让getfilename()无限运行,对新增的图像文件及时的进行检测
testfacepp()
这个函数主要用来检测访问face++的服务器是否受到了 CONCURRENCY_LIMIT_EXCEEDED —并发限制,也就是说,因为我们是免费用户,虽然可以使用他的全部API ,但是,当他们的服务器达到高负荷时候,要首先供付费用户的平稳使用,当负荷不大时候,我们才可以畅快的使用。还好吧!
getfilename()
这个函数就是检测新图片的产生,首先,打开piclist.log文件,当没有受到并发限制的时候,然后再去运用os,walk函数去遍历"。/img/shutter/"目录,这里要保证读取时间的先后顺序和写入.log的先后顺序同步,就不详细说了。
当检测到的为事先预定"9999999999999"文件时候,就是表明这是所有文件都以写入piclist.log并已检测完毕,
当所检测的文件不在piclist.log的时候,便会调用checkbody(),来进行身体的检测,
checkbody()
之所以先检测身体,只有在有身体的情况下,才会有面部,可以减小服务器的负荷,
首先,读取照片,然后传入BodyAPI,进行Body的检测。当不存在身体时候,将文件写入piclist.log。进行下一个文件的检测
当存在Body的时候,会将图片中的每个Body都抠出来,然后分别放在"。/img/done/"里面,进行下一步的面部识别,。
这里又对checkface_online()进行了一个并发限制的异常处理,因为实在没法确定下一秒是否会并发限制,为了防止程序异常终端,所以在每次调用faceAPI的时候都要异常处理一下,目前BodyAPI并不会发生并发限制
detailface()
这个就是在运行faceAPI的时候。将返回来的face_token与数据路中的人脸进行比对,并返回该面部所对对应的ID,namem,gender等信息
checkface_online()
面部识别这一块有点长,不过也很简单!
首先读取"。/img/done/"下的文件,然后将其传给FaceAPI()进行面部分析,如果result_d["faces"]==0,着表明只存在身体并未检测到人脸,判定为stranger!写入Piclist.log,进行下一张图像的检测,当result_d["faces"]》0 时,才可以将面部返回的face_tokrn与之前导入的face_token进行比对,同理,当返回的len(result_s)==3及表明数据库中并没有该人脸,判定为 stranger!,写入Piclist.log。当len(result_s)》3时候,同时 confidence 》= 80.00才可以判定这个人是谁,否者都别判定为陌生人!
if __name__ == ‘__main__’:
这里就是要运行的方式
python MS.py check
这是就会开启图片检测的功能。
python MS.py camera
这是就会开图像截取的功能
2:BodyAPI,FaceAPI,import.py
PS:这些就详细说了,因为之前发表过一篇文章,大家可以去参考
0×05:运行
代码forkgithub.com/0x024/MS官方博客0x024.com
运行前, 需要将。/facepp/FaceAPI.py和BodyAPI.p