大片视频免费观看视频_欧美激情猛片xxxⅹ大3之樱桃_性饥渴艳妇性色生活片在线播放_啦啦啦www视频在线观看_宝贝~你里面好紧我好爽视频_国产国产人免费人成免费视频_来自GeoGebra 的交互式_欧美又色又爽又黄的A片18禁_色欲aⅴ亚洲情无码AV

基于Dragonboard 410c的智能魔鏡設(shè)計(jì)(5)——通過人臉進(jìn)行用戶身份識(shí)別

share

根據(jù)前面的設(shè)計(jì)方案,在設(shè)計(jì)的基于dragonboard 410c的智能魔鏡中,需要根據(jù)超聲波檢測(cè)到有人靠近的時(shí)候,通過USB攝像頭采集人臉數(shù)據(jù),然后根據(jù)數(shù)據(jù)庫中的人臉數(shù)據(jù)進(jìn)行人臉匹配,識(shí)別用戶的身份,最終根據(jù)用戶身份顯示不同的消息和推送不同的內(nèi)容,這期blog將重點(diǎn)向大家介紹智能魔鏡中的人臉檢測(cè)和識(shí)別處理實(shí)現(xiàn)的原理和過程。

需要進(jìn)行基于人臉的用戶身份識(shí)別,首先需要檢測(cè)出人臉,然后根據(jù)檢測(cè)出來的人臉與數(shù)據(jù)庫中的人臉進(jìn)行匹配,最終得出匹配度,根據(jù)匹配度確定該人臉的身份,這里將從這兩個(gè)方面來向大家介紹如何在智能魔鏡中實(shí)現(xiàn)人臉身份檢測(cè),其實(shí)在前面的一系列blog中已經(jīng)給大家介紹了人臉識(shí)別和檢測(cè)的實(shí)現(xiàn)方法,這里就在結(jié)合智能魔鏡代碼設(shè)計(jì)再向大家如何應(yīng)用前面已經(jīng)設(shè)計(jì)好的人臉檢測(cè)和識(shí)別的代碼,將其集中到智能魔鏡中的應(yīng)用中來。

在基于USB攝像頭人臉識(shí)別的文章中已經(jīng)告訴了大家如使用Python和OpenCV來何構(gòu)建人臉檢測(cè)代碼,我們這里構(gòu)建了一個(gè)getFac.py文件,在該文件中通過getFac類來實(shí)現(xiàn)人臉的檢測(cè),其實(shí)也就是對(duì)前面blog方法的一次封裝即可,具體代碼如下:

????def getface(self,device):? ? ? ? cap = cv2.VideoCapture(device)? ? ? ? faces=[]? ? ? ? num=self.maxFrames? ? ? ? while(True):? ? ? ? ? ? ret,img=cap.read()? ? ? ? ? ? ret,img=cap.read()? ? ? ? ? ? ret,img=cap.read()? ? ? ? ? ? ret,img=cap.read()? ? ? ? ? ? if ret==True:? ? ? ? ? ? ? ? gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)? ? ? ? ? ? ? ? faces = self.face_cascade.detectMulTIScale(gray,1.3,5)? ? ? ? ? ? ? ? i=0? ? ? ? ? ? ? ? for(x,y,w,h) in faces:? ? ? ? ? ? ? ? ? ? face=img[y:y+h,x:x+w]? ? ? ? ? ? ? ? ? ? print("get face sucessful")? ? ? ? ? ? ? ? ? ? cap.release()? ? ? ? ? ? ? ? ? ? cv2.imwrite('./temp.jpg',face)? ? ? ? ? ? ? ? ? ? return True? ? ? ? ? ? ? ? num=num-1? ? ? ? ? ? ? ? if num==0:? ? ? ? ? ? ? ? ? ? print("get face failed")? ? ? ? ? ? ? ? ? ? cap.release()? ? ? ? ? ? ? ? ? ? return False? ? ? ? ? ? else:? ? ? ? ? ? ? ? ?cap.release()? ? ? ? ? ? ? ? ?return False??

