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