YZ02: Clarifai API ile Adriana Lima’yı Tanıyan Yapay Zeka Uygulaması

YZ00: Yapay Zeka’ya Giriş

YZ01: Derin Öğrenme ile Resimdeki Objeyi Tanıma

YZ02: Clarifai API ile Adrina Lima’yı Tanıyan Yapay Zeka Uygulaması

Merhabalar! Bir önceki yazıda hatırlayacağınız üzere “Derin Öğrenme ile Resimdeki Objeyi Tanıma” ile ilgili pratik bir örnek yapmıştık. Bu yazıdan çıkarılacak en güzel sonuç; eğer elimizde yeterli veri varsa Convolutional Neual Network (CNN) ile resimlerdeki nesneleri tespit edebiliriz. Bu yazıda Clarifai adında bir siteden bahsedeceğim. Bu site sayesinde önceden eğitilmiş bir derin öğrenme ağını, kendi geliştirdiğiniz uygulamalarda kullanabiliyoruz. Bunu Clarifai’ın bize sunmuş olduğu API (Application Programming Interface) yani Uygulama Programlama Arayüzü ile gerçekleştirebiliriz. Bunu yapmak için ihtiyacımız olan tek şey Clarifai sitesinden bir ücretsiz hesap açıp API anahtarı (API key) almak ve daha sonra bu API anahtarı ile birkaç satır Python kodu ile uygulama geliştirmektir. Bu yazıda Clarifai API kullanarak bir resmin içeriğinin ne olduğu ya da ne ile ilişkili olduğunu anlayacak, resimde bulunan ünlünün kim olduğunu ve  insan yüzlerini tespit edeceğiz. Hadi başlayalım.

1. Adım: Clarifai Sitesine Üye Olma ve API Anahtarı Alma

İlk önce https://developer.clarifai.com/signup/ adresinden siteye üye oluyoruz. Üye olduktan sonra https://developer.clarifai.com/account/api-keys adresinden “Create New API Key” butonuna tıklayarak API anahtarımızı oluşturuyoruz. Bu butona tıkladıktan birkaç saniye aynı sayfada API anahtarınızı görebilirsiniz. Sayfada yer alan “COPY TO CLIPBOARD” linkine tıklayarak API anahtarımızı panoya kopyalayalım.

2. Adım: Python’a Clarifai Modülünü Yükleme

Python ile Clarifai modülünü kullanabilmek için pip komutu ile yükleme yapmamız gerekiyor.

pip install clarifai

3. Adım: KODLAMA

from clarifai.rest import ClarifaiApp

# app isminde Clarifai uygulaması tanımlayalım.
# API_ANAHTARINIZ yazan kısma kendi API anahtarınızı giriniz.
app = ClarifaiApp(api_key='API_ANAHTARINIZ')

# clarifai modellerinden genel (general) olanı seçelim ve tanımlayalım.
model = app.models.get("general-v1.3")

# linkte bulunan resmin içerisinde nelerin olduğunu tespit edelim.
model.predict_by_url(url='https://samples.clarifai.com/metro-north.jpg')

Burada kullandığımız fotoğraf aşağıdadır. İsterseniz son satırda yer alan resim linkini değiştirerek istediğiniz başka bir resmi kullanabilirsiniz. Yukarıdaki kodları çalıştırdığımızda aşağıdaki sonucu elde ederiz.

