Görüntü İşleme Teknikleri ile Ön İşleme

Hedeflediğimiz birçok projenin gerçekleşmesi için mutlaka görüntü işleme adımlarından geçirilmesi gerekmektedir. Bu yazıda Gauss, Ortalama Filtre, Eşikleme Filtreleri ve Canny Kenar Algılayıcısı ile ön işleme aşamalarını birlikte ortaya koyacağız. Platform olarak benim gibi Colab’ da çalışabilirsiniz! Böylelikle hem çok hızlı hem de yer kaplamadan projelerinizi gerçekleştirebilirsiniz. 

Görüntü işleme teknikleri mevcut resimlerin analizi ile çeşitli bilgiler edinmeye yarayan sistemlerdir. Görüntü işleme teknikleri kullanım yerlerine göre, en basit algoritmalardan en karmaşık algoritmalara kadar farklı matematiksel ifadeler üzerinden çalışır.

Görüntü işleme metotlarının kullanılması için önceden elde edilmiş kamera vasıtasıyla çekilen gerçek dünya verileri üzerinde işlem yapılacaktır. İşlemler sırası ile OpenCV aracılığıyla verinin okunması, piksel değerlerinin renk kanalları açısından kontrolü, görüntüde yer alan gürültünün giderilmesi ve mevcut filtrelerin kullanılması olarak belirlenmiştir.

Projelerimiz için kullanacağımız veri setini daha önceden hazır etmemiz çalışma prensibimiz açısından daha iyi olacaktır. Görüntüler veri setiniz içerisinden imread( ) metodu ile dosyadan çekilecektir. Bu işlemimiz için gerekli kütüphaneleri yüklemekle işe koyulalım.

📍NOT: Ön işleme adımını yaptıktan sonra görüntüyü kontrol etmek için genellikle imshow() fonksiyonunu kullanmaktayım. Ancak Colab’da imshow fonksiyonumuz çalışmadığı için cv2_imshow modülünü yüklememiz gerektiğini unutmayalım!

Aşağıda gördüğünüz görselde görüntünün elde edilmesi ve piksel değerlerinin incelenmesine olanak veren kod yer almaktadır.

Kütüphanelerin Yüklenmesi
Kütüphanelerimizi yükledikten sonra kullanacağımız veri seti için bir klasöe oluşturup path değişkenine yolu kopyalamalıyız. Çünkü görüntü işleme tekniklerimiz bu klasörde yer alan görüntüler üzerinde çalışacaktır.

Kullandığım görüntüler gri seviye görüntüler olduğu için imread fonksiyonunda gördüğünüz gibi dosyanın yanına 0 ibaresini koydum. Bu şekilde görüntülerde renk tonu mümkünse bile bu görüntü gri seviyeye dönüşecektir. İlk görüntümüzü RGB imshow metoduile ekrana bastırabiliriz.

Görüntümüzün yanına 0 koyduğumuzda ise aşağıda gördüğünüz görsele ulaşmış olacağız. cv2_imshow(image) komutu ile ekranda gördüğünüz görseli yazdırmamız mümkündür. Bu adımdan sonra görüntü işleme adımlarına geçebiliriz.

Görüntü İşleme Adımları

RGB veya gri skala görüntünüzün piksel değerlerini görmek istiyorsanız print komutu ile bu şekilde ekrana bastırmanız mümkündür. Böylelikle hangi kanalda çalıştığınızı da kontrol etmiş olacaksınız. Bu görüntüde RGB bir gül görüntüsü kullandığım için piksel değerleri aşağıdaki sayıları göstermektedir.

📌 RGB Renk Kanalı: RGB en yaygın kullanılan renk alanıdır. Bu renk modelinde her renk kırmızı, yeşil ve mavi ana spektral bileşenleri olarak görür. Bu modelin altyapısında Kartezyen Koordinat Sistemi barınmaktadır.

Görüntümüzün RGB’ ye dönüştürülmesi ve piksel değerlerinin incelenmesi için gerekli koda aşağıdaki şekilde yer verilmiştir.

📌 HSV Renk Kanalı: HSV uzayının ismi, renk tonu, doygunluk ve parlaklık kelimelerinin İngilizce karşılığı olan hue, saturation ve intensity kelimelerinin baş harflerinden gelmektedir. HSV renk uzayı Hue, Saturation ve Value terimleri ile rengi tanımlar. RGB de renklerin karışımı kullanılmasına karşın HSV de renk, doygunluk ve parlaklık değerleri kullanılır. Doygunluk rengin canlılığını belirlerken parlaklık rengin aydınlığını ifade eder.

