package face // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. // // Code generated by Microsoft (R) AutoRest Code Generator. // Changes may cause incorrect behavior and will be lost if the code is regenerated. import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/validation" "github.com/Azure/go-autorest/tracing" "github.com/gofrs/uuid" "io" "net/http" ) // LargePersonGroupPersonClient is the an API for face detection, verification, and identification. type LargePersonGroupPersonClient struct { BaseClient } // NewLargePersonGroupPersonClient creates an instance of the LargePersonGroupPersonClient client. func NewLargePersonGroupPersonClient(endpoint string) LargePersonGroupPersonClient { return LargePersonGroupPersonClient{New(endpoint)} } // AddFaceFromStream add a face to a person into a large person group for face identification or verification. To deal // with an image contains multiple faces, input face can be specified as an image with a targetFace rectangle. It // returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature will // be stored on server until [LargePersonGroup PersonFace - // Delete](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroupperson/deleteface), // [LargePersonGroup Person - // Delete](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroupperson/delete) or // [LargePersonGroup - Delete](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroup/delete) is // called. //
Note persistedFaceId is different from faceId generated by [Face - // Detect](https://docs.microsoft.com/rest/api/cognitiveservices/face/face/detectwithurl). // * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, // and face size is 200x200 pixels (100 pixels between eyes) or bigger. // * Each person entry can hold up to 248 faces. // * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. // * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the // provided "targetFace" rectangle is not returned from [Face - // Detect](https://docs.microsoft.com/rest/api/cognitiveservices/face/face/detectwithurl), there’s no guarantee to // detect and add the face successfully. // * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. // * Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from // different persons are processed in parallel. // * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with // dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. // * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to // [How to specify a detection // model](https://docs.microsoft.com/azure/cognitive-services/face/face-api-how-to-topics/specify-detection-model) // | Model | Recommended use-case(s) | // | ---------- | -------- | // | 'detection_01': | The default detection model for [LargePersonGroup Person - Add // Face](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroupperson/addfacefromurl). Recommend // for near frontal face detection. For scenarios with exceptionally large angle (head-pose) faces, occluded faces or // wrong image orientation, the faces in such cases may not be detected. | // | 'detection_02': | Detection model released in 2019 May with improved accuracy especially on small, side and blurry // faces. | // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. // imageParameter - an image stream. // userData - user-specified data about the face for any purpose. The maximum length is 1KB. // targetFace - a face rectangle to specify the target face to be added to a person in the format of // "targetFace=left,top,width,height". E.g. "targetFace=10,10,100,100". If there is more than one face in the // image, targetFace is required to specify which face to add. No targetFace means there is only one face // detected in the entire image. // detectionModel - name of detection model. Detection model is used to detect faces in the submitted image. A // detection model name can be provided when performing Face - Detect or (Large)FaceList - Add Face or // (Large)PersonGroup - Add Face. The default value is 'detection_01', if another model is needed, please // explicitly specify it. func (client LargePersonGroupPersonClient) AddFaceFromStream(ctx context.Context, largePersonGroupID string, personID uuid.UUID, imageParameter io.ReadCloser, userData string, targetFace []int32, detectionModel DetectionModel) (result PersistedFace, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.AddFaceFromStream") defer func() { sc := -1 if result.Response.Response != nil { sc = result.Response.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}, {TargetValue: userData, Constraints: []validation.Constraint{{Target: "userData", Name: validation.Empty, Rule: false, Chain: []validation.Constraint{{Target: "userData", Name: validation.MaxLength, Rule: 1024, Chain: nil}}}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "AddFaceFromStream", err.Error()) } req, err := client.AddFaceFromStreamPreparer(ctx, largePersonGroupID, personID, imageParameter, userData, targetFace, detectionModel) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "AddFaceFromStream", nil, "Failure preparing request") return } resp, err := client.AddFaceFromStreamSender(req) if err != nil { result.Response = autorest.Response{Response: resp} err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "AddFaceFromStream", resp, "Failure sending request") return } result, err = client.AddFaceFromStreamResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "AddFaceFromStream", resp, "Failure responding to request") return } return } // AddFaceFromStreamPreparer prepares the AddFaceFromStream request. func (client LargePersonGroupPersonClient) AddFaceFromStreamPreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID, imageParameter io.ReadCloser, userData string, targetFace []int32, detectionModel DetectionModel) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "personId": autorest.Encode("path", personID), } queryParameters := map[string]interface{}{} if len(userData) > 0 { queryParameters["userData"] = autorest.Encode("query", userData) } if targetFace != nil && len(targetFace) > 0 { queryParameters["targetFace"] = autorest.Encode("query", targetFace, ",") } if len(string(detectionModel)) > 0 { queryParameters["detectionModel"] = autorest.Encode("query", detectionModel) } else { queryParameters["detectionModel"] = autorest.Encode("query", "detection_01") } preparer := autorest.CreatePreparer( autorest.AsContentType("application/octet-stream"), autorest.AsPost(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces", pathParameters), autorest.WithFile(imageParameter), autorest.WithQueryParameters(queryParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // AddFaceFromStreamSender sends the AddFaceFromStream request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) AddFaceFromStreamSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // AddFaceFromStreamResponder handles the response to the AddFaceFromStream request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) AddFaceFromStreamResponder(resp *http.Response) (result PersistedFace, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByUnmarshallingJSON(&result), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return } // AddFaceFromURL add a face to a person into a large person group for face identification or verification. To deal // with an image contains multiple faces, input face can be specified as an image with a targetFace rectangle. It // returns a persistedFaceId representing the added face. No image will be stored. Only the extracted face feature will // be stored on server until [LargePersonGroup PersonFace - // Delete](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroupperson/deleteface), // [LargePersonGroup Person - // Delete](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroupperson/delete) or // [LargePersonGroup - Delete](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroup/delete) is // called. //
Note persistedFaceId is different from faceId generated by [Face - // Detect](https://docs.microsoft.com/rest/api/cognitiveservices/face/face/detectwithurl). // * Higher face image quality means better recognition precision. Please consider high-quality faces: frontal, clear, // and face size is 200x200 pixels (100 pixels between eyes) or bigger. // * Each person entry can hold up to 248 faces. // * JPEG, PNG, GIF (the first frame), and BMP format are supported. The allowed image file size is from 1KB to 6MB. // * "targetFace" rectangle should contain one face. Zero or multiple faces will be regarded as an error. If the // provided "targetFace" rectangle is not returned from [Face - // Detect](https://docs.microsoft.com/rest/api/cognitiveservices/face/face/detectwithurl), there’s no guarantee to // detect and add the face successfully. // * Out of detectable face size (36x36 - 4096x4096 pixels), large head-pose, or large occlusions will cause failures. // * Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from // different persons are processed in parallel. // * The minimum detectable face size is 36x36 pixels in an image no larger than 1920x1080 pixels. Images with // dimensions higher than 1920x1080 pixels will need a proportionally larger minimum face size. // * Different 'detectionModel' values can be provided. To use and compare different detection models, please refer to // [How to specify a detection // model](https://docs.microsoft.com/azure/cognitive-services/face/face-api-how-to-topics/specify-detection-model) // | Model | Recommended use-case(s) | // | ---------- | -------- | // | 'detection_01': | The default detection model for [LargePersonGroup Person - Add // Face](https://docs.microsoft.com/rest/api/cognitiveservices/face/largepersongroupperson/addfacefromurl). Recommend // for near frontal face detection. For scenarios with exceptionally large angle (head-pose) faces, occluded faces or // wrong image orientation, the faces in such cases may not be detected. | // | 'detection_02': | Detection model released in 2019 May with improved accuracy especially on small, side and blurry // faces. | // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. // imageURL - a JSON document with a URL pointing to the image that is to be analyzed. // userData - user-specified data about the face for any purpose. The maximum length is 1KB. // targetFace - a face rectangle to specify the target face to be added to a person in the format of // "targetFace=left,top,width,height". E.g. "targetFace=10,10,100,100". If there is more than one face in the // image, targetFace is required to specify which face to add. No targetFace means there is only one face // detected in the entire image. // detectionModel - name of detection model. Detection model is used to detect faces in the submitted image. A // detection model name can be provided when performing Face - Detect or (Large)FaceList - Add Face or // (Large)PersonGroup - Add Face. The default value is 'detection_01', if another model is needed, please // explicitly specify it. func (client LargePersonGroupPersonClient) AddFaceFromURL(ctx context.Context, largePersonGroupID string, personID uuid.UUID, imageURL ImageURL, userData string, targetFace []int32, detectionModel DetectionModel) (result PersistedFace, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.AddFaceFromURL") defer func() { sc := -1 if result.Response.Response != nil { sc = result.Response.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}, {TargetValue: userData, Constraints: []validation.Constraint{{Target: "userData", Name: validation.Empty, Rule: false, Chain: []validation.Constraint{{Target: "userData", Name: validation.MaxLength, Rule: 1024, Chain: nil}}}}}, {TargetValue: imageURL, Constraints: []validation.Constraint{{Target: "imageURL.URL", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "AddFaceFromURL", err.Error()) } req, err := client.AddFaceFromURLPreparer(ctx, largePersonGroupID, personID, imageURL, userData, targetFace, detectionModel) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "AddFaceFromURL", nil, "Failure preparing request") return } resp, err := client.AddFaceFromURLSender(req) if err != nil { result.Response = autorest.Response{Response: resp} err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "AddFaceFromURL", resp, "Failure sending request") return } result, err = client.AddFaceFromURLResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "AddFaceFromURL", resp, "Failure responding to request") return } return } // AddFaceFromURLPreparer prepares the AddFaceFromURL request. func (client LargePersonGroupPersonClient) AddFaceFromURLPreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID, imageURL ImageURL, userData string, targetFace []int32, detectionModel DetectionModel) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "personId": autorest.Encode("path", personID), } queryParameters := map[string]interface{}{} if len(userData) > 0 { queryParameters["userData"] = autorest.Encode("query", userData) } if targetFace != nil && len(targetFace) > 0 { queryParameters["targetFace"] = autorest.Encode("query", targetFace, ",") } if len(string(detectionModel)) > 0 { queryParameters["detectionModel"] = autorest.Encode("query", detectionModel) } else { queryParameters["detectionModel"] = autorest.Encode("query", "detection_01") } preparer := autorest.CreatePreparer( autorest.AsContentType("application/json; charset=utf-8"), autorest.AsPost(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces", pathParameters), autorest.WithJSON(imageURL), autorest.WithQueryParameters(queryParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // AddFaceFromURLSender sends the AddFaceFromURL request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) AddFaceFromURLSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // AddFaceFromURLResponder handles the response to the AddFaceFromURL request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) AddFaceFromURLResponder(resp *http.Response) (result PersistedFace, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByUnmarshallingJSON(&result), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return } // Create create a new person in a specified large person group. // Parameters: // largePersonGroupID - id referencing a particular large person group. // body - request body for creating new person. func (client LargePersonGroupPersonClient) Create(ctx context.Context, largePersonGroupID string, body NameAndUserDataContract) (result Person, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.Create") defer func() { sc := -1 if result.Response.Response != nil { sc = result.Response.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}, {TargetValue: body, Constraints: []validation.Constraint{{Target: "body.Name", Name: validation.Null, Rule: false, Chain: []validation.Constraint{{Target: "body.Name", Name: validation.MaxLength, Rule: 128, Chain: nil}}}, {Target: "body.UserData", Name: validation.Null, Rule: false, Chain: []validation.Constraint{{Target: "body.UserData", Name: validation.MaxLength, Rule: 16384, Chain: nil}}}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "Create", err.Error()) } req, err := client.CreatePreparer(ctx, largePersonGroupID, body) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Create", nil, "Failure preparing request") return } resp, err := client.CreateSender(req) if err != nil { result.Response = autorest.Response{Response: resp} err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Create", resp, "Failure sending request") return } result, err = client.CreateResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Create", resp, "Failure responding to request") return } return } // CreatePreparer prepares the Create request. func (client LargePersonGroupPersonClient) CreatePreparer(ctx context.Context, largePersonGroupID string, body NameAndUserDataContract) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), } preparer := autorest.CreatePreparer( autorest.AsContentType("application/json; charset=utf-8"), autorest.AsPost(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons", pathParameters), autorest.WithJSON(body)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // CreateSender sends the Create request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) CreateSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // CreateResponder handles the response to the Create request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) CreateResponder(resp *http.Response) (result Person, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByUnmarshallingJSON(&result), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return } // Delete delete an existing person from a large person group. The persistedFaceId, userData, person name and face // feature in the person entry will all be deleted. // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. func (client LargePersonGroupPersonClient) Delete(ctx context.Context, largePersonGroupID string, personID uuid.UUID) (result autorest.Response, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.Delete") defer func() { sc := -1 if result.Response != nil { sc = result.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "Delete", err.Error()) } req, err := client.DeletePreparer(ctx, largePersonGroupID, personID) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Delete", nil, "Failure preparing request") return } resp, err := client.DeleteSender(req) if err != nil { result.Response = resp err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Delete", resp, "Failure sending request") return } result, err = client.DeleteResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Delete", resp, "Failure responding to request") return } return } // DeletePreparer prepares the Delete request. func (client LargePersonGroupPersonClient) DeletePreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "personId": autorest.Encode("path", personID), } preparer := autorest.CreatePreparer( autorest.AsDelete(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}", pathParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) DeleteSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // DeleteResponder handles the response to the Delete request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByClosing()) result.Response = resp return } // DeleteFace delete a face from a person in a large person group by specified largePersonGroupId, personId and // persistedFaceId. //
Adding/deleting faces to/from a same person will be processed sequentially. Adding/deleting faces to/from // different persons are processed in parallel. // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. // persistedFaceID - id referencing a particular persistedFaceId of an existing face. func (client LargePersonGroupPersonClient) DeleteFace(ctx context.Context, largePersonGroupID string, personID uuid.UUID, persistedFaceID uuid.UUID) (result autorest.Response, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.DeleteFace") defer func() { sc := -1 if result.Response != nil { sc = result.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "DeleteFace", err.Error()) } req, err := client.DeleteFacePreparer(ctx, largePersonGroupID, personID, persistedFaceID) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "DeleteFace", nil, "Failure preparing request") return } resp, err := client.DeleteFaceSender(req) if err != nil { result.Response = resp err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "DeleteFace", resp, "Failure sending request") return } result, err = client.DeleteFaceResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "DeleteFace", resp, "Failure responding to request") return } return } // DeleteFacePreparer prepares the DeleteFace request. func (client LargePersonGroupPersonClient) DeleteFacePreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID, persistedFaceID uuid.UUID) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "persistedFaceId": autorest.Encode("path", persistedFaceID), "personId": autorest.Encode("path", personID), } preparer := autorest.CreatePreparer( autorest.AsDelete(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}", pathParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // DeleteFaceSender sends the DeleteFace request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) DeleteFaceSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // DeleteFaceResponder handles the response to the DeleteFace request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) DeleteFaceResponder(resp *http.Response) (result autorest.Response, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByClosing()) result.Response = resp return } // Get retrieve a person's name and userData, and the persisted faceIds representing the registered person face // feature. // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. func (client LargePersonGroupPersonClient) Get(ctx context.Context, largePersonGroupID string, personID uuid.UUID) (result Person, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.Get") defer func() { sc := -1 if result.Response.Response != nil { sc = result.Response.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "Get", err.Error()) } req, err := client.GetPreparer(ctx, largePersonGroupID, personID) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Get", nil, "Failure preparing request") return } resp, err := client.GetSender(req) if err != nil { result.Response = autorest.Response{Response: resp} err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Get", resp, "Failure sending request") return } result, err = client.GetResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Get", resp, "Failure responding to request") return } return } // GetPreparer prepares the Get request. func (client LargePersonGroupPersonClient) GetPreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "personId": autorest.Encode("path", personID), } preparer := autorest.CreatePreparer( autorest.AsGet(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}", pathParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) GetSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // GetResponder handles the response to the Get request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) GetResponder(resp *http.Response) (result Person, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByUnmarshallingJSON(&result), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return } // GetFace retrieve information about a persisted face (specified by persistedFaceId, personId and its belonging // largePersonGroupId). // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. // persistedFaceID - id referencing a particular persistedFaceId of an existing face. func (client LargePersonGroupPersonClient) GetFace(ctx context.Context, largePersonGroupID string, personID uuid.UUID, persistedFaceID uuid.UUID) (result PersistedFace, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.GetFace") defer func() { sc := -1 if result.Response.Response != nil { sc = result.Response.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "GetFace", err.Error()) } req, err := client.GetFacePreparer(ctx, largePersonGroupID, personID, persistedFaceID) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "GetFace", nil, "Failure preparing request") return } resp, err := client.GetFaceSender(req) if err != nil { result.Response = autorest.Response{Response: resp} err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "GetFace", resp, "Failure sending request") return } result, err = client.GetFaceResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "GetFace", resp, "Failure responding to request") return } return } // GetFacePreparer prepares the GetFace request. func (client LargePersonGroupPersonClient) GetFacePreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID, persistedFaceID uuid.UUID) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "persistedFaceId": autorest.Encode("path", persistedFaceID), "personId": autorest.Encode("path", personID), } preparer := autorest.CreatePreparer( autorest.AsGet(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}", pathParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // GetFaceSender sends the GetFace request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) GetFaceSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // GetFaceResponder handles the response to the GetFace request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) GetFaceResponder(resp *http.Response) (result PersistedFace, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByUnmarshallingJSON(&result), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return } // List list all persons in a large person group, and retrieve person information (including personId, name, userData // and persistedFaceIds of registered faces of the person). // Parameters: // largePersonGroupID - id referencing a particular large person group. // start - starting person id to return (used to list a range of persons). // top - number of persons to return starting with the person id indicated by the 'start' parameter. func (client LargePersonGroupPersonClient) List(ctx context.Context, largePersonGroupID string, start string, top *int32) (result ListPerson, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.List") defer func() { sc := -1 if result.Response.Response != nil { sc = result.Response.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}, {TargetValue: top, Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, }}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "List", err.Error()) } req, err := client.ListPreparer(ctx, largePersonGroupID, start, top) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "List", nil, "Failure preparing request") return } resp, err := client.ListSender(req) if err != nil { result.Response = autorest.Response{Response: resp} err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "List", resp, "Failure sending request") return } result, err = client.ListResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "List", resp, "Failure responding to request") return } return } // ListPreparer prepares the List request. func (client LargePersonGroupPersonClient) ListPreparer(ctx context.Context, largePersonGroupID string, start string, top *int32) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), } queryParameters := map[string]interface{}{} if len(start) > 0 { queryParameters["start"] = autorest.Encode("query", start) } if top != nil { queryParameters["top"] = autorest.Encode("query", *top) } preparer := autorest.CreatePreparer( autorest.AsGet(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons", pathParameters), autorest.WithQueryParameters(queryParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) ListSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // ListResponder handles the response to the List request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) ListResponder(resp *http.Response) (result ListPerson, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByUnmarshallingJSON(&result.Value), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return } // Update update name or userData of a person. // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. // body - request body for person update operation. func (client LargePersonGroupPersonClient) Update(ctx context.Context, largePersonGroupID string, personID uuid.UUID, body NameAndUserDataContract) (result autorest.Response, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.Update") defer func() { sc := -1 if result.Response != nil { sc = result.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "Update", err.Error()) } req, err := client.UpdatePreparer(ctx, largePersonGroupID, personID, body) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Update", nil, "Failure preparing request") return } resp, err := client.UpdateSender(req) if err != nil { result.Response = resp err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Update", resp, "Failure sending request") return } result, err = client.UpdateResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "Update", resp, "Failure responding to request") return } return } // UpdatePreparer prepares the Update request. func (client LargePersonGroupPersonClient) UpdatePreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID, body NameAndUserDataContract) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "personId": autorest.Encode("path", personID), } preparer := autorest.CreatePreparer( autorest.AsContentType("application/json; charset=utf-8"), autorest.AsPatch(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}", pathParameters), autorest.WithJSON(body)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // UpdateSender sends the Update request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) UpdateSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // UpdateResponder handles the response to the Update request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) UpdateResponder(resp *http.Response) (result autorest.Response, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByClosing()) result.Response = resp return } // UpdateFace update a person persisted face's userData field. // Parameters: // largePersonGroupID - id referencing a particular large person group. // personID - id referencing a particular person. // persistedFaceID - id referencing a particular persistedFaceId of an existing face. // body - request body for updating persisted face. func (client LargePersonGroupPersonClient) UpdateFace(ctx context.Context, largePersonGroupID string, personID uuid.UUID, persistedFaceID uuid.UUID, body UpdateFaceRequest) (result autorest.Response, err error) { if tracing.IsEnabled() { ctx = tracing.StartSpan(ctx, fqdn+"/LargePersonGroupPersonClient.UpdateFace") defer func() { sc := -1 if result.Response != nil { sc = result.Response.StatusCode } tracing.EndSpan(ctx, sc, err) }() } if err := validation.Validate([]validation.Validation{ {TargetValue: largePersonGroupID, Constraints: []validation.Constraint{{Target: "largePersonGroupID", Name: validation.MaxLength, Rule: 64, Chain: nil}, {Target: "largePersonGroupID", Name: validation.Pattern, Rule: `^[a-z0-9-_]+$`, Chain: nil}}}}); err != nil { return result, validation.NewError("face.LargePersonGroupPersonClient", "UpdateFace", err.Error()) } req, err := client.UpdateFacePreparer(ctx, largePersonGroupID, personID, persistedFaceID, body) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "UpdateFace", nil, "Failure preparing request") return } resp, err := client.UpdateFaceSender(req) if err != nil { result.Response = resp err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "UpdateFace", resp, "Failure sending request") return } result, err = client.UpdateFaceResponder(resp) if err != nil { err = autorest.NewErrorWithError(err, "face.LargePersonGroupPersonClient", "UpdateFace", resp, "Failure responding to request") return } return } // UpdateFacePreparer prepares the UpdateFace request. func (client LargePersonGroupPersonClient) UpdateFacePreparer(ctx context.Context, largePersonGroupID string, personID uuid.UUID, persistedFaceID uuid.UUID, body UpdateFaceRequest) (*http.Request, error) { urlParameters := map[string]interface{}{ "Endpoint": client.Endpoint, } pathParameters := map[string]interface{}{ "largePersonGroupId": autorest.Encode("path", largePersonGroupID), "persistedFaceId": autorest.Encode("path", persistedFaceID), "personId": autorest.Encode("path", personID), } preparer := autorest.CreatePreparer( autorest.AsContentType("application/json; charset=utf-8"), autorest.AsPatch(), autorest.WithCustomBaseURL("{Endpoint}/face/v1.0", urlParameters), autorest.WithPathParameters("/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces/{persistedFaceId}", pathParameters), autorest.WithJSON(body)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } // UpdateFaceSender sends the UpdateFace request. The method will close the // http.Response Body if it receives an error. func (client LargePersonGroupPersonClient) UpdateFaceSender(req *http.Request) (*http.Response, error) { return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) } // UpdateFaceResponder handles the response to the UpdateFace request. The method always // closes the http.Response Body. func (client LargePersonGroupPersonClient) UpdateFaceResponder(resp *http.Response) (result autorest.Response, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusOK), autorest.ByClosing()) result.Response = resp return }