def verify_in_large_person_group(subscription_key): """VerifyInLargePersonGroup. This will verify whether faces detected as similar in a large group are of the same person. """ face_base_url = "https://{}.api.cognitive.microsoft.com".format( FACE_LOCATION) face_client = FaceClient( endpoint=face_base_url, credentials=CognitiveServicesCredentials(subscription_key)) image_url_prefix = "https://csdx.blob.core.windows.net/resources/Face/Images/" target_image_file_names = ["Family1-Dad1.jpg", "Family1-Dad2.jpg"] source_image_file_name1 = "Family1-Dad3.jpg" # Create a large person group. large_person_group_id = str(uuid.uuid4()) print("Create a large person group {}.".format(large_person_group_id)) face_client.large_person_group.create( large_person_group_id=large_person_group_id, name=large_person_group_id) person_id = face_client.large_person_group_person.create( large_person_group_id=large_person_group_id, name="Dad").person_id # Create a large person group person. p = Person(name="Dad", user_data="Person for sample", person_id=person_id) print("Create a large person group person {}.".format(p.name)) for target_image_file_name in target_image_file_names: # Add face to the large person group. print("Add face to the large person group person {} from image {}.". format(p.name, target_image_file_name)) faces = face_client.large_person_group_person.add_face_from_url( large_person_group_id=large_person_group_id, person_id=p.person_id, url=image_url_prefix + target_image_file_name, user_data=target_image_file_name) if not faces: raise Exception("No persisted face from image {}.".format( target_image_file_name)) # Verification example for faces of the same person. verify_result = face_client.face.verify_face_to_person( face_id=_detect_faces_helper(face_client=face_client, image_url=image_url_prefix + source_image_file_name1)[0].face_id, person_id=p.person_id, large_person_group_id=large_person_group_id) if verify_result.is_identical: print( "Faces from {} & {} are of the same (Positive) person, similarity confidence: {}." .format(source_image_file_name1, p.name, verify_result.confidence)) else: print( "Faces from {} & {} are of different (Negative) persons, similarity confidence: {}." .format(source_image_file_name1, p.name, verify_result.confidence)) # Delete the person group. print("Delete the large person group {}.\n".format(large_person_group_id)) face_client.large_person_group.delete( large_person_group_id=large_person_group_id)
def identify_in_large_person_group(subscription_key): """IdentifyInLargePersonGroup. This will identify faces in a large person group. """ face_base_url = "https://{}.api.cognitive.microsoft.com".format( FACE_LOCATION) face_client = FaceClient( endpoint=face_base_url, credentials=CognitiveServicesCredentials(subscription_key)) image_url_prefix = "https://csdx.blob.core.windows.net/resources/Face/Images/" target_image_file_dictionary = { "Family1-Dad": ["Family1-Dad1.jpg", "Family1-Dad2.jpg"], "Family1-Mom": ["Family1-Mom1.jpg", "Family1-Mom2.jpg"], "Family1-Son": ["Family1-Son1.jpg", "Family1-Son2.jpg"], "Family1-Daughter": ["Family1-Daughter1.jpg", "Family1-Daughter2.jpg"], "Family2-Lady": ["Family2-Lady1.jpg", "Family2-Lady2.jpg"], "Family2-Man": ["Family2-Man1.jpg", "Family2-Man2.jpg"] } source_image_file_name = "identification1.jpg" # Create a large person group. large_person_group_id = str(uuid.uuid4()) print("Create a large person group {}.".format(large_person_group_id)) face_client.large_person_group.create( large_person_group_id=large_person_group_id, name=large_person_group_id) for target_image_file_dictionary_name in target_image_file_dictionary.keys( ): person_id = face_client.large_person_group_person.create( large_person_group_id=large_person_group_id, name=target_image_file_dictionary_name).person_id # Create a person group person. person = Person(name=target_image_file_dictionary_name, user_data="Person for sample", person_id=person_id) print("Create a large person group person {}.".format(person.name)) for target_image_file_name in target_image_file_dictionary[ target_image_file_dictionary_name]: # Add face to the person group person print("Add face to the large person group person {} from image.". format(target_image_file_dictionary_name, target_image_file_name)) face = face_client.large_person_group_person.add_face_from_url( large_person_group_id=large_person_group_id, person_id=person.person_id, url=image_url_prefix + target_image_file_name, user_data=target_image_file_name) if not face: raise Exception("No persisted face from image {}".format( target_image_file_name)) # Start to train the large person group. print("Train large person group {}.".format(large_person_group_id)) face_client.large_person_group.train( large_person_group_id=large_person_group_id) training_status = face_client.large_person_group.get_training_status( large_person_group_id=large_person_group_id) print("Training status is {}".format(training_status.status)) if training_status.status == TrainingStatusType.failed: raise Exception("Training failed with message {}.".format( training_status.message)) # Detect faces from source image url and add detected face ids to source_face_ids source_face_ids = [ detected_face.face_id for detected_face in _detect_faces_helper(face_client=face_client, image_url=image_url_prefix + source_image_file_name) ] # Identify example of identifying faces towards large person group. identify_results = face_client.face.identify( face_ids=source_face_ids, large_person_group_id=large_person_group_id) if not identify_results: print( "No person identified in the large person group for faces from the {}." .format(source_image_file_name)) return for identify_result in identify_results: person = face_client.large_person_group_person.get( large_person_group_id=large_person_group_id, person_id=identify_result.candidates[0].person_id) print("Person {} is identified for face: {} - {}, confidence: {}.". format(person.name, source_image_file_name, identify_result.face_id, identify_result.candidates[0].confidence)) # Delete the person group. face_client.large_person_group.delete( large_person_group_id=large_person_group_id) print("Delete the large person group {}.\n".format(large_person_group_id))