def del_buff(i): answer, person_buf = db.search_person("bufer") if answer: for f in person_buf.face: db.del_face(f) FaceAlgo.clear_noname()
def onPaste(): global listbox_faces, person # переносим из bufer в выбранный профиль answer, person_buf = db.search_person("bufer") if answer: for f in person_buf.face: db.set_face(person, f) refesh_persone()
def onPaste(person): global listbox_faces # переносим из bufer в выбранный профиль answer, person_buf = db.search_person("bufer") if answer: for f in person_buf.face: db.set_face(person, f) WindowfPersonRefresh(person)
def delEmptyFaces(): print("Загружаем данные с базы...") mass_faces.clear() all = db.select_all_person() res, noname = db.search_person("noname") for person in all: if person.name!="noname" and person.name!="bufer": if len(person.face)==0: print("удаляем пустую персону", person.name) db.del_persone(person)
def make_all_person(): print("Выбираем все лица из noname. И делаем разнос по персонам") #начинаем перебор всех лиц, по похожести, и сравниваем с уж созданными персонами res, noname = db.search_person("noname") print( "распределяем все лица по персонам. если уникальное, то создаем новую персону" ) FaceAlgo.load_all_faces() #перебираем все лица в noname, если нет похожих людей, то создаем новых faces, data = db.search_faces(noname) #print((data[0])) new_face_counter = 0 print("всего лиц ", len(data)) for i in range(0, len(data)): #print("сравниваем лицо", data[i]) if len(data[i]) != 128: print(i, data[i]) #перезагружаем всю базу, будет очень медленно #FaceAlgo.load_all_faces() #print("сравниваем лицо",i) ret, dist = FaceAlgo.compare_face(data[i], 0.45, False) if ret: if len(ret) > 0: print(ret) # оценка, имя персоны, id персоны, дескриптор print("Похож на ", ret[1], dist) # находим персону в базе #print(ret) if dist > 0.1: res, pers = db.search_person_id(ret[1]) if res: print("Добавляем лицо в персону", pers.name) #db.set_face(pers, faces[i]) FaceAlgo.set_face(pers, faces[i]) # else: # print("Лицо не добавляем. сильно похожее") else: new_face_counter += 1 facename = "name" + str(new_face_counter) new_p = db.add_person(facename) # добавляем неизвестно елицо в персну print("нет совпадений в лице создаем новую персону под лицо", facename, faces[i].id, faces[i].image_path) #db.set_face(new_p, faces[i]) FaceAlgo.set_face(new_p, faces[i]) #перезагружаем весь кэш. Поменялось многое FaceAlgo.load_all_faces()
def scan(): global AddQ, personMTS, nameMTS, feet nameMTS = feet.get() #str(random.randint(1, 100)) print("********") print("n " + nameMTS) db.add_person(nameMTS) answer, personMTS = db.search_person(nameMTS) FaceAlgo.name(nameMTS, personMTS) CameraWindow2.WindowsCamera(cap, True) regreg.destroy()
def load_all_faces(): global mass_faces, noname print("Загружаем данные с базы...") mass_faces.clear() all = db.select_all_person() res,noname =db.search_person("noname") for person in all: #if person.name != "noname" and person.name != "bufer": for face in person.face: #print(face.image_path) #faces.append(p.image_path) data_f = [] for d in face.data: data_f.append(float(d.code)) # print (len(data_f)) mass_faces.append([face.id, person.id, person.name, face.image_path, data_f ]) print("Загрузили") return mass_faces
def onCut(person): global listbox_faces,page_win_person, max_in_page #values = [listbox_faces.get(idx) for idx in listbox_faces.curselection()] answer, person_buf = db.search_person("bufer") if answer: # for face in person.face: # print(face) list_faces = [] for n in listbox_faces.curselection(): #print() list_faces.append( person.face[int(page_win_person*max_in_page +n)]) print(n) for f in list_faces: db.set_face(person_buf, f) WindowfPersonRefresh(person)
def onCut(): global listbox_faces, max_in_page, person, frame5,frame6 #values = [listbox_faces.get(idx) for idx in listbox_faces.curselection()] #page_win_person_main = read_page() answer, person_buf = db.search_person("bufer") if answer: # for face in person.face: # print(face) list_faces = [] for n in listbox_faces.curselection(): #print(int(page_win_person*max_in_page +n)) print (page_win_person_main) print(int(n), (int(page_win_person_main * max_in_page + n))) #num = (int(page_win_person * max_in_page + n)) list_faces.append( person.face[int(page_win_person_main*max_in_page +n)]) #list_faces.append(person.face[int(n)]) print(n) for f in list_faces: db.set_face(person_buf, f) refesh_persone()
def f_2(): global istate, lmain, cap, var0, mashtab, count_frame, detect_faces_opencv, AddQ, nameMTS, personMTS, statusMTS, Rtime, Btime statusMTS = "Ok" bluure = 5 mashtab = 0.5 print("Thread2") face_cascade = cv2.CascadeClassifier( 'C:\CV_Start\haarcascades\haarcascade_frontalface_default.xml') count_frame = 0 detect_faces_opencv = False flag_opencv = False cap = cv2.VideoCapture(0) var0 = 1 # while 1: # time.sleep(1) # print("------") while True: _, frame = cap.read() count_frame += 1 frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, False) person_name = "no_name" #print('preparing for recognize') for face_descriptor in face_descriptors: #print('recognizing') # отрисовываем и проверяем все найденные лица ret, dist = FaceAlgo.compare_face(face_descriptor[0]) #print(ret, dist) if ret: if len(ret) > 0: d = face_descriptor[1] cv2.putText(frame, str(str(round(dist, 2)) + " " + str(ret[2])), (d.left(), d.top()), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2) #print("Похож на ", ret[2]) person_name = str(ret[2]) # evt = threading.Event() # q.put((person_name, evt)) # print('Waiting for data to be doubled') # evt.wait() else: if statusMTS == "Er": print("Error") continue # if (Btime) - (int(time.time())) > 0: # print("Error") # Btime -= int(time.time()) # continue else: print("Create new person") nameMTS = input() db.add_person(nameMTS) answer, personMTS = db.search_person(nameMTS) FaceAlgo.name(nameMTS, personMTS) frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, nameMTS, True) tstart = int(time.time()) while ((tstart + 15) - (int(time.time())) > 0): _, frame = cap.read() frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, nameMTS, True) Rtime = (tstart + 15) - (int(time.time())) print((tstart + 15) - (int(time.time()))) # time.sleep(8) if person_name != "no_name": print(person_name)
def find_faces_in_image(image, bluur, add_flag=False): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) bluur_image = int(cv2.Laplacian(gray, cv2.CV_64F).var()) #cv2.imshow("Video", image) #print("bluure", bluur_image) if bluur_image < bluur: #print("bad bluure", bluur) cv2.putText(image, str(bluur_image), (30, 30), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 2) return image, [] cv2.putText(image, str(bluur_image), (30, 30), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2) img = image img_show = image.copy() #img2 = image # img2 = cv2.resize(image, None, fx=0.50, fy=0.5, interpolation=cv2.INTER_CUBIC) dets_webcam = detector(img, 1) face_descriptors = [] #face_descriptor=[] for k, d in enumerate(dets_webcam): face = img[d.top(): d.bottom(), d.left():d.right()].copy() if d.left() < 0 or d.top() < 0: print("плохие границы под лицо") continue if abs(d.left() - d.right()) < 70: print("маленькое лицо. отбраковываем", d.left() - d.right()) continue cv2.rectangle(img_show, (d.left(), d.top()), (d.right(), d.bottom()), (0, 0, 255), 2) #cv2.imshow("Video", img_show) #cv2.waitKey(1) #print(d.bottom(), d.top(), d.right(), d.left()) # cv2.imshow("Face", face) shape = sp(img, d) face_descriptor = facerec.compute_face_descriptor(img, shape) #cv2.putText(img, ret[2], (l, t), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 2) # # # print(face_descriptor) # if add_flag: answer, person = db.search_person("noname") if answer: print(person.name) # добавим новое лицо найденному человеку #gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY) #print(np.max(cv2.convertScaleAbs(cv2.Laplacian(gray, 3)))) # производим поиск и в noname тоже ret, dist = compare_face(face_descriptor, 0.5, True) print("схожесть", dist) if ret: # if len(ret)>0: if len(ret) > 0: if dist>0.35: print("Добавляем лицо в базу") face_file = 'c:/faces_db/' + str(int(time.time())) + '.jpg' # face =cv2.resize(face, (100, 100), interpolation=cv2.INTER_CUBIC) cv2.imwrite(face_file, face) # face_descriptor = [0.3, 0.7, -0.9] add_face(person, face_file, face_descriptor) #face = db.add_face(person, face_file, face_descriptor) else: print("В базе есть сильно похожее лицо, не добавляем") face_descriptors.append([face_descriptor, d]) #return img_show, face_descriptor, d return img_show, face_descriptors
def clear_noname(): #удаляем все лица c noname res, noname = db.search_person("noname") db.del_face_in_persone(noname)
def del_buff(): print("Чистим буфер") answer, person_buf = db.search_person("bufer") if answer: for f in person_buf.face: db.del_face(f)