Şekilde yer alan görüntülerde RGB görüntüden HSV’ ye dönüşüm sağlanmıştır. Bir diğer renk kanalı olan LAB kanalı da son olarak incelenerek görüntünün gri seviye formatına dönüşümü sağlanmıştır.

📌 CIE-LAB Renk Kanalı: CIE 1931 renk uzayları, elektromanyetik görünür spektrumdaki dalga boylarının dağılımı ile insan renk görüşünde fizyolojik olarak algılanan renkler arasındaki ilk tanımlanmış kantitatif bağlantılardır. Bu renk uzaylarını tanımlayan matematiksel ilişkiler, renk mürekkepleri, ışıklı ekranlar ve dijital kameralar gibi kayıt aygıtlarıyla uğraşırken önemli olan renk yönetimi için gerekli araçlardır.

 

Görüntüdeki Gürültünün Giderilmesi

Görüntüler kameradan elde edilen gerçek dünya verisi oldukları için bir kameranın sensörü üzerindeki akım değişimlerinden dolayı genellikle Gauss gürültüsü içerir. Gürültülü görüntüler, eleman tespiti için kullandığımız kenar tespitinde daha kötü performansa yol açabilir. Bu nedenle, bu gürültüyü azaltmak önemlidir.

🖇 Gürültü azaltmak için literatürde birçok yöntem mevcuttur. Bugün sizlerle 2 adet yöntemi tartışacağız.

  1. Adaptive Threshold Gaussian
  2. Adaptive Threshold Mean
➡️ Adaptive Threshold Gaussian

Görüntülerimizin gauss gürültüsü giderilmiş görüntüler haline gelmesi için Gaussian yöntemi uygulandığı Python koduna aşağıdaki şekilde yer vermekteyim. Burada yer alan adaptiveThreshold metodu içerisindeki parametreler ile oynanarak istenilen sonuca ulaşmak mümkündür.

Literatürde sıkça yer verilen Gauss ve ortalama eşik filtreleri bu görüntüler üzerinde uygulandığında hemen hemen aynı blurluk (yumuşama) seviyesine yaklaşıldığı görülmüştür. Bu yöntemler sırasıyla adaptif gauss filtresi ve ortalama filtre uygulamasıdır.

➡️ Adaptive Threshold Mean (Ortalama)

Uyarlanabilir (adaptive) eşikleme, eşik değerin daha küçük bölgeler için hesaplandığı yöntemdir ve bu nedenle, farklı bölgeler için farklı eşik değerleri olacaktır.

 

Gaussian ve Mean filtreleri arasında takdir edersiniz ki çok ufak nüanslar vardır. Parametre değerlerini kendiniz değiştirerek istediğiniz filtre ile devam edebilirsiniz.

➡️ Kenar Tespiti

Kenar tespiti, unsurları tespit etmede kullanılan önemli bir tekniktir. Şekilde yer verilen kenar algılama tekniklerinden olan Canny kenar algılama algoritması görüntüler üzerinde çalıştırılmıştır.

Canny Code

Canny Image

REFERANSLAR

  1. Medium, Cerebro, Görüntü İşleme Tekniklerinde Yapay Zekâ Kullanımı, Nisan 2018.
  2. Vikipedi, Özgür Ansiklopedi, ‘Görüntü işleme’, Eylül 2020.
  3. C. Gonzalez, Rafael, E. Woods, Richard, Sayısal Görüntü İşleme, Palme Yayıncılık, (Ankara, 2014).
  4. S. Singh and B. Singh. “Effects of noise on various edge detection techniques”. In: 2015 2nd International Conference on Computing for Sustainable Global Development (INDIACom). Mar. 2015, pp. 827–830.
  5. https://www.tutorialspoint.com/opencv/opencv_adaptive_threshold.htm.
  6. Ajay Kumar Boyat and Brijendra Kumar Joshi. “A Review Paper: Noise Models in Digital Image Processing”. In: CoRR abs/1505.03489 (2015). arXiv: 1505.03489. url: http:// arxiv.org/abs/1505.03489.
  7. T. Silva da Silva et al. “User-Centered Design and Agile Methods: A Systematic Review”. In: 2011 Agile Conference. Aug. 2011, pp. 77–86. doi: 10.1109/AGILE.2011.24.

 

OpenCV Kullanımı ile Kontur Çıkarımı

Görüntü işlemede kontur denilen kavram, bir rengin veya yoğunluğunun sahip olduğu tüm sürekli noktaları birleştiren kapalı bir eğridir. Konturlar bir görüntüde bulunan nesnelerin şekillerini temsil eder. Kontur algılama, şekil analizi ve nesne algılama ve tanıma için yararlı bir tekniktir. Kenar tespiti yaptığımızda, renk yoğunluğunun önemli ölçüde değiştiği noktaları buluruz ve sonra bu pikselleri açarız. Bununla birlikte, konturlar, görüntüdeki nesnelerin şekillerine karşılık gelen soyut nokta ve segment koleksiyonlarıdır. Sonuç olarak, programımızda kontür sayısını saymak, bunları nesnelerin şekillerini kategorize etmek için kullanmak, bir görüntüden nesneleri kırpmak (görüntü bölümleme) ve çok daha fazlası gibi konturları işleyebiliriz.

