Inicio rápido: Uso de la biblioteca cliente o API REST Image Analysis
Introducción a la API REST o biblioteca cliente de Image Analysis. El servicio Image Analysis proporciona algoritmos de inteligencia artificial para procesar imágenes y devolver información sobre sus características visuales. Siga estos pasos para instalar un paquete en la aplicación y probar el código de ejemplo en tareas básicas.
Use la biblioteca cliente de Image Analysis para analizar en una imagen las etiquetas, la descripción del texto, las caras, el contenido para adultos, etc.
Documentación de referencia | Código fuente de la biblioteca | Paquete (NuGet) | Ejemplos
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- El IDE de Visual Studio o la versión actual de .NET Core.
- Una vez que tenga la suscripción de Azure, cree un recurso de Computer Vision en Azure Portal para obtener la clave y el punto de conexión. Una vez que se implemente, haga clic en Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Computer Vision. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
- Puede usar el plan de tarifa gratis (
F0) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
Instalación
Creación de una aplicación de C#
En Visual Studio, cree una aplicación de .NET Core.
Instalación de la biblioteca cliente
Después de crear un proyecto, instale la biblioteca cliente; para ello, haga clic con el botón derecho en la solución del proyecto en el Explorador de soluciones y seleccione Administrar paquetes NuGet. En el administrador de paquetes que se abre, seleccione Examinar Incluir versión preliminar y busque Microsoft.Azure.CognitiveServices.Vision.ComputerVision. Seleccione la versión 7.0.0 e Instalar.
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
En el directorio del proyecto, abra el archivo Program.cs en el editor o IDE que prefiera. Agregue las siguientes directivas using:
using System;
using System.Collections.Generic;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Threading;
using System.Linq;
En la clase Program de la aplicación, cree variables para el punto de conexión y la clave de Azure del recurso.
// Add your Computer Vision subscription key and endpoint
static string subscriptionKey = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE";
static string endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE";
Importante
Vaya a Azure Portal. Si el recurso de Computer Vision que ha creado en la sección Requisitos previos se ha implementado correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Puede encontrar su clave y punto de conexión en la página de clave y punto de conexión del recurso, en Administración de recursos.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
En el método Main de la aplicación, agregue llamadas para los métodos que se usan en este inicio rápido. Las creará más adelante.
// Create a client
ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);
// Analyze an image to get features and other properties.
AnalyzeImageUrl(client, ANALYZE_URL_IMAGE).Wait();
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Image Analysis SDK para .NET.
| Nombre | Descripción |
|---|---|
| ComputerVisionClient | Esta clase es necesaria para todas las funcionalidades de Computer Vision. Cree una instancia de ella con la información de suscripción y úsela para realizar la mayoría de las operaciones con imágenes. |
| ComputerVisionClientExtensions | Esta clase contiene métodos adicionales para ComputerVisionClient. |
| VisualFeatureTypes | Esta enumeración define los diferentes tipos de análisis de imágenes que se pueden realizar en una operación de análisis estándar. Debe especificar un conjunto de valores de VisualFeatureTypes en función de sus necesidades. |
Ejemplos de código
En estos fragmentos de código se muestra cómo realizar las siguientes tareas con la biblioteca cliente de Image Analysis para .NET:
Autenticar el cliente
Nota
En este inicio rápido se da por supuesto que ha creado variables de entorno para la clave de Computer Vision y el punto de conexión, denominadas COMPUTER_VISION_SUBSCRIPTION_KEY y COMPUTER_VISION_ENDPOINT respectivamente.
En un nuevo método de la clase Program, cree una instancia de un cliente con el punto de conexión y la clave. Cree un objeto ApiKeyServiceClientCredentials con la clave y úselo con el punto de conexión para crear un objeto ComputerVisionClient .
/*
* AUTHENTICATE
* Creates a Computer Vision client used by each example.
*/
public static ComputerVisionClient Authenticate(string endpoint, string key)
{
ComputerVisionClient client =
new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
{ Endpoint = endpoint };
return client;
}
Análisis de una imagen
El código siguiente define un método, AnalyzeImageUrl, que utiliza el objeto de cliente para analizar una imagen remota e imprimir los resultados. El método devuelve una descripción de texto, categorización, lista de etiquetas, caras detectadas, marcas de contenido para adultos, colores principales y tipo de imagen.
Sugerencia
También puede analizar una imagen local. Consulte los métodos ComputerVisionClient, como AnalyzeImageInStreamAsync. O bien, consulte el código de ejemplo en GitHub para escenarios relacionados con imágenes locales.
Configuración de una imagen de prueba
En la clase Program, guarde una referencia a la dirección URL de la imagen que desea analizar.
// URL image used for analyzing an image (image of puppy)
private const string ANALYZE_URL_IMAGE = "https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png";
Especificación de características visuales
Defina el nuevo método para el análisis de imágenes. Agregue el código siguiente, que especifica qué características visuales desea extraer en el análisis. Vea la enumeración VisualFeatureTypes para obtener una lista completa.
/*
* ANALYZE IMAGE - URL IMAGE
* Analyze URL image. Extracts captions, categories, tags, objects, faces, racy/adult/gory content,
* brands, celebrities, landmarks, color scheme, and image types.
*/
public static async Task AnalyzeImageUrl(ComputerVisionClient client, string imageUrl)
{
Console.WriteLine("----------------------------------------------------------");
Console.WriteLine("ANALYZE IMAGE - URL");
Console.WriteLine();
// Creating a list that defines the features to be extracted from the image.
List<VisualFeatureTypes?> features = new List<VisualFeatureTypes?>()
{
VisualFeatureTypes.Categories, VisualFeatureTypes.Description,
VisualFeatureTypes.Faces, VisualFeatureTypes.ImageType,
VisualFeatureTypes.Tags, VisualFeatureTypes.Adult,
VisualFeatureTypes.Color, VisualFeatureTypes.Brands,
VisualFeatureTypes.Objects
};
Llamada a Analyze API
El método AnalyzeImageAsync devuelve un objeto ImageAnalysis que contiene toda la información extraída.
Console.WriteLine($"Analyzing the image {Path.GetFileName(imageUrl)}...");
Console.WriteLine();
// Analyze the URL image
ImageAnalysis results = await client.AnalyzeImageAsync(imageUrl, visualFeatures: features);
En las secciones siguientes se muestra cómo analizar esta información en detalle.
Inserte cualquiera de los siguientes bloques de código en el método AnalyzeImageUrl para analizar los datos de las características visuales que solicitó anteriormente. No olvide agregar un corchete de cierre al final.
}
Obtención de la descripción de la imagen
El código siguiente obtiene la lista de títulos generados para la imagen. Consulte Descripción de imágenes para más detalles.
// Sunmarizes the image content.
Console.WriteLine("Summary:");
foreach (var caption in results.Description.Captions)
{
Console.WriteLine($"{caption.Text} with confidence {caption.Confidence}");
}
Console.WriteLine();
Obtención de la categoría de imagen
El código siguiente obtiene la categoría detectada de la imagen. Consulte Categorización de imágenes para más detalles.
// Display categories the image is divided into.
Console.WriteLine("Categories:");
foreach (var category in results.Categories)
{
Console.WriteLine($"{category.Name} with confidence {category.Score}");
}
Console.WriteLine();
Obtención de etiquetas de imagen
El código siguiente obtiene el conjunto de las etiquetas detectadas en la imagen. Consulte Etiquetas de contenido para más detalles.
// Image tags and their confidence score
Console.WriteLine("Tags:");
foreach (var tag in results.Tags)
{
Console.WriteLine($"{tag.Name} {tag.Confidence}");
}
Console.WriteLine();
Detección de objetos
El código siguiente detecta objetos comunes en la imagen y los imprime en la consola. Consulte Detección de objetos para más información.
// Objects
Console.WriteLine("Objects:");
foreach (var obj in results.Objects)
{
Console.WriteLine($"{obj.ObjectProperty} with confidence {obj.Confidence} at location {obj.Rectangle.X}, " +
$"{obj.Rectangle.X + obj.Rectangle.W}, {obj.Rectangle.Y}, {obj.Rectangle.Y + obj.Rectangle.H}");
}
Console.WriteLine();
Detección de marcas
El código siguiente detecta marcas corporativas y logotipos en la imagen y los imprime en la consola. Consulte Detección de marcas para más información.
// Well-known (or custom, if set) brands.
Console.WriteLine("Brands:");
foreach (var brand in results.Brands)
{
Console.WriteLine($"Logo of {brand.Name} with confidence {brand.Confidence} at location {brand.Rectangle.X}, " +
$"{brand.Rectangle.X + brand.Rectangle.W}, {brand.Rectangle.Y}, {brand.Rectangle.Y + brand.Rectangle.H}");
}
Console.WriteLine();
Detección de caras
El código siguiente devuelve las caras detectadas en la imagen con sus coordenadas de rectángulo y selecciona los atributos de cara. Consulte Detección de caras para más información.
// Faces
Console.WriteLine("Faces:");
foreach (var face in results.Faces)
{
Console.WriteLine($"A {face.Gender} of age {face.Age} at location {face.FaceRectangle.Left}, " +
$"{face.FaceRectangle.Left}, {face.FaceRectangle.Top + face.FaceRectangle.Width}, " +
$"{face.FaceRectangle.Top + face.FaceRectangle.Height}");
}
Console.WriteLine();
Detección de contenido para adultos, explícito o sangriento
El siguiente código imprime la presencia detectada de contenido para adultos en la imagen. Para más información, consulte Contenido para adultos, subido de tono y sangriento.
// Adult or racy content, if any.
Console.WriteLine("Adult:");
Console.WriteLine($"Has adult content: {results.Adult.IsAdultContent} with confidence {results.Adult.AdultScore}");
Console.WriteLine($"Has racy content: {results.Adult.IsRacyContent} with confidence {results.Adult.RacyScore}");
Console.WriteLine($"Has gory content: {results.Adult.IsGoryContent} with confidence {results.Adult.GoreScore}");
Console.WriteLine();
Obtención de la combinación de colores de imagen
El código siguiente imprime los atributos de color detectados en la imagen, como los colores dominantes y el color de énfasis. Consulte Combinaciones de colores para más detalles.
// Identifies the color scheme.
Console.WriteLine("Color Scheme:");
Console.WriteLine("Is black and white?: " + results.Color.IsBWImg);
Console.WriteLine("Accent color: " + results.Color.AccentColor);
Console.WriteLine("Dominant background color: " + results.Color.DominantColorBackground);
Console.WriteLine("Dominant foreground color: " + results.Color.DominantColorForeground);
Console.WriteLine("Dominant colors: " + string.Join(",", results.Color.DominantColors));
Console.WriteLine();
Obtención de contenido específico del dominio
Image Analysis puede usar modelos especializados para realizar análisis adicionales de las imágenes. Consulte Contenido específico del dominio para más detalles.
En el código siguiente se analizan los datos sobre las celebridades detectadas en la imagen.
// Celebrities in image, if any.
Console.WriteLine("Celebrities:");
foreach (var category in results.Categories)
{
if (category.Detail?.Celebrities != null)
{
foreach (var celeb in category.Detail.Celebrities)
{
Console.WriteLine($"{celeb.Name} with confidence {celeb.Confidence} at location {celeb.FaceRectangle.Left}, " +
$"{celeb.FaceRectangle.Top}, {celeb.FaceRectangle.Height}, {celeb.FaceRectangle.Width}");
}
}
}
Console.WriteLine();
En el código siguiente se analizan los datos sobre los paisajes detectados en la imagen.
// Popular landmarks in image, if any.
Console.WriteLine("Landmarks:");
foreach (var category in results.Categories)
{
if (category.Detail?.Landmarks != null)
{
foreach (var landmark in category.Detail.Landmarks)
{
Console.WriteLine($"{landmark.Name} with confidence {landmark.Confidence}");
}
}
}
Console.WriteLine();
Obtención del tipo de imagen
El código siguiente imprime información sobre el tipo de imagen (si es una imagen prediseñada o dibujo lineal).
// Detects the image types.
Console.WriteLine("Image Type:");
Console.WriteLine("Clip Art Type: " + results.ImageType.ClipArtType);
Console.WriteLine("Line Drawing Type: " + results.ImageType.LineDrawingType);
Console.WriteLine();
Ejecución de la aplicación
Ejecute la aplicación haciendo clic en el botón Depurar en la parte superior de la ventana del IDE.
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción a Cognitive Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Pasos siguientes
En este inicio rápido, ha aprendido a instalar la biblioteca cliente de Image Analysis y a realizar llamadas de análisis de imágenes básicas. A continuación, obtenga más información sobre las características de Analyze API.
- Introducción a Análisis de imágenes
- El código fuente de este ejemplo está disponible en GitHub.
Use la biblioteca cliente de Image Analysis para analizar en una imagen las etiquetas, la descripción del texto, las caras, el contenido para adultos, etc.
Documentación de referencia | Código fuente de la biblioteca | Paquete (PiPy) | Ejemplos
Requisitos previos
Una suscripción a Azure: cree una cuenta gratuita.
-
- La instalación de Python debe incluir pip. Puede comprobar si tiene pip instalado mediante la ejecución de
pip --versionen la línea de comandos. Para obtener pip, instale la versión más reciente de Python.
- La instalación de Python debe incluir pip. Puede comprobar si tiene pip instalado mediante la ejecución de
Una vez que tenga la suscripción de Azure, cree un recurso de Computer Vision en Azure Portal para obtener la clave y el punto de conexión. Una vez que se implemente, haga clic en Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Computer Vision. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
- Puede usar el plan de tarifa gratis (
F0) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
Instalación
Instalación de la biblioteca cliente
Puede instalar la biblioteca cliente con lo siguiente:
pip install --upgrade azure-cognitiveservices-vision-computervision
Instale también la biblioteca de Pillow.
pip install pillow
Creación de una nueva aplicación de Python
Por ejemplo, cree un nuevo archivo Python —quickstart-file.py. Ábralo en el editor o el IDE que prefiera e importe las siguientes bibliotecas.
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials
from array import array
import os
from PIL import Image
import sys
import time
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
A continuación, cree variables para el punto de conexión y la clave de Azure del recurso.
subscription_key = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE"
endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE"
Importante
Vaya a Azure Portal. Si el recurso de Computer Vision que ha creado en la sección Requisitos previos se ha implementado correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Puede encontrar su clave y punto de conexión en la página de clave y punto de conexión del recurso, en Administración de recursos.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Por ejemplo, Azure Key Vault.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Image Analysis SDK para Python.
| Nombre | Descripción |
|---|---|
| ComputerVisionClientOperationsMixin | Esta clase controla directamente todas las operaciones de imagen, como el análisis de imágenes, la detección de texto y la generación de miniaturas. |
| ComputerVisionClient | Esta clase es necesaria para todas las funcionalidades de Computer Vision. Cree una instancia de ella con la información de suscripción y úsela para generar instancias de otras clases. Implementa ComputerVisionClientOperationsMixin. |
| VisualFeatureTypes | Esta enumeración define los diferentes tipos de análisis de imágenes que se pueden realizar en una operación de análisis estándar. Debe especificar un conjunto de valores de VisualFeatureTypes en función de sus necesidades. |
Ejemplos de código
En estos fragmentos de código se muestra cómo realizar las siguientes tareas con la biblioteca cliente de Image Analysis para Python:
Autenticar el cliente
Cree una instancia de un cliente con la clave y el punto de conexión. Cree un objeto CognitiveServicesCredentials con la clave y úselo con el punto de conexión para crear un objeto ComputerVisionClient.
computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))
Análisis de una imagen
Use el objeto de cliente para analizar las características visuales de una imagen remota. En primer lugar, guarde una referencia a la dirección URL de una imagen que desee analizar.
remote_image_url = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/landmark.jpg"
Sugerencia
También puede analizar una imagen local. Consulte los métodos ComputerVisionClientOperationsMixin, como analyze_image_in_stream. O bien, consulte el código de ejemplo en GitHub para escenarios relacionados con imágenes locales.
Obtención de la descripción de la imagen
El código siguiente obtiene la lista de títulos generados para la imagen. Consulte Descripción de imágenes para más detalles.
'''
Describe an Image - remote
This example describes the contents of an image with the confidence score.
'''
print("===== Describe an image - remote =====")
# Call API
description_results = computervision_client.describe_image(remote_image_url )
# Get the captions (descriptions) from the response, with confidence level
print("Description of remote image: ")
if (len(description_results.captions) == 0):
print("No description detected.")
else:
for caption in description_results.captions:
print("'{}' with confidence {:.2f}%".format(caption.text, caption.confidence * 100))
Obtención de la categoría de imagen
El código siguiente obtiene la categoría detectada de la imagen. Consulte Categorización de imágenes para más detalles.
'''
Categorize an Image - remote
This example extracts (general) categories from a remote image with a confidence score.
'''
print("===== Categorize an image - remote =====")
# Select the visual feature(s) you want.
remote_image_features = ["categories"]
# Call API with URL and features
categorize_results_remote = computervision_client.analyze_image(remote_image_url , remote_image_features)
# Print results with confidence score
print("Categories from remote image: ")
if (len(categorize_results_remote.categories) == 0):
print("No categories detected.")
else:
for category in categorize_results_remote.categories:
print("'{}' with confidence {:.2f}%".format(category.name, category.score * 100))
Obtención de etiquetas de imagen
El código siguiente obtiene el conjunto de las etiquetas detectadas en la imagen. Consulte Etiquetas de contenido para más detalles.
'''
Tag an Image - remote
This example returns a tag (key word) for each thing in the image.
'''
print("===== Tag an image - remote =====")
# Call API with remote image
tags_result_remote = computervision_client.tag_image(remote_image_url )
# Print results with confidence score
print("Tags in the remote image: ")
if (len(tags_result_remote.tags) == 0):
print("No tags detected.")
else:
for tag in tags_result_remote.tags:
print("'{}' with confidence {:.2f}%".format(tag.name, tag.confidence * 100))
Detección de objetos
El código siguiente detecta objetos comunes en la imagen y los imprime en la consola. Consulte Detección de objetos para más información.
'''
Detect Objects - remote
This example detects different kinds of objects with bounding boxes in a remote image.
'''
print("===== Detect Objects - remote =====")
# Get URL image with different objects
remote_image_url_objects = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg"
# Call API with URL
detect_objects_results_remote = computervision_client.detect_objects(remote_image_url_objects)
# Print detected objects results with bounding boxes
print("Detecting objects in remote image:")
if len(detect_objects_results_remote.objects) == 0:
print("No objects detected.")
else:
for object in detect_objects_results_remote.objects:
print("object at location {}, {}, {}, {}".format( \
object.rectangle.x, object.rectangle.x + object.rectangle.w, \
object.rectangle.y, object.rectangle.y + object.rectangle.h))
Detección de marcas
El código siguiente detecta marcas corporativas y logotipos en la imagen y los imprime en la consola. Consulte Detección de marcas para más información.
'''
Detect Brands - remote
This example detects common brands like logos and puts a bounding box around them.
'''
print("===== Detect Brands - remote =====")
# Get a URL with a brand logo
remote_image_url = "https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/gray-shirt-logo.jpg"
# Select the visual feature(s) you want
remote_image_features = ["brands"]
# Call API with URL and features
detect_brands_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)
print("Detecting brands in remote image: ")
if len(detect_brands_results_remote.brands) == 0:
print("No brands detected.")
else:
for brand in detect_brands_results_remote.brands:
print("'{}' brand detected with confidence {:.1f}% at location {}, {}, {}, {}".format( \
brand.name, brand.confidence * 100, brand.rectangle.x, brand.rectangle.x + brand.rectangle.w, \
brand.rectangle.y, brand.rectangle.y + brand.rectangle.h))
Detección de caras
El código siguiente devuelve las caras detectadas en la imagen con sus coordenadas de rectángulo y selecciona los atributos de cara. Consulte Detección de caras para más información.
'''
Detect Faces - remote
This example detects faces in a remote image, gets their gender and age,
and marks them with a bounding box.
'''
print("===== Detect Faces - remote =====")
# Get an image with faces
remote_image_url_faces = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg"
# Select the visual feature(s) you want.
remote_image_features = ["faces"]
# Call the API with remote URL and features
detect_faces_results_remote = computervision_client.analyze_image(remote_image_url_faces, remote_image_features)
# Print the results with gender, age, and bounding box
print("Faces in the remote image: ")
if (len(detect_faces_results_remote.faces) == 0):
print("No faces detected.")
else:
for face in detect_faces_results_remote.faces:
print("'{}' of age {} at location {}, {}, {}, {}".format(face.gender, face.age, \
face.face_rectangle.left, face.face_rectangle.top, \
face.face_rectangle.left + face.face_rectangle.width, \
face.face_rectangle.top + face.face_rectangle.height))
Detección de contenido para adultos, explícito o sangriento
El siguiente código imprime la presencia detectada de contenido para adultos en la imagen. Para más información, consulte Contenido para adultos, subido de tono y sangriento.
'''
Detect Adult or Racy Content - remote
This example detects adult or racy content in a remote image, then prints the adult/racy score.
The score is ranged 0.0 - 1.0 with smaller numbers indicating negative results.
'''
print("===== Detect Adult or Racy Content - remote =====")
# Select the visual feature(s) you want
remote_image_features = ["adult"]
# Call API with URL and features
detect_adult_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)
# Print results with adult/racy score
print("Analyzing remote image for adult or racy content ... ")
print("Is adult content: {} with confidence {:.2f}".format(detect_adult_results_remote.adult.is_adult_content, detect_adult_results_remote.adult.adult_score * 100))
print("Has racy content: {} with confidence {:.2f}".format(detect_adult_results_remote.adult.is_racy_content, detect_adult_results_remote.adult.racy_score * 100))
Obtención de la combinación de colores de imagen
El código siguiente imprime los atributos de color detectados en la imagen, como los colores dominantes y el color de énfasis. Consulte Combinaciones de colores para más detalles.
'''
Detect Color - remote
This example detects the different aspects of its color scheme in a remote image.
'''
print("===== Detect Color - remote =====")
# Select the feature(s) you want
remote_image_features = ["color"]
# Call API with URL and features
detect_color_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)
# Print results of color scheme
print("Getting color scheme of the remote image: ")
print("Is black and white: {}".format(detect_color_results_remote.color.is_bw_img))
print("Accent color: {}".format(detect_color_results_remote.color.accent_color))
print("Dominant background color: {}".format(detect_color_results_remote.color.dominant_color_background))
print("Dominant foreground color: {}".format(detect_color_results_remote.color.dominant_color_foreground))
print("Dominant colors: {}".format(detect_color_results_remote.color.dominant_colors))
Obtención de contenido específico del dominio
Image Analysis puede usar un modelo especializado para realizar análisis adicionales de las imágenes. Consulte Contenido específico del dominio para más detalles.
En el código siguiente se analizan los datos sobre las celebridades detectadas en la imagen.
'''
Detect Domain-specific Content - remote
This example detects celebrites and landmarks in remote images.
'''
print("===== Detect Domain-specific Content - remote =====")
# URL of one or more celebrities
remote_image_url_celebs = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg"
# Call API with content type (celebrities) and URL
detect_domain_results_celebs_remote = computervision_client.analyze_image_by_domain("celebrities", remote_image_url_celebs)
# Print detection results with name
print("Celebrities in the remote image:")
if len(detect_domain_results_celebs_remote.result["celebrities"]) == 0:
print("No celebrities detected.")
else:
for celeb in detect_domain_results_celebs_remote.result["celebrities"]:
print(celeb["name"])
En el código siguiente se analizan los datos sobre los paisajes detectados en la imagen.
# Call API with content type (landmarks) and URL
detect_domain_results_landmarks = computervision_client.analyze_image_by_domain("landmarks", remote_image_url)
print()
print("Landmarks in the remote image:")
if len(detect_domain_results_landmarks.result["landmarks"]) == 0:
print("No landmarks detected.")
else:
for landmark in detect_domain_results_landmarks.result["landmarks"]:
print(landmark["name"])
Obtención del tipo de imagen
El código siguiente imprime información sobre el tipo de imagen (si es una imagen prediseñada o dibujo lineal).
'''
Detect Image Types - remote
This example detects an image's type (clip art/line drawing).
'''
print("===== Detect Image Types - remote =====")
# Get URL of an image with a type
remote_image_url_type = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/type-image.jpg"
# Select visual feature(s) you want
remote_image_features = [VisualFeatureTypes.image_type]
# Call API with URL and features
detect_type_results_remote = computervision_client.analyze_image(remote_image_url_type, remote_image_features)
# Prints type results with degree of accuracy
print("Type of remote image:")
if detect_type_results_remote.image_type.clip_art_type == 0:
print("Image is not clip art.")
elif detect_type_results_remote.image_type.line_drawing_type == 1:
print("Image is ambiguously clip art.")
elif detect_type_results_remote.image_type.line_drawing_type == 2:
print("Image is normal clip art.")
else:
print("Image is good clip art.")
if detect_type_results_remote.image_type.line_drawing_type == 0:
print("Image is not a line drawing.")
else:
print("Image is a line drawing")
Ejecución de la aplicación
Ejecute la aplicación con el comando python en el archivo de inicio rápido.
python quickstart-file.py
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción a Cognitive Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Pasos siguientes
En este inicio rápido, ha aprendido a instalar la biblioteca cliente de Image Analysis y a realizar llamadas de análisis de imágenes básicas. A continuación, obtenga más información sobre las características de Analyze API.
- Introducción a Análisis de imágenes
- El código fuente de este ejemplo está disponible en GitHub.
Use la biblioteca cliente de Image Analysis para analizar en una imagen las etiquetas, la descripción del texto, las caras, el contenido para adultos, etc.
Documentación de referencia | Código fuente de la biblioteca |Artifact (Maven) | Ejemplos
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- La última versión de Java Development Kit (JDK)
- La herramienta de compilación de Gradle u otro administrador de dependencias.
- Una vez que tenga la suscripción de Azure, cree un recurso de Computer Vision en Azure Portal para obtener la clave y el punto de conexión. Una vez que se implemente, haga clic en Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Computer Vision. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
- Puede usar el plan de tarifa gratis (
F0) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
Instalación
Creación de un proyecto de Gradle
En una ventana de la consola (como cmd, PowerShell o Bash), cree un directorio para la aplicación y vaya a él.
mkdir myapp && cd myapp
Ejecute el comando gradle init desde el directorio de trabajo. Este comando creará archivos de compilación esenciales para Gradle, como build.gradle.kts, que se usa en tiempo de ejecución para crear y configurar la aplicación.
gradle init --type basic
Cuando se le solicite que elija un DSL, seleccione Kotlin.
Instalación de la biblioteca cliente
En este inicio rápido se usa el administrador de dependencias Gradle. Puede encontrar la biblioteca de cliente y la información de otros administradores de dependencias en el repositorio central de Maven.
Busque build.gradle.kts y ábralo con el IDE o el editor de texto que prefiera. A continuación, cópielo en la siguiente configuración de compilación. Esta configuración define el proyecto como una aplicación Java cuyo punto de entrada es la clase ImageAnalysisQuickstart. Importa la biblioteca de Computer Vision.
plugins {
java
application
}
application {
mainClass.set("ImageAnalysisQuickstart")
}
repositories {
mavenCentral()
}
dependencies {
implementation(group = "com.microsoft.azure.cognitiveservices", name = "azure-cognitiveservices-computervision", version = "1.0.6-beta")
}
Creación de un archivo Java
En el directorio de trabajo, ejecute el siguiente comando para crear una carpeta de origen del proyecto:
mkdir -p src/main/java
Vaya a la nueva carpeta y cree un archivo denominado ImageAnalysisQuickstart.java. Ábralo en el editor o el IDE que prefiera y agregue las siguientes instrucciones import:
import com.microsoft.azure.cognitiveservices.vision.computervision.*;
import com.microsoft.azure.cognitiveservices.vision.computervision.implementation.ComputerVisionImpl;
import com.microsoft.azure.cognitiveservices.vision.computervision.models.*;
import java.io.*;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
Defina la clase ImageAnalysisQuickstart.
public class ImageAnalysisQuickstart {
}
En la clase ImageAnalysisQuickstart, cree variables para el punto de conexión y la clave del recurso.
static String subscriptionKey = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE";
static String endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE";
Importante
Vaya a Azure Portal. Si el recurso de Computer Vision que ha creado en la sección Requisitos previos se ha implementado correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Puede encontrar su clave y punto de conexión en la página de clave y punto de conexión del recurso, en Administración de recursos.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
En el método main de la aplicación, agregue llamadas para los métodos que se usan en este inicio rápido. Se definirán más adelante.
public static void main(String[] args) {
System.out.println("\nAzure Cognitive Services Computer Vision - Java Quickstart Sample");
// Create an authenticated Computer Vision client.
ComputerVisionClient compVisClient = Authenticate(subscriptionKey, endpoint);
// Analyze local and remote images
AnalyzeLocalImage(compVisClient);
}
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Image Analysis SDK para Java.
| Nombre | Descripción |
|---|---|
| ComputerVisionClient | Esta clase es necesaria para todas las funcionalidades de Computer Vision. Cree una instancia de ella con la información de suscripción y úsela para generar instancias de otras clases. |
| ComputerVision | Esta clase procede del objeto de cliente y controla directamente todas las operaciones de imagen, como el análisis de imágenes, la detección de texto y la generación de miniaturas. |
| VisualFeatureTypes | Esta enumeración define los diferentes tipos de análisis de imágenes que se pueden realizar en una operación de análisis estándar. Debe especificar un conjunto de valores de VisualFeatureTypes en función de sus necesidades. |
Ejemplos de código
En estos fragmentos de código se muestra cómo realizar las siguientes tareas con la biblioteca cliente Image Analysis para Java:
Autenticar el cliente
En un nuevo método, cree una instancia de un objeto ComputerVisionClient con su punto de conexión y clave.
public static ComputerVisionClient Authenticate(String subscriptionKey, String endpoint){
return ComputerVisionManager.authenticate(subscriptionKey).withEndpoint(endpoint);
}
Análisis de una imagen
El código siguiente define un método, AnalyzeLocalImage, que utiliza el objeto de cliente para analizar una imagen local e imprimir los resultados. El método devuelve una descripción de texto, categorización, lista de etiquetas, caras detectadas, marcas de contenido para adultos, colores principales y tipo de imagen.
Sugerencia
También puede analizar una imagen remota mediante su dirección URL. Consulte los métodos ComputerVision, como AnalyzeImage. O bien, consulte el código de ejemplo en GitHub para escenarios relacionados con imágenes remotas.
Configuración de una imagen de prueba
En primer lugar, cree una carpeta recursos/ en la carpeta src /main/ del proyecto y agregue una imagen que desee analizar. Luego, agregue la siguiente definición de método a la clase ImageAnalysisQuickstart. Cambie el valor de pathToLocalImage para que coincida con el archivo de imagen.
public static void AnalyzeLocalImage(ComputerVisionClient compVisClient) {
/*
* Analyze a local image:
*
* Set a string variable equal to the path of a local image. The image path
* below is a relative path.
*/
String pathToLocalImage = "src\\main\\resources\\myImage.png";
Especificación de características visuales
A continuación, especifique qué características visuales desea extraer en el análisis. Vea la enumeración VisualFeatureTypes para obtener una lista completa.
// This list defines the features to be extracted from the image.
List<VisualFeatureTypes> featuresToExtractFromLocalImage = new ArrayList<>();
featuresToExtractFromLocalImage.add(VisualFeatureTypes.DESCRIPTION);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.CATEGORIES);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.TAGS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.FACES);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.OBJECTS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.BRANDS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.ADULT);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.COLOR);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.IMAGE_TYPE);
Analizar
Este bloque imprime resultados detallados de cada ámbito del análisis de imágenes en la consola. El método analyzeImageInStream devuelve un objeto ImageAnalysis que contiene toda la información extraída.
try {
// Need a byte array for analyzing a local image.
File rawImage = new File(pathToLocalImage);
byte[] imageByteArray = Files.readAllBytes(rawImage.toPath());
// Call the Computer Vision service and tell it to analyze the loaded image.
ImageAnalysis analysis = compVisClient.computerVision().analyzeImageInStream().withImage(imageByteArray)
.withVisualFeatures(featuresToExtractFromLocalImage).execute();
En las secciones siguientes se muestra cómo analizar esta información en detalle.
Obtención de la descripción de la imagen
El código siguiente obtiene la lista de títulos generados para la imagen. Para más información, consulte Descripción de imágenes.
// Display image captions and confidence values.
System.out.println("\nCaptions: ");
for (ImageCaption caption : analysis.description().captions()) {
System.out.printf("\'%s\' with confidence %f\n", caption.text(), caption.confidence());
}
Obtención de la categoría de imagen
El código siguiente obtiene la categoría detectada de la imagen. Para más información, consulte Categorización de imágenes.
// Display image category names and confidence values.
System.out.println("\nCategories: ");
for (Category category : analysis.categories()) {
System.out.printf("\'%s\' with confidence %f\n", category.name(), category.score());
}
Obtención de etiquetas de imagen
El código siguiente obtiene el conjunto de las etiquetas detectadas en la imagen. Para más información, consulte Etiquetas de contenido.
// Display image tags and confidence values.
System.out.println("\nTags: ");
for (ImageTag tag : analysis.tags()) {
System.out.printf("\'%s\' with confidence %f\n", tag.name(), tag.confidence());
}
Detección de caras
El código siguiente devuelve las caras detectadas en la imagen con sus coordenadas de rectángulo y selecciona los atributos de cara. Para más información, consulte Detección de caras.
// Display any faces found in the image and their location.
System.out.println("\nFaces: ");
for (FaceDescription face : analysis.faces()) {
System.out.printf("\'%s\' of age %d at location (%d, %d), (%d, %d)\n", face.gender(), face.age(),
face.faceRectangle().left(), face.faceRectangle().top(),
face.faceRectangle().left() + face.faceRectangle().width(),
face.faceRectangle().top() + face.faceRectangle().height());
}
Detección de objetos
El código siguiente devuelve los objetos detectados en la imagen con sus coordenadas. Para más información, consulte Detección de objetos.
// Display any objects found in the image.
System.out.println("\nObjects: ");
for ( DetectedObject object : analysis.objects()) {
System.out.printf("Object \'%s\' detected at location (%d, %d)\n", object.objectProperty(),
object.rectangle().x(), object.rectangle().y());
}
Detección de marcas
El código siguiente devuelve los logotipos de marca detectados en la imagen con sus coordenadas. Para más información, consulte Detección de marcas.
// Display any brands found in the image.
System.out.println("\nBrands: ");
for ( DetectedBrand brand : analysis.brands()) {
System.out.printf("Brand \'%s\' detected at location (%d, %d)\n", brand.name(),
brand.rectangle().x(), brand.rectangle().y());
}
Detección de contenido para adultos, explícito o sangriento
El siguiente código imprime la presencia detectada de contenido para adultos en la imagen. Para más información, consulte Contenido para adultos, subido de tono y sangriento.
// Display whether any adult/racy/gory content was detected and the confidence
// values.
System.out.println("\nAdult: ");
System.out.printf("Is adult content: %b with confidence %f\n", analysis.adult().isAdultContent(),
analysis.adult().adultScore());
System.out.printf("Has racy content: %b with confidence %f\n", analysis.adult().isRacyContent(),
analysis.adult().racyScore());
System.out.printf("Has gory content: %b with confidence %f\n", analysis.adult().isGoryContent(),
analysis.adult().goreScore());
Obtención de la combinación de colores de imagen
El código siguiente imprime los atributos de color detectados en la imagen, como los colores dominantes y el color de énfasis. Para más información, consulte Combinaciones de colores.
// Display the image color scheme.
System.out.println("\nColor scheme: ");
System.out.println("Is black and white: " + analysis.color().isBWImg());
System.out.println("Accent color: " + analysis.color().accentColor());
System.out.println("Dominant background color: " + analysis.color().dominantColorBackground());
System.out.println("Dominant foreground color: " + analysis.color().dominantColorForeground());
System.out.println("Dominant colors: " + String.join(", ", analysis.color().dominantColors()));
Obtención de contenido específico del dominio
Image Analysis puede usar un modelo especializado para realizar análisis adicionales de las imágenes. Para más información, consulte Contenido específico del dominio.
En el código siguiente se analizan los datos sobre las celebridades detectadas en la imagen.
// Display any celebrities detected in the image and their locations.
System.out.println("\nCelebrities: ");
for (Category category : analysis.categories()) {
if (category.detail() != null && category.detail().celebrities() != null) {
for (CelebritiesModel celeb : category.detail().celebrities()) {
System.out.printf("\'%s\' with confidence %f at location (%d, %d), (%d, %d)\n", celeb.name(),
celeb.confidence(), celeb.faceRectangle().left(), celeb.faceRectangle().top(),
celeb.faceRectangle().left() + celeb.faceRectangle().width(),
celeb.faceRectangle().top() + celeb.faceRectangle().height());
}
}
}
En el código siguiente se analizan los datos sobre los paisajes detectados en la imagen.
// Display any landmarks detected in the image and their locations.
System.out.println("\nLandmarks: ");
for (Category category : analysis.categories()) {
if (category.detail() != null && category.detail().landmarks() != null) {
for (LandmarksModel landmark : category.detail().landmarks()) {
System.out.printf("\'%s\' with confidence %f\n", landmark.name(), landmark.confidence());
}
}
}
Obtención del tipo de imagen
El código siguiente imprime información sobre el tipo de imagen (si es una imagen prediseñada o dibujo lineal).
// Display what type of clip art or line drawing the image is.
System.out.println("\nImage type:");
System.out.println("Clip art type: " + analysis.imageType().clipArtType());
System.out.println("Line drawing type: " + analysis.imageType().lineDrawingType());
Cierre del método
Complete el bloque try/catch y cierre el método.
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
Ejecución de la aplicación
Puede compilar la aplicación con:
gradle build
Ejecute la aplicación con el comando gradle run:
gradle run
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción a Cognitive Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Pasos siguientes
En este inicio rápido, ha aprendido a instalar la biblioteca cliente de Image Analysis y a realizar llamadas de análisis de imágenes básicas. A continuación, obtenga más información sobre las características de Analyze API.
- Introducción a Análisis de imágenes
- El código fuente de este ejemplo está disponible en GitHub.
Use la biblioteca cliente de Image Analysis para analizar las etiquetas, la descripción del texto, las caras, el contenido para adultos, etc. de las imágenes.
Documentación de referencia | Código fuente de la biblioteca | Paquete (npm) | Ejemplos
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- La versión actual de Node.js
- Una vez que tenga la suscripción de Azure, cree un recurso de Computer Vision en Azure Portal para obtener la clave y el punto de conexión. Una vez que se implemente, haga clic en Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Computer Vision. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
- Puede usar el plan de tarifa gratis (
F0) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
Instalación
Creación de una aplicación Node.js
En una ventana de la consola (como cmd, PowerShell o Bash), cree un directorio para la aplicación y vaya a él.
mkdir myapp && cd myapp
Ejecute el comando npm init para crear una aplicación de nodo con un archivo package.json.
npm init
Instalación de la biblioteca cliente
Instale los paquetes ms-rest-azure y @azure/cognitiveservices-computervision de NPM:
npm install @azure/cognitiveservices-computervision
Instale también el módulo async:
npm install async
el archivo package.json de la aplicación se actualizará con las dependencias.
Cree un archivo, index.js y ábralo en un editor de texto. Agregue las siguientes instrucciones import.
'use strict';
const async = require('async');
const fs = require('fs');
const https = require('https');
const path = require("path");
const createReadStream = require('fs').createReadStream
const sleep = require('util').promisify(setTimeout);
const ComputerVisionClient = require('@azure/cognitiveservices-computervision').ComputerVisionClient;
const ApiKeyCredentials = require('@azure/ms-rest-js').ApiKeyCredentials;
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
Cree variables para el punto de conexión y la clave de Azure del recurso.
/**
* AUTHENTICATE
* This single client is used for all examples.
*/
const key = 'PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE';
const endpoint = 'PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE';
Importante
Vaya a Azure Portal. Si el recurso de Computer Vision que ha creado en la sección Requisitos previos se ha implementado correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Puede encontrar su clave y punto de conexión en la página de clave y punto de conexión del recurso, en Administración de recursos.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales del SDK de Image Analysis para Node.js.
| Nombre | Descripción |
|---|---|
| ComputerVisionClient | Esta clase es necesaria para todas las funcionalidades de Computer Vision. Cree una instancia de ella con la información de suscripción y úsela para realizar la mayoría de las operaciones con imágenes. |
| VisualFeatureTypes | Esta enumeración define los diferentes tipos de análisis de imágenes que se pueden realizar en una operación de análisis estándar. Debe especificar un conjunto de valores de VisualFeatureTypes en función de sus necesidades. |
Ejemplos de código
En estos fragmentos de código se muestra cómo realizar las siguientes tareas con la biblioteca cliente de Image Analysis para Node.js:
Autenticar el cliente
Cree una instancia de un cliente con la clave y el punto de conexión. Cree un objeto ApiKeyCredentials con su clave y punto de conexión y úselo para crear un objeto ComputerVisionClient.
const computerVisionClient = new ComputerVisionClient(
new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': key } }), endpoint);
Luego, defina una función computerVision y declare una serie asincrónica con la función principal y la función de devolución de llamada. Se agregará el código de inicio rápido a la función principal y se llamará a computerVision en la parte inferior del script. El resto del código de este inicio rápido va incluido dentro de la función computerVision.
function computerVision() {
async.series([
async function () {
},
function () {
return new Promise((resolve) => {
resolve();
})
}
], (err) => {
throw (err);
});
}
computerVision();
Análisis de una imagen
El código de esta sección analiza las imágenes remotas para extraer varias características visuales. Puede realizar estas operaciones como parte del método analyzeImage del objeto cliente, o puede llamarlas mediante métodos individuales. Para más información, consulte la documentación de referencia.
Nota
También puede analizar una imagen local. Consulte los métodos ComputerVisionClient, como describeImageInStream. O bien, consulte el código de ejemplo en GitHub para escenarios relacionados con imágenes locales.
Obtención de la descripción de la imagen
El código siguiente obtiene la lista de títulos generados para la imagen. Consulte Descripción de imágenes para más detalles.
En primer lugar, defina la dirección URL de la imagen que se va a analizar:
const describeURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';
Después, agregue el código siguiente para obtener la descripción de la imagen e imprímala en la consola.
// Analyze URL image
console.log('Analyzing URL image to describe...', describeURL.split('/').pop());
const caption = (await computerVisionClient.describeImage(describeURL)).captions[0];
console.log(`This may be ${caption.text} (${caption.confidence.toFixed(2)} confidence)`);
Obtención de la categoría de imagen
El código siguiente obtiene la categoría detectada de la imagen. Consulte Categorización de imágenes para más detalles.
const categoryURLImage = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';
// Analyze URL image
console.log('Analyzing category in image...', categoryURLImage.split('/').pop());
const categories = (await computerVisionClient.analyzeImage(categoryURLImage)).categories;
console.log(`Categories: ${formatCategories(categories)}`);
Defina la función auxiliar formatCategories:
// Formats the image categories
function formatCategories(categories) {
categories.sort((a, b) => b.score - a.score);
return categories.map(cat => `${cat.name} (${cat.score.toFixed(2)})`).join(', ');
}
Obtención de etiquetas de imagen
El código siguiente obtiene el conjunto de las etiquetas detectadas en la imagen. Consulte Etiquetas de contenido para más detalles.
console.log('-------------------------------------------------');
console.log('DETECT TAGS');
console.log();
// Image of different kind of dog.
const tagsURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';
// Analyze URL image
console.log('Analyzing tags in image...', tagsURL.split('/').pop());
const tags = (await computerVisionClient.analyzeImage(tagsURL, { visualFeatures: ['Tags'] })).tags;
console.log(`Tags: ${formatTags(tags)}`);
Defina la función auxiliar formatTags:
// Format tags for display
function formatTags(tags) {
return tags.map(tag => (`${tag.name} (${tag.confidence.toFixed(2)})`)).join(', ');
}
Detección de objetos
El código siguiente detecta objetos comunes en la imagen y los imprime en la consola. Consulte Detección de objetos para más información.
// Image of a dog
const objectURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-node-sdk-samples/master/Data/image.jpg';
// Analyze a URL image
console.log('Analyzing objects in image...', objectURL.split('/').pop());
const objects = (await computerVisionClient.analyzeImage(objectURL, { visualFeatures: ['Objects'] })).objects;
console.log();
// Print objects bounding box and confidence
if (objects.length) {
console.log(`${objects.length} object${objects.length == 1 ? '' : 's'} found:`);
for (const obj of objects) { console.log(` ${obj.object} (${obj.confidence.toFixed(2)}) at ${formatRectObjects(obj.rectangle)}`); }
} else { console.log('No objects found.'); }
Defina la función auxiliar formatRectObjects para devolver las coordenadas superior, izquierda, inferior y derecha, junto con el ancho y el alto.
// Formats the bounding box
function formatRectObjects(rect) {
return `top=${rect.y}`.padEnd(10) + `left=${rect.x}`.padEnd(10) + `bottom=${rect.y + rect.h}`.padEnd(12)
+ `right=${rect.x + rect.w}`.padEnd(10) + `(${rect.w}x${rect.h})`;
}
Detección de marcas
El código siguiente detecta marcas corporativas y logotipos en la imagen y los imprime en la consola. Consulte Detección de marcas para más información.
const brandURLImage = 'https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/red-shirt-logo.jpg';
// Analyze URL image
console.log('Analyzing brands in image...', brandURLImage.split('/').pop());
const brands = (await computerVisionClient.analyzeImage(brandURLImage, { visualFeatures: ['Brands'] })).brands;
// Print the brands found
if (brands.length) {
console.log(`${brands.length} brand${brands.length != 1 ? 's' : ''} found:`);
for (const brand of brands) {
console.log(` ${brand.name} (${brand.confidence.toFixed(2)} confidence)`);
}
} else { console.log(`No brands found.`); }
Detección de caras
El código siguiente devuelve las caras detectadas en la imagen con sus coordenadas de rectángulo y selecciona los atributos de cara. Consulte Detección de caras para más información.
const facesImageURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg';
// Analyze URL image.
console.log('Analyzing faces in image...', facesImageURL.split('/').pop());
// Get the visual feature for 'Faces' only.
const faces = (await computerVisionClient.analyzeImage(facesImageURL, { visualFeatures: ['Faces'] })).faces;
// Print the bounding box, gender, and age from the faces.
if (faces.length) {
console.log(`${faces.length} face${faces.length == 1 ? '' : 's'} found:`);
for (const face of faces) {
console.log(` Gender: ${face.gender}`.padEnd(20)
+ ` Age: ${face.age}`.padEnd(10) + `at ${formatRectFaces(face.faceRectangle)}`);
}
} else { console.log('No faces found.'); }
Defina la función auxiliar formatRectFaces:
// Formats the bounding box
function formatRectFaces(rect) {
return `top=${rect.top}`.padEnd(10) + `left=${rect.left}`.padEnd(10) + `bottom=${rect.top + rect.height}`.padEnd(12)
+ `right=${rect.left + rect.width}`.padEnd(10) + `(${rect.width}x${rect.height})`;
}
Detección de contenido para adultos, explícito o sangriento
El siguiente código imprime la presencia detectada de contenido para adultos en la imagen. Para más información, consulte Contenido para adultos, subido de tono y sangriento.
Defina la dirección URL de la imagen que se va a usar:
// The URL image and local images are not racy/adult.
// Try your own racy/adult images for a more effective result.
const adultURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';
Después, agregue el código siguiente para detectar el contenido para adultos e imprima los resultados en la consola.
// Function to confirm racy or not
const isIt = flag => flag ? 'is' : "isn't";
// Analyze URL image
console.log('Analyzing image for racy/adult content...', adultURLImage.split('/').pop());
const adult = (await computerVisionClient.analyzeImage(adultURLImage, {
visualFeatures: ['Adult']
})).adult;
console.log(`This probably ${isIt(adult.isAdultContent)} adult content (${adult.adultScore.toFixed(4)} score)`);
console.log(`This probably ${isIt(adult.isRacyContent)} racy content (${adult.racyScore.toFixed(4)} score)`);
Obtención de la combinación de colores de imagen
El código siguiente imprime los atributos de color detectados en la imagen, como los colores dominantes y el color de énfasis. Consulte Combinaciones de colores para más detalles.
const colorURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';
// Analyze URL image
console.log('Analyzing image for color scheme...', colorURLImage.split('/').pop());
console.log();
const color = (await computerVisionClient.analyzeImage(colorURLImage, { visualFeatures: ['Color'] })).color;
printColorScheme(color);
Defina la función auxiliar printColorScheme para imprimir los detalles de la combinación de color en la consola.
// Print a detected color scheme
function printColorScheme(colors) {
console.log(`Image is in ${colors.isBwImg ? 'black and white' : 'color'}`);
console.log(`Dominant colors: ${colors.dominantColors.join(', ')}`);
console.log(`Dominant foreground color: ${colors.dominantColorForeground}`);
console.log(`Dominant background color: ${colors.dominantColorBackground}`);
console.log(`Suggested accent color: #${colors.accentColor}`);
}
Obtención de contenido específico del dominio
Image Analysis puede usar un modelo especializado para realizar análisis adicionales de las imágenes. Consulte Contenido específico del dominio para más detalles.
En primer lugar, defina la dirección URL de la imagen que se va a analizar:
const domainURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/landmark.jpg';
En el código siguiente se analizan los datos sobre los paisajes detectados en la imagen.
// Analyze URL image
console.log('Analyzing image for landmarks...', domainURLImage.split('/').pop());
const domain = (await computerVisionClient.analyzeImageByDomain('landmarks', domainURLImage)).result.landmarks;
// Prints domain-specific, recognized objects
if (domain.length) {
console.log(`${domain.length} ${domain.length == 1 ? 'landmark' : 'landmarks'} found:`);
for (const obj of domain) {
console.log(` ${obj.name}`.padEnd(20) + `(${obj.confidence.toFixed(2)} confidence)`.padEnd(20) + `${formatRectDomain(obj.faceRectangle)}`);
}
} else {
console.log('No landmarks found.');
}
Defina la función auxiliar formatRectDomain para analizar los datos de ubicación de los puntos de referencia detectados.
// Formats bounding box
function formatRectDomain(rect) {
if (!rect) return '';
return `top=${rect.top}`.padEnd(10) + `left=${rect.left}`.padEnd(10) + `bottom=${rect.top + rect.height}`.padEnd(12) +
`right=${rect.left + rect.width}`.padEnd(10) + `(${rect.width}x${rect.height})`;
}
Obtención del tipo de imagen
El código siguiente imprime información sobre el tipo de imagen (si es una imagen prediseñada o dibujo lineal).
const typeURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-python-sdk-samples/master/samples/vision/images/make_things_happen.jpg';
// Analyze URL image
console.log('Analyzing type in image...', typeURLImage.split('/').pop());
const types = (await computerVisionClient.analyzeImage(typeURLImage, { visualFeatures: ['ImageType'] })).imageType;
console.log(`Image appears to be ${describeType(types)}`);
Defina la función auxiliar describeType:
function describeType(imageType) {
if (imageType.clipArtType && imageType.clipArtType > imageType.lineDrawingType) return 'clip art';
if (imageType.lineDrawingType && imageType.clipArtType < imageType.lineDrawingType) return 'a line drawing';
return 'a photograph';
}
Ejecución de la aplicación
Ejecute la aplicación con el comando node en el archivo de inicio rápido.
node index.js
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción a Cognitive Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Pasos siguientes
En este inicio rápido, ha aprendido a instalar la biblioteca cliente de Image Analysis y a realizar llamadas de análisis de imágenes básicas. A continuación, obtenga más información sobre las características de Analyze API.
- Introducción a Análisis de imágenes
- El código fuente de este ejemplo está disponible en GitHub.
Use la biblioteca cliente de Image Analysis para analizar las etiquetas, la descripción del texto, las caras, el contenido para adultos, etc. de las imágenes.
Documentación de referencia | Código fuente de la biblioteca | Paquete
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- La versión más reciente de Go.
- Una vez que tenga la suscripción de Azure, cree un recurso de Computer Vision en Azure Portal para obtener la clave y el punto de conexión. Una vez que se implemente, haga clic en Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Computer Vision. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
- Puede usar el plan de tarifa gratis (
F0) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
Instalación
Creación de un directorio del proyecto de Go
En una ventana de consola (cmd, PowerShell, Terminal, Bash), cree una nueva área de trabajo para el proyecto de Go llamado my-app y vaya hasta ella.
mkdir -p my-app/{src, bin, pkg}
cd my-app
El área de trabajo contendrá tres carpetas:
- src: este directorio contendrá código fuente y paquetes. Todos los paquetes instalados con el comando
go getse encontrarán en este directorio. - pkg: este directorio contendrá objetos de paquete de Go compilados. Todos estos archivos tienen la extensión
.a. - bin: este directorio contendrá los archivos ejecutables binarios que se crean al ejecutar
go install.
Sugerencia
Para más información sobre la estructura de un área de trabajo de Go, consulte la documentación del lenguaje Go. En esta guía se incluye información para establecer $GOPATH y $GOROOT.
Instalación de la biblioteca cliente para Go
Instale a continuación la biblioteca cliente para Go:
go get -u https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision
O, si usa dep, dentro de su repositorio ejecute:
dep ensure -add https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision
Creación de una aplicación de Go
A continuación, cree un archivo en el directorio src denominado sample-app.go:
cd src
touch sample-app.go
Abra sample-app.go en el entorno de desarrollo integrado o editor de texto que prefiera. A continuación, agregue el nombre del paquete e importe las siguientes bibliotecas:
package main
import (
"context"
"encoding/json"
"fmt"
"github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v2.0/computervision"
"github.com/Azure/go-autorest/autorest"
"io"
"log"
"os"
"strings"
"time"
)
Declare también un contexto en la raíz del script. Necesitará este objeto para ejecutar la mayoría de las llamadas a funciones de Image Analysis:
// Declare global so don't have to pass it to all of the tasks.
var computerVisionContext context.Context
A continuación, empezará a agregar código para llevar a cabo distintas operaciones de Computer Vision.
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales de Image Analysis SDK para Go.
| Nombre | Descripción |
|---|---|
| BaseClient | Esta clase es necesaria para todas las funciones de Computer Vision, como el análisis de imágenes y la lectura de texto. Cree una instancia de ella con la información de suscripción y úsela para realizar la mayoría de las operaciones con imágenes. |
| ImageAnalysis | Este tipo contiene los resultados de una llamada de función AnalyzeImage. Hay tipos similares para cada una de las funciones específicas de categoría. |
| VisualFeatureTypes | Este tipo define las diferentes clases de análisis de imágenes que se pueden realizar en una operación de análisis estándar. Debe especificar un conjunto de valores de VisualFeatureTypes en función de sus necesidades. |
Ejemplos de código
En estos fragmentos de código se muestra cómo realizar las siguientes tareas con la biblioteca cliente de análisis de imágenes para Go:
Autenticar el cliente
Nota
En este paso se da por supuesto que ha creado variables de entorno para la clave de Computer Vision y el punto de conexión, denominadas COMPUTER_VISION_SUBSCRIPTION_KEY y COMPUTER_VISION_ENDPOINT respectivamente.
Cree una función main y agréguele el código siguiente para crear una instancia de un cliente con su punto de conexión y clave.
/*
* Configure the Computer Vision client
*/
computerVisionClient := computervision.New(endpointURL);
computerVisionClient.Authorizer = autorest.NewCognitiveServicesAuthorizer(computerVisionKey)
computerVisionContext = context.Background()
/*
* END - Configure the Computer Vision client
*/
Análisis de una imagen
El código siguiente utiliza el objeto de cliente para analizar una imagen remota e imprimir los resultados en la consola. Puede obtener una descripción de texto, categorización, lista de etiquetas, objetos detectados, marcas detectadas, caras detectadas, marcas de contenido para adultos, colores principales y tipo de imagen.
Configuración de una imagen de prueba
Guarde primero una referencia a la dirección URL de la imagen que desee analizar. Colóquela dentro de la función main.
landmarkImageURL := "https://github.com/Azure-Samples/cognitive-services-sample-data-files/raw/master/ComputerVision/Images/landmark.jpg"
Sugerencia
También puede analizar una imagen local. Consulte los métodos BaseClient, como AnalyzeImageInStream. O bien, consulte el código de ejemplo en GitHub para escenarios relacionados con imágenes locales.
Especificación de características visuales
Las siguientes llamadas de función extraen diferentes características visuales de la imagen de ejemplo. Definirá estas funciones en las secciones siguientes.
// Analyze features of an image, remote
DescribeRemoteImage(computerVisionClient, landmarkImageURL)
CategorizeRemoteImage(computerVisionClient, landmarkImageURL)
TagRemoteImage(computerVisionClient, landmarkImageURL)
DetectFacesRemoteImage(computerVisionClient, facesImageURL)
DetectObjectsRemoteImage(computerVisionClient, objectsImageURL)
DetectBrandsRemoteImage(computerVisionClient, brandsImageURL)
DetectAdultOrRacyContentRemoteImage(computerVisionClient, adultRacyImageURL)
DetectColorSchemeRemoteImage(computerVisionClient, brandsImageURL)
DetectDomainSpecificContentRemoteImage(computerVisionClient, landmarkImageURL)
DetectImageTypesRemoteImage(computerVisionClient, detectTypeImageURL)
GenerateThumbnailRemoteImage(computerVisionClient, adultRacyImageURL)
Obtención de la descripción de la imagen
La siguiente función obtiene la lista de títulos generados para la imagen. Para más información acerca de la descripción de la imagen, consulte Descripción de imágenes.
func DescribeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DESCRIBE IMAGE - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
maxNumberDescriptionCandidates := new(int32)
*maxNumberDescriptionCandidates = 1
remoteImageDescription, err := client.DescribeImage(
computerVisionContext,
remoteImage,
maxNumberDescriptionCandidates,
"") // language
if err != nil { log.Fatal(err) }
fmt.Println("Captions from remote image: ")
if len(*remoteImageDescription.Captions) == 0 {
fmt.Println("No captions detected.")
} else {
for _, caption := range *remoteImageDescription.Captions {
fmt.Printf("'%v' with confidence %.2f%%\n", *caption.Text, *caption.Confidence * 100)
}
}
fmt.Println()
}
Obtención de la categoría de imagen
La función siguiente obtiene la categoría detectada de la imagen. Para más información, consulte Categorización de imágenes.
func CategorizeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("CATEGORIZE IMAGE - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesCategories}
imageAnalysis, err := client.AnalyzeImage(
computerVisionContext,
remoteImage,
features,
[]computervision.Details{},
"")
if err != nil { log.Fatal(err) }
fmt.Println("Categories from remote image: ")
if len(*imageAnalysis.Categories) == 0 {
fmt.Println("No categories detected.")
} else {
for _, category := range *imageAnalysis.Categories {
fmt.Printf("'%v' with confidence %.2f%%\n", *category.Name, *category.Score * 100)
}
}
fmt.Println()
}
Obtención de etiquetas de imagen
La función siguiente obtiene el conjunto de las etiquetas detectadas en la imagen. Para más información, consulte Etiquetas de contenido.
func TagRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("TAG IMAGE - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
remoteImageTags, err := client.TagImage(
computerVisionContext,
remoteImage,
"")
if err != nil { log.Fatal(err) }
fmt.Println("Tags in the remote image: ")
if len(*remoteImageTags.Tags) == 0 {
fmt.Println("No tags detected.")
} else {
for _, tag := range *remoteImageTags.Tags {
fmt.Printf("'%v' with confidence %.2f%%\n", *tag.Name, *tag.Confidence * 100)
}
}
fmt.Println()
}
Detección de objetos
La función siguiente detecta objetos comunes en la imagen y los imprime en la consola. Para más información, consulte Detección de objetos.
func DetectObjectsRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT OBJECTS - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
imageAnalysis, err := client.DetectObjects(
computerVisionContext,
remoteImage,
)
if err != nil { log.Fatal(err) }
fmt.Println("Detecting objects in remote image: ")
if len(*imageAnalysis.Objects) == 0 {
fmt.Println("No objects detected.")
} else {
// Print the objects found with confidence level and bounding box locations.
for _, object := range *imageAnalysis.Objects {
fmt.Printf("'%v' with confidence %.2f%% at location (%v, %v), (%v, %v)\n",
*object.Object, *object.Confidence * 100,
*object.Rectangle.X, *object.Rectangle.X + *object.Rectangle.W,
*object.Rectangle.Y, *object.Rectangle.Y + *object.Rectangle.H)
}
}
fmt.Println()
}
Detección de marcas
El código siguiente detecta marcas corporativas y logotipos en la imagen y los imprime en la consola. Para más información, consulte Detección de marcas.
En primer lugar, declare una referencia a una nueva imagen dentro de la función main.
brandsImageURL := "https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/gray-shirt-logo.jpg"
El código siguiente define la función de detección de marca.
func DetectBrandsRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT BRANDS - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
// Define the kinds of features you want returned.
features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesBrands}
imageAnalysis, err := client.AnalyzeImage(
computerVisionContext,
remoteImage,
features,
[]computervision.Details{},
"en")
if err != nil { log.Fatal(err) }
fmt.Println("Detecting brands in remote image: ")
if len(*imageAnalysis.Brands) == 0 {
fmt.Println("No brands detected.")
} else {
// Get bounding box around the brand and confidence level it's correctly identified.
for _, brand := range *imageAnalysis.Brands {
fmt.Printf("'%v' with confidence %.2f%% at location (%v, %v), (%v, %v)\n",
*brand.Name, *brand.Confidence * 100,
*brand.Rectangle.X, *brand.Rectangle.X + *brand.Rectangle.W,
*brand.Rectangle.Y, *brand.Rectangle.Y + *brand.Rectangle.H)
}
}
fmt.Println()
}
Detección de caras
La función siguiente devuelve las caras detectadas en la imagen con sus coordenadas de rectángulo y selecciona determinados atributos de cara. Para más información, consulte Detección de caras.
func DetectFacesRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT FACES - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
// Define the features you want returned with the API call.
features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesFaces}
imageAnalysis, err := client.AnalyzeImage(
computerVisionContext,
remoteImage,
features,
[]computervision.Details{},
"")
if err != nil { log.Fatal(err) }
fmt.Println("Detecting faces in a remote image ...")
if len(*imageAnalysis.Faces) == 0 {
fmt.Println("No faces detected.")
} else {
// Print the bounding box locations of the found faces.
for _, face := range *imageAnalysis.Faces {
fmt.Printf("'%v' of age %v at location (%v, %v), (%v, %v)\n",
face.Gender, *face.Age,
*face.FaceRectangle.Left, *face.FaceRectangle.Top,
*face.FaceRectangle.Left + *face.FaceRectangle.Width,
*face.FaceRectangle.Top + *face.FaceRectangle.Height)
}
}
fmt.Println()
}
Detección de contenido para adultos, explícito o sangriento
La siguiente función imprime la presencia detectada de contenido para adultos en la imagen. Para más información, consulte Contenido para adultos, subido de tono y sangriento.
func DetectAdultOrRacyContentRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT ADULT OR RACY CONTENT - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
// Define the features you want returned from the API call.
features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesAdult}
imageAnalysis, err := client.AnalyzeImage(
computerVisionContext,
remoteImage,
features,
[]computervision.Details{},
"") // language, English is default
if err != nil { log.Fatal(err) }
// Print whether or not there is questionable content.
// Confidence levels: low means content is OK, high means it's not.
fmt.Println("Analyzing remote image for adult or racy content: ");
fmt.Printf("Is adult content: %v with confidence %.2f%%\n", *imageAnalysis.Adult.IsAdultContent, *imageAnalysis.Adult.AdultScore * 100)
fmt.Printf("Has racy content: %v with confidence %.2f%%\n", *imageAnalysis.Adult.IsRacyContent, *imageAnalysis.Adult.RacyScore * 100)
fmt.Println()
}
Obtención de la combinación de colores de imagen
La función siguiente imprime los atributos de color detectados en la imagen, como los colores dominantes y el color de énfasis. Para más información, consulte Combinaciones de colores.
func DetectColorSchemeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT COLOR SCHEME - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
// Define the features you'd like returned with the result.
features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesColor}
imageAnalysis, err := client.AnalyzeImage(
computerVisionContext,
remoteImage,
features,
[]computervision.Details{},
"") // language, English is default
if err != nil { log.Fatal(err) }
fmt.Println("Color scheme of the remote image: ");
fmt.Printf("Is black and white: %v\n", *imageAnalysis.Color.IsBWImg)
fmt.Printf("Accent color: 0x%v\n", *imageAnalysis.Color.AccentColor)
fmt.Printf("Dominant background color: %v\n", *imageAnalysis.Color.DominantColorBackground)
fmt.Printf("Dominant foreground color: %v\n", *imageAnalysis.Color.DominantColorForeground)
fmt.Printf("Dominant colors: %v\n", strings.Join(*imageAnalysis.Color.DominantColors, ", "))
fmt.Println()
}
Obtención de contenido específico del dominio
Image Analysis puede usar modelos especializados para realizar análisis adicionales de las imágenes. Para más información, consulte Contenido específico del dominio.
En el código siguiente se analizan los datos sobre las celebridades detectadas en la imagen.
func DetectDomainSpecificContentRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT DOMAIN-SPECIFIC CONTENT - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
fmt.Println("Detecting domain-specific content in the local image ...")
// Check if there are any celebrities in the image.
celebrities, err := client.AnalyzeImageByDomain(
computerVisionContext,
"celebrities",
remoteImage,
"") // language, English is default
if err != nil { log.Fatal(err) }
fmt.Println("\nCelebrities: ")
// Marshal the output from AnalyzeImageByDomain into JSON.
data, err := json.MarshalIndent(celebrities.Result, "", "\t")
// Define structs for which to unmarshal the JSON.
type Celebrities struct {
Name string `json:"name"`
}
type CelebrityResult struct {
Celebrities []Celebrities `json:"celebrities"`
}
var celebrityResult CelebrityResult
// Unmarshal the data.
err = json.Unmarshal(data, &celebrityResult)
if err != nil { log.Fatal(err) }
// Check if any celebrities detected.
if len(celebrityResult.Celebrities) == 0 {
fmt.Println("No celebrities detected.")
} else {
for _, celebrity := range celebrityResult.Celebrities {
fmt.Printf("name: %v\n", celebrity.Name)
}
}
En el código siguiente se analizan los datos sobre los paisajes detectados en la imagen.
fmt.Println("\nLandmarks: ")
// Check if there are any landmarks in the image.
landmarks, err := client.AnalyzeImageByDomain(
computerVisionContext,
"landmarks",
remoteImage,
"")
if err != nil { log.Fatal(err) }
// Marshal the output from AnalyzeImageByDomain into JSON.
data, err = json.MarshalIndent(landmarks.Result, "", "\t")
// Define structs for which to unmarshal the JSON.
type Landmarks struct {
Name string `json:"name"`
}
type LandmarkResult struct {
Landmarks []Landmarks `json:"landmarks"`
}
var landmarkResult LandmarkResult
// Unmarshal the data.
err = json.Unmarshal(data, &landmarkResult)
if err != nil { log.Fatal(err) }
// Check if any celebrities detected.
if len(landmarkResult.Landmarks) == 0 {
fmt.Println("No landmarks detected.")
} else {
for _, landmark := range landmarkResult.Landmarks {
fmt.Printf("name: %v\n", landmark.Name)
}
}
fmt.Println()
}
Obtención del tipo de imagen
La función siguiente imprime información sobre el tipo de imagen (si es una imagen prediseñada o dibujo lineal).
func DetectImageTypesRemoteImage(client computervision.BaseClient, remoteImageURL string) {
fmt.Println("-----------------------------------------")
fmt.Println("DETECT IMAGE TYPES - remote")
fmt.Println()
var remoteImage computervision.ImageURL
remoteImage.URL = &remoteImageURL
features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesImageType}
imageAnalysis, err := client.AnalyzeImage(
computerVisionContext,
remoteImage,
features,
[]computervision.Details{},
"")
if err != nil { log.Fatal(err) }
fmt.Println("Image type of remote image:")
fmt.Println("\nClip art type: ")
switch *imageAnalysis.ImageType.ClipArtType {
case 0:
fmt.Println("Image is not clip art.")
case 1:
fmt.Println("Image is ambiguously clip art.")
case 2:
fmt.Println("Image is normal clip art.")
case 3:
fmt.Println("Image is good clip art.")
}
fmt.Println("\nLine drawing type: ")
if *imageAnalysis.ImageType.LineDrawingType == 1 {
fmt.Println("Image is a line drawing.")
} else {
fmt.Println("Image is not a line drawing.")
}
fmt.Println()
}
Ejecución de la aplicación
Ejecute la aplicación desde el directorio de la aplicación con el comando go run.
go run sample-app.go
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción a Cognitive Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.
Pasos siguientes
En este inicio rápido, ha aprendido a instalar la biblioteca cliente de Image Analysis y a realizar llamadas de análisis de imágenes básicas. A continuación, obtenga más información sobre las características de Analyze API.
- Introducción a Análisis de imágenes
- El código fuente de este ejemplo está disponible en GitHub.
Use la API REST Analysis para:
- Analizar una imagen para ver las etiquetas, la descripción de texto, las caras, el contenido para adultos, etc.
- Generar una miniatura con recorte inteligente
Nota
Este inicio rápido usa comandos de cURL para llamar a la API REST. También puede llamar a la API REST mediante un lenguaje de programación. Consulte los ejemplos de GitHub para obtener ejemplos en C#, Python, Java, JavaScript y Go.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- Una vez que tenga la suscripción de Azure, cree un recurso de Computer Vision en Azure Portal para obtener la clave y el punto de conexión. Una vez que se implemente, haga clic en Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación al servicio Computer Vision. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
- Puede usar el plan de tarifa gratis (
F0) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
- cURL instalado
Análisis de una imagen
Para analizar una imagen en varias características visuales, realice los pasos siguientes:
- Copie el comando siguiente en un editor de texto.
- Realice los siguientes cambios en el comando donde sea necesario:
- Reemplace el valor de
<subscriptionKey>por la clave de suscripción. - Reemplace la primera parte de la dirección URL de la solicitud (
westcentralus) por el texto de la dirección URL de su punto de conexión.Nota
Los nuevos recursos creados después del 1 de julio de 2019 usarán nombres de subdominio personalizados. Para más información y para obtener una lista completa de los puntos de conexión regionales, consulte Nombres de subdominios personalizados para Cognitive Services.
- Si lo desea, cambie la dirección URL de la imagen del cuerpo de la solicitud (
http://upload.wikimedia.org/wikipedia/commons/3/3c/Shaki_waterfall.jpg\) por la dirección URL de una imagen diferente que desee analizar.
- Reemplace el valor de
- Abra una ventana de símbolo del sistema.
- Pegue el comando del editor de texto en la ventana del símbolo del sistema y después ejecute el comando.
curl -H "Ocp-Apim-Subscription-Key: <subscriptionKey>" -H "Content-Type: application/json" "https://westcentralus.api.cognitive.microsoft.com/vision/v3.2/analyze?visualFeatures=Categories,Description&details=Landmarks" -d "{\"url\":\"http://upload.wikimedia.org/wikipedia/commons/3/3c/Shaki_waterfall.jpg\"}"
Examen de la respuesta
Se devuelve una respuesta correcta en JSON. La aplicación de ejemplo analiza y muestra una respuesta correcta en la ventana del símbolo del sistema, parecida a la del ejemplo siguiente:
{
"categories": [
{
"name": "outdoor_water",
"score": 0.9921875,
"detail": {
"landmarks": []
}
}
],
"description": {
"tags": [
"nature",
"water",
"waterfall",
"outdoor",
"rock",
"mountain",
"rocky",
"grass",
"hill",
"covered",
"hillside",
"standing",
"side",
"group",
"walking",
"white",
"man",
"large",
"snow",
"grazing",
"forest",
"slope",
"herd",
"river",
"giraffe",
"field"
],
"captions": [
{
"text": "a large waterfall over a rocky cliff",
"confidence": 0.916458423253597
}
]
},
"requestId": "b6e33879-abb2-43a0-a96e-02cb5ae0b795",
"metadata": {
"height": 959,
"width": 1280,
"format": "Jpeg"
}
}
Generar una miniatura
Puede usar Image Analysis para generar una miniatura con recorte inteligente. Debe especificar el alto y el ancho deseados, con una relación de aspecto que puede ser distinta a la de la imagen de entrada. Image Analysis usa el recorte inteligente para identificar el área de interés de forma inteligente y generar coordenadas de recorte alrededor de esa región.
Para crear y ejecutar el ejemplo, siga estos pasos:
Copie el comando siguiente en un editor de texto.
Realice los siguientes cambios en el comando donde sea necesario:
- Reemplace el valor de
<subscriptionKey>por la clave de suscripción. - Reemplace el valor de
<thumbnailFile>con la ruta de acceso y el nombre del archivo donde se va a guardar la imagen en miniatura devuelta. - Reemplace la primera parte de la dirección URL de la solicitud (
westcentralus) por el texto de la dirección URL de su punto de conexión.Nota
Los nuevos recursos creados después del 1 de julio de 2019 usarán nombres de subdominio personalizados. Para más información y para obtener una lista completa de los puntos de conexión regionales, consulte Nombres de subdominios personalizados para Cognitive Services.
- Si lo desea, cambie la dirección URL de la imagen del cuerpo de la solicitud (
https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Shorkie_Poo_Puppy.jpg/1280px-Shorkie_Poo_Puppy.jpg\) por la dirección URL de una imagen diferente de la que desea generar una miniatura.
- Reemplace el valor de
Abra una ventana de símbolo del sistema.
Pegue el comando del editor de texto en la ventana del símbolo del sistema.
Presione Entrar para ejecutar el programa.
curl -H "Ocp-Apim-Subscription-Key: <subscriptionKey>" -o <thumbnailFile> -H "Content-Type: application/json" "https://westus.api.cognitive.microsoft.com/vision/v3.2/generateThumbnail?width=100&height=100&smartCropping=true" -d "{\"url\":\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Shorkie_Poo_Puppy.jpg/1280px-Shorkie_Poo_Puppy.jpg\"}"
Examen de la respuesta
Una respuesta correcta escribe la imagen en miniatura en el archivo especificado en <thumbnailFile>. Si se produce un error en la solicitud, la respuesta contiene un código de error y un mensaje para ayudar a determinar qué salió mal. Si la solicitud parece realizarse correctamente pero la miniatura creada no es un archivo de imagen válido, es posible que su clave de suscripción no sea válida.
Pasos siguientes
En este inicio rápido, ha aprendido a realizar llamadas de análisis de imágenes básicas mediante la API REST. A continuación, obtenga más información sobre las características de Analyze API.