Python ile Vision API'yi kullanma

1. Genel Bakış

5ab7829fc22b21c4.png

Vision API, geliştiricilerin görsel algılama özelliklerini uygulamalara kolayca entegre etmelerini sağlar. Bu özellikler arasında görüntü etiketleme, yüz ve önemli nokta algılama, optik karakter tanıma (OCR) ve uygunsuz içeriği etiketleme yer alır.

Bu eğitimde, Vision API'yi Python ile kullanmaya odaklanacaksınız.

Neler öğreneceksiniz?

  • Ortamınızı ayarlama
  • Etiket algılama nasıl yapılır?
  • Metin algılama nasıl yapılır?
  • Önemli nokta algılama nasıl yapılır?
  • Yüz algılama nasıl yapılır?
  • Nesne algılama nasıl yapılır?

Gerekenler

  • Google Cloud projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Python kullanma konusunda bilgi sahibi olma

Anket

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyun ve alıştırmaları tamamlayın

Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Kurulum ve şartlar

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de bulutta çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i 853e55310c205094.png tıklayın.

55efc1aaa7a4d3ad.png

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

9c92662c6a846a5c.png

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

9f0e51b578fecce5.png

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.

  1. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Ortam kurulumu

Vision API'yi kullanmaya başlamadan önce API'yi etkinleştirmek için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud services enable vision.googleapis.com

Aşağıdakine benzer bir tablo görürsünüz:

Operation "operations/..." finished successfully.

Artık Vision API'yi kullanabilirsiniz.

Ana dizininize gidin:

cd ~

Bağımlılıkları izole etmek için Python sanal ortamı oluşturun:

virtualenv venv-vision

Sanal ortamı etkinleştirin:

source venv-vision/bin/activate

IPython'ı ve Vision API istemci kitaplığını yükleyin:

pip install ipython google-cloud-vision

Aşağıdakine benzer bir tablo görürsünüz:

...
Installing collected packages: ..., ipython, google-cloud-vision
Successfully installed ... google-cloud-vision-3.4.0 ...

Artık Vision API istemci kitaplığını kullanmaya hazırsınız.

Sonraki adımlarda, önceki adımda yüklediğiniz IPython adlı etkileşimli bir Python yorumlayıcısı kullanacaksınız. Cloud Shell'de ipython komutunu çalıştırarak bir oturum başlatın:

ipython

Aşağıdakine benzer bir tablo görürsünüz:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

İlk isteğinizi göndermeye hazırsınız...

4. Etiket algılama gerçekleştirme

Vision API'nin temel özelliklerinden biri, bir resimdeki nesneleri veya öğeleri tanımlamaktır. Bu işleme etiket açıklaması denir. Etiket algılama; genel nesneleri, konumları, etkinlikleri, hayvan türlerini, ürünleri ve daha fazlasını tanımlar. Vision API, giriş görüntüsünü alır ve bu görüntü için geçerli olan en olası etiketleri döndürür. Görüntüyle en iyi eşleşen etiketleri ve eşleşmenin güven puanını döndürür.

Bu örnekte, Tokyo'nun popüler bir bölgesi olan Setagaya'nın Alex Knight tarafından çekilen bir fotoğrafında etiket algılama işlemi gerçekleştireceksiniz:

756f97f0b1e46c38.jpeg

Aşağıdaki kodu IPython oturumunuza kopyalayın:

from typing import Sequence

from google.cloud import vision


def analyze_image_from_uri(
    image_uri: str,
    feature_types: Sequence,
) -> vision.AnnotateImageResponse:
    client = vision.ImageAnnotatorClient()

    image = vision.Image()
    image.source.image_uri = image_uri
    features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
    request = vision.AnnotateImageRequest(image=image, features=features)

    response = client.annotate_image(request=request)

    return response