Computer Vision
🖇 Kontur tespiti, görüntü segmentasyonu için tek algoritma değildir ancak mevcut son teknoloji semantik segmentasyon, hough dönüşümü ve K-Means segmentasyonu gibi başka birçok algoritma vardır. Daha iyi bir doğruluk için, bir görüntüdeki konturları başarılı bir şekilde tespit etmek için izleyeceğimiz tüm ardışık düzenler:

  • Görüntüyü ikili görüntüye dönüştürün, giriş görüntüsünün ikili görüntü olması yaygın bir uygulamadır (eşikli görüntü veya kenar algılamanın bir sonucu olmalıdır).
  • FindContours( ) OpenCV işlevini kullanarak konturları bulma.
  • Bu konturları çizin ve resmi ekrana gösterin.

Photoshop Üzerinde Kontur Uygulama

Adobe PS
Kontur çıkarımının kodlamasına geçmeden önce sizlere daha iyi edinimler kazandırmak için öncelikle Photoshop üzerinde örnek vereceğim.
Katmandan kontur çıkarımı
İlk adım olarak yukarıda gördüğünüz pencereye erişmek için Photoshop üzerinde bulunan Katmanlar penceresindeki herhangi bir katmana sağ tıklayarak karıştırma seçeneklerini seçiniz.
🔎 Katmanlar penceresi aktif değil ise üst menüden Pencere menüsüne tıklayarak katmanları aktif etmelisiniz. Windows için  kısayol tulu F7′ dir.
Sol bölümden Kontur sekmesini seçerek görüntüde oluşturmak istediğiniz kontur rengini ve opaklığını seçmeniz mümkündür. Ardından önce görüntüde oluşacak kontur çıkarımının iyi ayrıtlandırılabilmesi için arka plan çıkarımı yapılmaktadır.
People siluet
Burada gördüğünüz görselde arka plan çıkarıldıktan sonra nesnenin ön planda belirgin olabilmesi için sarı tonlarında bir seçim gerçekleştirdim. Arka plan çıkarıldıktan sonra görüntüde dış kontur uygulanarak tespitin daha başarılı olması sağlanacaktır.
People contour

Python OpenCV ile Kontur Çıkarımı

Platform olarak Google Colab ve Python programlama dilini kullanmaktayım. Düzenli olarak Python kodlayanlar var ise mutlaka tavsiyede bulunabileceğim bir platform! Haydi gelin, adım adım kodlamaya başlayalım.
📌 Projemiz için gerekli olan kütüphaneleri aşağıdaki gibi import ile yükleyelim.
Gerekli Kütüphanelerin Yüklenmesi
📌 İkinci adım olarak görüntümüzü imread fonksiyonu ile elde ediyoruz.
Görüntünün Alınması
📌 Görüntü işleme dünyasında bildiğiniz üzere görsellerimiz BGR formatında gelmektedir. BGR görüntünün ilk olarak RGB formatına dönüştürülmesi ve ardından gri skala renk kanalına atanması gerekmektedir.
Converting Color Spaces
📌 Dördüncü adım olarak görüntüde bir eşik değeri belirtilerek binary threshold (ikili eşikleme) işlemi yapılmaktadır. Binary threshold fonksiyonunun arka planda çalıştırdığı matematiğe erişmek için aşağıdaki formülü incelemelisiniz 👇
Formula
Binary threshold
Dikkat ettiyseniz threshold uygulanacak görüntü RGB değil gri seviye görüntü seçilmiştir. Lütfen bu aşamada dikkat edelim. Bu adımları sırası ile takip ettiğinizde aşağıdaki dönütü alacaksınız.
Background
📌 Bu adımda ise görüntüde yer alan konturların bulunması için findContours fonksiyonunu kullanacağız. Konturların belirleneceği görüntü ise threshold gerçekleştirdiğimiz binary görüntü olacaktır.
Find Contours
📌 Oluşturulan bu konturların görselde çizilmesi için drawContours fonksiyonunu kullanacağız.
Draw Contours
🖇 Metotta yer alan cv2.CHAIN_APPROX_SIMPLE parametresi, tüm gereksiz noktaları kaldırır ve konturu sıkıştırarak hafızadan tasarruf sağlar.
📌 Artık kontur çıkarımı yapılmış görüntümüzü ekrana bastırabiliriz.
Imshow contours

