Exemplo n.º 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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
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()
Exemplo n.º 6
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()
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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()
Exemplo n.º 10
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)
Exemplo n.º 11
0
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
Exemplo n.º 12
0
def clear_noname():
    #удаляем все лица c noname
    res, noname = db.search_person("noname")
    db.del_face_in_persone(noname)
Exemplo n.º 13
0
def del_buff():
    print("Чистим буфер")
    answer, person_buf = db.search_person("bufer")
    if answer:
        for f in person_buf.face:
            db.del_face(f)