def print_labels(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for label in response.label_annotations:
        print(
            f"{label.score:4.0%}",
            f"{label.description:5}",
            sep=" | ",
        )
        

Kodu inceleyerek annotate_image istemci kitaplığı yönteminin, belirli bir özellikler grubu için resmi nasıl analiz ettiğini öğrenin.

LABEL_DETECTION özelliğini kullanarak istek gönderme:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_labels(response)

Çıkış şu şekilde olmalıdır:

================================================================================
 97% | Bicycle
 96% | Tire
 94% | Wheel
 91% | Automotive lighting
 89% | Infrastructure
 87% | Bicycle wheel
 86% | Mode of transport
 85% | Building
 83% | Electricity
 82% | Neighbourhood

Sonuçlar, online demo tarafından şu şekilde sunulur:

2191b0425c9c148f.png

Özet

Bu adımda, bir görüntü üzerinde etiket algılama işlemi gerçekleştirebildiniz ve bu görüntüyle ilişkili en olası etiketleri görüntüleyebildiniz. Etiket algılama hakkında daha fazla bilgi edinin.

5. Metin algılama gerçekleştirme

Metin algılama, Optik Karakter Tanıma (OCR) gerçekleştirir. Çok çeşitli dillerde destek sunarak resimlerdeki metinleri algılayıp ayıklar. Ayrıca otomatik dil tanımlama özelliği de bulunur.

Bu örnekte, bir trafik işareti resminde metin algılama işlemi gerçekleştireceksiniz:

4dedd3fcfd9ad99b.jpeg

Aşağıdaki kodu IPython oturumunuza kopyalayın:

def print_text(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for annotation in response.text_annotations:
        vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
        print(
            f"{repr(annotation.description):42}",
            ",".join(vertices),
            sep=" | ",
        )
        

TEXT_DETECTION özelliğini kullanarak istek gönderme:

image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_text(response)

Çıkış şu şekilde olmalıdır:

================================================================================
'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965)
'WAITING'                                  | (344,821),(2025,879),(2016,1127),(335,1069)
'?'                                        | (2057,881),(2225,887),(2216,1134),(2048,1128)
'PLEASE'                                   | (1208,1230),(1895,1253),(1891,1374),(1204,1351)
'TURN'                                     | (1217,1414),(1718,1434),(1713,1558),(1212,1538)
'OFF'                                      | (1787,1437),(2133,1451),(2128,1575),(1782,1561)
'YOUR'                                     | (1211,1609),(1741,1626),(1737,1747),(1207,1731)
'ENGINE'                                   | (1213,1805),(1923,1819),(1920,1949),(1210,1935)

Sonuçlar, online demo tarafından şu şekilde sunulur:

9c70fbce871c5fe5.png

Özet

Bu adımda, bir resimde metin algılama işlemi yapıp resimdeki algılanan metni görüntüleyebildiniz. Metin algılama hakkında daha fazla bilgi edinin.

6. Önemli nokta algılama gerçekleştirme

Önemli nokta algılama, resimdeki popüler doğal ve yapay yapıları algılar.

Bu örnekte, Eyfel Kulesi'nin John Towner tarafından çekilmiş bir fotoğrafında önemli nokta tespiti yapacaksınız:

fb7801e36884b875.jpeg

Aşağıdaki kodu IPython oturumunuza kopyalayın:

def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
    print("=" * 80)
    for landmark in response.landmark_annotations:
        if landmark.score < min_score:
            continue
        vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
        lat_lng = landmark.locations[0].lat_lng
        print(
            f"{landmark.description:18}",
            ",".join(vertices),
            f"{lat_lng.latitude:.5f}",
            f"{lat_lng.longitude:.5f}",
            sep=" | ",
        )
        

LANDMARK_DETECTION özelliğini kullanarak istek gönderme:

image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)

Çıkış şu şekilde olmalıdır:

================================================================================
Trocadéro Gardens  | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928
Eiffel Tower       | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435

Sonuçlar, online demo tarafından şu şekilde sunulur:

2788697365670985.png

Özet

Bu adımda, Eyfel Kulesi'nin görüntüsünde önemli nokta algılama işlemi gerçekleştirdiniz. Önemli nokta algılama hakkında daha fazla bilgi edinin.

7. Yüz algılama gerçekleştirme

Yüz özellikleri algılama, bir resimdeki birden fazla yüzü ve duygusal durum veya başlık takma gibi ilişkili temel yüz özelliklerini algılar.

Bu örnekte, aşağıdaki resimde yüzleri algılayacaksınız (Himanshu Singh Gurjar'ın izniyle):

58c578ece524cf32.jpeg

Aşağıdaki kodu IPython oturumunuza kopyalayın:

def print_faces(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for face_number, face in enumerate(response.face_annotations, 1):
        vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
        print(f"# Face {face_number} @ {vertices}")
        print(f"Joy:     {face.joy_likelihood.name}")
        print(f"Exposed: {face.under_exposed_likelihood.name}")
        print(f"Blurred: {face.blurred_likelihood.name}")
        print("-" * 80)
        

FACE_DETECTION özelliğini kullanarak istek gönderme:

image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_faces(response)

Çıkış şu şekilde olmalıdır:

================================================================================
# Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399)
Joy:     VERY_LIKELY
Exposed: VERY_UNLIKELY
Blurred: VERY_UNLIKELY
--------------------------------------------------------------------------------
# Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844)
Joy:     VERY_UNLIKELY
Exposed: VERY_UNLIKELY
Blurred: UNLIKELY
--------------------------------------------------------------------------------
# Face 3 @ (785,167),(1100,167),(1100,534),(785,534)
Joy:     VERY_UNLIKELY
Exposed: LIKELY
Blurred: VERY_LIKELY
--------------------------------------------------------------------------------

Sonuçlar, online demo tarafından şu şekilde sunulur:

cbb7f59299651b83.png

Özet

Bu adımda yüz algılama işlemini gerçekleştirebildiniz. Yüz algılama hakkında daha fazla bilgi edinin.

8. Nesne algılama gerçekleştirme

Bu örnekte, Setagaya'nın aynı önceki görüntüsünde (Alex Knight'ın izniyle) nesne algılama işlemi gerçekleştireceksiniz:

756f97f0b1e46c38.jpeg

Aşağıdaki kodu IPython oturumunuza kopyalayın:

def print_objects(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for obj in response.localized_object_annotations:
        nvertices = obj.bounding_poly.normalized_vertices
        print(
            f"{obj.score:4.0%}",
            f"{obj.name:15}",
            f"{obj.mid:10}",
            ",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
            sep=" | ",
        )
        

OBJECT_LOCALIZATION özelliğini kullanarak istek gönderme:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]

response = analyze_image_from_uri(image_uri, features)
print_objects(response)

Çıkış şu şekilde olmalıdır:

================================================================================
 93% | Bicycle         | /m/0199g   | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9)
 92% | Bicycle wheel   | /m/01bqk0  | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9)
 91% | Tire            | /m/0h9mv   | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0)
 75% | Bicycle         | /m/0199g   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
 51% | Tire            | /m/0h9mv   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)

