Exemplo n.º 1
0
def main(samples_dir, test_dir, output_dir):
    face_descriptors, class_names = load_samples_descriptors(samples_dir)
    save2pickle(face_descriptors, class_names, "wg_colleagues.pkl")
    # face_descriptors, class_names = load_from_pickle('wg_colleagues.pkl')
    print(face_descriptors[0])
    print("len face_descriptors: {}".format(len(face_descriptors)))
    print("len class_names: {}".format(len(class_names)))
    print("class_names: {}".format(class_names))
    print("total class: {}".format(len(set(class_names))))
    image_files = images_in_dir(test_dir)

    for im_f in image_files:
        im = cv2.imread(im_f)
        faces = detect_faces(im)
        start = time.time()
        for face in faces:
            descriptor = compute_face_descriptor(im, face)
            idx, distance = closest_one(face_descriptors, descriptor)
            if distance > 0.4:
                label = 'unknown'
            else:
                label = class_names[idx]
            subdir = _subdir(output_dir, label)

            images_count = len(glob.glob('{}/*.jpg'.format(subdir)))

            f_name = '{}_{}.jpg'.format(label, '{0:04d}'.format(images_count))

            print('{}: {}, of distance :{} '.format(im_f, f_name, distance))

            output_path = os.path.join(subdir, f_name)
            cv2.imwrite(output_path, im)

        print('time : ', time.time() - start)
Exemplo n.º 2
0
def main(samples_dir, test_dir, output_dir):
    face_descriptors, class_names = load_samples_descriptors(samples_dir)
    # save2pickle(face_descriptors, class_names, "wg_colleagues.pkl")
    # face_descriptors, class_names = load_from_pickle('wg_colleagues.pkl')

    image_files = images_in_dir(test_dir)
    labels, names = _labeled(class_names)
    classifier = SVMClassifier()
    classifier.train(face_descriptors, labels, names)

    for im_f in image_files:
        f_name = filename(im_f)
        im = cv2.imread(im_f)
        faces = detect_faces(im)
        start = time.time()
        print('{} faces detected'.format(len(faces)))
        for face in faces:
            descriptor = compute_face_descriptor(im, face)
            results = classifier.predict([descriptor])

            for r in results:
                label = '{}'.format(r)
                print('label:', label)

                subdir = _subdir(output_dir, label)

                images_count = len(glob.glob('{}/*.jpg'.format(subdir)))

                f_name = '{}_{}.jpg'.format(label,
                                            '{0:04d}'.format(images_count))

                output_path = os.path.join(subdir, f_name)
                cv2.imwrite(output_path, im)

        print('{} done, time spent: {}'.format(f_name, time.time() - start))
Exemplo n.º 3
0
def main(samples_dir, test_images_dir, output_dir):
    face_descriptors, class_names = load_samples_descriptors(samples_dir)
    # save2pickle(face_descriptors, class_names, 'wg_merged.pkl')
    # face_descriptors, class_names = load_from_pickle('wg_merged.pkl')
    print(class_names)
    labels, names = _labeled(class_names)
    classifier = SVMClassifier()

    print([names[i] for i in labels])

    classifier.train(face_descriptors, labels, names)

    # classifier.load("classifier_2018-05-15 13:30:06.213832.pkl")
    image_files = images_in_dir(test_images_dir)
    for im_f in image_files:
        output_path = os.path.join(output_dir, filename(im_f))
        im = cv2.imread(im_f)
        faces = detect_faces(im)
        for face in faces:
            descriptor = compute_face_descriptor(im, face)
            results = classifier.predict([descriptor])
            for r in results:
                txt = '{}'.format(r)
                put_text(im, txt, font_face=cv2.FONT_HERSHEY_SIMPLEX)

                print('{}: {} '.format(im_f, r))
        cv2.imwrite(output_path, im)
