You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/ai-services/computer-vision/concept-face-recognition-data-structures.md
+13-3Lines changed: 13 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,19 +43,29 @@ The Face Identify API uses container data structures to the hold face recognitio
43
43
44
44
### Person Directory
45
45
46
-
**PersonDirectory** is the newest data structure of this kind. It supports a larger scale and higher accuracy. Each Azure Face resource has a single default **PersonDirectory** data structure. It's a flat list of **PersonDirectoryPerson** objects - it can hold up to 75 million.
46
+
**PersonDirectory** is the newest data structure of this kind. It supports a larger scale and higher accuracy. Each Azure Face resource has a single default **PersonDirectory** data structure. It's a flat list of **PersonDirectoryPerson** objects - it can hold up to 20 million.
47
47
48
48
**PersonDirectoryPerson** represents a person to be identified. Updated from the **PersonGroupPerson** model, it allows you to add faces from different recognition models to the same person. However, the Identify operation can only match faces obtained with the same recognition model.
49
49
50
-
**DynamicPersonGroup** is a lightweight data structure that allows you to dynamically reference a **PersonGroupPerson**. It doesn't require the Train operation: once the data is updated, it's ready to be used with the Identify API.
50
+
**DynamicPersonGroup** is a lightweight data structure that allows you to dynamically reference a **PersonDirectoryPerson**. It doesn't require the Train operation: once the data is updated, it's ready to be used with the Identify API.
51
51
52
52
You can also use an **in-place person ID list** for the Identify operation. This lets you specify a more narrow group to identify from. You can do this manually to improve identification performance in large groups.
53
53
54
54
The above data structures can be used together. For example:
55
55
- In an access control system, The **PersonDirectory** might represent all employees of a company, but a smaller **DynamicPersonGroup** could represent just the employees that have access to a single floor of the building.
56
56
- In a flight onboarding system, the **PersonDirectory** could represent all customers of the airline company, but the **DynamicPersonGroup** represents just the passengers on a particular flight. An **in-place person ID list** could represent the passengers who made a last-minute change.
57
57
58
-
For more details, please refer to the [PersonDirectory how-to guide](./how-to/use-persondirectory.md).
58
+
For more details, please refer to the [PersonDirectory how-to guide](./how-to/use-persondirectory.md). A quick comparison between **LargePersonGroup** and **PersonDirectory**:
59
+
60
+
| Detail | LargePersonGroup | PersonDirectory |
61
+
| --- | --- | --- |
62
+
| Capacity | A **LargePersonGroup** can hold up to 1 million **PersonGroupPerson** objects. | The collection can store up to 20 millions **PersonDirectoryPerson** identities. |
| Ownership | The **PersonGroupPerson** objects are exclusively owned by the **LargePersonGroup** they belong to. If you want a same identity kept in multiple groups, you will have to [Create Large Person Group Person](/rest/api/face/person-group-operations/create-large-person-group-person) and [Add Large Person Group Person Face](/rest/api/face/person-group-operations/add-large-person-group-person-face) for each group individually, ending up with a set of person IDs in several groups. | The **PersonDirectoryPerson** objects are directly stored inside the **PersonDirectory**, as a flat list. You can use an in-place person ID list to [Identify From Person Directory](/rest/api/face/face-recognition-operations/identify-from-person-directory), or optionally [Create Dynamic Person Group](/rest/api/face/person-directory-operations/create-dynamic-person-group) and hybridly include a person into the group. A created **PersonDirectoryPerson** object can be referenced by multiple **DynamicPersonGroup** without duplication. |
65
+
| Model | The recognition model is determined by the **LargePersonGroup**. New faces for all **PersonGroupPerson** objects will become associated with this model when they're added to it. | The **PersonDirectoryPerson** object prepares separated storage per recognition model. You can specify the model when you add new faces, but the Identify API can only match faces obtained with the same recognition model, that is associated with the query faces. |
66
+
| Training | You must call the Train API to make any new face/person data reflect in the Identify API results. | There's no need to make Train calls, but API such as [Add Person Face](/rest/api/face/person-directory-operations/add-person-face) becomes a long running operation, which means you should use the response header "Operation-Location" to check if the update completes. |
67
+
| Cleanup |[Delete Large Person Group](/rest/api/face/person-group-operations/delete-large-person-group) will also delete the all the **PersonGroupPerson** objects it holds, as well as their face data. |[Delete Dynamic Person Group](/rest/api/face/person-directory-operations/delete-dynamic-person-group) will only unreference the **PersonDirectoryPerson**. To delete actual person and the face data, see [Delete Person](/rest/api/face/person-directory-operations/delete-person). |
This guide shows you how to scale up from existing **PersonGroup** and **FaceList** objects to **LargePersonGroup** and **LargeFaceList** objects, respectively. **PersonGroups** can hold up to 1000 persons in the free tier and 10,000 in the paid tier, while **LargePersonGroups** can hold up to one million persons in the paid tier.
26
26
27
27
> [!IMPORTANT]
28
-
> The newer data structure **PersonDirectory** is recommended for new development. It can hold up to 75 million identities and does not require manual training. For more information, see the [PersonDirectory guide](./use-persondirectory.md).
28
+
> The newer data structure **PersonDirectory** is recommended for new development. It can hold up to 20 million identities and does not require manual training. For more information, see the [PersonDirectory guide](./use-persondirectory.md).
29
29
30
30
This guide demonstrates the migration process. It assumes a basic familiarity with **PersonGroup** and **FaceList** objects, the **Train** operation, and the face recognition functions. To learn more about these subjects, see the [face recognition](../concept-face-recognition.md) conceptual guide.
Copy file name to clipboardExpand all lines: articles/ai-services/computer-vision/how-to/use-persondirectory.md
+93-2Lines changed: 93 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,7 +24,7 @@ To perform face recognition operations such as Identify and Find Similar, Face A
24
24
25
25
## Advantages of PersonDirectory
26
26
27
-
Currently, the Face API offers the **LargePersonGroup** structure, which has similar functionality but is limited to 1 million identities. The **PersonDirectory** structure can scale up to 75 million identities.
27
+
Currently, the Face API offers the **LargePersonGroup** structure, which has similar functionality but is limited to 1 million identities. The **PersonDirectory** structure can scale up to 20 million identities.
28
28
29
29
Another major difference between **PersonDirectory** and previous data structures is that you'll no longer need to make any Train API calls after adding faces to a **Person** object—the update process happens automatically.
30
30
@@ -239,7 +239,7 @@ using (var content = new ByteArrayContent(byteData))
239
239
```
240
240
241
241
> [!NOTE]
242
-
> As soon as the call returns, the created **DynamicPersonGroup** will be ready to use in an Identify call, with any **Person** references provided in the process. The completion status of the returned operation ID, on the other hand, indicates the update status of the person-to-group relationship.
242
+
> As soon as the call returns, the created **DynamicPersonGroup** will be ready to use in an Identify call, with any **Person** references provided in the process. The completion status of the returned operation ID, on the other hand, only indicates the update status for [Get Dynamic Person Group References](/rest/api/face/person-directory-operations/get-dynamic-person-group-references) lookup calls.
243
243
244
244
### Update the DynamicPersonGroup
245
245
@@ -394,6 +394,97 @@ using (var content = new ByteArrayContent(byteData))
394
394
395
395
The response will contain a Boolean value indicating whether the service considers the new face to belong to the same **Person**, and a confidence score for the prediction.
396
396
397
+
## Overview of asynchronous operations
398
+
399
+
The tables below summarize whether a **PersonDirectory** management call is a long-running operation (LRO) processed asynchronously, or it completes immediately and synchronously:
|[Get Person Faces](/rest/api/face/person-directory-operations/get-person-faces)| /persons/{personId}/recognitionModels/{model}/persistedfaces ||
409
+
|[Add Person Face](/rest/api/face/person-directory-operations/add-person-face)| /persons/{personId}/recognitionModels/{model}/persistedfaces | ✅ |
410
+
|[Add Person Face From Url](/rest/api/face/person-directory-operations/add-person-face-from-url)| /persons/{personId}/recognitionModels/{model}/persistedfaces | ✅ |
411
+
|[Get Person Face](/rest/api/face/person-directory-operations/get-person-face)| /persons/{personId}/recognitionModels/{model}/persistedfaces/{persistedFaceId} ||
412
+
|[Update Person Face](/rest/api/face/person-directory-operations/update-person-face)| /persons/{personId}/recognitionModels/{model}/persistedfaces/{persistedFaceId} ||
413
+
|[Delete Person Face](/rest/api/face/person-directory-operations/delete-person-face)| /persons/{personId}/recognitionModels/{model}/persistedfaces/{persistedFaceId} | ✅ |
414
+
415
+
| Group Management | URI | LRO? |
416
+
| --- | --- | --- |
417
+
|[Get Dynamic Person Groups](/rest/api/face/person-directory-operations/get-dynamic-person-groups)| /dynamicpersongroups ||
418
+
|[Create Dynamic Person Group](/rest/api/face/person-directory-operations/create-dynamic-person-group)| /dynamicpersongroups/{dynamicPersonGroupId} ||
419
+
|[Create Dynamic Person Group With Person](/rest/api/face/person-directory-operations/create-dynamic-person-group-with-person)| /dynamicpersongroups/{dynamicPersonGroupId} | ✅ |
420
+
|[Get Dynamic Person Group](/rest/api/face/person-directory-operations/get-dynamic-person-group)| /dynamicpersongroups/{dynamicPersonGroupId} ||
421
+
|[Update Dynamic Person Group](/rest/api/face/person-directory-operations/update-dynamic-person-group)| /dynamicpersongroups/{dynamicPersonGroupId} ||
422
+
|[Update Dynamic Person Group With Person Changes](/rest/api/face/person-directory-operations/update-dynamic-person-group-with-person-changes)| /dynamicpersongroups/{dynamicPersonGroupId} | ✅ |
423
+
|[Delete Dynamic Person Group](/rest/api/face/person-directory-operations/delete-dynamic-person-group)| /dynamicpersongroups/{dynamicPersonGroupId} | ✅ |
424
+
|[Get Dynamic Person Group Persons](/rest/api/face/person-directory-operations/get-dynamic-person-group-persons)| /dynamicpersongroups/{dynamicPersonGroupId}/persons ||
425
+
|[Get Dynamic Person Group References](/rest/api/face/person-directory-operations/get-dynamic-person-group-references)| /persons/{personId}/dynamicPersonGroupReferences ||
426
+
427
+
The following code illustrates the dependencies of these asynchronous operations:
428
+
429
+
```csharp
430
+
varcreatePersonResponse=awaitCreatePersonAsync();
431
+
varpersonId=createPersonResponse.PersonId;
432
+
433
+
// faces can be added once the person creation HTTP call returns, even if it's still processing
In this guide, you learned how to use the **PersonDirectory** structure to store face and person data for your Face app. Next, learn the best practices for adding your users' face data.
Copy file name to clipboardExpand all lines: articles/ai-services/computer-vision/identity-quotas-limits.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,7 +26,7 @@ This article contains a reference and a detailed description of the quotas and l
26
26
|**Pricing tier**|**Limit value**|
27
27
| --- | --- |
28
28
| Free (F0) | 20 transactions per minute |
29
-
| Standard (S0),</br>Enterprise (E0) | 10 transactions per second, and 200 TPS across all resources in a single region.</br>See the next section if you want to increase this limit. |
29
+
| Standard (S0),</br>Enterprise (E0) | 10 transactions per second, and 200 TPS across all resources in a single region.</br>See the next section if you want to increase this limit. |
30
30
31
31
> [!NOTE]
32
32
> If you exceed the default rate limit, you'll receive a `429` error. To address this issue, refer to the [Performance guide](/azure/ai-services/computer-vision/how-to/mitigate-latency#handle-errors-effectively).
@@ -42,9 +42,9 @@ This article contains a reference and a detailed description of the quotas and l
42
42
43
43
### How to request an increase to the default limits
44
44
45
-
To increase rate limits and resource limits, you can submit a support request. However, for other quota limits, you need to switch to a higher pricing tier to increase those quotas.
45
+
To increase rate limits and resource limits for paid subscription, you can submit a support request.
46
46
47
-
[Submit a support request](/azure/ai-services/cognitive-services-support-options?context=%2Fazure%2Fai-services%2Fopenai%2Fcontext%2Fcontext) and provide the following information:
47
+
[Submit a support request](https://azure.microsoft.com/support/create-ticket/) and provide the following information:
48
48
- A description of your Face use case.
49
49
- The reason for requesting an increase in your current limits.
50
50
- Which of your subscriptions or resources are affected?
@@ -69,40 +69,40 @@ We evaluate TPS increase requests on a case-by-case basis, and our decision is b
69
69
70
70
|**Pricing tier**|**Limit value**|
71
71
| --- | --- |
72
-
| Free (F0) |<ul><li>1 PersonDirectory</li><li>1,000 persons</li><li>Each holds up to 248 faces.</li><li>Unlimited DynamicPersonGroups</li></ul>|
73
-
| Standard (S0),</br>Enterprise (E0) | <ul><li>1 PersonDirectory</li><li>75,000,000 persons<ul><li>Contact support if you want to increase this limit.</li></ul></li><li>Each holds up to 248 faces.</li><li>Unlimited DynamicPersonGroups</li></ul> |
72
+
| Free (F0) |<ul><li>1 PersonDirectory</li><li>1,000 persons</li><li>Each holds up to 248 faces.</li><li>1,000,000 DynamicPersonGroups</li></ul>|
73
+
| Standard (S0),</br>Enterprise (E0) | <ul><li>1 PersonDirectory</li><li>20,000,000 persons<ul><li>Contact support if you want to increase this limit.</li></ul></li><li>Each holds up to 248 faces.</li><li>1,000,000 DynamicPersonGroups</li></ul> |
74
74
75
75
76
76
**Quota of FaceList**
77
77
78
78
|**Pricing tier**|**Limit value**|
79
79
| --- | --- |
80
-
| Free (F0),</br>Standard (S0),</br>Enterprise (E0) |<ul><li>64 FaceLists.</li><li>Each holds up to 1,000 faces.</li></ul>|
80
+
| Free (F0),</br>Standard (S0),</br>Enterprise (E0) |<ul><li>64 FaceLists.</li><li>Each holds up to 1,000 faces.</li></ul>|
81
81
82
82
**Quota of LargeFaceList**
83
83
84
84
|**Pricing tier**|**Limit value**|
85
85
| --- | --- |
86
86
| Free (F0) | <ul><li>64 LargeFaceLists.</li><li>Each holds up to 1,000 faces.</li></ul>|
87
-
| Standard (S0),</br>Enterprise (E0) | <ul><li>1,000,000 LargeFaceLists.</li><li>Each holds up to 1,000,000 faces.</li></ul> |
87
+
| Standard (S0),</br>Enterprise (E0) | <ul><li>1,000,000 LargeFaceLists.</li><li>Each holds up to 1,000,000 faces.</li></ul> |
88
88
89
89
**Quota of PersonGroup**
90
90
91
91
|**Pricing tier**|**Limit value**|
92
92
| --- | --- |
93
93
| Free (F0) |<ul><li>1,000 PersonGroups. </li><li>Each holds up to 1,000 Persons.</li><li>Each Person can hold up to 248 faces.</li></ul>|
94
-
| Standard (S0),</br>Enterprise (E0) |<ul><li>1,000,000 PersonGroups.</li> <li>Each holds up to 10,000 Persons.</li><li>Each Person can hold up to 248 faces.</li></ul>|
94
+
| Standard (S0),</br>Enterprise (E0) |<ul><li>1,000,000 PersonGroups.</li> <li>Each holds up to 10,000 Persons.</li><li>Each Person can hold up to 248 faces.</li></ul>|
95
95
96
96
**Quota of LargePersonGroup**
97
97
98
98
|**Pricing tier**|**Limit value**|
99
99
| --- | --- |
100
100
| Free (F0) | <ul><li>1,000 LargePersonGroups</li><li> Each holds up to 1,000 Persons.</li><li>Each Person can hold up to 248 faces.</li></ul> |
101
-
| Standard (S0),</br>Enterprise (E0) | <ul><li>1,000,000 LargePersonGroups</li><li> Each holds up to 1,000,000 Persons.</li><li>Each Person can hold up to 248 faces.</li><li>The total Persons in all LargePersonGroups shouldn't exceed 1,000,000,000.</li></ul> |
101
+
| Standard (S0),</br>Enterprise (E0) | <ul><li>1,000,000 LargePersonGroups</li><li> Each holds up to 1,000,000 Persons.</li><li>Each Person can hold up to 248 faces.</li><li>The total Persons in all LargePersonGroups shouldn't exceed 1,000,000,000.</li></ul> |
0 commit comments