Google Cloud Vision ve Python ile Güçlü Görüntü Analizi

Yayınlanan: 2022-03-10
Kısa özet ↬ Google Cloud Vision hizmetini uygulama olanaklarının kapsamı neredeyse sınırsızdır. Python Kitaplığı mevcut olduğunda, Makine Öğrenimi teknolojilerine daha fazla ilgi göstermenize kesinlikle yardımcı olabilir.

Kısa bir süre önce, kullanıcının kişisel harcamalarını yönetmek için bir web uygulaması geliştirdim. Başlıca özellikleri, alışveriş makbuzlarını taramak ve daha sonraki işlemler için verileri çıkarmaktır. Google Vision API, bir fotoğraftan metin almak için harika bir araç oldu. Bu yazımda örnek bir projede Python ile geliştirme süreci boyunca size rehberlik edeceğim.

Acemi iseniz, endişelenmeyin. Bu programlama dili hakkında yalnızca çok temel bir bilgiye ihtiyacınız olacak - başka hiçbir beceriye gerek duymadan.

Hadi başlayalım, olur mu?

Google Cloud Vision'ı Hiç Duymadınız mı?

Geliştiricilerin, çıkarılan veriler aracılığıyla bir görüntünün içeriğini analiz etmelerini sağlayan bir API'dir. Bu amaçla Google, büyük bir resim veri kümesi üzerinde eğitilmiş makine öğrenimi modellerini kullanır. Tüm bunlar tek bir API isteği ile kullanılabilir. API'nin arkasındaki motor, görüntüleri sınıflandırır, nesneleri, insanların yüzlerini algılar ve görüntülerdeki basılı sözcükleri tanır.

Size bir örnek vermek gerekirse, çok sevilen Giphy'yi gündeme getirelim. GIF'lerden altyazı verilerini çıkarmak için API'yi benimsediler, bu da kullanıcı deneyiminde önemli bir gelişme sağladı. Başka bir örnek, mülk hakkında daha fazla ayrıntı sağlamak için bir mobil uygulamada çekilen Satılık tabelalarının görüntülerinden metin çıkarmak için Vision API'sinin OCR'sini kullanan realtor.com'dur.

Bir Bakışta Makine Öğrenimi

Çoğunuzun muhtemelen daha önce duymuş olduğu soruyu yanıtlayarak başlayalım: Makine Öğrenimi nedir?

Genel fikir, verilen verilerde kalıpları bulan programlanabilir bir model geliştirmektir. Ne kadar kaliteli veri gönderirseniz ve kullandığınız modelin tasarımı ne kadar iyi olursa, o kadar akıllı sonuç üretilir. 'Dostu makine öğrenimi' ile (Google'ın API hizmetleri aracılığıyla Makine Öğrenimi dediği gibi), uygulamalarınıza bir miktar Yapay Zekayı kolayca dahil edebilirsiniz.

Önerilen okuma : Makine Öğrenmesine Başlarken

Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

Google Cloud'a Nasıl Başlanır?

Google Cloud'a kayıt ile başlayalım. Google, kimlik doğrulama gerektirir, ancak bu basit ve zahmetsizdir; yalnızca, doğrudan Google Bulut Platformu'ndan alabileceğiniz API anahtarı içeren bir JSON dosyasını saklamanız gerekir.

Dosyayı indirin ve yolunu ortam değişkenlerine ekleyin:

 export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json

Alternatif olarak, geliştirme aşamasında, bu makalede daha ayrıntılı anlatacağım from_serivce_account_json() yöntemiyle kendinizi destekleyebilirsiniz. Kimlik doğrulama hakkında daha fazla bilgi edinmek için Cloud'un resmi belgelerine bakın.

Google, API ile başa çıkmak için bir Python paketi sağlar. Uygulamanıza google-cloud-vision==0.33'ün en son sürümünü ekleyelim. Kodlama zamanı!

Google Cloud Vision ile Python Nasıl Birleştirilir

İlk olarak, kütüphaneden sınıfları içe aktaralım.

 from google.cloud import vision from google.cloud.vision import types

Bu halledildiğinde, şimdi bir istemci örneğine ihtiyacınız olacak. Bunu yapmak için bir metin tanıma özelliği kullanacaksınız.

 client = vision.ImageAnnotatorClient()

Kimlik bilgilerinizi ortam değişkenlerinde saklamayacaksanız, bu aşamada doğrudan istemciye ekleyebilirsiniz.

 client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )

Proje kataloğunuzdaki 'images' klasöründe işlenecek görselleri sakladığınızı varsayarak bir tanesini açalım.

Google Cloud Vision tarafından işlenebilecek makbuzun resmi
Google Cloud Vision tarafından işlenebilecek basit bir makbuz örneği. (Büyük önizleme)
 image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()

Sonraki adım, metin tanımaya devam etmek için bir istek göndermenize izin verecek bir Vision nesnesi oluşturmaktır.

 image = vision.types.Image(content=content) text_response = client.text_detection(image=image)

Yanıt, tanımlama anahtarları olarak saklanan algılanan sözcüklerden, görüntü üzerindeki konumlarından ve bir dil tahmininden oluşur. Örneğin, ilk kelimeye daha yakından bakalım:

 [ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]