Bu şekilde çıkarımımızı yapmış olduk. Bir başka yazımda başka projelerin dünyasına yönelmek dileğiyle… Sağlıcakla kalın ✨

REFERANSLAR

  1. Contour Tracing, http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/intro.html.
  2. Edge Contour Extraction, https://www.cse.unr.edu/~bebis/CS791E/Notes/EdgeContourExtraction.pdf, Pitas, section 5.5, Sonka et al., sections 5.2.4-5.2.5.
  3. https://www.thepythoncode.com/article/contour-detection-opencv-python adresinden alınmıştır.
  4. https://www.subpng.com/png-m7emk6/ adresinden alınmıştır.
  5. OpenCV, https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html.
  6. OpenCV, https://docs.opencv.org/master/d4/d73/tutorial_py_contours_begin.html.
Featured Image

Yapay Zekaya Adım Adım Yolculuk

Makine öğrenimi (ML), deneyim yoluyla otomatik olarak gelişen bilgisayar algoritmalarının incelenmesidir [1]. Wikipedia’ ya göre ise makine öğrenimi, bilgisayarların, açıkça programlanmadan görevleri nasıl gerçekleştirebileceklerini keşfetmelerini içerir [2]. Yapay Zeka denilince çoğunuzun aklına ilk gelen şey kuşkusuz görselde gördüğünüz gibi robotlar gelmektedir. Bugün makine öğrenimi ve yapay zekanın temelleri seviyesinde ilgili kursları sizler için araştırdım ve en çok memnun kaldığım DataCamp ve Coursera kurslarını burada listeleyeceğim.

DataCamp Kursları

💠 Image Processing with Keras in Python:  Bu kurs boyunca CNN ağları nasıl inşa edileceği, eğitileceği ve değerlendirileceği öğretilecektir. Verilerden öğrenme yeteneklerinin nasıl geliştirileceğini ve eğitimin sonuçlarını nasıl yorumlanacağı öğretilecektir.
Kursa gitmek için tıklayın 🔗

💠 Preprocessing for Machine Learning in Python:  Verilerinizi, modeliniz için doğru biçimde olacak şekilde standartlaştırmayı, veri kümenizdeki bilgilerden en iyi şekilde yararlanmak için yeni özellikler oluşturmayı ve model uyumunuzu iyileştirmek için en iyi özellikleri seçmeyi öğreneceksiniz.
Kursa gitmek için tıklayın 🔗 

💠 Advanced Deep Learning with Keras: Hem sınıflandırma hem de regresyon yapan bir ağı eğiterek çok yönlü keras işlevsel API’sini kullanarak çeşitli problemleri nasıl çözeceğinizi gösterir.
Kursa gitmek için tıklayın 🔗

💠 Introduction to TensorFlow in Python: Bu derste, tensorflow 2.3’ü, öneri sistemleri, görüntü sınıflandırması ve Fintech’teki önemli ilerlemelere güç veren modellerle geliştirmek, eğitmek ve tahminler yapmak için kullanacaksınız. Hem 15 satırlık kodda derin öğrenme modelleri tasarlamanıza ve eğitmenize izin verecek üst düzey API’leri hem de hazır rutinlerin ötesine geçmenize izin verecek düşük seviyeli API’leri öğreneceksiniz.
Kursa gitmek için tıklayın 🔗

💠 Introduction to Deep Learning with PyTorch: PyTorch, aynı zamanda hem güçlü hem de kullanımı kolay olan önde gelen derin öğrenme çerçevelerinden biridir. Bu derste, MNIST veri kümesinden rakamları tahmin etmek için ilk sinir ağınızı oluşturmadan önce sinir ağlarının temel kavramlarını öğrenmek için Pytorch’ u kullanacaksınız. Daha sonra CNN hakkında bilgi edinecek ve daha doğru sonuçlar veren daha güçlü modeller oluşturmak için kullanacaksınız. Sonuçları değerlendirecek ve bunları geliştirmek için farklı teknikler kullanacaksınız.
Kursa gitmek için tıklayın 🔗

💠 Supervised Learning with scikit-learn: 

  • Classification
  • Regression
    • Fine-tuning your model
    • Preprocessing and pipelines

Kursa gitmek için tıklayın 🔗

💠 AI Fundamentals:

  • Introduction to AI
  • Supervised Learning
    • Unsupervised Learning
    • Deep Learning & Beyond

Kursa gitmek için tıklayın 🔗


Coursera Kursları

