OpenCV kütüphanesi ile Görüntü İşleme(Android)-1

Pelin Tunçel
lTunes Tribe
Published in
4 min readJul 16, 2020

--

Herkesin aklına görüntü işleme denince ilk gelen kütüphane OpenCV ile alışılmışın dışına çıkıp, nasıl bir mobil uygulamada bu kütüphaneyi kullanabiliriz biraz bundan bahsedelim.

OpenCV (Open Source Computer Vision) açık kaynak kodlu görüntü işleme kütüphanesidir. OpenCV platformu bağımsız bir kütüphanedir, bu sayede Windows, Linux, FreeBSD, Android, Mac OS ve iOS platformlarında çalışabilmektedir. C++, C, Python, Java, Matlab, EmguCV kütüphanesi aracılığıyla da Visual Basic.Net, C# ve Visual C++ dilleri ile topluluklar tarafından geliştirilen farklı wrapperlar aracılığıyla Perl ve Ruby programlama dilleri ile kolaylıkla OpenCV uygulamaları geliştirilebilir.

OpenCV kütüphanesi içerisinde görüntü işlemeye (image processing) ve makine öğrenmesine (machine learning) yönelik 2500’den fazla algoritma vardır. Bu algoritmalar ile yüz tanıma, nesneleri ayırt etme, insan hareketlerini tespit edebilme, nesne sınıflandırma, plaka tanıma, üç boyutlu görüntü üzerinde işlem yapabilme, görüntü karşılaştırma, optik karakter tanımlama OCR (Optical Character Recognition) gibi işlemler rahatlıkla yapılabilmektedir.

Teknik detaylara girmeden önce, neden bu konuda yazı yazmak istediğimi sizlere anlatmak istiyorum. Bitirme projesi olarak başta hiçbir fikrim olmadan mezun olma telaşıyla kabul ettiğim bir konu oldu. Araştırmalara başladığımda genellikle yardımcı kaynakların Python dilinde veya Matlab dilinde olduğunu gördüm. Benim projem ise bir Android uygulama geliştirmekti ve bu nedenle Java dilini kullanmam gerekiyordu. Java dilinde de çok fazla yardımcı kaynak bulamadığımdan, projeyi yaparken “bu projeyi teslim ettiğimde insanlara Java dilinde yardımcı olması için yazılar yazmak istiyorum” demiştim. İşte başlıyorum diyebilirim :)

Bu yazımda “Image-Based Positioning Using OCR” projemin amacından ve hangi adımları takip ettiğimden, hangi methodları kullandığımdan bahsedeceğim. İlerleyen yazılarda da OpenCV kütüphanesinin entegrasyonu, kullandığım yöntemlere ait kodlar ve çıktıları paylaşacağım.

PROJE ÖZETİ

Bu çalışma gerçek zamanlı bir tabela tespiti ve tanınmasını sunar. Projenin amacı, şekil bilgilerini kullanarak tabelaları tespit edebilen ve optik karakter tanıma kullanarak bir binadaki tabelaları tanıyabilen bir uygulama geliştirmektir. Sistem dikdörtgen tabelaları algılayabilir ve tanıyabilir. Tabelaların konumu ve pozisyonu, kullanıcının iç mekan konumunu bulmak için kullanılır.

Tabelalar telefon kamerası kullanılarak yakalanır. Yakalanan görüntü, OpenCV tarafından görüntü ikilileştirme ve kenar algılama algoritması ile görüntü işlemeye tabi tutulacak ve tabelayı tanıyacaktır. Hough Line Transform algoritması tarafından bulunan tabelaların çizgi denklemleri, kullanıcının yerini ufuk noktasına göre bulmak için kullanılır. Bu çalışmanın temel amacı tespit, tanıma, karakter okuma ve kullanıcının yerini bulmaktır.

GİRİŞ

İlk adımımız “problem definition”, yani problemimizi tespit etmek ve bunu tanımlamaktır. Peki o zaman nedir bu problemimizin tanımı? Gelin inceleyelim.

Problem Tanımı:

Gelişen teknolojilerde, mevcut sistemlerin çoğu bilgisayar mühendisliğine dayanmaktadır. En açık bilgisayar tabanlı uygulamaların örneklerinden biri, plaka tarama, tabela algılama, sayaç okuma, bilet ve kimlik doğrulama gibi geniş bir kullanım alanına sahip OCR tabanlı sistemlerdir. Birçok uygulama için yaygın olarak kullanılmasına rağmen, iç mekan lokalizasyonu kullanımı nadirdir.

İç mekan lokalizasyonu için en yaygın yöntem, Wi-Fi RSS parmak izlerinin sensör verileriyle kaynaşmasına dayanmaktadır. Bu yöntemler, her konumda çok sayıda Wi-Fi erişim noktasının görünür olmasını gerektirir. Yeterli Wi-Fi erişim noktasının bulunmadığı senaryolarda, Wi-Fi RSS okuyucu donanımına erişim engellenir veya daha fazla yer belirleme(localization) doğruluğu gerektiğinde, görüntü tabanlı yöntemler etkili bir çözüm olarak kullanılabilir. Ben bu projede Wi-Fi RSS ile karşılaşılan sorunların üstesinden gelmeyi ve imaj tabanlı yöntemlerle verimliliği artırmayı hedefledim.

