python人è¸è¯å«ï¼1ï¼
ç°å¨ä½¿ç¨çæ¯face_recognitionåº
æä»¬ç人è¸è¯å«åºäºface_recognitionåºãface_recognitionåºäºdlibå®ç°ï¼ç¨æ·±åº¦å¦ä¹ è®ç»æ°æ®ï¼æ¨¡ååç¡®çé«è¾¾99.38%ã
-
å®è£ python3
ç¾åº¦æç´¢pythonä¸è½½å®è£ å³å¯ãä¸è½½å°åhttps://www.python.org/downloads/windows/
å®è£ å®è¾å ¥pythonåºç°çæ¬å·å®è£ æå
python 基于face_recognition的人臉識别(1)結束 -
å®è£ pytohn çopencvåº
妿è·åè§é¢è¦ç¨å°opencvåº
pip install opencv-python
å®è£
å®è£ å®import cv2 æµè¯æ¯å¦å®è£ æå
python 基于face_recognition的人臉識别(1)結束 -
å®è£ dlibåº
face_recognition人è¸è¯å«æ¯åºäºdlibå®ç°çï¼ä¹å¯ä»¥ç´æ¥ç¨dlibå®ç°äººè¸è¯å«ï¼ä»¥åä¼è¯´ï¼ã
Dlibæ¯ä¸ä¸ªå 嫿ºå¨å¦ä¹ ç®æ³çC++弿ºå·¥å ·å ãDlibå¯ä»¥å¸®å©æ¨å建å¾å¤å¤æçæºå¨å¦ä¹ æ¹é¢ç软件æ¥å¸®å©è§£å³å®é é®é¢ãç®åDlibå·²ç»è¢«å¹¿æ³çç¨å¨è¡ä¸å妿¯é¢å,å æ¬æºå¨äºº,åµå ¥å¼è®¾å¤,ç§»å¨çµè¯å大å髿§è½è®¡ç®ç¯å¢ãDlibæ¯å¼æºçãå è´¹ç;å®ç½ågitå°å:#å®ç½http://dlib.net/#githubhttps://github.com/davisking/dlibDlib
å¯ä»¥ä¸è½½æªç¼è¯çï¼èªå·±ç¼è¯ï¼å¯ä»¥å¼å¯æ¾å¡è¿è¡è¯å«ï¼éåº¦ä¼ææåï¼å¾ævsä¸cmakeï¼ä¹å¯ç´æ¥ä¸è½½python对åºçæ¬çã
ä¸è½½å°åhttps://pypi.org/project/dlib/ã
ä¸è½½ä¸python对åºçæ¬çdlibåºå
å®è£pip install ä¸è½½çdlib
- å®è£
face_recognitionåº
pip install face_recognition
å®è£
å®è£ è¿ç¨å¦æç½ç»è¶ æ¶éæ°å®è£ å³å¯
-
宿¹ç¤ºä¾ä»£ç
https://github.com/ageitgey/face_recognition#face-recognition
ä¸è½½å®æ¹å®ä¾ä»£ç
ä¸é¢æ¯æèªå·±ä¿®æ¹ç代ç ï¼æé¦å æäººè¸ç ä¿¡æ¯å å ¥mysqlæ°æ®åºï¼æ¹ä¾¿ä»¥å对æ¯è¯å«ï¼éè¦å®è£ pymysqlï¼pip install pymysql
å å ¥æ°æ®åºä»£ç
import pymysql.cursors
import face_recognition
import os
# è¿æ¥MySQLæ°æ®åº
connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', db='face', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
#éè¿cursorå建游æ
cursor = connection.cursor()
rootdir = 'E:\\'#ç
§çè·¯å¾
list = os.listdir(rootdir) #ååºæä»¶å¤¹ä¸ææçç®å½ä¸æä»¶
for i in range(0,len(list)):
path = os.path.join(rootdir,list[i])
if path.endswith('.jpg') or path.endswith('.png') or path.endswith('.bmp') or path.endswith('.JPG'):
image = face_recognition.load_image_file(path)
face_encoding = face_recognition.face_encodings(image)[0]
# å建sql è¯å¥ï¼å¹¶æ§è¡
sql = "INSERT INTO `face` (`user_name`, `encoding`) VALUES ('{}', '{}')".format(list[i],face_encoding)
print(sql)
cursor.execute(sql)
# æäº¤SQL
connection.commit()
connection.close()
宿¶è¯å«ä»£ç
è·ååå ¥æ°æ®åºç人è¸ï¼è¿è¡å®æ¶å¯¹æ¯è¯å«
import face_recognition
import cv2
import os
import datetime
import time
import pymysql.cursors
# å建æ°ç»çç¼ç åä»ä»¬çåå
known_face_encodings = []
known_face_names = []
# è¿æ¥MySQLæ°æ®åº
connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', db='face', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
# éè¿cursorå建游æ
cursor = connection.cursor()
sql="select user_name,encoding from face1"
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
uname = row['user_name']
encod = list(map(float,row['encoding'].replace('[','').replace(']','').replace('\n','').split()))
known_face_names.append(uname)
known_face_encodings.append(encod)
print('add'+uname)
connection.close()
#video_capture = cv2.VideoCapture(0)
while True:
# Grab a single frame of video æä½ä¸ä¸ªå¸§çè§é¢
ret, frame = video_capture.read()
#print('读å')
if frame is None:
#video_capture = cv2.VideoCapture(0)
print('丢失帧')
else:
rgb_frame = frame[:, :, ::-1]
# æ¾å°ææçè¸åè¸enqcodings帧çè§é¢
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
# éåæ¯ä¸ªé¢å¨è¿ä¸ªå¸§çè§é¢
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# ççè¸æ¯å·²ç¥çå¹é
(s)
matches = face_recognition.compare_faces(known_face_encodings, face_encoding,0.4)
name = "Unknown"
if True in matches:
first_match_index = matches.index(True)
name = known_face_names[first_match_index]
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# ä¸é¢ç»ä¸ä¸ªæ ç¾åä¸ä¸ªåå
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
cv2.imshow('Video', frame)
# ç¹å»é®çä¸çâqâéåº!
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# éæ¾ä½¿ç¨çæå头
video_capture.release()
cv2.destroyAllWindows()
代ç 䏿¢è¡ä¸ç¼©è¿å¯è½æé®é¢é注æ
matches = face_recognition.compare_faces(known_face_encodings, face_encoding,0.4)
å ¶ä¸0.4é弿§å¶è¯å«ç²¾åº¦ï¼é»è®¤ä¸º0.6ï¼å¼è¶å°è¯å«ç精确度è¶é«ï¼0.35精度大äº0.4ï¼å¦æä½¿ç¨é»è®¤0.6è¯å«æ¯ä¸åç¡®çã
æ¤ä»£ç 宿¶æ¾ç¤ºçè¯é度è¿éæ¹è¿ï¼ä»¥åä¼è¯´ï¼