有了上述類,我們就可以檢測(cè)并且獲得人臉圖像,接下來我們需要利用檢測(cè)到的人臉圖像,與數(shù)據(jù)庫中的人臉圖像進(jìn)行匹配,實(shí)現(xiàn)人臉的識(shí)別,其方法和前面 使用USB攝像頭進(jìn)行人臉識(shí)別文章--第二篇 中的方法一樣,采用opencv提供的人臉識(shí)別接口來實(shí)現(xiàn),但是這里為了在魔鏡中調(diào)用,重寫了前面blog的方法,構(gòu)建了一個(gè)peopleIdenTIficaTIon.py類來實(shí)現(xiàn)魔鏡中的人臉身份檢測(cè),這里封裝了一個(gè)peopleDetected類來實(shí)現(xiàn)人臉的身份識(shí)別,重新封裝后的代碼和前面代碼稍有差異,具體設(shè)計(jì)如下:

???????class peopleDetected:? ? def __init__(self,trainImgPath):? ??? ? ? ? self.threshold=6000? ? ? ? self.model = cv2.createFisherFaceRecognizer()? ? ? ? self.trainModel('./usrImg')? ?? ? #load all user img create Train table? ? #imgPath is user img path? ? def trainModel(self,trainImgPath):? ? ? ? names=[]? ? ? ? lables=[]? ? ? ? userImgDir=os.listdir(trainImgPath)? ? ? ? #print(userImgDir)? ? ? ? for imgDir in userImgDir:? ? ? ? ? ? print("userID dir is:")?? ? ? ? ? ? #print(imgDir)? ? ? ? ? ? format="%s/%s"? ? ? ? ? ? values=(trainImgPath,imgDir)? ? ? ? ? ? dirPath=format % values? ? ? ? ? ? #find current user img? ? ? ? ? ? allimgPath=os.listdir(dirPath)? ? ? ? ? ? #print(allimgPath)? ? ? ? ? ? for name in allimgPath:? ? ? ? ? ? ? ? names.append(dirPath+'/'+name)? ? ? ? ? ? ? ? lables.append(int(imgDir))? ? ? ? ? ? ? ? print("save sucessful:")? ? ? ? print(names)? ? ? ? print(lables)? ? ? ? #return names,lables? ? ? ? trainImg=[]? ? ? ? for imgloadPath in names:? ? ? ? ? ? obj=cv2.resize(cv2.imread(imgloadPath,0),(400,500))? ? ? ? ? ? trainImg.append(obj)? ? ? ? self.model.train(trainImg,np.array(lables))? ? ? ? print(lables)? ? def getPeopleID(self,faceImgPath):? ? ? ? faceImg=cv2.imread(faceImgPath,0)? ? ? ? face=cv2.resize(faceImg,(400,500))? ? ? ? result = self.model.predict(face)? ? ? ? predicTID=result[0]? ? ? ? predictError=result[1]? ? ? ? print(predictID)? ? ? ? print(predictError)? ? ? ? #print(result)? ? ? ? if predictError>self.threshold:? ? ? ? ? ? return -1? ? ? ? else:? ? ? ? ? ? print("get people ID")? ? ? ? ? ? return predictID? ? def getPeopleID2(self,faceImg):? ? ? ? face=cv2.resize(faceImg,(400,500))? ? ? ? result = self.model.predict(face)? ? ? ? predictID=result[0]? ? ? ? predictError=result[1]? ? ? ? #print(predictID)? ? ? ? #print(predictError)? ? ? ? #print(result)? ? ? ? if predictError>self.threshold:? ? ? ? ? ? return -1? ? ? ? else:? ? ? ? ? ? return predictID?

有了這兩個(gè)類,我們就可以方便的構(gòu)建魔鏡的人臉身份識(shí)別子模塊了,這里我們只需要通過下面的代碼就可以使用人臉檢測(cè)和進(jìn)行人臉身份識(shí)別了:

? ??GF=getFace()

? ??rs=GF.getface(0)

? ??PD=peopleDetected("./usrImg")

? ??peopleID=PD.getPeopleID('./temp.jpg')?

其中PD在構(gòu)建的過程中,將導(dǎo)入./userImg中的用戶信息作為訓(xùn)練數(shù)據(jù)。

每次檢測(cè)到的人臉保存在./temp.jpg中。

后續(xù)blog將進(jìn)一步向大家介紹如何利用上述兩個(gè)類,并且根據(jù)超聲波檢測(cè)結(jié)果來完成整個(gè)魔鏡的人臉身份檢測(cè)和保存。

share