Firebase ve ML Kit ile Görsel üzerindeki metinlerin tanınması — CodeLab

Burcu Geneci
GDGIstanbul
Published in
5 min readMay 28, 2018

Google’ın I/O 18 etkinliğinde Mobil uygulamalar icin ML Kit API’yı duyurmasının ardından, etkinlik sitesinde ML Kit ile alıştırmalar yapabileceğimiz ornek projeler duyuruldu. Bu yazıda, ilgimi çeken Recognize text in images with ML Kit for Firebase: iOS codelab alistirmasi uzerinden giderek, yorumlarımı paylaşacağım.

Yukarıda paylaştığım site üzerinden codelab adimlarini takip ettiginizde size Google tarafından hazırlanmış proje klasörünü indirmenizi isteniyor. Klasor içersinde iki adet proje yer alıyor. Ilki final, ikincisi ise starter. Starter proje ile ilerleyip, talimatları adım adım takip edeceğiz.

Projeyi indirdikten sonra Xcode 9 ve üzeri versiyonlardan birinde açmalısınız. Kırmızı ile işaretli ve henüz projede eksik olan GoogleService-Info.plist dosyasını farkedeceksiniz. Bu dosya Firebase ile projemiz arasındaki tanımları içeren dosya olacak. Bu dosyayı oluşturmak ve mobil uygulamamızla birlikte calisacak Firebase projesini oluşturmak icin Firebase Console’a gidiyoruz ve Proje Ekle ile kendimize ML Kit Codelab adinda bir proje oluşturuyoruz.

Projemiz için anasayfa hazırlandıktan sonra, Firebase’i hangi uygulama için kullanacaksak entegrasyon icin verilen öneriyi takip ediyoruz. Yani bu ekranda iOS seçerek ilerliyoruz.

Codelab adımında da yazdığı gibi burada iOS Paket ismi olarak com.google.firebase.codelab.mlkit yaziyoruz ve diğer kısımları boş bırakarak devam ediyoruz.

Bu bilgiler sonunda, iOS projemiz için Firebase ayarlarımızı içeren GoogleService-Info.plist dosyasını indiriyoruz.

Firebase Core kütüphanesi ve ML Kit kütüphanelerini iOS projemize Cocoapods ile alıyoruz. Bilgisayarınızda cocoapods kurulu değilse, sudo gem install cocoapods komutu ile yükleyebilirsiniz.

Cocoapods yükledikten sonra, terminal üzerinden projenizdeki ana dizinin içerisine gidip, pod init komutunu çalıştırmalısınız. Bu komutla birlikte, bulunduğunuz dizinde projenizde kullanacağınız yani bağımlı olduğunuz pod’lari – kütüphanelerini- ekleyeceğiniz bir Podfile oluştuğunu göreceksiniz.

Podfile’i herhangi bir text editor ile açıp; use frameworks keywordu sonrasına Firebase Core, ML Vision ve ML Vision Text Model pod’larini almak için aşağıdaki 3 satırı ekliyoruz ve pod’lari almak için yine terminal üzerinden pod install komutunu calistiriyoruz.

Source: Google

Bu komut tamamlandığında, starter projemiz ve bağımlı olduğumuz pod kütüphanelerini içeren bir workspace dosyası oluşturmuş olacak. xcworkspace uzantılı dosyaya çift tıklayarak Xcode ile açıyoruz.

pod install komutu sonrası projemizin klasör görünümü

Projemizi yeni bağımlılıkları ile birlikte çalıştırıp seçtiğimiz herhangi bir simülatöre gönderiyoruz. Scroll üzerinde iki farklı resimi görüntüleyebiliyoruz ve Find Text ve Find Text (Cloud) butonlarının arkasına henüz herhangi bir kod yazmadık.

Uygulamayi ilk defa simülatöre attığımızda.