Gördüğünüz gibi, yalnızca metni filtrelemek için “tüm öğeler üzerinde” bir açıklama almanız gerekir. Neyse ki, Python'un güçlü liste kavrayışı yardımla geliyor.

 texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']

Dikkatli bakarsanız, listenin ilk öğesinin, görüntüde algılanan tüm metinlerin bir dize olarak saklandığını, diğerlerinin ise ayrılmış sözcükler olduğunu fark edebilirsiniz. Çıktısını alalım.

 print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS

Oldukça doğru, değil mi? Ve açıkçası oldukça faydalı, o yüzden daha fazla oynayalım.

Google Cloud Vision'dan Neler Alabilirsiniz?

Yukarıda bahsettiğim gibi, Google Cloud Vision sadece metni tanımakla ilgili değil, aynı zamanda yüzleri, yer işaretlerini, görüntü özelliklerini ve web bağlantılarını keşfetmenize de izin veriyor. Bunu akılda tutarak, görüntünün web ilişkileri hakkında size neler söyleyebileceğini öğrenelim.

 web_response = client.web_detection(image=image)

Tamam Google, aldığınız resimde ne gösterildiğini gerçekten biliyor musunuz?

 web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]

İyi iş, Google! Bu gerçekten bir makbuz. Ama size biraz daha egzersiz yapalım - başka bir şey görebiliyor musunuz? Yüzde olarak ifade edilen daha fazla tahmine ne dersiniz?

 predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]

Bir sürü değerli içgörü, aferin, yüce arkadaşım! Ayrıca görüntünün nereden geldiğini ve herhangi bir kopyası olup olmadığını öğrenebilir misiniz?

 web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]

Etkilendim. Teşekkürler, Google! Ama bir tane yetmez, bana benzer resimlerden üç tane örnek verebilir misiniz?

 web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]

Tatlı! Aferin.

Google Cloud Vision'da Gerçekten Yapay Zeka Var mı?

Aşağıdaki resimde de görebileceğiniz gibi, makbuzlarla uğraşmak biraz duygusal olabilir.

Uzun bir makbuz tutarken çığlık atan ve stresli görünen adam
Makbuz alırken yaşayabileceğiniz bir stres örneği. (Büyük önizleme)

Gelin, Vision API'nin bu fotoğraf hakkında size neler söyleyebileceğine bir göz atalım.

 image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769

Fena değil, algoritma resimde bir yüz olduğundan %50'den fazla emin. Ama arkasındaki duygular hakkında bir şeyler öğrenebilir misin?

 face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]

Şaşırtıcı bir şekilde, basit bir komutla, şapka veya fotoğraf özelliklerinin yanı sıra bazı temel duyguların olasılığını da kontrol edebilirsiniz.

Konu yüzlerin algılanması olduğunda, dikkatinizi karşılaşabileceğiniz bazı olası sorunlara yönlendirmem gerekiyor. Bir makineye fotoğraf teslim ettiğinizi ve Google'ın API'si çok büyük veri kümeleri üzerinde eğitilmiş modeller kullanmasına rağmen, bazı beklenmedik ve yanıltıcı sonuçlar vermesi olasıdır. Görüntü analizi söz konusu olduğunda yapay zekanın ne kadar kolay kandırılabileceğini gösteren fotoğrafları internette bulabilirsiniz. Bazıları komik bulunabilir, ancak masum ve saldırgan hatalar arasında ince bir çizgi vardır, özellikle de bir insan yüzüyle ilgili bir hata olduğunda.

Şüphesiz, Google Cloud Vision sağlam bir araçtır. Üstelik onunla çalışmak çok eğlenceli. API'nin REST mimarisi ve yaygın olarak bulunan Python paketi, Python geliştirmede ne kadar gelişmiş olursanız olun, onu herkes için daha da erişilebilir hale getirir. Yeteneklerini kullanarak uygulamanızı ne kadar önemli ölçüde geliştirebileceğinizi hayal edin!

Önerilen okuma : Tasarımcılar için Makine Öğrenimi Uygulamaları

Google Cloud Vision'da Bilginizi Nasıl Genişletebilirsiniz?

Google Cloud Vision hizmetini uygulama olanaklarının kapsamı neredeyse sınırsızdır. Mevcut Python Kitaplığı ile, ister web uygulaması ister bilimsel bir proje olsun, dile dayalı herhangi bir projede kullanabilirsiniz. Makine Öğrenimi teknolojilerine daha fazla ilgi göstermenize kesinlikle yardımcı olabilir.

Google belgeleri, Vision API özelliklerinin pratikte nasıl uygulanacağı konusunda bazı harika fikirler sağlar ve ayrıca size Makine Öğrenimi hakkında daha fazla bilgi edinme olanağı sağlar. Özellikle gelişmiş bir görsel arama uygulamasının nasıl oluşturulacağına ilişkin kılavuza göz atmanızı tavsiye ederim.

Bu makalede gördüklerinizin sihir gibi olduğu söylenebilir. Sonuçta, basit ve kolay erişilebilir bir API'nin bu kadar güçlü, bilimsel bir araç tarafından desteklendiğini kim düşünebilirdi? Geriye sadece birkaç satır kod yazmak, hayal gücünüzü gevşetmek ve görüntü analizinin sınırsız potansiyelini deneyimlemek kalıyor.