Exemplo n.º 4
0
def main(samples_dir, output_dir, image_size=160, margin=32):
    hierarchy = read_from_hierarchy(samples_dir)

    for k in hierarchy.keys():
        images_path = hierarchy[k]
        image_files = images_in_dir(images_path)
        subdir = _subdir(output_dir, k)
        start = time.time()
        for im_f in image_files:
            im = cv2.imread(im_f)
            height, width = im.shape[:2]
            faces = detect_faces(im)

            print('{}, {} faces detected'.format(im_f, len(faces)))
            for face in faces:
                images_count = len(glob.glob('{}/*.jpg'.format(subdir)))
                f_name = '{}_{}.jpg'.format(k, '{0:04d}'.format(images_count))
                output_path = os.path.join(subdir, f_name)
                x1, y1, x2, y2 = to_rectangle(face)

                x1 = max(x1 - margin, 0)
                y1 = max(y1 - margin, 0)
                x2 = min(x2 + margin, width)
                y2 = min(y2 + margin, height)

                roi = im[y1:y2, x1:x2, :]

                roi = cv2.resize(roi, (image_size, image_size))
                cv2.imwrite(output_path, roi)

        print('{} done, time spent: {}'.format(k, time.time() - start))
Exemplo n.º 5
0
def main(samples_dir, test_dir, output_dir):
    # face_descriptors, class_names = load_samples_descriptors(samples_dir)
    # save2pickle(face_descriptors, class_names, "wg_colleagues.pkl")
    face_descriptors, class_names = load_from_pickle('../wg_colleagues.pkl')
    print(face_descriptors[0])
    print("len face_descriptors: {}".format(len(face_descriptors)))
    print("len class_names: {}".format(len(class_names)))
    print("class_names: {}".format(class_names))
    image_files = images_in_dir(test_dir)

    f_nums = {}

    for im_f in image_files:
        f_name = filename(im_f)
        im = cv2.imread(im_f)
        faces = detect_faces(im)
        start = time.time()
        for face in faces:
            descriptor = compute_face_descriptor(im, face)
            idx, distance = closest_one(face_descriptors, descriptor)

            #
            # f_num = len(glob.glob('{}/{}*.jpg'.format(output_dir, class_names[idx])))
            # f_name = '{}_{}.jpg'.format(class_names[idx], '{0:04d}'.format(f_num))

            #
            f_nums.setdefault(
                class_names[idx],
                len(
                    glob.glob('{}/{}*.jpg'.format(output_dir,
                                                  class_names[idx]))))
            f_name = '{}_{}.jpg'.format(
                class_names[idx], '{0:04d}'.format(f_nums[class_names[idx]]))
            f_nums[class_names[idx]] += 1

            # txt = '{}:{}'.format(class_names[idx], distance)
            # put_text(im, txt, font_face=cv2.FONT_HERSHEY_SIMPLEX)
            print('{}: {}, of distance :{} '.format(im_f, f_name, distance))
        end = time.time()
        print('time : ', end - start)
        output_path = os.path.join(output_dir, f_name)
        cv2.imwrite(output_path, im)
Exemplo n.º 6
0
def main(samples_dir, test_dir, output_dir):
    # face_descriptors, class_names = load_samples_descriptors(samples_dir)
    # save2pickle(face_descriptors, class_names, "wg_colleagues.pkl")
    face_descriptors, class_names = load_from_pickle('wg_colleagues.pkl')
    print(face_descriptors[0])
    print("len face_descriptors: {}".format(len(face_descriptors)))
    print("len class_names: {}".format(len(class_names)))
    print("class_names: {}".format(class_names))
    image_files = images_in_dir(test_dir)
    for im_f in image_files:
        output_path = os.path.join(output_dir, filename(im_f))
        im = cv2.imread(im_f)
        faces = detect_faces(im)
        for face in faces:
            descriptor = compute_face_descriptor(im, face)
            idx, distance = closest_one(face_descriptors, descriptor)
            txt = '{}:{}'.format(class_names[idx], distance)
            put_text(im, txt, font_face=cv2.FONT_HERSHEY_SIMPLEX)
            print('{}: {}, of distance :{} '.format(im_f, class_names[idx],
                                                    distance))
        cv2.imwrite(output_path, im)