update
This commit is contained in:
parent
38780c56a8
commit
9532845bc3
|
|
@ -9,6 +9,7 @@ import requests
|
||||||
import face_recognition
|
import face_recognition
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pickle
|
import pickle
|
||||||
|
import time
|
||||||
# Khởi tạo danh sách rỗng để lưu trữ thông tin người dùng
|
# Khởi tạo danh sách rỗng để lưu trữ thông tin người dùng
|
||||||
user_data = []
|
user_data = []
|
||||||
history = []
|
history = []
|
||||||
|
|
@ -17,6 +18,7 @@ screen_height = 1100
|
||||||
WINDOW_QR_CODE = "QR Code"
|
WINDOW_QR_CODE = "QR Code"
|
||||||
WINDOW_TRACKING = "Tracking"
|
WINDOW_TRACKING = "Tracking"
|
||||||
WINDOW_HISTORY = "History"
|
WINDOW_HISTORY = "History"
|
||||||
|
# URL_API = "http://localhost:8000/api/v1"
|
||||||
URL_API = "https://ms.prology.net/api/v1"
|
URL_API = "https://ms.prology.net/api/v1"
|
||||||
data = [0]
|
data = [0]
|
||||||
# Hàm thông báo bằng giọng nói
|
# Hàm thông báo bằng giọng nói
|
||||||
|
|
@ -262,7 +264,10 @@ def encodeImgs(save_path="../DetectFace/encodings.pkl"):
|
||||||
encodeListKnow = encodeImgs()
|
encodeListKnow = encodeImgs()
|
||||||
print("Load data success")
|
print("Load data success")
|
||||||
# Khởi tạo camera
|
# Khởi tạo camera
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
recognized_faces = {}
|
||||||
|
name_history = {}
|
||||||
cap = cv.VideoCapture(0)
|
cap = cv.VideoCapture(0)
|
||||||
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_frontalface_default.xml')
|
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_frontalface_default.xml')
|
||||||
cv.namedWindow(WINDOW_TRACKING, cv.WINDOW_NORMAL)
|
cv.namedWindow(WINDOW_TRACKING, cv.WINDOW_NORMAL)
|
||||||
|
|
@ -278,22 +283,37 @@ def main():
|
||||||
faceCurFrame = face_recognition.face_locations(frameS, model='hog')
|
faceCurFrame = face_recognition.face_locations(frameS, model='hog')
|
||||||
encodeCurFrame = face_recognition.face_encodings(frameS)
|
encodeCurFrame = face_recognition.face_encodings(frameS)
|
||||||
frame = process_qr_code(frame)
|
frame = process_qr_code(frame)
|
||||||
|
current_time = time.time()
|
||||||
for encodeFace, faceLoc in zip(encodeCurFrame, faceCurFrame):
|
for encodeFace, faceLoc in zip(encodeCurFrame, faceCurFrame):
|
||||||
matches = face_recognition.compare_faces(encodeListKnow, encodeFace)
|
matches = face_recognition.compare_faces(encodeListKnow, encodeFace)
|
||||||
faceDis = face_recognition.face_distance(encodeListKnow, encodeFace)
|
faceDis = face_recognition.face_distance(encodeListKnow, encodeFace)
|
||||||
# print(faceDis)
|
# print(faceDis)
|
||||||
matchIndex = np.argmin(faceDis)
|
matchIndex = np.argmin(faceDis)
|
||||||
|
|
||||||
if faceDis[matchIndex] < 0.3:
|
if faceDis[matchIndex] < 0.35:
|
||||||
name = classNames[matchIndex].upper()
|
name = classNames[matchIndex].upper()
|
||||||
process_face_detect(f"{name}\n{"Staff"}\n\n", frame)
|
# If the face is recognized, track the timestamp
|
||||||
|
if name not in recognized_faces:
|
||||||
|
recognized_faces[name] = current_time # Store first detection time
|
||||||
|
else:
|
||||||
|
elapsed_time = current_time - recognized_faces[name]
|
||||||
|
if (name not in name_history) or (current_time - name_history[name] >= 60):
|
||||||
|
if elapsed_time >= 2.5: # If face is seen for 2s, execute script
|
||||||
|
process_face_detect(f"{name}\n{"Staff"}\n\n", frame)
|
||||||
|
name_history[name] = time.time()
|
||||||
|
del recognized_faces[name]
|
||||||
|
else:
|
||||||
|
display_text(frame, f"Checking: "+str(round((elapsed_time/2.5)*100,2))+"%", (700, 55), 1, (0, 255, 255), 2)
|
||||||
|
else:
|
||||||
|
display_text(frame, f"Checked. Try after {round(60-(current_time - name_history[name]),0)}s", (600, 55), 1, (0, 255, 255), 2)
|
||||||
else:
|
else:
|
||||||
name = "Unknow"
|
name = "Unknow"
|
||||||
|
recognized_faces = {}
|
||||||
display_text(frame, f"Face not found - use QRcode", (20, 55), 0.7, (6, 6, 255), 2)
|
display_text(frame, f"Face not found - use QRcode", (20, 55), 0.7, (6, 6, 255), 2)
|
||||||
y1, x2, y2, x1 = faceLoc
|
y1, x2, y2, x1 = faceLoc
|
||||||
y1, x2, y2, x1 = y1*2, x2*2, y2*2, x1*2
|
y1, x2, y2, x1 = y1*2, x2*2, y2*2, x1*2
|
||||||
cv.rectangle(frame, (x1,y1), (x2,y2), (0,255,0), 2)
|
cv.rectangle(frame, (x1,y1), (x2,y2), (0,255,0), 2)
|
||||||
cv.putText(frame, name + f"({(1 - round(faceDis[matchIndex], 2))*100}%) - CHECKED", (20, 25), cv.FONT_HERSHEY_COMPLEX, 1, (255,255,255), 2)
|
cv.putText(frame, name + f"({(1 - round(faceDis[matchIndex], 2))*100}%)", (x1, y1), cv.FONT_HERSHEY_COMPLEX, 0.8, (0,255,0), 2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue