生活随笔
收集整理的這篇文章主要介紹了
人脸识别的代码及问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先這里面結合了b站和csdn中共同的代碼
這是利用圖片中的像素值進行和攝像頭實時拍攝進行的對比
代碼如下:
主要在pycharm中使用
import cv2
import numpy as np
import os
# coding=utf-8
import urllib
import urllib.request
import hashlib#加載訓練數據集文件
recogizer=cv2.face.LBPHFaceRecognizer_create()
recogizer.read('D:/Game/aaa/opencv/trainer.yml')
names=[]
warningtime = 0def md5(str):import hashlibm = hashlib.md5()m.update(str.encode("utf8"))return m.hexdigest()statusStr = {'0': '短信發送成功','-1': '參數不全','-2': '服務器空間不支持,請確認支持curl或者fsocket,聯系您的空間商解決或者更換空間','30': '密碼錯誤','40': '賬號不存在','41': '余額不足','42': '賬戶已過期','43': 'IP地址限制','50': '內容含有敏感詞'
}def warning():smsapi = "http://api.smsbao.com/"# 短信平臺賬號user = '13******10'# 短信平臺密碼password = md5('*******')# 要發送的短信內容content = '【報警】\n原因:檢測到未知人員\n地點:xxx'# 要發送短信的手機號碼phone = '*******'data = urllib.parse.urlencode({'u': user, 'p': password, 'm': phone, 'c': content})send_url = smsapi + 'sms?' + dataresponse = urllib.request.urlopen(send_url)the_page = response.read().decode('utf-8')print(statusStr[the_page])#準備識別的圖片
def face_detect_demo(img):gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#轉換為灰度face_detector=cv2.CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')face=face_detector.detectMultiScale(gray,1.1,5,cv2.CASCADE_SCALE_IMAGE,(100,100),(300,300))for x,y,w,h in face:cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1)# 人臉識別ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])#print('標簽id:',ids,'置信評分:', confidence)if confidence > 70:global warningtimewarningtime += 1if warningtime > 100:warning()warningtime = 0cv2.putText(img, 'unknow', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)else:cv2.putText(img,str(names[ids]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)cv2.imshow('result1',img)#print('bug:',ids)def name():path = 'D:/opencv/opencv/baocuntupian/'#names = []imagePaths=[os.path.join(path,f) for f in os.listdir(path)]for imagePath in imagePaths:name = str(os.path.split(imagePath)[1].split('.',2)[1])names.append(name)videoSourceIndex=0
cap=cv2.VideoCapture(cv2.CAP_DSHOW+videoSourceIndex)
name()
while True:flag,frame=cap.read()if not flag:breakface_detect_demo(frame)if ord(' ') == cv2.waitKey(30):break
cv2.destroyAllWindows()
cap.release()
不過有時候在這一行容易出現數組越界的錯誤,靠大佬指正啦!
else:cv2.putText(img,str(names[ids]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)cv2.imshow('result1',img)
總結
以上是生活随笔為你收集整理的人脸识别的代码及问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。