💠 Machine Learning: Classification, University of Washington: 

  • Hem ikili hem de çok sınıflı sınıflandırma problemlerinin çözümü
  • Boosting kullanarak herhangi bir modelin performansını artırımı
  • Stokastik gradyan yükselişi ile yöntem ölçeklendirme
  • Eksik verileri işleme teknikleri kullanımı
  • Hassas hatırlama metrikleri kullanılarak model değerlendirme

Kursa gitmek için tıklayın 🔗 

💠 AI For Everyone, deeplearning.ai:  

  • Gerçekçi AI ne olabilir ne olamaz?
  • Kendi kuruluşunuzdaki sorunlara yapay zeka uygulamak için fırsatlar nasıl belirlenir?
  • Makine öğrenimi ve veri bilimi projeleri oluşturmak nasıl bir şeydir?
  • Bir AI ekibi ile nasıl çalışır ve şirketinizde bir AI stratejisi nasıl oluşturulur?
  • Yapay zeka ile ilgili etik ve sosyal tartışmalarda nasıl gezinilir?

Kursa gitmek için tıklayın 🔗 

💠 AI for Medical Diagnosis, deeplearning.ai: 

  • Ders 1’de, akciğer ve beyin bozukluklarını teşhis etmek için konvolüsyonel sinir ağı görüntü sınıflandırması ve segmentasyon modelleri oluşturacaksınız.
  • Ders 2’de, hasta prognozunu belirlemek için istatistiksel yöntemler ve rastgele bir orman belirleyicisi kullanarak kalp hastalığı için risk modelleri ve sağkalım tahmincileri oluşturacaksınız.
  • Ders 3’te, bir tedavi etkisi belirleyicisi oluşturacak, model yorumlama tekniklerini uygulayacak ve radyoloji raporlarından bilgi almak için doğal dil işleme kullanacaksınız.

Kursa gitmek için tıklayın 🔗
Yapay zeka öğrenirken öncelikli adımlar olarak Yüksek Lisans dönemimde Yapay Sinir Ağları ve Örüntü Tanıma derslerini aldım. Bu alanlar ile ilgili projeler geliştirdim ve bu projeleri sunma fırsatım oldu. Böylelikle bildiklerimi aktarırken kendime daha çok şey kattığımı fark ettim. Bu yazıda özet olarak öğrenmeniz gereken DataCamp ve Coursera kurslarından bahsettim. Bunlardan önce Machine Learning Crash Course‘ u da bitirmenizi şiddetle tavsiye ediyorum.

REFERANSLAR

  1. Mitchell, Tom (1997). Machine Learning. New York: McGraw Hill. ISBN 0-07-042807-7. OCLC 36417892.
  2. From Wikipedia, The free encyclopedia, Machine learning, 19 November 2020.
  3. DataCamp, https://learn.datacamp.com.
  4. Coursera, https://www.coursera.org.

Makine Öğrenimi İçin Veri Etiketleme Araçları

Verilerin etiketlenmesi işlemi, gözetimli herhangi bir makine öğrenimi projelerinde çok önemli bir adımdır. Etiketleme, bir görüntüdeki alanları tanımlama ve bu bölgeler için hangi nesneye ait ise o nesnenin açıklamalarının oluşturulduğu işlemidir. Verilerin etiketlenmesi ile hem verilerimizi ML projelerine hazırlamış oluyoruz hem de onları daha okunabilir kılıyoruz. Çalıştığım projelerin çoğunda veri setindeki kümeleri oluştururken yeri geldi kendim etiketlemeler yaptım yeri geldi etiketlenmiş görüntüler ile eğitim işlemimi gerçekleştirdim. Bu yazıda sizler ile bu alanda tecrübelerimi paylaşarak en çok karşılaştığım veri etiketleme araçlarını tanıtacağım.
Labeling Image

📍COLABELER

Colabeler, konumlandırma ve sınıflandırma problemlerinde etiketleme yapmayı sağlayan programdır. Bilgisayarlı görü, doğal dil işleme, yapay zekâ ve ses tanıma alanlarında sıkça kullanılan bir etiketleme programıdır [2]. Aşağıda gördüğünüz görsel örnek bir görüntü etiketlenmesini göstermektedir. Burada gördüğünüz sınıflar genellikle araba (car) sınıfına denk gelmiştir. Sol tarafta gördüğünüz araç bölümünde nesneleri eğri, poligon veya dikdörtgen olarak sınıflandırmanız mümkündür. Bu seçim etiketlemek istediğiniz verinin sınırlarına göre değişebilmektedir.
 