{'outputs': [{'created_at': '2017-07-15T15:11:06.439104784Z',
'data': {'concepts': [{'app_id': 'main',
'id': 'ai_HLmqFqBf',
'name': 'train',
'value': 0.9989112},
{'app_id': 'main',
'id': 'ai_fvlBqXZR',
'name': 'railway',
'value': 0.9975532},
{'app_id': 'main',
'id': 'ai_Xxjc3MhT',
'name': 'transportation system',
'value': 0.9959158},
{'app_id': 'main',
'id': 'ai_6kTjGfF6',
'name': 'station',
'value': 0.992573},
{'app_id': 'main',
'id': 'ai_RRXLczch',
'name': 'locomotive',
'value': 0.992556},
{'app_id': 'main',
'id': 'ai_VRmbGVWh',
'name': 'travel',
'value': 0.98789215},
{'app_id': 'main',
'id': 'ai_SHNDcmJ3',
'name': 'subway system',
'value': 0.9816359},
{'app_id': 'main',
'id': 'ai_jlb9q33b',
'name': 'commuter',
'value': 0.9712483},
{'app_id': 'main',
'id': 'ai_46lGZ4Gm',
'name': 'railroad track',
'value': 0.9690325},
{'app_id': 'main',
'id': 'ai_tr0MBp64',
'name': 'traffic',
'value': 0.9687052},
{'app_id': 'main',
'id': 'ai_l4WckcJN',
'name': 'blur',
'value': 0.9667078},
{'app_id': 'main',
'id': 'ai_2gkfMDsM',
'name': 'platform',
'value': 0.9624243},
{'app_id': 'main',
'id': 'ai_CpFBRWzD',
'name': 'urban',
'value': 0.960752},
{'app_id': 'main',
'id': 'ai_786Zr311',
'name': 'no person',
'value': 0.95864904},
{'app_id': 'main',
'id': 'ai_6lhccv44',
'name': 'business',
'value': 0.95720303},
{'app_id': 'main',
'id': 'ai_971KsJkn',
'name': 'track',
'value': 0.9494642},
{'app_id': 'main',
'id': 'ai_WBQfVV0p',
'name': 'city',
'value': 0.94089437},
{'app_id': 'main',
'id': 'ai_dSCKh8xv',
'name': 'fast',
'value': 0.9399334},
{'app_id': 'main',
'id': 'ai_TZ3C79C6',
'name': 'road',
'value': 0.93121606},
{'app_id': 'main',
'id': 'ai_VSVscs9k',
'name': 'terminal',
'value': 0.9230834}]},
'id': 'f48dbde48993412bb7940847b578406a',
'input': {'data': {'image': {'url': 'https://samples.clarifai.com/metro-north.jpg'}},
'id': 'd980f49c3dd7433da48501e3c9bea9f2'},
'model': {'app_id': 'main',
'created_at': '2016-03-09T17:11:39.608845Z',
'id': 'aaa03c23b3724a16a56b629203edc62c',
'model_version': {'created_at': '2016-07-13T01:19:12.147644Z',
'id': 'aa9ca48295b37401f8af92ad1af0d91d',
'status': {'code': 21100, 'description': 'Model trained successfully'}},
'name': 'general-v1.3',
'output_info': {'message': 'Show output_info with: GET /models/{model_id}/output_info',
'type': 'concept',
'type_ext': 'concept'}},
'status': {'code': 10000, 'description': 'Ok'}}],
'status': {'code': 10000, 'description': 'Ok'}}

Elde edilen sonuçlardan; name değeri resmin içeriğini  ve value değeri ise bu içeriğin olma olasılığını göstermektedir. Görüldüğü üzere resmin içeriğinin;

  • tren olma olasılığı %99.8
  • tren yolu olma olasılığı %99.7
  • ulaşım sistemi olma olasılığı %99.5
  • istasyon olma olasılığı %99.2
  • lokomotif olma olasılığı %99.2
  • seyahat olma olasılığı %98.7
  • yeraltı ulaşım sistemi olma olasılığı %98.1
  • banliyö olma olasılığı %97.1
  • demiryolu hattı olma olasılığı %96.9

olarak bulunmuştur.

Uygulamamızda genel (general) modelini kullandığımız için resmin alakalı olabileceği her şey bize gösterilmektedir. https://developer.clarifai.com/models adresinden farklı amaçlar için kullanabileceğiniz modelleri inceleyebilirsiniz.

Son bir örnek olarak da ünlü tespiti ve yüz tespiti modellerini kullanalım.

Tanımak istediğimiz fotoğraf aşağıdaki olsun.

 

from clarifai.rest import Image as CImage

# model isminde ünlü tespiti (celeb) modelini tanımlayalım.
model = app.models.get('celeb-v1.3')

