基于dragonboard 410c的智能魔镜设计(6)——人脸检测及身份识别启动模块封装

       前面blog中已经向大家介绍了如何构建用于智能魔镜的获取人脸getFac.py和检测人脸detectedIdentification.py两个模块,借助着两个模块我们可以方便的进行人脸检测保存人脸图像,和根据检测到的人脸图像读取人脸身份ID,但是在智能魔镜中,我们还需要根据超声波的状态来决定是否启动摄像头模块进行人脸检测,并且在有人来的时候还需要将检测结果告知到UI程序,启动UI程序执行相应的消息推送命令,这期blog将向大家介绍如何将这些程序模块组织起来,形成一个完整的人脸检测及身份识别模块。

      这里我们通过设计一个startPeopleDetect.py模块来实现整个功能,具体设计如下:

      1)超声波读取函数

      这里通过构建两个函数来实现,第一个函数实现对超声波设备驱动数据的读取获取超声波数据,第二个函数对第一个函数进行了封装,根据获取的超声波数据来判断人是否在镜子前面,

   def getUltrasonicData():
         ult=open("/sys/devices/platform/soc/soc:sonar/value")
         return(int(ult.read()))
         #return(random.uniform(20,120))
   def isPeopleFrontMirro(dist):
         d=getUltrasonicData()
         print(d)
         if dist<d:
            return False
         else:
            return True

     然后我们就可以构建主函数了,在主函数直接完成所有的启动和人脸检测及识别动作,通过这个函数启动维护人脸检测,并且将检测结果实时的写入到数据库中,为UI程序提供人脸检测结果数据,UI程序就可以根据该数据执行相应的显示命令,具体的主函数实现如下:

     if __name__=="__main__":
     
    sf=1
    if sys.argv[0]<1000 and sys.argv[0]>200:
        dist=sys.argv[0]
    else:
        dist=600
    
    isPeopleFront=0
    GF=getFace()
    #GF.getface(0)
    PD=peopleDetected("./usrImg")
    #PD.getPeopleID("./usrImg/002/2.jpg")
    
    while(True):
        if isPeopleFront==0:
            sf=1
            print("no people")
            MMDB=MagicMirrorDB("./db.sqlite3")
            MMDB.updateSystemStatus('peopleInfront',-1,0,'no people in front')
            time.sleep(sf)
            isPeopleFront=isPeopleFrontMirro(dist)
        else:
            
            # start getface
            rs=GF.getface(0)
            # start detectPeopleID
            if rs!=False:
                peopleID=PD.getPeopleID('./temp.jpg')
                MMDB=MagicMirrorDB("./db.sqlite3")
            else:
                peopleID=-1
            #is people in front mirro but no find user ID
            if(peopleID==-1):
                MMDB.updateSystemStatus('peopleInfront',1,0,'have people in front but no ID')
            else:
                MMDB.updateSystemStatus('peopleInfront',2,peopleID,'find user ID')
                   
            while True:
                #isPeopleFront=isPeopleFrontMirro(dist)
                if isPeopleFront==1:
                    sf=1
                    time.sleep(sf)
                else:
                    #save in database
                    break
                isPeopleFront=isPeopleFrontMirro(dist)
    
    sys.exit(0)    

    保存这个文件,然后搭建好超声波设备和插入USB摄像头,运行该文件就可以每隔1s实现人脸的检测和识别,并且将识别结果保存到数据库中,这样我们就完成了整个魔镜的人脸检测和识别功能的设计。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值