Labeling Colabeler
Ardından ‘Label Info’ yazan bölümde kendiniz etiketlemek istediğiniz nesnelerin ismini yazıyorsunuz. Tüm etiketlemeleri bitirdikten sonra mavi tik olan butondan onaylayarak kaydediyorsunuz. Ve böylelikle bir sonraki görüntüye Next ile geçebiliyorsunuz. Burada dikkat etmemiz gereken nokta, kaydettiğimiz her görüntü bu mavi butonun soluna sıralanmaktadır. Bu şekilde kaydettiğiniz görüntüleri de kontrol etmeniz mümkündür. Colabeler’ın en çok sevdiğim yanlarından bir tanesi içerisinde yapay zeka algoritmalarını da kullanılabilir olmasıdır. 
📌 Daha önce çalıştığım bir projede Colabeler üzerinden etiketleme gerçekleştirdim ve inanılmaz kolay bir arayüze sahip bir yazılımdır.
📽 Colabeler’ ın yetkili web sitelerinde yer alan videoda etiketlemelerin nasıl yapılacağı açıklanmıştır.
Localization of Bone Age
Daha önce çalıştığım projenin örnek bir görüntüsünü yukarıda verdim. Bu proje, makine öğrenimi bağlamında yerelleştirme (localization) projesi olduğu için bu özelliklere bağlı kalınarak etiketleme yapılmıştır. Yerelleştirme, bir özelliğin bulunduğu görüntünün alt bölgesini izole etmek anlamına gelir. Örneğin, bu proje için kemik bölgelerinin tanımlanmaya çalışılması yalnızca görüntüdeki kemik bölgelerinin etrafında dikdörtgenler oluşturmak anlamına gelir [3]. Bu şekilde kemik görüntülerinde çıkarılması muhtemel sınıfları ROI bölgesi olarak etiketlemiş oldum. Ardından bu etiketleri Colabeler’ın sağladığı Export XML/JSON olarak elde ettim. Bu kısım birçok makine öğrenimi çalışanlarının hoşuna gidecektir, benim çok işime yaramıştı!

♻️ Etiketlerin Dışarıya Aktarılması

Exporting JSON Output
Bu aşamada ben JSON veriler kullanacağım için JSON çıktısı olarak kayıt etmiştim, siz verilerinizi farklı formatlarda kayıt edebilirsiniz. Aşağıda verdiğim görselde ise oluşturduğum sınıfların JSON çıktısındaki yerlerini görmektesiniz. Bu şekilde verileriniz etiketli bir şekilde hazırlanmış oldu.
JSON Format

📍ImageJ

ImageJ, Ulusal Sağlık Enstitüleri ve Optik Hesaplamalı Enstrümantasyon Laboratuvarı’nda (LOCI, Wisconsin Üniversitesi) geliştirilen Java tabanlı bir görüntü işleme programıdır. Imagej’in eklenti mimarisi ve yerleşik geliştirme ortamı, görüntü işlemeyi öğretmek için popüler bir platform haline getirmiştir [3].

Yukarıda yer verdiğim şekilde Wikipedia içerisinde ImageJ’den alınmış bir ekran görüntüsünü görmektesiniz. Görüldüğü gibi bu yazılım aşırı kompleks bir tarafı mevcut değildir. Birçok alanda meslek fark etmeksizin kullanılmakta olan bir araçtır.
📝 ImageJ’ in yetkili web sitelerinde yer alan kullanım kılavuzu olarak verilen dokümantasyonda etiketlemelerin nasıl yapılacağı ve yazılım aracının nasıl kullanılacağı açıklanmıştır.
📌 Makine öğrenimi projesinde etiketlemek zorunda kaldığım görüntüler için Fiji-ImageJ yazılım araçlarına da uğramışlığım vardır. Arayüzü diğer çalıştığım etiketleme programlarına göre çok daha eski kalmış durumda diye düşünüyorum. Yazılımsal açıdan yapmak istediğiniz işlemleri gerçekleştirebilirsiniz elbette, ancak bana göre bir yazılımın kullanıcıyı tasarımsal açıdan da doyurması gerekmektedir.
Image Toolbox Matlab
Yukarıda verdiğim görsel kişisel bilgisayarımda çalıştığım proje sırasında aldığım bir ekran görüntüsü idi. Matlab platformunda çalışırken verileri aktif edebilmek için öncellikle güncelleme yapmak gerekiyordu. Bu sebeple güncelleme yaptıktan sonra görüntüleri tanımlamaya devam ettim. ImageJ kullanıcıları için Matlab eklentisinin kurulması sırasında yüklenecek paket aşağıda verilmektedir.
ImageJ Matlab

📍Matlab Image Labeler

