Zestaw SDK przetwarzania obrazów usług Azure Cognitive Services dla języka Python
Usługa przetwarzania obrazów oferuje deweloperom dostęp do zaawansowanych algorytmów przetwarzania obrazów i zwracania informacji. Algorytmy przetwarzania obrazów pozwalają analizować zawartość obrazu na różne sposoby, w zależności od interesujących Cię funkcji wizualnych.
Przetwarzanie obrazów pozwala aplikacjom wykonywać następujące zadania:
- Analizowanie obrazów w celu uzyskania szczegółowych informacji
- Wyodrębnianie tekstu z obrazów
- Generowanie miniatur
Szukasz dodatkowej dokumentacji?
- Dokumentacja referencyjna zestawu SDK
- Dokumentacja przetwarzania obrazów w usługach Cognitive Services
Wymagania wstępne
- Subskrypcja platformy Azure — można utworzyć bezpłatne konto
- Zasób przetwarzania obrazów platformy Azure
- Python 3.6+
Jeśli potrzebujesz konta interfejsu API przetwarzania obrazów, możesz je utworzyć za pomocą poniższego polecenia interfejsu wiersza polecenia platformy Azure:
RES_REGION=westeurope
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>
az cognitiveservices account create \
--resource-group $RES_GROUP \
--name $ACCT_NAME \
--location $RES_REGION \
--kind ComputerVision \
--sku S1 \
--yes
Instalacja
Zainstaluj zestaw SDK przetwarzania obrazów usług Azure Cognitive Services za pomocą programu pip, opcjonalnie w środowisku wirtualnym.
Konfigurowanie środowiska wirtualnego (opcjonalnie)
Chociaż nie jest to wymagane, można odizolować od siebie środowiska podstawowego systemu i zestawu Azure SDK. Umożliwia to środowisko wirtualne. Wykonaj następujące polecenia, aby skonfigurować, a następnie uruchomić środowisko wirtualne przy użyciu modułu venv, na przykład cogsrv-vision-env
:
python3 -m venv cogsrv-vision-env
source cogsrv-vision-env/bin/activate
Instalacja zestawu SDK
Zainstaluj pakiet zestawu SDK przetwarzania obrazów usług Azure Cognitive Services dla języka Python za pomocą programu pip:
pip install azure-cognitiveservices-vision-computervision
Authentication
Po utworzeniu zasobu przetwarzania obrazów należy utworzyć wystąpienie obiektu klienta przy użyciu regionu i jednego z kluczy konta tego zasobu.
Użyj tych wartości podczas tworzenia wystąpienia obiektu klienta ComputerVisionClient .
Pobieranie poświadczeń
Poniższy fragment kodu interfejsu wiersza polecenia platformy Azure umożliwia wypełnienie dwóch zmiennych środowiskowych wartościami regionu i jednego z kluczy konta przetwarzania obrazów (wartości te można również znaleźć w witrynie Azure Portal). Ten fragment kodu został sformatowany dla powłoki Bash.
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>
export ACCOUNT_REGION=$(az cognitiveservices account show \
--resource-group $RES_GROUP \
--name $ACCT_NAME \
--query location \
--output tsv)
export ACCOUNT_KEY=$(az cognitiveservices account keys list \
--resource-group $RES_GROUP \
--name $ACCT_NAME \
--query key1 \
--output tsv)
Tworzenie klienta
Po wypełnieniu ACCOUNT_REGION
zmiennych środowiskowych i ACCOUNT_KEY
można utworzyć obiekt klienta ComputerVisionClient .
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials
import os
region = os.environ['ACCOUNT_REGION']
key = os.environ['ACCOUNT_KEY']
credentials = CognitiveServicesCredentials(key)
client = ComputerVisionClient(
endpoint="https://" + region + ".api.cognitive.microsoft.com/",
credentials=credentials
)
Użycie
Po zainicjowaniu obiektu klienta ComputerVisionClient można:
- Analizowanie obrazu: możesz analizować obraz pod kątem niektórych funkcji, takich jak twarze, kolory, tagi.
- Generowanie miniatur: utwórz niestandardowy obraz JPEG do użycia jako miniaturę oryginalnego obrazu.
- Uzyskaj opis obrazu: uzyskaj opis obrazu na podstawie jego domeny podmiotu.
Aby uzyskać więcej informacji na temat tej usługi, zobacz Czym jest przetwarzanie obrazów?.
Przykłady
Poniższe sekcje zawierają kilka fragmentów kodu, które dotyczą najbardziej typowych zadań przetwarzania obrazów, m.in:
- Analizowanie obrazu
- Pobieranie listy domen tematycznych
- Analizowanie obrazu według domeny
- Pobieranie tekstu opisu obrazu
- Pobieranie tekstu odręcznego z obrazu
- Generowanie miniatury
Analizowanie obrazu
Obraz można analizować pod kątem określonych cech za pomocą operacji analyze_image
. Właściwość visual_features
umożliwia ustawienie typów analizy do wykonania na obrazie. Typowe wartości to VisualFeatureTypes.tags
i VisualFeatureTypes.description
.
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"
image_analysis = client.analyze_image(url,visual_features=[VisualFeatureTypes.tags])
for tag in image_analysis.tags:
print(tag)
Pobieranie listy domen tematycznych
Za pomocą operacji list_models
można przejrzeć domeny tematyczne używane do analizy obrazu. Te nazwy domen są używane podczas analizowania obrazu według domeny. Przykładowa domena to landmarks
.
models = client.list_models()
for x in models.models_property:
print(x)
Analizowanie obrazu według domeny
Za pomocą operacji analyze_image_by_domain
można analizować obraz według domeny tematycznej. Prawidłowe nazwy domen można znaleźć na liście obsługiwanych domen tematycznych.
domain = "landmarks"
url = "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg"
language = "en"
analysis = client.analyze_image_by_domain(domain, url, language)
for landmark in analysis.result["landmarks"]:
print(landmark["name"])
print(landmark["confidence"])
Pobieranie tekstu opisu obrazu
Za pomocą operacji describe_image
można uzyskać opis językowy obrazu. Przy użyciu właściwości max_description
można pobrać kilka opisów w przypadku przeprowadzania analizy tekstu pod kątem słów kluczowych skojarzonych z obrazem. Przykładowe opisy tekstowe dla następującego obrazu to a train crossing a bridge over a body of water
, a large bridge over a body of water
i a train crossing a bridge over a large body of water
.
domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3
analysis = client.describe_image(url, max_descriptions, language)
for caption in analysis.captions:
print(caption.text)
print(caption.confidence)
Pobieranie tekstu z obrazu
Można wyodrębnić dowolny odręczny lub drukowany tekst znajdujący się na obrazie. Wymaga to dwóch wywołań zestawu SDK: read
i get_read_result
. Wywołanie odczytu jest asynchroniczne. W wynikach wywołania get_read_result należy sprawdzić, czy pierwsze wywołanie zostało zakończone OperationStatusCodes
przed wyodrębnianiem danych tekstowych. Wyniki obejmują tekst oraz współrzędne pola ograniczenia tekstu.
# import models
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
url = "https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/raw/master/samples/vision/images/make_things_happen.jpg"
raw = True
numberOfCharsInOperationId = 36
# SDK call
rawHttpResponse = client.read(url, language="en", raw=True)
# Get ID from returned headers
operationLocation = rawHttpResponse.headers["Operation-Location"]
idLocation = len(operationLocation) - numberOfCharsInOperationId
operationId = operationLocation[idLocation:]
# SDK call
result = client.get_read_result(operationId)
# Get data
if result.status == OperationStatusCodes.succeeded:
for line in result.analyze_result.read_results[0].lines:
print(line.text)
print(line.bounding_box)
Generowanie miniatury
Za pomocą operacji generate_thumbnail
można wygenerować miniaturę obrazu w formacie JPG. Miniatura nie musi mieć takich samych proporcji co oryginalny obraz.
W tym przykładzie użyto pakietu Pillow, aby zapisać lokalnie nowy obraz miniatury.
from PIL import Image
import io
width = 50
height = 50
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
thumbnail = client.generate_thumbnail(width, height, url)
for x in thumbnail:
image = Image.open(io.BytesIO(x))
image.save('thumbnail.jpg')
Rozwiązywanie problemów
Ogólne
W przypadku interakcji z obiektem klienta ComputerVisionClient przy użyciu zestawu SDK ComputerVisionErrorException
języka Python klasa jest używana do zwracania błędów. Błędy zwracane przez tę usługę odpowiadają kodom stanu HTTP zwracanym dla żądań interfejsu API REST.
Na przykład jeśli spróbujesz przeprowadzić analizę obrazu za pomocą nieprawidłowego klucza, zostanie zwrócony błąd 401
. W poniższym fragmencie kodu przedstawiono bezpieczną obsługę błędu opartą na przechwyceniu wyjątku i wyświetleniu dodatkowych informacji o błędzie.
domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3
try:
analysis = client.describe_image(url, max_descriptions, language)
for caption in analysis.captions:
print(caption.text)
print(caption.confidence)
except HTTPFailure as e:
if e.status_code == 401:
print("Error unauthorized. Make sure your key and region are correct.")
else:
raise
Obsługa błędów przejściowych z logiką ponawiania próby
Podczas pracy z klientem ComputerVisionClient mogą wystąpić przejściowe błędy spowodowane przez limity szybkości wymuszone przez usługę lub inne przejściowe problemy, takie jak awarie sieci. Aby uzyskać informacje na temat obsługi takich błędów, zobacz temat Wzorzec ponawiania w przewodniku po wzorcach projektowych opartych na chmurze i powiązany temat Wzorzec wyłącznika.
Następne kroki
Więcej przykładów kodu
Kilka przykładów dotyczących zestawu SDK przetwarzania obrazów dla języka Python jest dostępnych w repozytorium GitHub zestawu SDK. Zawierają one przykładowy kod dla innych scenariuszy, często występujących podczas korzystania z przetwarzania obrazów:
Dodatkowa dokumentacja
Więcej informacji o usłudze przetwarzania obrazów można znaleźć w dokumentacji dotyczącej przetwarzania obrazów na platformie Azure dostępnej w witrynie docs.microsoft.com.
Azure SDK for Python