Hadi kod yazmaya başlayalım, codelab tutorialinda olduğu gibi öncelikle görüntü üzerindeki metinleri tanımak için Vision Api içerisinde bulunan VisionTextEditor sınıfına ait bir textDetector objesi oluşturacağız. Bunu aşağıda yeşille işaretlediğim kod bloklarındakı satırları örnek projeye ekleyelim.

Daha sonrasında runTextRecognition metodunu textDetector’umuzun imaj üzerinde çalışmasını ve tanıdığı metinleri kare içine alması için kod yazacağız. Imajimizi Vision Api’da yer alan VisionImage sınıfından bir visionImage objesi oluşturup, TextDetector objesine detect etmesi için bu objeyi veriyoruz.

Detect metodu sonrasında, metod callback’inde bize features ve hata oluştuysa error değişkenlerini dönüyor ve processResult metodu ile bulunan her bir özelliği/texti VisionTextBlockolarak ele alıp, bulunan metni, frame -yer- bilgisini addFrameView kullanarak imajın üzerinde gösteriyoruz.

Tada! Vision kütüphanesi Find Text dediğimizde bizim icin görüntü uzerinde metinleri çıkardı ve biz de sonrasında bunları çerçeve içerisine alıp gösterdik.

Fakat ilk görüntü için deneme yaptığımızda latin alfabesi kullanılmayan kelimeler için sonuç getirmediği / doğru sonuç çıkarmadığını göreceksiniz. Vision API ile cihaz üzerinde latin alfabesiyle sonuçlar üretebileceğiz. Diğer kelimelerin de tanınması için API’in Cloud özelliklerini kullanmalıyız.

Text Recognition – Kelime tanıma – için Cloud tarafında aylık ilk 1000 kelime ücretsiz olacak sekilde kullanım yapabiliyoruz.

Spark Plan‘dan Blaze Plan‘a yani kullandığın kadar öde planına geçerek Vision Api üzerinde denemeler yapmaya başlayabilirsiniz.

Google Cloud üzerinden Cloud Vision API’yi aktif hale getiriyoruz.

Gelelim kod kısmına: Cloud üzerinde kelime tanıma için bu sefer VisionCloudDocumentTextDetector aşağıdaki sekilde tanımlıyoruz.

Cihaz üzerinde çalışması için yazdığımıza benzer bir şekilde detect metodu çağrımını yapıyoruz, bu sefer CloudTextDetector için.

Cloud uzerinde daha fazla özellik yer aldiginda tanidigi metinleri, paragraflar hatta içerisindeki kelimeler ve semboller olarak tanıyabiliyorsunuz. Asagida bu özelliklere bakarak görüntü üzerine çerçeveler çizen metodu oluşturuyoruz.

Ve sonuç, beklendiği gibi cihazdaki API kadar hızlı çalışmasa da kelimeleri yakalama açısından oldukça başarılı buldum.

Örnekleri biraz daha farklılaştırıp, başarı oranına tekrar göz atarsak, solda bir park yerinden aldığım görüntü var. İşaretlerin arasından park yerini ve sağdaki ilaç kutularında ise, ışık ve bulanıklığa rağmen çoğu kelimeyi doğru bir şekilde ayırt etti. Sol aşağıdaki menü reklamında ise, beklediğim şekilde ters yazılmış kelimeleri tanıyamadı ya da farklı kelimeler olarak gördü. Gelelim el yazısına, yazım küçük olmasına rağmen kelimelerin yaklaşık %60 a yakınını tanıdı, ancak bitişik yazmanız durumunda el yazısında başarı oranı düşebiliyor.

ML Kit’in diğer özellikleri ve kullanımlar için firebase üzerindeki dokümanlardan yararlanabilirsiniz. Yeni ve daha farklı çalımalarda görüşmek üzere 👋

‘Brace yourself — Machine Learning is coming’

--

--

Burcu Geneci
GDGIstanbul

Little bit geek, obsessive, keen, funny, mobile, self-starter, self learner or just “developer”