Image Labeler uygulaması, bir video veya görüntü dizisinde dikdörtgen ilgi alanı (ROI) etiketlerini, polyline ROI etiketlerini, piksel ROI etiketlerini ve sahne etiketlerini işaretlemenin kolay bir yolunu sunar. Örnek olması için bu uygulamayı kullanarak size göstererek başlamış olur [4]:

  • Bir resim koleksiyonundan bir resim çerçevesini el ile etiketleme
  • Bir Otomasyon algoritması kullanarak görüntü çerçeveleri arasında otomatik olarak etiketleme
  • Etiketli lokasyon gerçeği verilerini dışa aktarma

Image Toolbox Matlab
Yukarıda gördüğünüz görselde Matlab Image Labeler yazılımını kullanarak segmentasyon işlemi yapabiliyoruz. Daha doğrusu verileri ROI bölgelerine ayırarak etiketleme yapmamız mümkündür. Ayrıca, daha önce var olan algoritmaları kullanmanız mümkün olduğu gibi kendinize ait algoritmanızı da veriler üzerinde test edip çalıştırabiliyorsunuz.
Selection ROI
Matlab’ın yetkili dokümantasyonundan aldığım bu görselde sol menüde seçtiğiniz sınırlayıcı bölgelerin etiket isimleri girilmektedir. Nesnenin sınıfına göre bir etiket rengi atanmaktadır. Bu şekilde etiketlerimizi oluşturmamız da oldukça mümkün. Bir sonraki yazıda ise diğer etiketleme araçlarından bahsedeceğim. Görüşmek dileğiyle ✨

REFERANSLAR
  1. https://medium.com/@abelling/comparison-of-different-labelling-tools-for-computer-vision-f3afd678da76.
  2. http://www.colabeler.com.
  3. From Wikipedia, The Free Encyclopedia, ImageJ, https://en.wikipedia.org/wiki/ImageJ.
  4. MathWorks, Get Started with the Image Labeler, https://www.mathworks.com/help/vision/ug/get-started-with-the-image-labeler.html.
  5. https://chatbotslife.com/how-to-organize-data-labeling-for-machine-learning-approaches-and-tools-5ede48aeb8e8.
  6. https://blog.cloudera.com/learning-with-limited-labeled-data/.
Mobile Application Development

FaCiPa Serisi 3

FaCiPa Serisi 2 adlı yazımdan geriye kalan çok güzel dönütler elde ettiğim için yazılarımın son serisi olan mobil uygulama tarafını kaleme almak istedim. Bir sene boyunca geliştirdiğim projeyi bugün sizler ile konuşabiliyor olmak inanılmaz bir his! Bu yazıda sizler ile birlikte FaCiPa’ nın mobil arayüzü hakkında konuşacağız.
Projede Python programlama dili ve API taraflı kodlamalar yer aldığı için platform olarak Kiwi veya Ionic gibi farklı seçenekler mevcuttu. Ionic için yazdığım diğer yazılarıma aşağıdaki linklerden ulaşabilirsiniz. Bu bağlantılarda Ionic Nedir?, Ionic Proje Çalışma Yapısı ve Semantic UI ile kullanımı hakkında kısaca bilgiler edinebilirsiniz. Bunun yanı sıra TypeScript kod yapısı ile yazıldığı için bunun ile ilgili yazdığım yazımı da incelemeniz mümkün. Aşağıda Ionic Framework hakkında en sık karşılaştığımız açıklamalara yer vermiş bulunmaktayım:

👉 Açık kaynak kodlu olan bu kütüphane, Cordova üzerine inşa edilmiştir.

👉 Web geliştiricisi olanların bile mobil uygulama geliştirmesine olanak sağlayan bir kütüphanedir.

Mobile Application Design
İlk olarak işe FaCiPa için mobil platformu olan Ionic Framework üzerinde yeni bir proje oluşturmakla başlıyoruz.
Ionic Start
Daha sonra ionic generate komutu ile sayfa (page) oluşturuyoruz.
Generate Page
Ionic Page
Uygulamada başlangıç için giriş sayfası, kayıt ol sayfası ve analiz sayfası olması sebebiyke toplamda ana sayfa ile birlikte 4 adet sayfa oluşturulması gerekmektedir.
All files

FACIPA MOBİL ARAYÜZÜ

FaCiPa’ nın mobil arayüzünde kullanılacak olan framework Ionic olarak seçilmiştir. Mobil cihazların bilgisayarlardan daha fazla kullanılması, mobil uygulamaların artması, mobil cihazların çeşitliliği ve farklı işletim sistemlerinin bulunması yazılım geliştiricileri farklı mobil çözümler bulmaya yönlendirdi. Native uygulama geliştirmenin yanında zamanla her platformda da çalıştırılabilen bir uygulama yapısı kurmak önemli bir ihtiyaç haline geldi ve HTML5 ile JavaScript gibi dillerin desteğiyle geliştirilebilen hibrit uygulamalar ortaya çıktı [1].
Ionic Framework, bilhassa Angular.js veya Angular 2 deneyimi olan yazılımcıların ilk tercihi genellikle Ionic olmaktadır. Açık kaynak olan Ionic, binlerce takipçisi ve destekçisi ile binlerce mobil uygulamaya ev sahipliği yapmaktadır. Kendi ifadeleriyle “first-class” bir dokümantasyona sahip olan Ionic Framework kullanışlı ve öğrenmesi kolay kütüphanedir.