Sonuç olarak, bu proje, gerçek zamanlı bir süreç olmanın benzersizliğini birleştiren OCR teknolojisi ve görüntü işleme algoritmaları ile geliştirilen bir Android uygulaması sağlayacaktır. Uygulama tabelaları ve üzerindeki karakterleri tanıyacaktır. Bundan sonra, konum kırmızı kenarlı tabelalar için ufuk noktası tespiti ile bulunacaktır.

Sınırlamalar:

Proje bir cep telefonunda uygulanacak. Zaman içindeki verimlilik için, gerçek zamanlıdır. Gerçek zamanlı, belirli zaman kısıtlamaları olan bilgi işlem uygulamaları için kullanılan bir terimdir. Gerçek zamanlı sistemler, girdiye hemen yanıt veren sistemlerdir. Wi-Fi tabanlı değildir ve yer belirleme(localization) için konum etiketli bir görüntü veritabanı toplamıyorum. Ufuk noktası lokalizasyon için kullanılacak ve ufuk noktası tespiti tabelaların line denklemleri yardımıyla yapılacaktır.

Projeme ufak bir giriş yaptık :) Bu yazının son konusu olarak bu zamana kadar yapılmış, bu konuya ait geçmiş aplikasyonlardan bahsedeceğim.

BACKGROUND

OCR Aplikasyonları:

Metin tanıma ile ilgili OCR mekanizmasını kullanan birçok uygulama vardır. Bu projemde ben de OCR mekanizmasını kullandım. TextScanner, kullanıcıların görüntüleri canlı metne kolayca çevirmelerini sağlayan bir OCR uygulamasıdır. Kullanıcılar görüntüdeki metinleri yüksek doğrulukla tanıyabilir.

Başka bir uygulama OCR Text Scanner. Bu uygulama görüntüden karakterleri yüksek doğrulukla (yüzde 95 ila yüzde 100) tanımak için app. Cep telefonunu metin tarayıcıya ve çevirmene çevirir.

Kısacası OCR konusunda benzer bir sürü uygulama bulabiliriz. Bir diğer örnek olarak bakabileceğimiz konu ise Plaka Tanıma Sistemleri.

Plaka Tanıma Sistemleri:

ANPR(Automatic Number Plate Recognition), aracı tanımlamak için plaka kullanan bir görüntü işleme teknolojisidir. Günlük hayatımızda da rastlayıp kullandığımız HGS, OGS sistemlerini düşünebilirsiniz. Amaç, araç plakasını kullanarak verimli bir otomatik yetkili araç tanımlama sistemi tasarlamaktır.

Son olarak da asıl tez hocamla beraber projemin konusunu ilham aldığımız projeden bahsedip yazıyı bitirmek istiyorum.

OCR Tabanlı İç Mekan Konumlandırma Sistemi:

Bu sistemde, OCRAPOSE II adı verilen, ofis binaları, park yerleri, havaalanları, marketler vb yerlerde kullanılabilen sistem kullanılmıştır. Bu senaryolarda, karakterler lokalizasyon için uygun ayırt edici yer işaretleri olarak kullanılabilir. Önerilen sistem, sorgu hareketsiz görüntülerinde bu karakterleri okumak için OCR’den yararlanır ve bir kat planı kullanarak kaba bir konum tahmini sağlar. Ardından, konum tahminini hassaslaştırmak için OCR motoru tarafından sağlanan bilgileri kullanarak sorgunun derinliğini ve görüş açısını bulur. Formüller, görüntü çizgisi segmentleri ve OCR kutusu bilgileri kullanılarak sorgu görüş açısı ve derinlik tahmini için türetilir. İç mekan senaryolarındaki deneyler yoluyla önerilen sistemin uygulanabilirliğini ve etkinliğini gösterirler. Sistemin, özellikle seyrek veritabanı koşulu altında konum tanıma oranı ve ortalama yerelleştirme hatası açısından en son teknoloji kıyaslamalara kıyasla daha iyi performans gösterdiği gösterilmiştir.

Sistemden örnek bir senaryo

Bu yazımda sizlere OpenCV nedir, neden bu konu hakkında paylaşımda bulunmak istedim, ve bu konu ile ilgili projemin özeti, girişi ve arka planından bahsettim. Sizleri bilgilendirirken yaptığım projede yaşadığım deneyimleri, tespitleri, fail olduğum durumları kısacası her şeyi anlatarak adım adım aktarmamın daha güzel olacağını düşündüm :) Umarım hoşunuza gider ve yardımcı olabilirim. Diğer yazımda projenin analizi ile devam edeceğim. Görüşmek üzere, sağlıkla kalın :)

--

--

Pelin Tunçel
lTunes Tribe

Senior iOS Developer, Professional Korfball Player