Sonuçlar, online demo tarafından şu şekilde sunulur:

e1c2ca803d874a6b.png

Özet

Bu adımda nesne algılama işlemini gerçekleştirebildiniz. Nesne algılama hakkında daha fazla bilgi edinin.

9. Birden fazla özellik

Vision API'nin bazı özelliklerinin nasıl kullanılacağını gördünüz. Ancak daha birçok özellik var ve tek bir istekte birden fazla özellik isteyebilirsiniz.

Tüm analizleri tek seferde almak için yapabileceğiniz istek türü aşağıda verilmiştir:

image_uri = "gs://..."
features = [
    vision.Feature.Type.OBJECT_LOCALIZATION,
    vision.Feature.Type.FACE_DETECTION,
    vision.Feature.Type.LANDMARK_DETECTION,
    vision.Feature.Type.LOGO_DETECTION,
    vision.Feature.Type.LABEL_DETECTION,
    vision.Feature.Type.TEXT_DETECTION,
    vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
    vision.Feature.Type.SAFE_SEARCH_DETECTION,
    vision.Feature.Type.IMAGE_PROPERTIES,
    vision.Feature.Type.CROP_HINTS,
    vision.Feature.Type.WEB_DETECTION,
    vision.Feature.Type.PRODUCT_SEARCH,
    vision.Feature.Type.OBJECT_LOCALIZATION,
]

# response = analyze_image_from_uri(image_uri, features)

Ayrıca, bir grup resimde eşzamanlı veya eşzamansız olarak algılama gerçekleştirme gibi başka olasılıklar da vardır. Tüm nasıl yapılır kılavuzlarına göz atın.

10. Tebrikler!

5ab7829fc22b21c4.png

Python ile Vision API'yi nasıl kullanacağınızı öğrendiniz ve birkaç görüntü algılama özelliğini test ettiniz.

Temizleme

Geliştirme ortamınızda yer açmak için Cloud Shell'de:

  • IPython oturumunuz hâlâ açıksa kabuğa geri dönün: exit
  • Python sanal ortamını kullanmayı durdurun: deactivate
  • Sanal ortam klasörünüzü silin: cd ~ ; rm -rf ./venv-vision

Google Cloud projenizi silmek için Cloud Shell'de:

  • Mevcut proje kimliğinizi alın: PROJECT_ID=$(gcloud config get-value core/project)
  • Silmek istediğiniz projenin echo $PROJECT_ID olduğundan emin olun.
  • Projeyi silme: gcloud projects delete $PROJECT_ID

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.