🏗Ionic Framework, Cordova üzerine inşa edilmiştir. Mobil cihazın donanımına ve sistem kaynaklarına erişim gibi işlemler Cordova sayesinde yapılmaktadır. Android, IOS veya Windows Phone gibi mobil işletim sistemlerinde çalıştırabilirsiniz. Hatta bu uygulamayı rahat şekilde mobil uyumlu bir web sitesi olarak da yayınlayabilirsiniz. Ionic ile uygulama geliştirebilmek için temel olarak HTMLJavaScript ve Angular.js bilmek yeterli olacaktır. Projede platform olarak Visual Studio Cide platformu kullanılmıştır. Uygulamanın tasarımları src\pages\home\home.html gibi .html uzantılı dosyalarda HTML5 ile ortaya konulmuştur. Gerekli CSS tasarımları ise  src\pages\home\home.scss gibi .scss uzantılı dosyalarda yapıldı [1].

📷Projede kullanılacak olan fotoğraflar ilk adımda kullanıcıdan 3 adet alınacak olarak belirlenmiş olup daha sonra kullanıcıyı yormamak ve makinenin işlem yükünü azaltmak adına 1 adet fotoğrafa indirgenmiştir. Kullanıcı uygulamayı mobil mağazalardan temin ederek anlık olarak fotoğraf çekmekte ve bu fotoğrafı sunucuya işlenmek üzere göndermektedir.
🛡Uygulamanın Backend bölümü ise src\pages\home\home.ts gibi .ts uzantılı dosyalarda TypeScript dilinde yapılmıştır.
Upload Camera

IONIC UYARI(ION-ALERT) EKLENTİSİ

Uygulamanın içeriğinin üstünde bir uyarı belirir ve uygulama ile etkileşime devam edebilmeleri için kullanıcı tarafından manuel olarak kaldırılması gerekir.  Uygulamada kullanıcının doğru şekilde fotoğrafı çekmesi için ion-alert ile uyarı veriliyor.
🔎 Title: Uyarı kutucuğunun başlığı
🔎 Subtitle: Uyarı metni
🔎 Butons: Uyarının kalkması için kullanılan buton eğer Tamam butonuna tıklanırsa photoOne() metodu çalıştırılıyor ve fotoğraf çekme işlemi yaptırılıyor.
Ionic Alert

IONIC KAMERA EKLENTİSİ

Ionic kamera eklentisi mobil cihazlardan fotoğraf ya da video çekmek için gerekli bir eklentidir. Cordova eklentisi gerektirir: cordova-plugin-camera
🔎 Quality: Kalite
🔎 destinationType: Hedef Türü
🔎 encodingType: Kodlama Türü
🔎 media Type:Medya Tipi (Picture) olması fotoğraf olduğunu belirtir.
Install Camera
Install Cam

PROJENİN İLK TASLAK ÇİZİMLERİ

Wireframe Templates
İçerik olarak uygulamanızın sayfalarını tamamen özgürce tasarlayabilirsiniz. Yukarıda gördüğünüz wireframe çizimi projeye ilk başlandığında tasarlanan bir çizimdi. Daha sonra projenin tasarımlarını oluşturduk.
Facipa
Yukarıda yer verdiğim görseller projenin analiz sayfası ve analiz sonucundaki dönütlerdir. Böylelikle FaCiPa’nın sonuna gelmiş olduk. Sabırla takip ettiğiniz için teşekkür ederim. Sağlıcakla kalın ✨
 

REFERANSLAR

  1. http://devnot.com/2016/hibrit-uygulama-catisi-ionic-i-taniyalim/
  2. R. L. Delinger, J. M. VanSwearingen, J. F. Cohn, K. L. Schmidt, “Puckering and Blowing Facial Expressions in People With Facial Movement Disorders,” J. Phys Ther, vol. 88, pp. 909-915, August 2008.
  3. İnternet Ve Mobil Teknolojilerin Yaygınlaşması: Fırsatlar Ve Sınırlılıklar, Hasan GÜLER, Yunis ŞAHİNKAYASI, Hamide ŞAHİNKAYASI. Sosyal Bilimler Dergisi Cilt 7 Sayı 14 Aralık 2017 Makale Gön. ve Onay Tar.: 03.10.2017-27.10.2017