# tanımak istediğimiz resmin adresini girelim.
image = CImage(url='<a href="https://yapaybot.files.wordpress.com/2017/07/adriana-sli-y.jpg">https://yapaybot.files.wordpress.com/2017/07/adriana-sli-y.jpg</a>')

# tahmin değerini alalım.
model.predict([image])

Yukarıdaki kodları çalıştırdığımızda

{'outputs': [{'created_at': '2017-07-15T16:09:15.184348284Z',
'data': {'regions': [{'data': {'face': {'identity': {'concepts': [{'app_id': 'main',
'id': 'ai_Tg4J3FCK',
'name': 'adriana lima',
'value': 0.9589615},
{'app_id': 'main',
'id': 'ai_w84mHCKc',
'name': 'leonor varela',
'value': 0.0014038313},
{'app_id': 'main',
'id': 'ai_j3sf74SH',
'name': 'alessandra ambrosio',
'value': 0.00045751734} 

Sonucunu elde ederiz. Görüldüğü üzere resimde %95.8 ihtimalle Adriana Lima olduğu tespit edilmiştir. Uygulama sadece dünyaca ünlü yıldızların fotoğraflarıyla eğitildiği için fotoğraftaki diğer yüzlerin kim olduğunu anlayamamıştır.

Son olarak da resimde insan yüzü var mı, eğer varsa nerededir sorusunun cevabını bulalım. Bunun için face modelini kullanacağız.

model = app.models.get('face-v1.3')
image = CImage(url='https://yapaybot.files.wordpress.com/2017/07/adriana-sli-y.jpg')
model.predict([image])

Yukarıdaki kodları çalıştırdığımızda şöyle bir sonuç elde ederiz:

{'outputs': [{'created_at': '2017-07-16T06:43:47.578338270Z',
'data': {'regions': [{'id': 'mq3axtov2d9k',
'region_info': {'bounding_box': {'bottom_row': 0.3981454,
'left_col': 0.32587856,
'right_col': 0.44594482,
'top_row': 0.18118261}}},
{'id': 'zrupdlffzvny',
'region_info': {'bounding_box': {'bottom_row': 0.43534854,
'left_col': 0.57634884,
'right_col': 0.7144126,
'top_row': 0.18559231}}},
{'id': '1ilyduk8mh6z',
'region_info': {'bounding_box': {'bottom_row': 0.4969634,
'left_col': 0.14929585,
'right_col': 0.23674941,
'top_row': 0.33896193}}}]},
'id': 'b45649f5d1814d1c9dc9a766476b51f8',
'input': {'data': {'image': {'url': 'https://yapaybot.files.wordpress.com/2017/07/adriana-sli-y.jpg'}},
'id': 'b2ecbf5e98b645f3ad04515b7e78b326'},
'model': {'app_id': 'main',
'created_at': '2016-10-25T19:30:38.541073Z',
'id': 'a403429f2ddf4b49b307e318f00e528b',
'model_version': {'created_at': '2016-10-25T19:30:38.541073Z',
'id': 'c67b5872d8b44df4be55f2b3de3ebcbb',
'status': {'code': 21100, 'description': 'Model trained successfully'}},
'name': 'face-v1.3',
'output_info': {'message': 'Show output_info with: GET /models/{model_id}/output_info',
'type': 'facedetect',
'type_ext': 'facedetect'}},
'status': {'code': 10000, 'description': 'Ok'}}],
'status': {'code': 10000, 'description': 'Ok'}}

Sonuçlardan görüldüğü üzere bu resimde 3 adet yüz tespit edilmiştir. Yüzlerin nerede olduğunu belirtmek için de dikdörtgenin sol alt ve üst ile sağ alt ve üst koordinatları verilmiştir.

Not: Yüz tespitinde kullanılan koordinatları kullanarak resimde python ile dikdörtgen çizmeyi henüz başaramadım. Onu da yapınca buraya ekleyeceğim.

Güncelleme (23.07.2017): Koordinatlardan yola çıkarak resim üzerine yüzleri gösterecek şekilde kutucuklar eklendi.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s