Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2979994
codegen update
Han-msft Aug 27, 2024
269e116
Update client _patch
Han-msft Aug 27, 2024
6f89e05
Update version
Han-msft Aug 27, 2024
ed8876b
Update assets
Han-msft Aug 27, 2024
4a19c27
Update codegen
Han-msft Aug 28, 2024
492b67b
Sample for large face list
Han-msft Aug 28, 2024
0fc87db
Add LPG sample
Han-msft Aug 28, 2024
ae592ed
Update codegen
Han-msft Sep 2, 2024
d7a0393
Remove unused testcase
Han-msft Sep 2, 2024
99837e6
Add findsimilar test
Han-msft Sep 2, 2024
9315435
Add identify test
Han-msft Sep 3, 2024
453f812
Remove FL and PG
Han-msft Sep 6, 2024
2cf5745
Fix test
Han-msft Sep 6, 2024
d29b753
Update codegen
Han-msft Sep 9, 2024
c5d7ed8
Remove _operations
Han-msft Sep 9, 2024
a1d365e
Add changelog
Han-msft Sep 9, 2024
0ec1f1e
Codegen
Han-msft Sep 9, 2024
b96d74a
Add new content to README
Han-msft Sep 10, 2024
b0f98e5
Merge remote-tracking branch 'origin/main' into hachiang/face-v1.1
Han-msft Sep 13, 2024
3c2367c
Regen
Han-msft Sep 13, 2024
5fd08b6
Update model enum
Han-msft Sep 19, 2024
3b4be0b
Update typo in generated test
Han-msft Sep 19, 2024
8c39cc2
Add enum breaking change schangelog
Han-msft Sep 24, 2024
af693ed
Merge remote-tracking branch 'origin/main' into hachiang/face-v1.1
Han-msft Oct 9, 2024
e2cb5ac
update codegen
Han-msft Oct 9, 2024
6900326
Fix customization
Han-msft Oct 9, 2024
efb967b
Suppress verifytypes
Han-msft Oct 9, 2024
3d21d99
Update to latest tsp
Han-msft Oct 9, 2024
fc3fb85
Pause verifytypes
Han-msft Oct 9, 2024
7d58902
Update release date
Han-msft Oct 22, 2024
4fa8355
Update date
Han-msft Oct 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add identify test
  • Loading branch information
Han-msft committed Sep 3, 2024
commit 93154353b2b3fb03d9e62c37a09e7fc3dd72b9a2
2 changes: 1 addition & 1 deletion sdk/face/azure-ai-vision-face/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "python",
"TagPrefix": "python/face/azure-ai-vision-face",
"Tag": "python/face/azure-ai-vision-face_5f10bb94fa"
"Tag": "python/face/azure-ai-vision-face_0b4013000f"
}
104 changes: 104 additions & 0 deletions sdk/face/azure-ai-vision-face/tests/test_identify.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# coding: utf-8

# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
from devtools_testutils import AzureRecordedTestCase, recorded_by_proxy

from azure.ai.vision.face import FaceClient, FaceAdministrationClient
from azure.ai.vision.face.models import (
FaceDetectionModel,
FaceRecognitionModel,
)

from preparers import FaceClientPreparer, FacePreparer, FaceAdministrationClientPreparer
from _shared.constants import TestImages
from _shared import helpers

class TestIdentify(AzureRecordedTestCase):
test_images = [
TestImages.IMAGE_FAMILY_1_DAD_1,
TestImages.IMAGE_FAMILY_1_DAUGHTER_1,
TestImages.IMAGE_FAMILY_1_MOM_1,
TestImages.IMAGE_FAMILY_1_SON_1,
]
group_id = "identify"

def _setup_faces(self, client: FaceClient):
face_ids = []
image_path = helpers.get_image_path(TestImages.IMAGE_IDENTIFICATION1)
result = client.detect(
helpers.read_file_content(image_path),
detection_model=FaceDetectionModel.DETECTION_03,
recognition_model=FaceRecognitionModel.RECOGNITION_04,
return_face_id=True
)
for face in result:
face_ids.append(face.face_id)
return face_ids

def _setup_group(self, operations):
operations.create(self.group_id, name=self.group_id, recognition_model=FaceRecognitionModel.RECOGNITION_04)

person_ids = []
for image in self.test_images:
result = operations.create_person(self.group_id, name="test_person")
assert result.person_id
person_ids.append(result.person_id)
image_path = helpers.get_image_path(image)
operations.add_face(
self.group_id,
result.person_id,
helpers.read_file_content(image_path),
detection_model=FaceDetectionModel.DETECTION_03
)

poller = operations.begin_train(self.group_id)
poller.result()

return person_ids

def _teardown_group(self, operations):
operations.delete(self.group_id)

