|
| 1 | +--- |
| 2 | +author: PatrickFarley |
| 3 | +manager: nitinme |
| 4 | +ms.service: ai-services |
| 5 | +ms.subservice: computer-vision |
| 6 | +ms.topic: include |
| 7 | +ms.date: 08/01/2023 |
| 8 | +ms.author: pafarley |
| 9 | +--- |
| 10 | + |
| 11 | +## Prerequisites |
| 12 | + |
| 13 | +This guide assumes you have successfully followed the steps mentioned in the [quickstart](/azure/cognitive-services/computer-vision/quickstarts-sdk/image-analysis-client-library-40) page. This means: |
| 14 | + |
| 15 | +* You have <a href="https://portal.azure.com/#create/Microsoft.CognitiveServicesComputerVision" title="created a Computer Vision resource" target="_blank">created a Computer Vision resource </a> and obtained a key and endpoint URL. |
| 16 | +* You have the appropriate SDK package installed and you have a running [quickstart](/azure/cognitive-services/computer-vision/quickstarts-sdk/image-analysis-client-library-40) application. You can modify this quickstart application based on code examples here. |
| 17 | + |
| 18 | +## Authenticate against the service |
| 19 | + |
| 20 | +To authenticate against the Image Analysis service, you need a Computer Vision key and endpoint URL. |
| 21 | + |
| 22 | +> [!TIP] |
| 23 | +> Don't include the key directly in your code, and never post it publicly. See the Cognitive Services [security](/azure/cognitive-services/security-features) article for more authentication options like [Azure Key Vault](/azure/cognitive-services/use-key-vault). |
| 24 | +
|
| 25 | +The SDK example assumes that you defined the environment variables `VISION_KEY` and `VISION_ENDPOINT` with your key and endpoint. |
| 26 | + |
| 27 | +At the start of your code, use one of the static constructor methods [VisionServiceOptions::FromEndpoint](/cpp/cognitive-services/vision/service-visionserviceoptions#fromendpoint-1) to create a *VisionServiceOptions* object. For example: |
| 28 | + |
| 29 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=vision_service_options)] |
| 30 | + |
| 31 | +Where we used this helper function to read the value of an environment variable: |
| 32 | + |
| 33 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=get_env_var)] |
| 34 | + |
| 35 | + |
| 36 | +## Select the image to analyze |
| 37 | + |
| 38 | +The code in this guide uses remote images referenced by URL. You may want to try different images on your own to see the full capability of the Image Analysis features. |
| 39 | + |
| 40 | +Create a new **VisionSource** object from the URL of the image you want to analyze, using the static constructor [VisionSource::FromUrl](/cpp/cognitive-services/vision/input-visionsource#fromurl). |
| 41 | + |
| 42 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=vision_source)] |
| 43 | + |
| 44 | +> [!TIP] |
| 45 | +> You can also analyze a local image by passing in the full-path image file name. See [VisionSource::FromFile](/cpp/cognitive-services/vision/input-visionsource#fromfile). |
| 46 | +
|
| 47 | + |
| 48 | +## Select analysis options |
| 49 | + |
| 50 | +### Select visual features when using the standard model |
| 51 | + |
| 52 | +The Analysis 4.0 API gives you access to all of the service's image analysis features. Choose which operations to do based on your own use case. See the [overview](/azure/cognitive-services/computer-vision/overview-image-analysis) for a description of each feature. The example in this section adds all of the available visual features, but for practical usage you likely need fewer. |
| 53 | + |
| 54 | +Visual features 'Captions' and 'DenseCaptions' are only supported in the following Azure regions: East US, France Central, Korea Central, North Europe, Southeast Asia, West Europe, West US. |
| 55 | + |
| 56 | +> [!NOTE] |
| 57 | +> The REST API uses the terms **Smart Crops** and **Smart Crops Aspect Ratios**. The SDK uses the terms **Crop Suggestions** and **Cropping Aspect Ratios**. They both refer to the same service operation. Similarly, the REST API users the term **Read** for detecting text in the image, whereas the SDK uses the term **Text** for the same operation. |
| 58 | +
|
| 59 | + |
| 60 | +Create a new [ImageAnalysisOptions](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions) object. Then specify an `std::vector` of visual features you'd like to extract, by calling the [SetFeatures](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions#setfeatures) method. [ImageAnalysisFeature](/cpp/cognitive-services/vision/azure-ai-vision-imageanalysis-namespace#enum-imageanalysisfeature) enum defines the supported values. |
| 61 | + |
| 62 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=visual_features)] |
| 63 | + |
| 64 | + |
| 65 | +### Set model name when using a custom model |
| 66 | + |
| 67 | +You can also do image analysis with a custom trained model. To create and train a model, see [Create a custom Image Analysis model](/azure/cognitive-services/computer-vision/how-to/model-customization). Once your model is trained, all you need is the model's name. You do not need to specify visual features if you use a custom model. |
| 68 | + |
| 69 | + |
| 70 | +To use a custom model, create the [ImageAnalysisOptions](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions) object and call the [SetModelName](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions#setmodelname) method. You don't need to call any other methods on **ImageAnalysisOptions**. There's no need to call [SetFeatures](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions#setfeatures) as you do with standard model, since your custom model already implies the visual features the service extracts. |
| 71 | + |
| 72 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/3/3.cpp?name=model_name)] |
| 73 | + |
| 74 | + |
| 75 | +### Specify languages |
| 76 | + |
| 77 | +You can specify the language of the returned data. The language is optional, with the default being English. See [Language support](https://aka.ms/cv-languages) for a list of supported language codes and which visual features are supported for each language. |
| 78 | + |
| 79 | +Language option only applies when you're using the standard model. |
| 80 | + |
| 81 | + |
| 82 | +Call the [SetLanguage](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions#setlanguage) method on your **ImageAnalysisOptions** object to specify a language. |
| 83 | + |
| 84 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=language)] |
| 85 | + |
| 86 | + |
| 87 | +### Select gender neutral captions |
| 88 | + |
| 89 | +If you're extracting captions or dense captions, you can ask for gender neutral captions. Gender neutral captions is optional, with the default being gendered captions. For example, in English, when you select gender neutral captions, terms like **woman** or **man** are replaced with **person**, and **boy** or **girl** are replaced with **child**. |
| 90 | + |
| 91 | +Gender neutral caption option only applies when you're using the standard model. |
| 92 | + |
| 93 | + |
| 94 | +Call the [SetGenderNeutralCaption](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions#setgenderneutralcaption) method of your **ImageAnalysisOptions** object with **true** as the argument, to enable gender neutral captions. |
| 95 | + |
| 96 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=gender_neutral_caption)] |
| 97 | + |
| 98 | +### Select smart cropping aspect ratios |
| 99 | + |
| 100 | +An aspect ratio is calculated by dividing the target crop width by the height. Supported values are from 0.75 to 1.8 (inclusive). Setting this property is only relevant when the **smartCrop** option (REST API) or **CropSuggestions** (SDK) was selected as part the visual feature list. If you select smartCrop/CropSuggestions but don't specify aspect ratios, the service returns one crop suggestion with an aspect ratio it sees fit. In this case, the aspect ratio is between 0.5 and 2.0 (inclusive). |
| 101 | + |
| 102 | +Smart cropping aspect rations only applies when you're using the standard model. |
| 103 | + |
| 104 | + |
| 105 | +Call the [SetCroppingAspectRatios](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions#setcroppingaspectratios) method of your **ImageAnalysisOptions** with an `std::vector` of aspect ratios. For example, to set aspect ratios of 0.9 and 1.33: |
| 106 | + |
| 107 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=cropping_aspect_rations)] |
| 108 | + |
| 109 | + |
| 110 | +## Get results from the service |
| 111 | + |
| 112 | +### Get results using the standard model |
| 113 | + |
| 114 | +This section shows you how to make an analysis call to the service using the standard model, and get the results. |
| 115 | + |
| 116 | + |
| 117 | +1. Using the **VisionServiceOptions**, **VisionSource** and **ImageAnalysisOptions** objects, construct a new [ImageAnalyzer](/cpp/cognitive-services/vision/imageanalysis-imageanalyzer) object. |
| 118 | + |
| 119 | +1. Call the **Analyze** method on the **ImageAnalyzer** object, as shown here. This is a blocking (synchronous) call until the service returns the results or an error occurred. Alternatively, you can call the nonblocking **AnalyzeAsync** method. |
| 120 | + |
| 121 | +1. Call **GetReason** method on the [ImageAnalysisResult](/cpp/cognitive-services/vision/imageanalysis-imageanalysisresult) object, to determine if analysis succeeded or failed. |
| 122 | + |
| 123 | +1. If succeeded, proceed to call the relevant **Get** methods on the result based on your selected visual features, as shown here. Additional information (not commonly needed) can be obtained by constructing the [ImageAnalysisResultDetails](/cpp/cognitive-services/vision/imageanalysis-imageanalysisresultdetails) object. |
| 124 | + |
| 125 | +1. If failed, you can construct the [ImageAnalysisErrorDetails](/cpp/cognitive-services/vision/imageanalysis-imageanalysiserrordetails) object to get information on the failure. |
| 126 | + |
| 127 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=analyze)] |
| 128 | + |
| 129 | +The code uses the following helper method to display the coordinates of a bounding polygon: |
| 130 | + |
| 131 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/1/1.cpp?name=polygon_to_string)] |
| 132 | + |
| 133 | + |
| 134 | +### Get results using custom model |
| 135 | + |
| 136 | +This section shows you how to make an analysis call to the service, when using a custom model. |
| 137 | + |
| 138 | + |
| 139 | +The code is similar to the standard model case. The only difference is that results from the custom model are available by calling the **GetCustomTags** and/or **GetCustomObjects** methods of the [ImageAnalysisResult](/cpp/cognitive-services/vision/imageanalysis-imageanalysisresult) object. |
| 140 | + |
| 141 | +[!code-cpp[](~/azure-ai-vision-sdk/docs/learn.microsoft.com/cpp/image-analysis/3/3.cpp?name=analyze)] |
| 142 | + |
| 143 | + |
| 144 | +## Error codes |
| 145 | + |
| 146 | +The sample code for getting analysis results shows how to handle errors and get the [ImageAnalysisErrorDetails](/cpp/cognitive-services/vision/imageanalysis-imageanalysiserrordetails) object that contains the error information. The error information includes: |
| 147 | + |
| 148 | +* Error reason. See enum [ImageAnalysisErrorReason](/cpp/cognitive-services/vision/azure-ai-vision-imageanalysis-namespace#enum-imageanalysiserrorreason). |
| 149 | +* Error code and error message. Click on the **REST API** tab to see a list of some common error codes and messages. |
| 150 | + |
| 151 | +In addition to those errors, the SDK has a few other error messages, including: |
| 152 | + * `Missing Image Analysis options: You must set at least one visual feature (or model name) for the 'analyze' operation. Or set segmentation mode for the 'segment' operation` |
| 153 | + * `Invalid combination of Image Analysis options: You cannot set both visual features (or model name), and segmentation mode` |
| 154 | + |
| 155 | +Make sure the [ImageAnalysisOptions](/cpp/cognitive-services/vision/imageanalysis-imageanalysisoptions) object is set correctly to fix these errors. |
| 156 | + |
| 157 | +To help resolve issues, look at the [Image Analysis Samples](https://github.com/Azure-Samples/azure-ai-vision-sdk) repository and run the closest sample to your scenario. Search the [GitHub issues](https://github.com/Azure-Samples/azure-ai-vision-sdk/issues) to see if your issue was already address. If not, create a new. |
0 commit comments