示例#1
0
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()
示例#2
0
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
示例#3
0
        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()
示例#4
0
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
示例#5
0
    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)
示例#6
0
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()
示例#7
0
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)
示例#8
0
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)
示例#9
0
def delEmptyFaces():
    print("удаляем пустые персоны")
    FaceAlgo.delEmptyFaces()
    refresh_main_window()
示例#10
0
def delbuff():
    FaceAlgo.del_buff()
示例#11
0
# 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()
示例#12
0
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)
示例#13
0
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
示例#14
0
def compare_person(i):
    FaceAlgo.compare_face_by_id(23)
    FaceAlgo.compare_face_by_id(3)