1. Genel Bakış

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?
Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- 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.



- 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_IDolarak 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.
- 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
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.

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.

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

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.
- 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`
- 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:

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:

Ö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:

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:

Ö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:

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:

Ö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):

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:

Ö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:

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:

Ö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!

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_IDolduğundan emin olun. - Projeyi silme:
gcloud projects delete $PROJECT_ID
Daha Fazla Bilgi
- Tarayıcınızda online demoyu test edin: https://cloud.google.com/vision
- Vision API belgeleri: https://cloud.google.com/vision/docs
- Google Cloud'da Python: https://cloud.google.com/python
- Python için Cloud İstemci Kitaplıkları: https://github.com/googleapis/google-cloud-python
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.