def process_img(path, new_path): dirs = os.listdir(path) for pic_dir in dirs: print(pic_dir) dir_path = os.path.join(path, pic_dir) pics = os.listdir(dir_path) for pic in pics: pic_path = os.path.join(dir_path, pic) image = face_recognition_models.load_image_file(pic_path) face_locations = face_recognition_models.face_locations(image) if len(face_locations) == 0: continue img = Image.open(pic_path) new_pic_path = os.path.join(new_path, pic_dir) if not os.path.exists(new_pic_path): os.makedirs(new_pic_path) if len(img.split()) == 4: # 利用split和merge将通道从四个转换为三个 r, g, b, a = img.split() toimg = Image.merge("RGB", (r, g, b)) toimg.save(new_pic_path + '\\' + pic) else: try: img.save(new_pic_path + '\\' + pic) except: continue print('Finish......!')
def main(): encoding = "D:\Projects\computer vision\FaceRecognition\data\encoding1.pickle" data = pickle.loads(open(encoding, "rb").read()) print(data) cap = cv2.VideoCapture(0) if cap.isOpened : ret, frame = cap.read() else: ret = False while(ret): ret, frame = cap.read() rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) rgb = imutils.resize(frame, width=400) r = frame.shape[1] / float(rgb.shape[1]) boxes = face_recognition_models.face_locations(rgb, model= "hog") encodings = face_recognition_models.face_encodings(rgb, boxes) names = [] for encoding in encodings: matches = face_recognition_models.compare_faces(np.array(encoding),np.array(data["encodings"])) name = "Unknown" if True in matches: matchedIdxs = [i for (i, b) in enumerate(matches) if b] counts = {} for i in matchedIdxs: name = data["names"][i] counts[name] = counts.get(name, 0) + 1 name = max(counts, key=counts.get) names.append(name) for ((top, right, bottom, left), name) in zip(boxes, names): top = int(top * r) right = int(right * r) bottom = int(bottom * r) left = int(left * r) cv2.rectangle(frame, (left, top), (right, bottom),(0, 255, 0), 2) y = top - 15 if top - 15 > 15 else top + 15 cv2.putText(frame, name, (left, y), cv2.FONT_HERSHEY_SIMPLEX,0.75, (0, 255, 0), 2) cv2.imshow("Frame", frame) if cv2.waitKey(1) == 27: break cv2.destroyAllWindows() cap.release()
cam.release() cv2.destroyAllWindows()''' while True: # Grab a single frame of video ret, frame = cam.read() # Resize frame of video to 1/4 size for faster face recognition processing small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_small_frame = small_frame[:, :, ::-1] # Only process every other frame of video to save time if process_this_frame: # Find all the faces and face encodings in the current frame of video face_locations = face_recognition_models.face_locations( rgb_small_frame) face_encodings = face_recognition_models.face_encodings( rgb_small_frame, face_locations) face_names = [] for face_encoding in face_encodings: # See if the face is a match for the known face(s) matches = face_recognition_models.compare_faces( known_face_encodings, face_encoding) name = "Unknown" # If a match was found in known_face_encodings, just use the first one. if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index]
knownNames = [] # loop over the image paths for (i, imagePath) in enumerate(imagePaths): # extract the person name from the image path print("[INFO] processing image {}/{}".format(i + 1, len(imagePaths))) name = imagePath.split(os.path.sep)[-2] # load the input image and convert it from RGB (OpenCV ordering) # to dlib ordering (RGB) image = cv2.imread(imagePath) rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # detect the (x, y)-coordinates of the bounding boxes # corresponding to each face in the input image boxes = face_recognition.face_locations(rgb, model=args["detection_method"]) # compute the facial embedding for the face encodings = face_recognition.face_encodings(rgb, boxes) # loop over the encodings for encoding in encodings: # add each encoding + name to our set of known names and # encodings knownEncodings.append(encoding) knownNames.append(name) # dump the facial encodings + names to disk print("[INFO] serializing encodings...") data = {"encodings": knownEncodings, "names": knownNames} f = open(args["encodings"], "wb") f.write(pickle.dumps(data))
knows_faces = [] knows_names = [] for name in os.listdir(KNOWN_FACES_DIR): for filename in os.listdir(f"{KNOWN_FACES_DIR}/{name}"): image = face_recognition.load_image_file( f"{KNOWN_FACES_DIR}/{name}/{filename}") encoding = face_recognition.face_encodings(image)[0] knows_faces.append(encoding) knows_names.append(name) print("Prosseing Unknow Face -----") for filename in os.listdir(UNKNOWN_FACES_DIR): print(filename) image = face_recognition.load_image_file(f"{UNKNOWN_FACES_DIR}/{filename}") locations = face_recognition.face_locations(image, model=MODEL) encodings = face_recognition.face_encodings(image, locations) image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) for face_encoding, face_location in zip(encodings, locations): results = face_recognition.compare_face(knows_faces, face_encoding, locations, TOLEREANCE) match = None if True in results: match = knows_names[results.index(True)] print(f"Match Face :{match}") top_left = (face_location[3], face_location[0]) bottom_right = (face_location[1], face_location[2]) color = [0, 255, 0] cv2.rectangle(image, top_left, bottom_right, color, FACE_THICKNESS)