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)
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))
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)
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))
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)
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)