@FacePreparer()
@FaceClientPreparer()
@FaceAdministrationClientPreparer()
@recorded_by_proxy
def test_identify_from_person_group(self, client: FaceClient, administration_client: FaceAdministrationClient):
face_ids = self._setup_faces(client)
self._setup_group(administration_client.person_group)

identify_result = client.identify_from_person_group(face_ids=face_ids, person_group_id=self.group_id)

assert len(identify_result) == len(face_ids)
for result in identify_result:
assert result.candidates is not None
assert result.face_id is not None
for candidate in result.candidates:
assert candidate.confidence is not None
assert candidate.person_id is not None

self._teardown_group(administration_client.person_group)

@FacePreparer()
@FaceClientPreparer()
@FaceAdministrationClientPreparer()
@recorded_by_proxy
def test_identify_from_large_person_group(self, client: FaceClient, administration_client: FaceAdministrationClient):
face_ids = self._setup_faces(client)
self._setup_group(administration_client.large_person_group)

identify_result = client.identify_from_large_person_group(face_ids=face_ids, large_person_group_id=self.group_id)

assert len(identify_result) == len(face_ids)
for result in identify_result:
assert result.candidates is not None
assert result.face_id is not None
for candidate in result.candidates:
assert candidate.confidence is not None
assert candidate.person_id is not None

self._teardown_group(administration_client.large_person_group)
104 changes: 104 additions & 0 deletions sdk/face/azure-ai-vision-face/tests/test_identify_async.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# coding: utf-8

# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
from devtools_testutils import AzureRecordedTestCase
from devtools_testutils.aio import recorded_by_proxy_async

from azure.ai.vision.face.aio import FaceClient, FaceAdministrationClient
from azure.ai.vision.face.models import (
FaceDetectionModel,
FaceRecognitionModel,
)

from preparers import AsyncFaceClientPreparer, FacePreparer, AsyncFaceAdministrationClientPreparer
from _shared.constants import TestImages
from _shared import helpers

class TestIdentify(AzureRecordedTestCase):
test_images = [
TestImages.IMAGE_FAMILY_1_DAD_1,
TestImages.IMAGE_FAMILY_1_DAUGHTER_1,
TestImages.IMAGE_FAMILY_1_MOM_1,
TestImages.IMAGE_FAMILY_1_SON_1,
]
group_id = "identify"
async def _setup_faces(self, client: FaceClient):
face_ids = []
image_path = helpers.get_image_path(TestImages.IMAGE_IDENTIFICATION1)
result = await client.detect(
helpers.read_file_content(image_path),
detection_model=FaceDetectionModel.DETECTION_03,
recognition_model=FaceRecognitionModel.RECOGNITION_04,
return_face_id=True
)
for face in result:
face_ids.append(face.face_id)
return face_ids

async def _setup_group(self, operations):
await operations.create(self.group_id, name=self.group_id, recognition_model=FaceRecognitionModel.RECOGNITION_04)

person_ids = []
for image in self.test_images:
result = await operations.create_person(self.group_id, name="test_person")
assert result.person_id
person_ids.append(result.person_id)
image_path = helpers.get_image_path(image)
await operations.add_face(
self.group_id,
result.person_id,
helpers.read_file_content(image_path),
detection_model=FaceDetectionModel.DETECTION_03
)

poller = await operations.begin_train(self.group_id)
await poller.wait()

return person_ids

async def _teardown_group(self, operations):
await operations.delete(self.group_id)

@FacePreparer()
@AsyncFaceClientPreparer()
@AsyncFaceAdministrationClientPreparer()
@recorded_by_proxy_async
async def test_identify_from_person_group(self, client: FaceClient, administration_client: FaceAdministrationClient):
face_ids = await self._setup_faces(client)
await self._setup_group(administration_client.person_group)

identify_result = await client.identify_from_person_group(face_ids=face_ids, person_group_id=self.group_id)

assert len(identify_result) == len(face_ids)
for result in identify_result:
assert result.candidates is not None
assert result.face_id is not None
for candidate in result.candidates:
assert candidate.confidence is not None
assert candidate.person_id is not None

await self._teardown_group(administration_client.person_group)

@FacePreparer()
@AsyncFaceClientPreparer()
@AsyncFaceAdministrationClientPreparer()
@recorded_by_proxy_async
async def test_identify_from_large_person_group(self, client: FaceClient, administration_client: FaceAdministrationClient):
face_ids = await self._setup_faces(client)
await self._setup_group(administration_client.large_person_group)

identify_result = await client.identify_from_large_person_group(face_ids=face_ids, large_person_group_id=self.group_id)

assert len(identify_result) == len(face_ids)
for result in identify_result:
assert result.candidates is not None
assert result.face_id is not None
for candidate in result.candidates:
assert candidate.confidence is not None
assert candidate.person_id is not None

await self._teardown_group(administration_client.large_person_group)