Aufrufen der Analyse-API für Bildanalyse 4.0
In diesem Artikel wird veranschaulicht, wie Sie die Bildanalyse 4.0-API aufrufen, um Informationen zu den visuellen Features eines Bilds zurückzugeben. Außerdem wird gezeigt, wie Sie die zurückgegebenen Informationen parsen.
Voraussetzungen
In diesem Leitfaden wird davon ausgegangen, dass Sie die auf der Schnellstartseite beschriebenen Schritte ausgeführt haben. Das bedeutet:
- Sie haben eine Ressource für maschinelles Sehen erstellt und einen Schlüssel sowie eine Endpunkt-URL erhalten.
- Sie haben das entsprechende SDK-Paket installiert, und Sie führen eine Anwendung aus dem Schnellstart aus. Sie können diese Schnellstartanwendung anhand der hier gezeigten Codebeispiele ändern.
Erstellen und Authentifizieren des Clients
Um sich beim Bildanalysedienst zu authentifizieren, benötigen Sie einen Schlüssel für maschinelles Sehen und eine Endpunkt-URL. In diesem Leitfaden wird davon ausgegangen, dass Sie die Umgebungsvariablen VISION_KEY
und VISION_ENDPOINT
mit Ihrem Schlüssel und Endpunkt definiert haben.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Erstellen Sie zunächst ein ImageAnalysisClient-Objekt. Beispiel:
string endpoint = Environment.GetEnvironmentVariable("VISION_ENDPOINT");
string key = Environment.GetEnvironmentVariable("VISION_KEY");
// Create an Image Analysis client.
ImageAnalysisClient client = new ImageAnalysisClient(
new Uri(endpoint),
new AzureKeyCredential(key));
Wählen des zu analysierenden Bilds
Sie können ein Bild auswählen, indem Sie eine öffentlich zugängliche Bild-URL angeben oder Binärdaten an das SDK übergeben. Informationen zu unterstützten Bildformaten finden Sie unter Bildanforderungen.
Bild-URL
Erstellen Sie ein URI-Objekt für das Bild, das Sie analysieren möchten.
Uri imageURL = new Uri("https://aka.ms/azsdk/image-analysis/sample.jpg");
Bildpuffer
Alternativ können Sie die Bilddaten über ein BinaryData-Objekt an das SDK übergeben. Lesen Sie beispielsweise aus einer lokalen Bilddatei, die Sie analysieren möchten.
using FileStream stream = new FileStream("sample.jpg", FileMode.Open);
BinaryData imageData = BinaryData.FromStream(stream);
Auswählen visueller Merkmale
Die Analyse 4.0-API gibt Ihnen Zugriff auf alle Bildanalysefunktionen des Diensts. Wählen Sie ausgehend von Ihrem eigenen Anwendungsfall aus, welche Vorgänge ausgeführt werden sollen. Eine Beschreibung der einzelnen Features finden Sie in der Übersicht. Im Beispiel in diesem Abschnitt werden alle verfügbaren Features für Visuals hinzugefügt, aber für die praktische Nutzung benötigen Sie wahrscheinlich weniger.
Wichtig
Die visuellen Features Captions
und DenseCaptions
werden nur in bestimmten Azure-Regionen unterstützt: Siehe Regionsverfügbarkeit
VisualFeatures visualFeatures =
VisualFeatures.Caption |
VisualFeatures.DenseCaptions |
VisualFeatures.Objects |
VisualFeatures.Read |
VisualFeatures.Tags |
VisualFeatures.People |
VisualFeatures.SmartCrops;
Auswählen von Analyseoptionen
Verwenden Sie ein ImageAnalysisOptions-Objekt, um verschiedene Optionen für den Bildanalyse-API-Aufruf anzugeben.
- Sprache: Sie können die Sprache der zurückgegebenen Daten angeben. Die Sprache ist optional, wobei die Standardeinstellung Englisch ist. Unter Sprachunterstützung finden Sie eine Liste der unterstützten Sprachcodes und welche visuellen Features für jede Sprache unterstützt werden.
- Geschlechtsneutrale Beschriftungen: Wenn Sie Beschriftungen oder dichte Beschriftungen extrahieren (mithilfe von VisualFeatures.Caption oder VisualFeatures.DenseCaptions), können Sie geschlechtsneutrale Beschriftungen anfordern. Geschlechtsneutrale Beschriftungen sind optional, wobei geschlechtsspezifische Beschriftungen die Standardeinstellung sind. Wenn Sie beispielsweise auf Englisch geschlechtsneutrale Beschriftungen auswählen, werden Begriffe wie women oder man durch person und boy oder girl durch child ersetzt.
- Seitenverhältnis für Zuschnitt: Ein Seitenverhältnis wird berechnet, indem die Zielzuschnittbreite durch die Höhe dividiert wird. Die unterstützten Werte liegen zwischen (einschließlich) 0,75 und 1,8. Das Festlegen dieser Eigenschaft ist nur relevant, wenn VisualFeatures.SmartCrops als Teil der visuellen Featureliste ausgewählt wurde. Wenn Sie VisualFeatures.SmartCrops auswählen, aber keine Seitenverhältnisse angeben, gibt der Dienst einen Zuschnittvorschlag mit einem Seitenverhältnis zurück, das ihm geeignet erscheint. In diesem Fall liegt das Seitenverhältnis zwischen (einschließlich) 0,5 und 2,0.
ImageAnalysisOptions options = new ImageAnalysisOptions {
GenderNeutralCaption = true,
Language = "en",
SmartCropsAspectRatios = new float[] { 0.9F, 1.33F }};
Aufrufen der Bildanalyse-API
In diesem Abschnitt erfahren Sie, wie Sie einen Analyseaufruf für den Dienst ausführen.
Rufen Sie die Analyze-Methode für das ImageAnalysisClient-Objekt auf, wie hier gezeigt. Der Aufruf ist synchron und blockiert die Ausführung, bis der Dienst die Ergebnisse zurückgibt oder ein Fehler auftritt. Alternativ können Sie die nicht blockierende AnalyzeAsync-Methode aufrufen.
Verwenden Sie die in den obigen Abschnitten erstellten Eingabeobjekte. Um aus einem Bildpuffer anstelle einer URL zu analysieren, ersetzen Sie imageURL
im Methodenaufruf durch die Variable imageData
.
ImageAnalysisResult result = client.Analyze(
imageURL,
visualFeatures,
options);
Abrufen von Ergebnissen aus dem Dienst
Der folgende Code zeigt, wie Sie die Ergebnisse der verschiedenen Analysevorgänge analysieren.
Console.WriteLine("Image analysis results:");
// Print caption results to the console
Console.WriteLine(" Caption:");
Console.WriteLine($" '{result.Caption.Text}', Confidence {result.Caption.Confidence:F4}");
// Print dense caption results to the console
Console.WriteLine(" Dense Captions:");
foreach (DenseCaption denseCaption in result.DenseCaptions.Values)
{
Console.WriteLine($" '{denseCaption.Text}', Confidence {denseCaption.Confidence:F4}, Bounding box {denseCaption.BoundingBox}");
}
// Print object detection results to the console
Console.WriteLine(" Objects:");
foreach (DetectedObject detectedObject in result.Objects.Values)
{
Console.WriteLine($" '{detectedObject.Tags.First().Name}', Bounding box {detectedObject.BoundingBox.ToString()}");
}
// Print text (OCR) analysis results to the console
Console.WriteLine(" Read:");
foreach (DetectedTextBlock block in result.Read.Blocks)
foreach (DetectedTextLine line in block.Lines)
{
Console.WriteLine($" Line: '{line.Text}', Bounding Polygon: [{string.Join(" ", line.BoundingPolygon)}]");
foreach (DetectedTextWord word in line.Words)
{
Console.WriteLine($" Word: '{word.Text}', Confidence {word.Confidence.ToString("#.####")}, Bounding Polygon: [{string.Join(" ", word.BoundingPolygon)}]");
}
}
// Print tags results to the console
Console.WriteLine(" Tags:");
foreach (DetectedTag tag in result.Tags.Values)
{
Console.WriteLine($" '{tag.Name}', Confidence {tag.Confidence:F4}");
}
// Print people detection results to the console
Console.WriteLine(" People:");
foreach (DetectedPerson person in result.People.Values)
{
Console.WriteLine($" Person: Bounding box {person.BoundingBox.ToString()}, Confidence {person.Confidence:F4}");
}
// Print smart-crops analysis results to the console
Console.WriteLine(" SmartCrops:");
foreach (CropRegion cropRegion in result.SmartCrops.Values)
{
Console.WriteLine($" Aspect ratio: {cropRegion.AspectRatio}, Bounding box: {cropRegion.BoundingBox}");
}
// Print metadata
Console.WriteLine(" Metadata:");
Console.WriteLine($" Model: {result.ModelVersion}");
Console.WriteLine($" Image width: {result.Metadata.Width}");
Console.WriteLine($" Image hight: {result.Metadata.Height}");
Problembehandlung
Ausnahmebehandlung
Wenn Sie mit der Bildanalyse mithilfe des .NET SDK interagieren, führt jede Antwort des Diensts, die keinen (Erfolgs-)Statuscode 200
aufweist, zu einer Ausnahme, die ausgelöst wird. Wenn Sie beispielsweise versuchen, ein Bild zu analysieren, auf das aufgrund einer fehlerhaften URL nicht zugegriffen werden kann, wird ein Statuscode 400
zurückgegeben, der eine ungültige Anforderung angibt, und eine entsprechende Ausnahme wird ausgelöst.
Im folgenden Codeschnipsel werden Fehler ordnungsgemäß behandelt, indem die Ausnahme abgefangen wird und zusätzliche Fehlerinformationen angezeigt werden.
var imageUrl = new Uri("https://some-host-name.com/non-existing-image.jpg");
try
{
var result = client.Analyze(imageUrl, VisualFeatures.Caption);
}
catch (RequestFailedException e)
{
if (e.Status != 200)
{
Console.WriteLine("Error analyzing image.");
Console.WriteLine($"HTTP status code {e.Status}: {e.Message}");
}
else
{
throw;
}
}
Weitere Informationen zum Aktivieren der SDK-Protokollierung finden Sie hier.
Voraussetzungen
Dieser Leitfaden geht davon aus, dass Sie die Schritte im Schnellstart ausgeführt haben. Das bedeutet Folgendes:
- Sie haben eine Ressource für maschinelles Sehen erstellt und einen Schlüssel und eine Endpunkt-URL erhalten.
- Sie haben das entsprechende SDK-Paket installiert und verfügen über eine funktionierende Schnellstart-Anwendung. Sie können diese Schnellstartanwendung anhand der hier gezeigten Codebeispiele ändern.
Erstellen und Authentifizieren des Clients
Um sich beim Bildanalysedienst zu authentifizieren, benötigen Sie einen Schlüssel für maschinelles Sehen und eine Endpunkt-URL. In diesem Leitfaden wird davon ausgegangen, dass Sie die Umgebungsvariablen VISION_KEY
und VISION_ENDPOINT
mit Ihrem Schlüssel und Endpunkt definiert haben.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Erstellen Sie zunächst ein ImageAnalysisClient-Objekt mit einem der Konstruktoren. Beispiel:
client = ImageAnalysisClient(
endpoint=endpoint,
credential=AzureKeyCredential(key)
)
Wählen des zu analysierenden Bilds
Sie können ein Bild auswählen, indem Sie eine öffentlich zugängliche Bild-URL angeben oder Bilddaten in den Eingabepuffer des SDK lesen. Informationen zu unterstützten Bildformaten finden Sie unter Bildanforderungen.
Bild-URL
Sie können die folgende Beispielbild-URL verwenden.
# Define image URL
image_url = "https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png"
Bildpuffer
Alternativ können Sie das Bild als Byte-Objekt übergeben. Lesen Sie beispielsweise aus einer lokalen Bilddatei, die Sie analysieren möchten.
# Load image to analyze into a 'bytes' object
with open("sample.jpg", "rb") as f:
image_data = f.read()
Auswählen visueller Merkmale
Die Analyse 4.0-API gibt Ihnen Zugriff auf alle Bildanalysefunktionen des Diensts. Wählen Sie ausgehend von Ihrem eigenen Anwendungsfall aus, welche Vorgänge ausgeführt werden sollen. Eine Beschreibung der einzelnen Features finden Sie in der Übersicht. Im Beispiel in diesem Abschnitt werden alle verfügbaren Features für Visuals hinzugefügt, aber für die praktische Nutzung benötigen Sie wahrscheinlich weniger.
Wichtig
Die visuellen Features Untertitel und DenseCaptions werden nur in bestimmten Azure-Regionen unterstützt. Weitere Informationen finden Sie unter Regionale Verfügbarkeit.
visual_features =[
VisualFeatures.TAGS,
VisualFeatures.OBJECTS,
VisualFeatures.CAPTION,
VisualFeatures.DENSE_CAPTIONS,
VisualFeatures.READ,
VisualFeatures.SMART_CROPS,
VisualFeatures.PEOPLE,
]
Aufrufen der analyze_from_url-Methode mit Optionen
Der folgende Code ruft die analyze_from_url-Methode auf dem Client mit den oben von Ihnen ausgewählten Features und anderen unten definierten Optionen auf. Rufen Sie zum Analysieren aus einem Bildpuffer anstelle der URL die Methode analyze mit image_data=image_data
als erstes Argument auf.
# Analyze all visual features from an image stream. This will be a synchronously (blocking) call.
result = client.analyze_from_url(
image_url=image_url,
visual_features=visual_features,
smart_crops_aspect_ratios=[0.9, 1.33],
gender_neutral_caption=True,
language="en"
)
Auswählen von Seitenverhältnissen für intelligentes Zuschneiden
Ein Seitenverhältnis wird berechnet, indem die Zielzuschnittbreite durch die Höhe dividiert wird. Die unterstützten Werte liegen zwischen (einschließlich) 0,75 und 1,8. Das Festlegen dieser Eigenschaft ist nur relevant, wenn VisualFeatures.SMART_CROPS als Teil der visuellen Featureliste ausgewählt wurde. Wenn Sie VisualFeatures.SMART_CROPS auswählen, aber keine Seitenverhältnisse angeben, gibt der Dienst einen Zuschnittvorschlag mit einem Seitenverhältnis zurück, das ihm geeignet erscheint. In diesem Fall liegt das Seitenverhältnis zwischen (einschließlich) 0,5 und 2,0.
Auswählen geschlechtsneutraler Beschriftungen
Wenn Sie Beschriftungen oder dichte Beschriftungen extrahieren (mithilfe von VisualFeatures.CAPTION oder VisualFeatures.DENSE_CAPTIONS), können Sie geschlechtsneutrale Beschriftungen anfordern. Geschlechtsneutrale Beschriftungen sind optional, wobei geschlechtsspezifische Beschriftungen die Standardeinstellung sind. Wenn Sie beispielsweise auf Englisch geschlechtsneutrale Beschriftungen auswählen, werden Begriffe wie women oder man durch person und boy oder girl durch child ersetzt.
Angeben von Sprachen
Sie können die Sprache der zurückgegebenen Daten angeben. Die Sprache ist optional, wobei die Standardeinstellung Englisch ist. Unter Sprachunterstützung finden Sie eine Liste der unterstützten Sprachcodes und welche visuellen Features für jede Sprache unterstützt werden.
Abrufen von Ergebnissen aus dem Dienst
Der folgende Code zeigt, wie Sie die Ergebnisse der Vorgänge analyze_from_url oder analyze analysieren.
# Print all analysis results to the console
print("Image analysis results:")
if result.caption is not None:
print(" Caption:")
print(f" '{result.caption.text}', Confidence {result.caption.confidence:.4f}")
if result.dense_captions is not None:
print(" Dense Captions:")
for caption in result.dense_captions.list:
print(f" '{caption.text}', {caption.bounding_box}, Confidence: {caption.confidence:.4f}")
if result.read is not None:
print(" Read:")
for line in result.read.blocks[0].lines:
print(f" Line: '{line.text}', Bounding box {line.bounding_polygon}")
for word in line.words:
print(f" Word: '{word.text}', Bounding polygon {word.bounding_polygon}, Confidence {word.confidence:.4f}")
if result.tags is not None:
print(" Tags:")
for tag in result.tags.list:
print(f" '{tag.name}', Confidence {tag.confidence:.4f}")
if result.objects is not None:
print(" Objects:")
for object in result.objects.list:
print(f" '{object.tags[0].name}', {object.bounding_box}, Confidence: {object.tags[0].confidence:.4f}")
if result.people is not None:
print(" People:")
for person in result.people.list:
print(f" {person.bounding_box}, Confidence {person.confidence:.4f}")
if result.smart_crops is not None:
print(" Smart Cropping:")
for smart_crop in result.smart_crops.list:
print(f" Aspect ratio {smart_crop.aspect_ratio}: Smart crop {smart_crop.bounding_box}")
print(f" Image height: {result.metadata.height}")
print(f" Image width: {result.metadata.width}")
print(f" Model version: {result.model_version}")
Problembehandlung
Ausnahmen
Die analyze
-Methoden lösen eine HttpResponseError-Ausnahme für eine nicht erfolgreiche HTTP-Statuscodeantwort des Diensts aus. status_code
der Ausnahme ist der HTTP-Antwortstatuscode. error.message
der Ausnahme enthält eine detaillierte Meldung, mit der Sie das Problem diagnostizieren können:
try:
result = client.analyze( ... )
except HttpResponseError as e:
print(f"Status code: {e.status_code}")
print(f"Reason: {e.reason}")
print(f"Message: {e.error.message}")
Wenn Sie beispielsweise einen falschen Authentifizierungsschlüssel angeben:
Status code: 401
Reason: PermissionDenied
Message: Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource.
Oder wenn Sie eine Bild-URL angeben, die nicht existiert oder auf die nicht zugegriffen werden kann:
Status code: 400
Reason: Bad Request
Message: The provided image url is not accessible.
Logging
Dieser Client verwendet die standardmäßige Protokollierungsbibliothek von Python. Das SDK protokolliert HTTP-Anforderungs- und Antwortdetails, die bei der Problembehandlung hilfreich sein können. Um sich bei stdout anzumelden, fügen Sie Folgendes hinzu:
import sys
import logging
# Acquire the logger for this client library. Use 'azure' to affect both
# 'azure.core` and `azure.ai.vision.imageanalysis' libraries.
logger = logging.getLogger("azure")
# Set the desired logging level. logging.INFO or logging.DEBUG are good options.
logger.setLevel(logging.INFO)
# Direct logging output to stdout (the default):
handler = logging.StreamHandler(stream=sys.stdout)
# Or direct logging output to a file:
# handler = logging.FileHandler(filename = 'sample.log')
logger.addHandler(handler)
# Optional: change the default logging format. Here we add a timestamp.
formatter = logging.Formatter("%(asctime)s:%(levelname)s:%(name)s:%(message)s")
handler.setFormatter(formatter)
Protokolle maskieren standardmäßig die Werte von URL-Abfragezeichenfolgen, die Werte einiger HTTP-Anforderungs- und -Antwortheader (einschließlich Ocp-Apim-Subscription-Key
, der den Schlüssel enthält) und die Anforderungs- und Antwortnutzdaten. Wenn Sie Protokolle ohne Bearbeitung erstellen möchten, legen Sie das Methodenargument logging_enable = True
fest, wenn Sie ImageAnalysisClient
erstellen oder wenn Sie analyze
auf dem Client aufrufen.
# Create an Image Analysis client with none redacted log
client = ImageAnalysisClient(
endpoint=endpoint,
credential=AzureKeyCredential(key),
logging_enable=True
)
Es werden keine bearbeiteten Protokolle für die Protokollebene logging.DEBUG
generiert. Stellen Sie sicher, nicht bearbeitete Protokolle zu schützen, um eine Beeinträchtigung der Sicherheit zu vermeiden. Weitere Informationen finden Sie unter Konfigurieren der Protokollierung in den Azure-Bibliotheken für Python
Voraussetzungen
In diesem Leitfaden wird davon ausgegangen, dass Sie die Schritte auf der Schnellstartseite ausgeführt haben. Das bedeutet:
- Sie haben eine Ressource für maschinelles Sehen erstellt und einen Schlüssel sowie eine Endpunkt-URL erhalten.
- Sie haben das entsprechende SDK-Paket installiert, und Sie führen eine Anwendung aus dem Schnellstart aus. Sie können diese Schnellstartanwendung anhand der hier gezeigten Codebeispiele ändern.
Erstellen und Authentifizieren des Clients
Um sich beim Bildanalysedienst zu authentifizieren, benötigen Sie einen Schlüssel für maschinelles Sehen und eine Endpunkt-URL. In diesem Leitfaden wird davon ausgegangen, dass Sie die Umgebungsvariablen VISION_KEY
und VISION_ENDPOINT
mit Ihrem Schlüssel und Endpunkt definiert haben.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Erstellen Sie zunächst ein ImageAnalysisClient-Objekt. Beispiel:
String endpoint = System.getenv("VISION_ENDPOINT");
String key = System.getenv("VISION_KEY");
if (endpoint == null || key == null) {
System.out.println("Missing environment variable 'VISION_ENDPOINT' or 'VISION_KEY'.");
System.out.println("Set them before running this sample.");
System.exit(1);
}
// Create a synchronous Image Analysis client.
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
.endpoint(endpoint)
.credential(new KeyCredential(key))
.buildClient();
Wählen des zu analysierenden Bilds
Sie können ein Bild auswählen, indem Sie eine öffentlich zugängliche Bild-URL angeben oder Bilddaten in den Eingabepuffer des SDK lesen. Informationen zu unterstützten Bildformaten finden Sie unter Bildanforderungen.
Bild-URL
Erstellen Sie eine imageUrl
-Zeichenfolge, um die öffentlich zugängliche URL des zu analysierenden Bilds zu enthalten.
String imageUrl = "https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png";
Bildpuffer
Alternativ können Sie das Bild als Speicherpuffer mithilfe eines BinaryData-Objekts übergeben. Lesen Sie beispielsweise aus einer lokalen Bilddatei, die Sie analysieren möchten.
BinaryData imageData = BinaryData.fromFile(new File("sample.png").toPath());
Auswählen visueller Merkmale
Die Analyse 4.0-API gibt Ihnen Zugriff auf alle Bildanalysefunktionen des Diensts. Wählen Sie ausgehend von Ihrem eigenen Anwendungsfall aus, welche Vorgänge ausgeführt werden sollen. Eine Beschreibung der einzelnen Features finden Sie in der Übersicht. Im Beispiel in diesem Abschnitt werden alle verfügbaren Features für Visuals hinzugefügt, aber für die praktische Nutzung benötigen Sie wahrscheinlich weniger.
Wichtig
Die visuellen Features Untertitel und DenseCaptions werden nur in bestimmten Azure-Regionen unterstützt. Weitere Informationen finden Sie unter Regionale Verfügbarkeit.
// visualFeatures: Select one or more visual features to analyze.
List<VisualFeatures> visualFeatures = Arrays.asList(
VisualFeatures.SMART_CROPS,
VisualFeatures.CAPTION,
VisualFeatures.DENSE_CAPTIONS,
VisualFeatures.OBJECTS,
VisualFeatures.PEOPLE,
VisualFeatures.READ,
VisualFeatures.TAGS);
Auswählen von Analyseoptionen
Verwenden Sie ein ImageAnalysisOptions-Objekt, um verschiedene Optionen für den Analyse-API-Aufruf anzugeben.
- Sprache: Sie können die Sprache der zurückgegebenen Daten angeben. Die Sprache ist optional, wobei die Standardeinstellung Englisch ist. Unter Sprachunterstützung finden Sie eine Liste der unterstützten Sprachcodes und welche visuellen Features für jede Sprache unterstützt werden.
- Geschlechtsneutrale Beschriftungen: Wenn Sie Beschriftungen oder dichte Beschriftungen extrahieren (mithilfe von VisualFeatures.CAPTION oder VisualFeatures.DENSE_CAPTIONS), können Sie geschlechtsneutrale Beschriftungen anfordern. Geschlechtsneutrale Beschriftungen sind optional, wobei geschlechtsspezifische Beschriftungen die Standardeinstellung sind. Wenn Sie beispielsweise auf Englisch geschlechtsneutrale Beschriftungen auswählen, werden Begriffe wie women oder man durch person und boy oder girl durch child ersetzt.
- Seitenverhältnis für Zuschnitt: Ein Seitenverhältnis wird berechnet, indem die Zielzuschnittbreite durch die Höhe dividiert wird. Die unterstützten Werte liegen zwischen (einschließlich) 0,75 und 1,8. Das Festlegen dieser Eigenschaft ist nur relevant, wenn VisualFeatures.SMART_CROPS als Teil der visuellen Featureliste ausgewählt wurde. Wenn Sie VisualFeatures.SMART_CROPS auswählen, aber keine Seitenverhältnisse angeben, gibt der Dienst einen Zuschnittvorschlag mit einem Seitenverhältnis zurück, das ihm geeignet erscheint. In diesem Fall liegt das Seitenverhältnis zwischen (einschließlich) 0,5 und 2,0.
// Specify analysis options (or set `options` to null for defaults)
ImageAnalysisOptions options = new ImageAnalysisOptions()
.setLanguage("en")
.setGenderNeutralCaption(true)
.setSmartCropsAspectRatios(Arrays.asList(0.9, 1.33, 1.78));
Aufrufen der analyzeFromUrl-Methode
In diesem Abschnitt erfahren Sie, wie Sie einen Analyseaufruf für den Dienst ausführen.
Rufen Sie die analyzeFromUrl-Methode für das ImageAnalysisClient-Objekt auf, wie hier gezeigt. Der Aufruf ist synchron, und er wird blockiert, bis der Dienst die Ergebnisse zurückgibt oder ein Fehler aufgetreten ist. Alternativ können Sie stattdessen ein ImageAnalysisAsyncClient-Objekt verwenden und dessen analyzeFromUrl-Methode aufrufen, die nicht blockierend ist.
Rufen Sie zum Analysieren aus einem Bildpuffer anstelle der URL die Methode analyze auf, und übergeben Sie sie in den imageData
als erstes Argument.
try {
// Analyze all visual features from an image URL. This is a synchronous (blocking) call.
ImageAnalysisResult result = client.analyzeFromUrl(
imageUrl,
visualFeatures,
options);
printAnalysisResults(result);
} catch (HttpResponseException e) {
System.out.println("Exception: " + e.getClass().getSimpleName());
System.out.println("Status code: " + e.getResponse().getStatusCode());
System.out.println("Message: " + e.getMessage());
} catch (Exception e) {
System.out.println("Message: " + e.getMessage());
}
Abrufen von Ergebnissen aus dem Dienst
Der folgende Code zeigt, wie Sie die Ergebnisse der Vorgänge analyzeFromUrl oder analyze analysieren.
// Print all analysis results to the console
public static void printAnalysisResults(ImageAnalysisResult result) {
System.out.println("Image analysis results:");
if (result.getCaption() != null) {
System.out.println(" Caption:");
System.out.println(" \"" + result.getCaption().getText() + "\", Confidence "
+ String.format("%.4f", result.getCaption().getConfidence()));
}
if (result.getDenseCaptions() != null) {
System.out.println(" Dense Captions:");
for (DenseCaption denseCaption : result.getDenseCaptions().getValues()) {
System.out.println(" \"" + denseCaption.getText() + "\", Bounding box "
+ denseCaption.getBoundingBox() + ", Confidence " + String.format("%.4f", denseCaption.getConfidence()));
}
}
if (result.getRead() != null) {
System.out.println(" Read:");
for (DetectedTextLine line : result.getRead().getBlocks().get(0).getLines()) {
System.out.println(" Line: '" + line.getText()
+ "', Bounding polygon " + line.getBoundingPolygon());
for (DetectedTextWord word : line.getWords()) {
System.out.println(" Word: '" + word.getText()
+ "', Bounding polygon " + word.getBoundingPolygon()
+ ", Confidence " + String.format("%.4f", word.getConfidence()));
}
}
}
if (result.getTags() != null) {
System.out.println(" Tags:");
for (DetectedTag tag : result.getTags().getValues()) {
System.out.println(" \"" + tag.getName() + "\", Confidence " + String.format("%.4f", tag.getConfidence()));
}
}
if (result.getObjects() != null) {
System.out.println(" Objects:");
for (DetectedObject detectedObject : result.getObjects().getValues()) {
System.out.println(" \"" + detectedObject.getTags().get(0).getName() + "\", Bounding box "
+ detectedObject.getBoundingBox() + ", Confidence " + String.format("%.4f", detectedObject.getTags().get(0).getConfidence()));
}
}
if (result.getPeople() != null) {
System.out.println(" People:");
for (DetectedPerson person : result.getPeople().getValues()) {
System.out.println(" Bounding box "
+ person.getBoundingBox() + ", Confidence " + String.format("%.4f", person.getConfidence()));
}
}
if (result.getSmartCrops() != null) {
System.out.println(" Crop Suggestions:");
for (CropRegion cropRegion : result.getSmartCrops().getValues()) {
System.out.println(" Aspect ratio "
+ cropRegion.getAspectRatio() + ": Bounding box " + cropRegion.getBoundingBox());
}
}
System.out.println(" Image height = " + result.getMetadata().getHeight());
System.out.println(" Image width = " + result.getMetadata().getWidth());
System.out.println(" Model version = " + result.getModelVersion());
}
Problembehandlung
Ausnahmen
Die analyze
-Methoden lösen HttpResponseException aus, wenn der Dienst mit einem nicht erfolgreichen HTTP-Statuscode antwortet. getResponse().getStatusCode()
der Ausnahme enthält den HTTP-Antwortstatuscode. getMessage()
der Ausnahme enthält eine detaillierte Meldung, mit der Sie das Problem diagnostizieren können:
try {
ImageAnalysisResult result = client.analyze(...)
} catch (HttpResponseException e) {
System.out.println("Exception: " + e.getClass().getSimpleName());
System.out.println("Status code: " + e.getResponse().getStatusCode());
System.out.println("Message: " + e.getMessage());
} catch (Exception e) {
System.out.println("Message: " + e.getMessage());
}
Wenn Sie beispielsweise einen falschen Authentifizierungsschlüssel angeben:
Exception: ClientAuthenticationException
Status code: 401
Message: Status code 401, "{"error":{"code":"401","message":"Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource."}}"
Oder wenn Sie ein Bild in einem Format bereitstellen, das nicht erkannt wird:
Exception: HttpResponseException
Status code: 400
Message: Status code 400, "{"error":{"code":"InvalidRequest","message":"Image format is not valid.","innererror":{"code":"InvalidImageFormat","message":"Input data is not a valid image."}}}"
Aktivieren der Protokollierung von HTTP-Anforderungen/-Antworten
Das Überprüfen der über die Verbindung mit dem Bildanalysedienst gesendeten HTTP-Anforderung oder empfangenen HTTP-Antwort kann bei der Problembehandlung hilfreich sein. Die Bildanalyse-Clientbibliothek unterstützt ein integriertes Konsolenprotokollierungs-Framework für temporäre Debuggingzwecke. Sie unterstützt auch die erweiterte Protokollierung mithilfe der SLF4J--Schnittstelle. Weitere Informationen finden Sie unter Verwenden der Protokollierung im Azure SDK für Java.
In den folgenden Abschnitten wird die Aktivierung der Konsolenprotokollierung mithilfe des integrierten Frameworks erläutert.
Durch Festlegen von Umgebungsvariablen
Sie können die Konsolenprotokollierung von HTTP-Anforderungen und -Antworten für die gesamte Anwendung aktivieren, indem Sie die folgenden beiden Umgebungsvariablen festlegen. Diese Änderung wirkt sich auf jeden Azure-Client aus, der die Protokollierung von HTTP-Anforderungen und -Antworten unterstützt.
- Legen Sie die Umgebungsvariable
AZURE_LOG_LEVEL
aufdebug
fest - Legen Sie die Umgebungsvariable
AZURE_HTTP_LOG_DETAIL_LEVEL
auf einen der folgenden Werte fest:
Wert | Protokolliergrad |
---|---|
none |
Protokollierung von HTTP-Anforderungen/-Antworten ist deaktiviert |
basic |
Protokolliert nur URLs, HTTP-Methoden und die Zeit bis zum Abschluss der Anforderung. |
headers |
Protokolliert alles in BASIC sowie alle Anforderungs- und Antwortheader. |
body |
Protokolliert alles in BASIC sowie den gesamten Anforderungs- und Antworttext. |
body_and_headers |
Protokolliert alles in HEADERS und BODY. |
Durch Festlegen von httpLogOptions
So aktivieren Sie die Konsolenprotokollierung von HTTP-Anforderungen und -Antworten für einen einzelnen Client
- Legen Sie die Umgebungsvariable
AZURE_LOG_LEVEL
aufdebug
fest - Fügen Sie beim Erstellen von
ImageAnalysisClient
einen Aufruf zuhttpLogOptions
hinzu:
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
.endpoint(endpoint)
.credential(new KeyCredential(key))
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
.buildClient();
Die Enumeration HttpLogDetailLevel definiert die unterstützten Protokollierungsgrade.
Bei der Protokollierung werden standardmäßig bestimmte HTTP-Header- und -Abfrageparameterwerte bearbeitet. Diese Standardeinstellung kann überschrieben werden, indem angegeben wird, welche Header- und Abfrageparameter sicher protokolliert werden können:
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
.endpoint(endpoint)
.credential(new KeyCredential(key))
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)
.addAllowedHeaderName("safe-to-log-header-name")
.addAllowedQueryParamName("safe-to-log-query-parameter-name"))
.buildClient();
Um beispielsweise ein vollständiges, nicht bearbeitetes Protokoll der HTTP-Anforderung abzurufen, wenden Sie Folgendes an:
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)
.addAllowedHeaderName("Ocp-Apim-Subscription-Key")
.addAllowedQueryParamName("features")
.addAllowedQueryParamName("language")
.addAllowedQueryParamName("gender-neutral-caption")
.addAllowedQueryParamName("smartcrops-aspect-ratios")
.addAllowedQueryParamName("model-version"))
Fügen Sie oben mehr hinzu, um eine nicht bearbeitete HTTP-Antwort abzurufen. Wenn Sie ein nicht bearbeitetes Protokoll freigeben, stellen Sie sicher, dass es keine Geheimnisse wie Ihren Abonnementschlüssel enthält.
Voraussetzungen
In diesem Leitfaden wird davon ausgegangen, dass Sie die im Schnellstart beschriebenen Schritte ausgeführt haben. Das bedeutet:
- Sie haben eine Ressource für maschinelles Sehen erstellt und einen Schlüssel sowie eine Endpunkt-URL erhalten.
- Sie haben das entsprechende SDK-Paket installiert, und Sie führen eine Anwendung aus dem Schnellstart aus. Sie können diese Schnellstartanwendung anhand der hier gezeigten Codebeispiele ändern.
Erstellen und Authentifizieren des Clients
Um sich beim Bildanalysedienst zu authentifizieren, benötigen Sie einen Schlüssel für maschinelles Sehen und eine Endpunkt-URL. In diesem Leitfaden wird davon ausgegangen, dass Sie die Umgebungsvariablen VISION_KEY
und VISION_ENDPOINT
mit Ihrem Schlüssel und Endpunkt definiert haben.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Erstellen Sie zunächst ein ImageAnalysisClient-Objekt. Beispiel:
// Load the .env file if it exists
require("dotenv").config();
const endpoint = process.env['VISION_ENDPOINT'] || '<your_endpoint>';
const key = process.env['VISION_KEY'] || '<your_key>';
const credential = new AzureKeyCredential(key);
const client = createClient(endpoint, credential);
Wählen des zu analysierenden Bilds
Sie können ein Bild auswählen, indem Sie eine öffentlich zugängliche Bild-URL angeben oder Bilddaten in den Eingabepuffer des SDK lesen. Informationen zu unterstützten Bildformaten finden Sie unter Bildanforderungen.
Bild-URL
Sie können die folgende Beispielbild-URL verwenden.
const imageUrl = 'https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png';
Bildpuffer
Alternativ können Sie das Bild als Datenarray übergeben. Lesen Sie beispielsweise aus einer lokalen Bilddatei, die Sie analysieren möchten.
const imagePath = '../sample.jpg';
const imageData = fs.readFileSync(imagePath);
Auswählen visueller Merkmale
Die Analyse 4.0-API gibt Ihnen Zugriff auf alle Bildanalysefunktionen des Diensts. Wählen Sie ausgehend von Ihrem eigenen Anwendungsfall aus, welche Vorgänge ausgeführt werden sollen. Eine Beschreibung der einzelnen Features finden Sie in der Übersicht. Im Beispiel in diesem Abschnitt werden alle verfügbaren Features für Visuals hinzugefügt, aber für die praktische Nutzung benötigen Sie wahrscheinlich weniger.
Wichtig
Die visuellen Features Untertitel und DenseCaptions werden nur in bestimmten Azure-Regionen unterstützt. Siehe .
const features = [
'Caption',
'DenseCaptions',
'Objects',
'People',
'Read',
'SmartCrops',
'Tags'
];
Aufrufen der Bildanalyse-API mit Optionen
Der folgende Code ruft die Bildanalyse-API mit den oben von Ihnen ausgewählten Features und anderen Optionen auf, die im Folgenden definiert werden. Um aus einem Bildpuffer anstelle einer URL zu analysieren, ersetzen Sie imageURL
im Methodenaufruf durch imageData
.
const result = await client.path('/imageanalysis:analyze').post({
body: {
url: imageUrl
},
queryParameters: {
features: features,
'language': 'en',
'gender-neutral-captions': 'true',
'smartCrops-aspect-ratios': [0.9, 1.33]
},
contentType: 'application/json'
});
Auswählen von Seitenverhältnissen für intelligentes Zuschneiden
Ein Seitenverhältnis wird berechnet, indem die Zielzuschnittbreite durch die Höhe dividiert wird. Die unterstützten Werte liegen zwischen (einschließlich) 0,75 und 1,8. Das Festlegen dieser Eigenschaft ist nur relevant, wenn VisualFeatures.SmartCrops als Teil der visuellen Featureliste ausgewählt wurde. Wenn Sie VisualFeatures.SmartCrops auswählen, aber keine Seitenverhältnisse angeben, gibt der Dienst einen Zuschnittvorschlag mit einem Seitenverhältnis zurück, das ihm geeignet erscheint. In diesem Fall liegt das Seitenverhältnis zwischen (einschließlich) 0,5 und 2,0.
Auswählen geschlechtsneutraler Beschriftungen
Wenn Sie Beschriftungen oder dichte Beschriftungen extrahieren (mithilfe von VisualFeatures.Caption oder VisualFeatures.DenseCaptions), können Sie geschlechtsneutrale Beschriftungen anfordern. Geschlechtsneutrale Beschriftungen sind optional, wobei geschlechtsspezifische Beschriftungen die Standardeinstellung sind. Wenn Sie beispielsweise auf Englisch geschlechtsneutrale Beschriftungen auswählen, werden Begriffe wie women oder man durch person und boy oder girl durch child ersetzt.
Angeben von Sprachen
Sie können die Sprache der zurückgegebenen Daten angeben. Die Sprache ist optional, wobei die Standardeinstellung Englisch ist. Unter Sprachunterstützung finden Sie eine Liste der unterstützten Sprachcodes und welche visuellen Features für jede Sprache unterstützt werden.
Abrufen von Ergebnissen aus dem Dienst
Der folgende Code zeigt, wie Sie die Ergebnisse der verschiedenen Analyze-Vorgänge analysieren.
const iaResult = result.body;
console.log(`Model Version: ${iaResult.modelVersion}`);
console.log(`Image Metadata: ${JSON.stringify(iaResult.metadata)}`);
if (iaResult.captionResult) {
console.log(`Caption: ${iaResult.captionResult.text} (confidence: ${iaResult.captionResult.confidence})`);
}
if (iaResult.denseCaptionsResult) {
iaResult.denseCaptionsResult.values.forEach(denseCaption => console.log(`Dense Caption: ${JSON.stringify(denseCaption)}`));
}
if (iaResult.objectsResult) {
iaResult.objectsResult.values.forEach(object => console.log(`Object: ${JSON.stringify(object)}`));
}
if (iaResult.peopleResult) {
iaResult.peopleResult.values.forEach(person => console.log(`Person: ${JSON.stringify(person)}`));
}
if (iaResult.readResult) {
iaResult.readResult.blocks.forEach(block => console.log(`Text Block: ${JSON.stringify(block)}`));
}
if (iaResult.smartCropsResult) {
iaResult.smartCropsResult.values.forEach(smartCrop => console.log(`Smart Crop: ${JSON.stringify(smartCrop)}`));
}
if (iaResult.tagsResult) {
iaResult.tagsResult.values.forEach(tag => console.log(`Tag: ${JSON.stringify(tag)}`));
}
Problembehandlung
Logging
Die Aktivierung der Protokollierung kann hilfreiche Informationen über Fehler aufdecken. Um ein Protokoll von HTTP-Anforderungen und -Antworten anzuzeigen, legen Sie die Umgebungsvariable AZURE_LOG_LEVEL
auf info
fest. Alternativ kann die Protokollierung zur Laufzeit aktiviert werden, indem Sie setLogLevel
in @azure/logger
aufrufen:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Ausführlichere Anweisungen zum Aktivieren von Protokollen finden Sie in der Paketdokumentation zu @azure/logger.
Voraussetzungen
In diesem Leitfaden wird davon ausgegangen, dass Sie die auf der Schnellstartseite beschriebenen Schritte erfolgreich ausgeführt haben. Das bedeutet:
- Sie haben eine Ressource für maschinelles Sehen erstellt und einen Schlüssel sowie eine Endpunkt-URL erhalten.
- Sie haben erfolgreich einen
curl.exe
-Aufruf an den Dienst durchgeführt (oder ein alternatives Tool verwendet). Sie ändern dencurl.exe
-Aufruf basierend auf den hier aufgeführten Beispielen.
Authentifizierung beim Dienst
Um sich beim Bildanalysedienst zu authentifizieren, benötigen Sie einen Schlüssel für maschinelles Sehen und eine Endpunkt-URL.
Wichtig
Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.
Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.
Im SDK-Beispiel wird davon ausgegangen, dass Sie die Umgebungsvariablen VISION_KEY
mit VISION_ENDPOINT
Ihrem Schlüssel und Endpunkt definiert haben.
Die Authentifizierung erfolgt durch Hinzufügen des HTTP-Anforderungsheaders Ocp-Apim-Subscription-Key und Festlegen auf Ihren Vision-Schlüssel. Der Aufruf erfolgt an die URL <endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01
, wobei <endpoint>
Ihre eindeutige Endpunkt-URL für maschinelles Sehen ist. Sie fügen Abfragezeichenfolgen basierend auf Ihren Analyseoptionen hinzu.
Wählen des zu analysierenden Bilds
Der Code in diesem Leitfaden verwendet Remotebilder, auf die über URL verwiesen wird. Möglicherweise möchten Sie selbst verschiedene Bilder ausprobieren, um das ganze Potenzial der Bildanalysefeatures zu erfahren.
Bild-URL
Beim Analysieren eines Remotebilds geben Sie die URL des Bilds an, indem Sie den Anforderungstext wie folgt formatieren: {"url":"https://learn.microsoft.com/azure/cognitive-services/computer-vision/images/windows-kitchen.jpg"}
. Der Content-Type sollte application/json
sein.
image file
Zur Analyse eines lokalen Bilds platzieren Sie die binären Bilddaten im HTTP-Anforderungstext. Der Content-Type sollte application/octet-stream
oder multipart/form-data
sein.
Auswählen von Analyseoptionen
Auswählen visueller Features bei Verwendung des Standardmodells
Die Analyse 4.0-API gibt Ihnen Zugriff auf alle Bildanalysefunktionen des Diensts. Wählen Sie ausgehend von Ihrem eigenen Anwendungsfall aus, welche Vorgänge ausgeführt werden sollen. Eine Beschreibung der einzelnen Features finden Sie in der Übersicht. Im Beispiel in diesem Abschnitt werden alle verfügbaren Features für Visuals hinzugefügt, aber für die praktische Nutzung benötigen Sie wahrscheinlich weniger.
Visuelle Features „Untertitel“ und „DenseCaptions“ werden nur in bestimmten Azure-Regionen unterstützt: siehe Regionsverfügbarkeit.
Hinweis
Die REST-API verwendet die Begriffe Intelligente Zuschnitte und Seitenverhältnisse für intelligente Zuschnitte. Das SDK verwendet die Begriffe Zuschnittvorschläge und Seitenverhältnisse für Zuschneiden. Beide bezeichnen denselben Dienstvorgang. In ähnlicher Weise verwendet die REST-API die Benennung Lesen, um mithilfe der optischen Zeichenerkennung (Optical Character Recognition, OCR) Text im Bild zu erkennen, während das SDK die Benennung Text für denselben Vorgang verwendet.
Sie können angeben, welche Features Sie verwenden möchten, indem Sie die URL-Abfrageparameter der Analyse 4.0-API festlegen. Ein Parameter kann mehrere, durch Kommas getrennte Werte enthalten.
URL-Parameter | Wert | BESCHREIBUNG |
---|---|---|
features |
read |
Liest den sichtbaren Text auf dem Bild und gibt ihn als strukturierte JSON-Daten aus |
features |
caption |
Beschreibt den Bildinhalt in unterstützten Sprachen mit einem vollständigen Satz. |
features |
denseCaptions |
Generiert detaillierte Beschriftungen für bis zu 10 prominente Bildbereiche. |
features |
smartCrops |
Findet die Rechteckkoordinaten, die das Bild in ein gewünschtes Seitenverhältnis zuschneiden würden, während der relevante Bereich beibehalten wird |
features |
objects |
Erkennt verschiedene Objekte in einem Bild, einschließlich der ungefähren Position. Das Objects-Argument ist nur für Englisch verfügbar. |
features |
tags |
Erstellt Tags für das Bild in einer detaillierten Liste aus Wörtern, die sich auf den Bildinhalt beziehen. |
features |
people |
Erkennt Personen, die in Bildern angezeigt werden, einschließlich der ungefähren Standorte. |
Eine aufgefüllte URL kann folgendermaßen aussehen:
<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=tags,read,caption,denseCaptions,smartCrops,objects,people
Festlegen des Modellnamens bei Verwendung eines benutzerdefinierten Modells
Sie können die Bildanalyse auch mit einem benutzerdefinierten trainierten Modell durchführen. Informationen zum Erstellen und Trainieren eines Modells finden Sie unter Erstellen eines benutzerdefinierten Bildanalysemodells. Nachdem Ihr Modell trainiert wurde, benötigen Sie nur noch den Namen des Modells. Wenn Sie ein benutzerdefiniertes Modell verwenden, müssen Sie keine visuellen Features angeben.
Um ein benutzerdefiniertes Modell zu verwenden, verwenden Sie nicht den Abfrageparameter „Features“. Legen Sie stattdessen den model-name
-Parameter auf den Namen Ihres Modells fest, wie hier gezeigt. Ersetzen Sie MyCustomModelName
durch ihren benutzerdefinierten Modellnamen.
<endpoint>/computervision/imageanalysis:analyze?api-version=2023-02-01&model-name=MyCustomModelName
Angeben von Sprachen
Sie können die Sprache der zurückgegebenen Daten angeben. Die Sprache ist optional, wobei die Standardeinstellung Englisch ist. Unter Sprachunterstützung finden Sie eine Liste der unterstützten Sprachcodes und welche visuellen Features für jede Sprache unterstützt werden.
Die Option Sprache kann nur mit dem Standardmodell verwendet werden.
Die Sprache wird mit dem folgenden URL-Abfrageparameter angegeben. Standardwert: en
.
URL-Parameter | Wert | Beschreibung |
---|---|---|
language |
en |
Englisch |
language |
es |
Spanisch |
language |
ja |
Japanisch |
language |
pt |
Portugiesisch (Portugal) |
language |
zh |
Chinesisch (vereinfacht) |
Eine aufgefüllte URL kann folgendermaßen aussehen:
<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=caption&language=en
Auswählen geschlechtsneutraler Beschriftungen
Wenn Sie Beschriftungen oder dichte Beschriftungen extrahieren, können Sie geschlechtsneutrale Beschriftungen anfordern. Geschlechtsneutrale Beschriftungen sind optional, wobei geschlechtsspezifische Beschriftungen die Standardeinstellung sind. Wenn Sie beispielsweise auf Englisch geschlechtsneutrale Beschriftungen auswählen, werden Begriffe wie women oder man durch person und boy oder girl durch child ersetzt.
Sie können die Option für geschlechtsneutrale Untertitel nur mit dem Standardmodell verwenden.
Fügen Sie die optionale Abfragezeichenfolge gender-neutral-caption
mit den Werten true
oder false
(Standard) hinzu.
Eine aufgefüllte URL kann folgendermaßen aussehen:
<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=caption&gender-neutral-caption=true
Auswählen von Seitenverhältnissen für intelligentes Zuschneiden
Ein Seitenverhältnis wird berechnet, indem die Zielzuschnittbreite durch die Höhe dividiert wird. Die unterstützten Werte liegen zwischen (einschließlich) 0,75 und 1,8. Das Festlegen dieser Eigenschaft ist nur relevant, wenn VisualFeatures.SmartCrops als Teil der visuellen Featureliste ausgewählt wurde. Wenn Sie VisualFeatures.SmartCrops auswählen, aber keine Seitenverhältnisse angeben, gibt der Dienst einen Zuschnittvorschlag mit einem Seitenverhältnis zurück, das ihm geeignet erscheint. In diesem Fall liegt das Seitenverhältnis zwischen (einschließlich) 0,5 und 2,0.
Sie können die Smart Cropping-Seitenverhältnisse nur mit dem Standardmodell verwenden.
Fügen Sie die optionale Abfragezeichenfolge smartcrops-aspect-ratios
mit einem oder mehreren Seitenverhältnissen, durch Komma getrennt, hinzu.
Eine aufgefüllte URL kann folgendermaßen aussehen:
<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=smartCrops&smartcrops-aspect-ratios=0.8,1.2
Abrufen von Ergebnissen aus dem Dienst
Abrufen von Ergebnissen mithilfe des Standardmodells
In diesem Abschnitt erfahren Sie, wie Sie mithilfe des Standardmodells einen Analyseaufruf für den Dienst ausführen und die Ergebnisse abrufen.
Der Dienst gibt eine 200
-HTTP-Antwort zurück, und der Text enthält die zurückgegebenen Daten in Form einer JSON-Zeichenfolge. Der folgende Text ist ein Beispiel für eine JSON-Antwort:
{
"modelVersion": "string",
"captionResult": {
"text": "string",
"confidence": 0.0
},
"denseCaptionsResult": {
"values": [
{
"text": "string",
"confidence": 0.0,
"boundingBox": {
"x": 0,
"y": 0,
"w": 0,
"h": 0
}
}
]
},
"metadata": {
"width": 0,
"height": 0
},
"tagsResult": {
"values": [
{
"name": "string",
"confidence": 0.0
}
]
},
"objectsResult": {
"values": [
{
"id": "string",
"boundingBox": {
"x": 0,
"y": 0,
"w": 0,
"h": 0
},
"tags": [
{
"name": "string",
"confidence": 0.0
}
]
}
]
},
"readResult": {
"blocks": [
{
"lines": [
{
"text": "string",
"boundingPolygon": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
],
"words": [
{
"text": "string",
"boundingPolygon": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
],
"confidence": 0.0
}
]
}
]
}
]
},
"smartCropsResult": {
"values": [
{
"aspectRatio": 0.0,
"boundingBox": {
"x": 0,
"y": 0,
"w": 0,
"h": 0
}
}
]
},
"peopleResult": {
"values": [
{
"boundingBox": {
"x": 0,
"y": 0,
"w": 0,
"h": 0
},
"confidence": 0.0
}
]
}
}
Fehlercodes
Bei einem Fehler enthält die Antwort des Bildanalysediensts eine JSON-Payload, die einen Fehlercode und eine Fehlermeldung enthält. Es kann auch andere Details in Form eines innerem Fehlercodes und einer inneren Fehlermeldung enthalten. Beispiel:
{
"error":
{
"code": "InvalidRequest",
"message": "Analyze query is invalid.",
"innererror":
{
"code": "NotSupportedVisualFeature",
"message": "Specified feature type is not valid"
}
}
}
Im Folgenden finden Sie eine Liste häufiger Fehler und deren Ursachen. Listenelemente werden im folgenden Format dargestellt:
- HTTP-Antwortcode
- Fehlercode und Fehlermeldung in der JSON-Antwort
- [Optional] Interner Fehlercode und interne Fehlermeldung in der JSON-Antwort
- Fehlercode und Fehlermeldung in der JSON-Antwort
Liste der häufigen Fehler:
400 Bad Request
InvalidRequest - Image URL is badly formatted or not accessible
. Stellen Sie sicher, dass die Bild-URL gültig und öffentlich zugänglich ist.InvalidRequest - The image size is not allowed to be zero or larger than 20971520 bytes
. Verringern Sie die Größe des Images, indem Sie es komprimieren und/oder die Größe ändern, und senden Sie Ihre Anforderung erneut.InvalidRequest - The feature 'Caption' is not supported in this region
. Das Feature wird nur in bestimmten Azure-Regionen unterstützt. Die Liste der unterstützten Azure-Regionen finden Sie unter Voraussetzungen für den Schnellstart.InvalidRequest - The provided image content type ... is not supported
. Der HTTP-Header Content-Type in der Anforderung ist kein zulässiger Typ:- Für eine Bild-URL sollte Content-Type den Wert
application/json
haben - Für binäre Bilddaten sollte Content-Type den Wert
application/octet-stream
odermultipart/form-data
haben
- Für eine Bild-URL sollte Content-Type den Wert
InvalidRequest - Either 'features' or 'model-name' needs to be specified in the query parameter
.InvalidRequest - Image format is not valid
InvalidImageFormat - Image format is not valid
. Informationen zu unterstützten Bildformaten finden Sie im Abschnitt Bildanforderungen.
InvalidRequest - Analyze query is invalid
NotSupportedVisualFeature - Specified feature type is not valid
. Stellen Sie sicher, dass die Feature-Abfragezeichenfolge einen gültigen Wert aufweist.NotSupportedLanguage - The input language is not supported
. Stellen Sie sicher, dass die Sprache-Abfragezeichenfolge einen gültigen Wert für das ausgewählte visuelle Feature aufweist, basierend auf der folgenden Tabelle.BadArgument - 'smartcrops-aspect-ratios' aspect ratio is not in allowed range [0.75 to 1.8]
401 PermissionDenied
401 - Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource
.
404 Resource Not Found
404 - Resource not found
. Der Dienst konnte das benutzerdefinierte Modell basierend auf dem von dermodel-name
-Abfragezeichenfolge angegebenen Namen nicht finden.
Nächste Schritte
- Erkunden Sie die Konzeptartikel, um mehr über die einzelnen Features zu erfahren.
- Erkunden Sie die SDK-Codebeispiele auf GitHub:
- Weitere Informationen zur API-Funktionalität finden Sie in der REST-API-Referenz.