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 Merge(i): global person_list1, person_list2 if person_list1 == -1 or person_list2 == -1: print("не выбраны персоны") return if i == -1: FaceAlgo.mergerPerson(person_list1, person_list2) if i == 1: FaceAlgo.mergerPerson(person_list2, person_list1) return
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 make_keras(i): #FaceAlgo.clear_noname() FaceAlgo.delEmptyFaces() # data = FaceAlgo.load_all_faces() # #face.id, person.id, person.name, face.image_path, data_f # print(data[0]) # x_train = np.random.random((len(data), 128)) # y_train = np.random.random((len(data), 1)) # # for i in range(0, len(data)): # x_train[i] = np.asarray(data[i][4]) # y_train[i] = int(data[i][1]) #y_train = np.random.random((len(data), 1)) #print(x_train[0], y_train[0]) # Generate dummy data # x_train = np.random.random((1000, 128)) # y_train = np.random.randint(2, size=(1000, 1)) # x_test = np.random.random((100, 128)) # y_test = np.random.randint(2, size=(100, 1)) # # # print(x_train[0], y_train[0]) # print(len(x_train[0]), len(y_train[0])) # # model = Sequential() # model.add(Dense(512, activation='relu', input_dim=128)) # # model.add(Dropout(0.2)) # model.add(Dense(max(y_train), activation='softmax')) # model.compile(loss='categorical_crossentropy', # optimizer='adam', # metrics=['accuracy']) # model = Sequential() # model.add(Dense(64, input_dim=128, activation='relu')) # model.add(Dropout(0.5)) # model.add(Dense(64, activation='relu')) # model.add(Dropout(0.5)) # model.add(Dense(1, activation='sigmoid')) # # model.compile(loss='binary_crossentropy', # optimizer='rmsprop', # metrics=['accuracy']) # # model.fit(x_train, y_train, # epochs=20, # batch_size=16) # score = model.evaluate(x_test, y_test, batch_size=128) return
def show_frame(): # print("получили кадр") global lmain, cap, var0, mashtab, count_frame, detect_faces_opencv, AddQ _, frame = cap.read() count_frame += 1 if var0.get() == "1": frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, True) else: frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, False) for face_descriptor in face_descriptors: # отрисовываем и проверяем все найденные лица 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]) else: print("Create new person?") alert.CNP(cap) t_c.destroy() time.sleep(2) AddQ = True # time.sleep(8) frame = cv2.resize(frame, None, fx=mashtab, fy=mashtab, interpolation=cv2.INTER_CUBIC) cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) img = ImageTk.PhotoImage(image=img) # lmain.image = img lmain.imgtk = img lmain.configure(image=img) # lmain.image = img lmain.after(1, show_frame)
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 show_frame(): #print("получили кадр") global lmain, cap, var0, mashtab, count_frame, detect_faces_opencv, nameMTS _, frame = cap.read() count_frame += 1 frame, face_descriptors = FaceAlgo.find_faces_in_image(frame, bluure, True) for face_descriptor in face_descriptors: #отрисовываем и проверяем все найденные лица 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]) # else: # print("Улыбочку!)") frame = cv2.resize(frame, None, fx=mashtab, fy=mashtab, interpolation=cv2.INTER_CUBIC) cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) img = ImageTk.PhotoImage(image=img) # lmain.image = img lmain.imgtk = img lmain.configure(image=img) #lmain.image = img lmain.after(1, show_frame)
def show_frame(): #print("получили кадр") global lmain, cap, var0, mashtab, count_frame, detect_faces_opencv _, frame = cap.read() count_frame += 1 # if detect_faces_opencv: # frame = cv2.resize(frame, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC) # # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # # faces = face_cascade.detectMultiScale(gray, 1.3, 5) # small=1 # for (x, y, w, h) in faces: # cv2.rectangle(gray, (x, y), (x + w, y + h), (255, 0, 0), 2) # #print(w) # if w>65: # small=0 # #cv2.imshow("gray", gray) # # if len(faces)<=0 or small==1: # if count_frame%50==0: # frame = cv2.resize(frame, None, fx=mashtab, fy=mashtab, interpolation=cv2.INTER_CUBIC) # cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) # img = Image.fromarray(cv2image) # img = ImageTk.PhotoImage(image=img) # # lmain.imgtk = img # lmain.configure(image=img) # # lmain.after(1, show_frame) # return if var0.get() == "1": frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, True) else: frame, face_descriptors = FaceAlgo.find_faces_in_image( frame, bluure, False) for face_descriptor in face_descriptors: #отрисовываем и проверяем все найденные лица ret, dist = FaceAlgo.compare_face(face_descriptor[0]) print(ret, dist) if ret: # if len(ret)>0: 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]) frame = cv2.resize(frame, None, fx=mashtab, fy=mashtab, interpolation=cv2.INTER_CUBIC) cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) img = ImageTk.PhotoImage(image=img) lmain.imgtk = img lmain.configure(image=img) #lmain.image = img lmain.after(1, show_frame)
def delEmptyFaces(): print("удаляем пустые персоны") FaceAlgo.delEmptyFaces() refresh_main_window()
def delbuff(): FaceAlgo.del_buff()
# fm.add_command(label="Exit", command=close_win) hm = Menu(m) # второй пункт меню m.add_cascade(label="Работа", menu=hm) #hm.add_command(label="Отладочные функции", command=WorkWindows) #hm.add_command(label="Сортировка", command=SortWindows) hm.add_command(label="Обновить список", command=refresh_main_window) sfm = Menu(fm) hm.add_cascade(label="Сортировка",menu=sfm) sfm.add_command(label="Сортировка", command=SortWindows) sfm.add_command(label="Сравнить лицо", command=ww.compare_person) sfm.add_command(label="Разнести лица по персонам", command=ww.make_all_person) #hm.add_command(label="About", command=about) hm = Menu(m) # второй пункт меню m.add_cascade(label="Персона", menu=hm) hm.add_command(label="Добавить персону", command=create_person) ofm = Menu(fm) hm.add_cascade(label="Удаления",menu=ofm) ofm.add_command(label="Удалить пустые персоны", command=FaceAlgo.delEmptyFaces()) ofm.add_command(label="Удалить все персоны", command=ww.del_all_person) ofm.add_command(label="Удалить выбранную персону", command=del_person) ofm.add_command(label="Удалить пустые персоны", command=delEmptyFaces) ofm.add_command(label="Удалить буфер", command=delbuff) #hm.add_command(label="About", command=about) root.mainloop()
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 OnSelect1(event): global all_person, person_list1, persons2, frame3, frame2 #print("click") # selections = listbox.curselection() # tuple of digit-string(s), aTupleOfSTRINGs, where digit-string(s) range from { 0, 1, .., N-1 } # selections = [int(x) + 1 for x in selections] # transform string(s) to shifted int(s), make 'em { 1, 2, .., N } if listbox1.curselection(): person_list1 = all_person[listbox1.curselection()[0]] print("выделили", person_list1.name) list_comp = FaceAlgo.ComparePersons( all_person[listbox1.curselection()[0]]) listbox2.delete(0, END) persons2.clear() # добавляем в лист бокс данные for p in list_comp: # listbox.insert(END, str(p.name+" "+p.second_name) ) listbox2.insert(END, str(str(p[2]) + " " + str(round(p[5], 2)))) ret, p = db.search_person_id(p[1]) if ret: persons2.append(p) listbox2.grid(row=0, column=4, padx=10, pady=10) list = frame2.grid_slaves() for l in list: l.destroy() list = frame3.grid_slaves() for l in list: l.destroy() row_c = 0 count = 0 for face in person_list1.face: count += 1 if count > 3: break frame = cv2.imread(face.image_path) height, width = frame.shape[:-1] if height > 0 and width > 0: frame = cv2.resize(frame, (115, 115), interpolation=cv2.INTER_CUBIC) cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) # imgtk = ImageTk.PhotoImage(image=img) # img = ImageTk.PhotoImage(Image.open(face.image_path)) img = ImageTk.PhotoImage(image=img) # print(face.image_path) # panel = Label(t, image=img) # panel = Label(t, text = face.image_path) panel = Button(frame3, image=img) # panel = Button(t, image=img, text=c) # panel.bind('<Button-1>', push_image) panel.image = img panel.grid(row=row_c, column=0, sticky=(N, W, E, S)) row_c += 1
def compare_person(i): FaceAlgo.compare_face_by_id(23) FaceAlgo.compare_face_by_id(3)