Mar 292020
 
149 kez okundu

Python ile Matrix Rain Etkisi Yaratmak

İncelediğimiz kod ile Matrix filmlerindeki, düşen harflerle yaratılan etkiyi yeniden oluşturuyoruz.

Orijinal kodları: https://gist.github.com/MrKioZ/c07b9377d20bab53af6ebcdfbdeabb64 adresinde bulabilirsiniz.

Aşağıdaki kodlar kısaltılmış ve bazı eklentiler yapılmış halidir.

Kaynak kodlar:

Ahmet Aksoy

Mar 232020
 
84 kez okundu

PYTHON VE OPENCV İLE YÜZ TANIMA

Aşağıdaki kodların orijinal halini https://www.hackster.io/mjrobot/real-time-face-recognition-an-end-to-end-project-a10826 adresinde bulabilirsiniz.

Mevcut kodları ve açıklamalarını kısmen Türkçeleştirdim.

Ortam bilgileri

İşletim sistemi: Ubuntu 18.04
Python 3.7
OpenCV: 4.0
Numpy: 1.17.2
PIL (Pillow): 6.2.1

1- Verilerin elde edilmesi : 01_yuz_veriseti.py

2- Veritabanının Eğitilmesi: 02_yuz_egitimi.py

3- Yüz tanıma işlemleri: 03-yuz_tanima.py

Kamera ve görüntü kontrolü – simpleCamTest.py

Soru ve önerilerinizi lütfen yorum alanından paylaşın.

Ahmet Aksoy

  tarafından 19:08 itibariyle gönderildi.
Mar 082020
 
213 kez okundu

Python ve NLTK ile Türkçe Sohbet Robotu Yapımı

Aşağıdaki videoda incelediğim kodları bu sayfada bulabilirsiniz.

Bu yazıda ele aldığım orijinal Python kodlarını ve İngilizce açıklamalarını içeren videoya https://www.youtube.com/watch?v=FFT4p6me2g0 adresinden ulaşabilirsiniz. Kanalın adı: “Computer Science”.

#python #nltk #chatbot #ahmetax #ahmetaksoy #sohbetbotu

Ahmet Aksoy

Mar 022020
 
326 kez okundu

Fotodaki Yüzleri Bulmak ve Kaydetmek

Herhangi bir fotoğraftaki yüzleri opencv haarcascade yöntemiyle bulmak ve bulunan her yüzü ayrı bir jpg dosyası olarak kaydetmek için aşağıdaki kodları kullanabilirsiniz:

Soru ve yorumlarınız için lütfen aşağıdaki “Yorum” alanını kullanın.

Ahmet Aksoy

Mar 012020
 
229 kez okundu

Haarcascade Yöntemiyle Yüz Tanıma

Haarcascade yöntemini kullanarak bir görselin içindeki yüzleri yakalamak ve yakalanan yüzlerle ilgili -buzlama, aksesuar ekleme, vb- işlemler yapmak hızlı ve pratik bir çalışma yoludur.

Linkteki videoda bu konuyu işledim. Kaynak kodlarını da aşağıda sunuyorum.

Ahmet Aksoy

Şub 232020
 
474 kez okundu

PMP0006 Python ile Sesli Asistan

Python ile Sesli Asistan

https://youtu.be/DHGcy8xucSQ
adresinde yayınlanan videomda incelediğim Python kodlarını aşağıda paylaşıyorum:

Kodlara ilişkin açıklamalar video içinde mevcut.
Takıldığınız yerler olursa, yorum alanından bana iletebilirsiniz.

Hashtags: #sesliasistan #pythonilemikroprojeler #ahmetax #python #pmp #mikroproje #sestenyazıya #stt #speechtotext

Ahmet Aksoy – ahmetax

Oca 302020
 
120 kez okundu

ML002 Pythonla Stil Transferi

Pythonla Stil TransferiHer hangi bir görseli, bir başka görseli temel alarak stilize etmek artık hiç de zor değil. Bu videoda, Pythonla Stil Transferi konusunu işledim. İncelediğim kod Jupyter Notebook ile hazırlanmış. Tensorflow kullanıyor. İsterseniz Google Colab veya kendi bilgisayarınızda kolayca çalıştırabiliyorsunuz. İşlemler sırasında VGG19 eğitilmiş veritabanından yararlanıyoruz. Ayrıca bir stil görseli, bir de dönüştürülecek görsel yeterli. Bu kodları kullanarak, siz de istediğiniz stil transferlerini yapabilirsiniz.

Orijinal kodlar: https://medium.com/tensorflow/neural-style-transfer-creating-art-with-deep-learning-using-tf-keras-and-eager-execution-7d541ac31398
İşletim sistemi: 18.04
Video çekim: OBS 24.0.3 (linux)
Video edit: Olive-Editor 2019 April-Alpha
Ses düzenleme: Audacity 2.3.2
Video adı: ML002 Pythonla Stil Transferi
Video linki: https://youtu.be/MmuyibHmavs
Playlist: Machine Learning – Makine Öğrenmesi
Dosya adı: ml002-pythonla-stil-transferi.mp4

Ahmet Aksoy

Haz 112019
 
1.221 kez okundu

Türkçenin Heceleme Algoritması Üzerine

Türkçe sözcüklerin hecelerine ayrılması ve kullanımı üzerine daha önce yazıp paylaştığım bir kaç yazı var:

7 Haziran 2019 – Türkçede Hece Kullanım Frekansları

7 Kasım 2016 – Türkçe Kelimelerde Hecelerin Sayısal Dağılımı

19 Nisan 2016 – Türkçe Hecelemede 6 Temel Kural

Python ile yazılmış bir heceleme algoritması da bunların arasında.

Bu yazımda yine Türkçe kelimelerin hecelenmesi ile ilgili farklı bir konuya gireceğim.

wordcloud ile Türkçe heceler

Özellikle bir çok futbol kulübünün isminde karşılaştığımız hecelere ayırmada “genel yaklaşıma” aykırı bir durum oluşuyor.
Örneğin “bursaspor” sözcüğünü kurallara göre hecelediğimizde: bur-sas-por hecelerini elde ediyoruz. Algoritmik çözüm açısından ben de bu sonuca katılıyorum.
Ancak son dönemde üzerinde yoğunlaşmaya başladığım sesten yazıya ve yazıdan sese çalışmalarında bu sonuç beni de rahatsız etmeye başladı.

Bileşik kelime haline getirilen; ayrı yazıldığında bile ilk sözcük sesli harfle bittiği ve ikinci sözcük sessiz harfle başladığı için birbirine ulanarak seslendirilen bu sözcükler biraz yadırgatıcı bir sonuç üretiyor.

Örneğin “sas” hecesi aşağıdaki sözcüklerde geçiyor. Özel isimleri ayırırsak esas, sansasyon, sassuolo, sassari, assassin, ihtisas, hassas, sastre, kısas, ihsas gibi sözcükler var. Hepsi yabancı kökenli. Yani “sas” sesi Türkçeye uygun bir ses değil.

sas: 123 [‘bursaspor’, ‘manisaspor’, ‘esasları’, ‘esaslar’, ‘bursasporlu’, ‘esastır’, ‘esaslı’, ‘esastan’, ‘sansasyonel’, ‘esaslara’, ‘sasha’, ‘esaslarına’, ‘manisasporlu’, ‘esaslarını’, ‘sassuolo’, ‘sansasyon’, ‘sassari’, ‘esasların’, ‘hassastır’, ‘esaslarının’, ‘brisaspor’, ‘teksaslı’, ‘assassin’, ‘bursastore’, ‘ihtisaslaşmış’, ‘esasta’, ‘bursasporlular’, ‘saski’, ‘osasco’, ‘esaslarında’, ‘hassaslar’, ‘esaslarla’, ‘hassastı’, ‘hassaslaştırabilir’, ‘sassoon’, ‘esaslarda’, ‘sasso’, ‘hassaslık’, ‘esaslarından’, ‘ihtisaslaşma’, ‘bursasporumuzun’, ‘bursasporluyum’, ‘saskia’, ‘saskatchewan’, ‘assassins’, ‘hassassınız’, ‘hassaslığı’, ‘sashimi’, ‘hassastırlar’, ‘esasla’, ‘sansasyonları’, ‘bursasporum’, ‘esastı’, ‘esaslardan’, ‘sansasyona’, ‘esaslarıyla’, ‘hassaslaşmış’, ‘hassaslaşan’, ‘esaslıca’, ‘esaslarıdır’, ‘sastre’, ‘kısastan’, ‘kısasta’, ‘ihtisasları’, ‘ihsaslarıma’, ‘hassastım’, ‘hassastılar’, ‘hassassın’, ‘hassassa’, ‘hassaslığını’, ‘hassaslıkla’, ‘hassaslaştırıcıdır’, ‘hassaslaştırmıştı’, ‘hassaslaşmıştı’, ‘hassasken’, ‘esastaki’, ‘esaslıydı’, ‘esaslıdırlar’, ‘esaslıdır’, ‘sansasyonlu’, ‘sansasyonlarla’, ‘sansasyonlar’, ‘sansasyonla’, ‘sansasyonellik’, ‘sansasyonda’, ‘ihtisaslaşmıştır’, ‘ihtisaslaşmaya’, ‘ihtisaslaşmanın’, ‘ihtisaslaşmak’, ‘ihtisaslaşacağını’, ‘ihtisaslarınızı’, ‘ihtisaslarına’, ‘ihtisaslar’, ‘hassasça’, ‘hassasmışsın’, ‘hassasmış’, ‘hassaslığıyla’, ‘hassaslığına’, ‘hassaslığımız’, ‘hassaslığa’, ‘hassaslaşır’, ‘hassaslaşınca’, ‘hassaslaştığı’, ‘hassaslaştırılmış’, ‘hassaslaştırmak’, ‘hassaslaştıran’, ‘hassaslaştıracaksın’, ‘hassaslaştı’, ‘hassaslaşmıştım’, ‘hassaslaşma’, ‘esastırlar’, ‘esassızdır’, ‘esassız’, ‘esaslıymış’, ‘esaslıydım’, ‘esaslısından’, ‘esaslısın’, ‘esaslısı’, ‘esaslılık’, ‘esaslarımızdandır’, ‘esaslardandır’, ‘esaslandırdı’, ‘esaslandıran’]

Gelelim “por” hecesine.
Burada da kesinlikle “Öz Türkçe” diyebileceğimiz tek bir sözcük bile bulunmuyor.
por: 488 [‘raporda’, ‘portekiz’, ‘portekizli’, ‘röportaj’, ‘portakal’, ‘porto’, ‘röportajda’, ‘raporları’, ‘raporlar’, ‘porno’, ‘trabzonsporlu’, ‘röportajında’, ‘pasaportu’, ‘bursasporlu’, ‘röportajı’, ‘raporlarını’, ‘raporla’, ‘raporlarının’, ‘raporlarına’, ‘deportivo’, ‘raporlarında’, ‘porsiyon’, ‘raporların’, ‘portre’, ‘portresi’, ‘portalı’, ‘porselen’, ‘raporlarda’, ‘raporlara’, ‘röportajın’, ‘röportajlar’, ‘eskişehirsporlu’, ‘porsuk’, ‘pasaportunu’, ‘rapordaki’, ‘raportörü’, ‘portatif’, ‘belediyesporlu’, ‘raporlama’, ‘rapordan’, ‘pornosu’, ‘pornografik’, ‘röportaja’, ‘sivassporlu’, ‘kayserisporlu’, ‘motorsporları’, ‘portal’, ‘portekizce’, ‘portresini’, ‘pasaportun’, ‘raporlarla’, ‘portreleri’, ‘antalyasporlu’, ‘manisasporlu’, ‘portakallar’, ‘raporlu’, ‘pasaportuna’, ‘röportajdan’, ‘gaziantepsporlu’, ‘röportajını’, ‘raportör’, ‘raporlarıyla’, ‘röportajları’, ‘porsiyonu’, ‘trabzonsporlular’, ‘karabüksporlu’, ‘porter’, ‘pasaporta’, ‘röportajlarda’, ‘bucasporlu’, ‘pasaportunun’, ‘portresinin’, ‘portuna’, ‘kaporta’, ‘laporta’, ‘konyasporlu’, ‘pasaportuyla’, ‘işporta’, ‘samsunsporlu’, ‘portreler’, ‘portakalı’, ‘raporlarından’, ‘pornografisi’, ‘raporlardan’, ‘denizlisporlu’, ‘elazığsporlu’, ‘ordusporlu’, ‘röportajınızda’, ‘işportacı’, ‘rizesporlu’, ‘portekizliler’, ‘portakalın’, ‘pasaportumu’, ‘pornografi’, ‘portrelerini’, ‘röportajından’, ‘opportunity’, ‘portu’, ‘portakallı’, ‘röportajının’, ‘portalda’, ‘porsiyonlar’, ‘diyarbakırsporlu’, ‘portalına’, ‘işportacılar’, ‘porte’, ‘portalında’, ‘röportajlarında’, ‘pasaportunda’, ‘röportajlara’, ‘portalının’, ‘kaportası’, ‘röportajların’, ‘demirsporlu’, ‘erciyessporlu’, ‘adanasporlu’, ‘raporlarındaki’, ‘portrenin’, ‘balıkesirsporlu’, ‘esporte’, ‘röportajdaki’, ‘pasaportum’, ‘raportörün’, ‘röportajla’, ‘reporter’, ‘porçini’, ‘porta’, ‘raporlanması’, ‘portrelerinin’, ‘portofino’, ‘röportajlardan’, ‘quattroporte’, ‘kaportacı’, ‘izmirsporlu’, ‘bursasporlular’, ‘trabzonsporluların’, ‘portalları’, ‘işportacılık’, ‘portuondo’, ‘portable’, ‘bolusporlu’, ‘röportajına’, ‘işportaya’, ‘saporta’, ‘portugal’, ‘röportajlarını’, ‘raporlardaki’, ‘portör’, ‘porsiyonları’, ‘portreyi’, ‘portrelerinden’, ‘portecho’, ‘portresine’, ‘portrait’, ‘portolu’, ‘transporter’, ‘raporlarımızı’, ‘rapordur’, ‘portalın’, ‘otoportre’, ‘trabzonsporluyum’, ‘röportajlarından’, ‘portakalların’, ‘raportörleri’, ‘portekizlilerin’, ‘portallarından’, ‘porsiyonlarda’, ‘şekersporlu’, ‘portobello’, ‘portia’, ‘porselenleri’, ‘pasaportundaki’, ‘işportacıların’, ‘röportajıyla’, ‘porsiyonların’, ‘porselenler’, ‘motorsporlarının’, ‘fethiyesporlu’, ‘ankarasporlu’, ‘şanlıurfasporlu’, ‘raportörlüğü’, ‘raportörler’, ‘proportionality’, ‘portala’, ‘portakalları’, ‘linyitsporlu’, ‘kocaelisporlu’, ‘işportada’, ‘röportajımda’, ‘portrelerin’, ‘porsumuş’, ‘pornoya’, ‘porcini’, ‘röportajımızda’, ‘portrede’, ‘portimao’, ‘portalını’, ‘motorsporlarına’, ‘raporlayan’, ‘portresiyle’, ‘portakalda’, ‘otoportresi’, ‘kasımpaşasporlu’, ‘röportajındaki’, ‘portresinden’, ‘portallarında’, ‘porsun’, ‘pornonun’, ‘malatyasporlu’, ‘kartalsporlu’, ‘giresunsporlu’, ‘raporlamalar’, ‘portreye’, ‘portas’, ‘pornografiye’, ‘pasaportuma’, ‘laporte’, ‘important’, ‘deportes’, ‘röportajlarıyla’, ‘raportörlük’, ‘portalından’, ‘porsiyonlarınızı’, ‘porsiyonlarla’, ‘porseleni’, ‘pornosuna’, ‘kaportayı’, ‘kaportasına’, ‘bandırmasporlu’, ‘alanyasporlu’, ‘röportajım’, ‘raporlarımızda’, ‘portreleriyle’, ‘portrelerine’, ‘porsiyonluk’, ‘pornografisine’, ‘pasaportunuzu’, ‘kağıtsporlu’, ‘işportacılara’, ‘eyüpsporlu’, ‘bursasporluyum’, ‘röportajımıza’, ‘raporlandı’, ‘pornocu’, ‘motorsporlarında’, ‘tokatsporlu’, ‘sakaryasporlu’, ‘röportajımız’, ‘reporting’, ‘raporlamaya’, ‘portishead’, ‘pornosuyla’, ‘pornografiyi’, ‘pasaportunuzun’, ‘pasaportunuz’, ‘keşansporlu’, ‘işportadan’, ‘hataysporlu’, ‘röportajlarımda’, ‘raportöre’, ‘raporluyor’, ‘raporlandığı’, ‘portali’, ‘pornografinin’, ‘petrolsporlu’, ‘oportünist’, ‘kayserisporlular’, ‘raportörünün’, ‘raportörlerin’, ‘raporlayacak’, ‘porteouverte’, ‘portakala’, ‘porsiyona’, ‘porselenden’, ‘pornografiyle’, ‘pasaportumuz’, ‘kaportacılık’, ‘disproportionate’, ‘deporte’, ‘superdeporte’, ‘reported’, ‘raporlayıp’, ‘raporlanıyor’, ‘rapordu’, ‘portresinde’, ‘portrelerden’, ‘portillo’, ‘portallarına’, ‘portakaldan’, ‘porsiyonun’, ‘porsiyonlara’, ‘kurtalansporlu’, ‘kaportasında’, ‘deportiva’, ‘bafrasporlu’, ‘portrelere’, ‘kaportanın’, ‘raporlan’, ‘portredeki’, ‘porsuklar’, ‘işportacılığı’, ‘raporlarım’, ‘raporlardı’, ‘portresiydi’, ‘portreleriydi’, ‘portakalla’, ‘porsuğu’, ‘pasaportumdaki’, ‘pasaportumda’, ‘işportacının’, ‘röportajımı’, ‘röportajlarla’, ‘raporlarınızı’, ‘raporlarınızda’, ‘portrelerle’, ‘portreden’, ‘portesine’, ‘porsuyup’, ‘porselenleriyle’, ‘porselenlerinin’, ‘porselenin’, ‘pasaportuydu’, ‘kaportasının’, ‘kaportadaki’, ‘işportası’, ‘işportacılardan’, ‘triportörle’, ‘röportajlarınızdan’, ‘röportajlarının’, ‘raporsuz’, ‘raporludur’, ‘raporlaştırmışlardı’, ‘raporlarımıza’, ‘portresindeki’, ‘portrenizi’, ‘portremi’, ‘portreli’, ‘portrelerinizi’, ‘portrelerinde’, ‘portredir’, ‘portrecilik’, ‘portovenere’, ‘portesi’, ‘portakalım’, ‘portakallara’, ‘porsuğa’, ‘porsiyondan’, ‘porselenlerin’, ‘porfir’, ‘pasaportumun’, ‘pasaportumla’, ‘oportünistti’, ‘kaportaya’, ‘kaportacının’, ‘kaportacılar’, ‘işportalarda’, ‘işportacıyı’, ‘işportacıya’, ‘işportacılıktan’, ‘işportacıdan’, ‘triportörüme’, ‘röportajınızı’, ‘röportajınız’, ‘röportajımın’, ‘röportajımdan’, ‘röportajlarınızı’, ‘röportajdı’, ‘röportajcının’, ‘röportajcıların’, ‘röportajcıları’, ‘röportajcılarla’, ‘röportajcılar’, ‘röportajcı’, ‘raporluymuş’, ‘raporlusu’, ‘raporlular’, ‘raporlaştırır’, ‘raporlarımızın’, ‘raporlarımız’, ‘raporlarıdır’, ‘raporlardır’, ‘raporlanmasının’, ‘raporlanmasını’, ‘raporlaması’, ‘raporlamaları’, ‘raporladı’, ‘proporsiyonu’, ‘portunu’, ‘portreyle’, ‘portreydi’, ‘portresiyse’, ‘portresidir’, ‘portrenize’, ‘portreniz’, ‘portreni’, ‘portrene’, ‘portremizi’, ‘portremin’, ‘portremdi’, ‘portrem’, ‘portrelerimiz’, ‘portrelerimdeki’, ‘portrelerdi’, ‘portrelerdeki’, ‘portredekine’, ‘portredekinden’, ‘portreciliğine’, ‘portreciler’, ‘portoyu’, ‘portoya’, ‘portos’, ‘porton’, ‘portoları’, ‘portolardan’, ‘portolan’, ‘portodan’, ‘porteye’, ‘portesinin’, ‘portesinde’, ‘portenin’, ‘portelerden’, ‘porteler’, ‘portekizliye’, ‘portatifin’, ‘portatifi’, ‘portallarının’, ‘portakalının’, ‘portakalını’, ‘portakallarını’, ‘portakallarımız’, ‘portakallarla’, ‘portakallardan’, ‘portakaldı’, ‘portakalcılarla’, ‘porsuğunu’, ‘porsuğun’, ‘porsuyan’, ‘porsutulmuş’, ‘porsuttuğunu’, ‘porsukların’, ‘porsukları’, ‘porsuklarda’, ‘porsuklara’, ‘porsudu’, ‘porsu’, ‘porsiyonunu’, ‘porsiyonumu’, ‘porsiyonlardan’, ‘porsiyonda’, ‘porselenlerle’, ‘porselenleriydi’, ‘porselenlerini’, ‘porselenle’, ‘porselenini’, ‘porseleninden’, ‘porselenimsi’, ‘porselene’, ‘porselendi’, ‘pornosunun’, ‘pornosunu’, ‘pornografimde’, ‘pornografim’, ‘pornografiden’, ‘porfirden’, ‘pasaportunuza’, ‘pasaportundan’, ‘pasaportumdan’, ‘oportünizmin’, ‘oportünizmi’, ‘oportünizm’, ‘oportünistsin’, ‘oportünistlikle’, ‘oportünistlere’, ‘oportünistler’, ‘kaportasıysa’, ‘kaportasını’, ‘kaportalarını’, ‘kaportacıdaymış’, ‘kaportacıda’, ‘işportasını’, ‘işportaları’, ‘işportalar’, ‘işportacıydı’, ‘işportacısının’, ‘işportacısını’, ‘işportacısıdır’, ‘işportacılığa’, ‘işportacılıkla’]

“trabzonspor” örneği daha da çarpıcı. Hecelediğimizde “trab-zons-por” hecelerini elde ediyoruz. “zons” hecesi sadece “trabzonspor” sözcüğüyle birlikte var.

zons: 9 [‘trabzonspor’, ‘trabzonsporlu’, ‘trabzonsporlular’, ‘trabzonsporluların’, ‘trabzonsporumuz’, ‘trabzonsporluyum’, ‘trazonspor’, ‘trabzonsporumuzun’, ‘trabzonsporumuza’]

Başka örnekler de olmakla birlikte, sözcükleri, bu örneklerdeki gibi Türkçeye yabancı seslere ayırmanın çok sağlıklı olduğunu düşünmüyorum.

Bu tür sözcüklere “Öz Türkçe” heceleme algoritmasını dayatmak yerine, orijinal sözcükleri bir bütün olarak dikkate almak daha anlamlı sonuçlar üretebilir.

Örneğin “bursaspor” sözcüğünü “bur-sa-spor” olarak ayrıştırdığımızda sesler daha uyumlu hale geliyor. Aslında daha da iyisi “spor” yerine “si-por” kullanmak olabilir. Halk ağzında yaygın olarak spor yerine sipor denmesi boşuna değil. Çünkü Türkçemizde hiçbir hece veya kelime çift sessiz harfle başlamıyor.

Temel Türkçe hece yapılarını hatırlayalım:
1. Sesli (Örnek: a-li, ö-dev)
2. Sessiz+Sesli (Örnek: gel-se, dedi)
3. Sesli+Sessiz (Örnek: al-tın, el-li)
4. Sessiz+Sesli+Sessiz (Örnek: er-ken, sarsak)
5. Sesli+Sessiz+Sessiz (Örnek: alt-mış, üst)
6. Sessiz+Sesli+Sessiz+Sessiz (Örnek: sert, berk)

Konuya “Yazıdan Sese” dönüştürme yöntemleri açısından baktığımızda, yabancı kökenli sözcükleri ayrı birer birim olarak ele almanın pek çok sorunu çözmesi mümkün. Böyle yaparsak, örneğin “stres” sözcüğünü Türkçe kurallarına göre hecelemeye kalkmak yerine onu ayrı bir birim -ayrı bir hece sesi- olarak değerlendirebiliriz. “Tren” sözcüğü için de aynı şey geçerlidir.

Dilimizdeki yerleşik yabancı kökenli kelime sayısı oranı çok yüksek. Bu durumdan kurtulmak için teknolojik terim ve kavramlara karşılık gelen yeni sözcükler türetmeksizin, yabancı kökenli tüm terim ve kavramları dilimizden atmaya kalkarsak geriye kullanışsız ve zorlama bir çerçeve kalacaktır. (Türkçeyi temizlemenin olanaksız olduğunu söylemek istemiyorum ama, kendimiz yeni teknoloji ve kavramlar üretemediğimiz sürece, yabancı terimleri olduğu gibi veya kısmen uyarlayarak kullanmak dışında pek bir seçeneğimiz kalmıyor.)

Sonuç olarak, yazıyı sese çevirirken Öz Türkçe sözcükleri ve eklentilerini hecelerine göre, yabancı sözcükleri ise orijinaline uygun birimler halinde seslendirebileceğimizi düşünüyorum.

Çalışma ve deneylerimin sonuçlarını yine buradan sizlerle paylaşacağım.

Ahmet Aksoy

  tarafından 23:44 itibariyle gönderildi.
Haz 022019
 
995 kez okundu

Facebook wit.ai ile Sesten Yazıya

Son dönemdeki kitap çalışmalarım nedeniyle bu siteyi epeyce ihmal ettim. Umarım arayı kısa sürede kapatırız.
Yeni çalışmalarım, “Sesten Yazıya” ve “Yazıdan Sese” dönüşüm üzerine.
Bu yazımda Facebook’un denetimindeki wit.ai sitesi üzerinden sağlanan Sesten Yazıya çalışmasına bir örnek vereceğim. Bu hizmet tamamiyle ücretsiz.
Wit.ai gibi Google, Google Cloud, Microsoft Azure ve IBM tarafından sağlanan Sesten Yazıya çözümleme hizmetleri de bulunuyor.
Google ve Google Cloud belli kısıtlamalar içerse de uzun soluklu ve ücretsiz hizmetler sunuyor.
IBM ise “one month of inactivity” gibi bir kısıtlama koymuş. Benim yaptığım gibi deneme amaçlı bir hesap açar ve bu zamanı geçirirseniz, bir daha IBM ile -ücretsiz- çalışamıyorsunuz.
Benzer bir durum da Microsoft Azure için var. Sadece bir aylık ücretsiz üyelik sağlıyor. Daha sonra yapacağınız denemeler için ücret ödemek zorundasınız.
Eğer ticari olarak yararlanmayı düşünmüyorsanız IBM ve Microsoft dışındaki ücretsiz çözümler size daha cazip gelebilir.
Facebook – wit.ai bunlardan biri.
Öncelikle bu siteye üye olmanız ve bir hesap oluşturarak yeni bir API anahtarı almanız gerekiyor.
Gerekli işlemler şöyle:

1. https://wit.ai sitesine gir

https://wit.ai sitesine bağlan


2. Facebook veya Github üyeliğin üzerinden sisteme bağlan (ilgili butona tıkla)
3. Sayfanın sağ üst tarafındaki artı (+) işaretine tıklayarak yeni bir hesap oluştur
3.1. Hesaba bir isim ver (resimdeki deneme hesabı)
3.2. İkinci kutuya bir açıklama yaz
3.3. Language (dil) olarak Turkish seç
3.4 En alttaki “+ Create App” butonuna tıkla

Sayfanın sağ üst tarafındaki artı (+) işaretine tıklayarak yeni bir hesap oluştur

4. Sağ üst köşedeki “Settings” butonuna tıkla

Sağ üst köşedeki “Settings” butonuna tıkla

5. Bu sayfadaki “Server Access Token” değerini kopyala (API anahtarı olarak bu bilgi kullanılacak)
5.1 Gerekiyorsa Default Timezone ve Language değerlerini değiştir.

API anahtarı olarak Server Access Token değerini kopyala

6. Python projenin çalışma klasöründe witkeys_tr.py (veya benzeri) bir dosya oluştur
7. Bu dosyanın içine WIT_ACCESS_TOKEN= yaz ve eşit işaretinin sağ tarafına tırnak içinde 5. satırda elde ettiğin değeri yaz
8. Dosyayı kaydet

Şimdi de kullanacağımız betiği görelim:

Betiğimizde speech_recognition modülünü kullanıyoruz.
Bu modülü kurmak için vereceğimiz konsol komutu şudur:

Betiğimiz Python 3.6 için hazırlanmıştır ve Ubuntu 18.04, Windows 10 ve Mac OS Sierra üzerinde sorunsuz çalışmaktadır.

Ahmet Aksoy

Ara 182018
 
2.723 kez okundu

OpenCV ile Yüz Tanıma Bölüm 3-2

Önceki yazımda veri setimizi nasıl oluşturacağımızı anlatmıştım.

Bu kez veri setimizi Keras kullanarak eğiteceğiz. Sonra da yeni resimleri bu eğitilmiş veri setini kullanarak sınıflandıracağız.

3. ADIM – EĞİTİM

Projemize örnek olarak aldığımız çalışmada Adrian, Keras modellemesi için SmallerVGGNet sınıfını kullanıyor. Ben onun yerine daha basit bir model kullandım (vgg_like). Eğer isterseniz yazının sonundaki Referanslar bölümünde yer alan linkleri kullanarak SmallerVGGNet kodlarına ulaşabilirsiniz.

Lafı uzatmadan eğitim betiğimize geçelim. Betiğimizin adı: train.py

İşin içine eğitim girince bir sürü kütüphane ve modüle ihtiyaç duyuyoruz. Kullanacağımız kütüphaneler hakkında kabaca da olsa, bilgi sahibi olduğunuzu umuyorum. Yoksa bu yazıyı 1000-1500 kelimelik bir hacme sığdırmak olanaksız hale gelirdi.

İlk 27 satırımızda matplotlib, keras, sklearn, imutils, numpy, random, pickle, cv2 ve os kütüphanelerimizi içe aktarıyoruz. smallervggnet kütüphanesini de belki kullanırsınız diye listeden çıkarmadım.

Modeli daha basit tutmak amacıyla vgg_like() fonksiyonunu tanımladım. (VGGNet, 2014 yılındaki Imagenet Büyük Ölçekli Görsel Tanıma Yarışmasında çok iyi performans gösteren bir yapay sinir ağıdır. VGG (Visual Geometry Group) Oxford Üniversitesi Mühendislik Bilimleri Bölümünün bir alt birimidir.)

Eğitim için Doğrusal(Sequential) bir model kullanıyoruz – satır 30
Görsellerimiz 96×96 boyutlu ve 3 renk kanalına sahip.
Modelimize ilk önce bir Conv2D katmanı uyguluyoruz – satır 31
İkinci katmanımız yine Conv2D – satır 32
Üçüncü katmanda MaxPooling2D var – satır 33
34. satırdaki Dropout ile %25’lik giriş bilgisini devre dışı bırakıyoruz (overfitting engelleme).

Benzer işlemleri bir kez daha tekrarlıyoruz. Ama boyutlamalar biraz farklı. satır 36-39

Son aşamada modelimize önce Flatten(), sonra Dense() uyguluyoruz. satır 41-42
Dropout oranımız %50 satır 43
Son işlemimiz her zamanki gibi ‘softmax’ satır 44
45.satırda modelimizi geri döndürüyoruz.

47. satırda işlem başlangıç zamanını t0 olarak not ediyoruz. Bu değişkeni belirli aşamalarda geçen süreyi belirtmek için kullanacağız.

Satır 48-51’de sabitlerimizi tanımlıyoruz.

data ve labels boş birer listedir. satır 53-54

58. satırda görsel dosya yollarımızı bir listede topluyoruz (imagePaths).

imagePaths listesinin satırlarını karıştırırken, sonraki denemelerde de aynı rasgele değerleri elde edebilmek için seed değerini 42 olarak belirliyoruz. satır 60 (Bu değer herhangi bir başka sayı da olabilir. Önemli olan hep aynı başlatma değerini kullanmak.)

63. satırda görsel dosyalarını işlemeye başlıyoruz.
Dosyayı okuyoruz – satır 64
İmajı 96×96 olarak yeniden boyutlandırıyoruz – satır 65
İmajı bir dizi (array) haline dönüştürüyoruz – satır 66
Ve imaj dizisini data listesine ekliyoruz – satır 67

Dosya yolundan etiket bilgisini (sanatçı_kodu) ayrıştırıyoruz – satır 70
Etiket bilgisini labels listesine ekliyoruz – satır 71

data listesini elemanları 0 veya 1 olacak şekilde bir numpy dizisine çeviriyoruz – satır 75
Aynı şekilde labels listesini de bir numpy dizisi haline getiriyoruz – satır 76

Satır 81-82’de etiketleri sayısallaştırıyoruz.

Satır 85-86: data ve labels dizi elemanlarının %20’sini test, geri kalanını eğitim için ayırıyoruz.

Veri sayımız kısıtlı olduğu için data çoğullama (augmentation) işlemi yaptırıyoruz – satır 89-91 (Çoğullama sırasında döndürme, kaydırma, yükseklik değiştirme, kesme, büyütme ve yatay aynalama (flip) işlemleri yapılacak.)

Modelimizi vgg_like() fonksiyonu ile oluşturuyoruz – satır 99

model.summary(), model katmanlarımızın değişimini ayrıntılı bir şekilde açıklıyor. Bu özeti hem ekrana, hem de dosyaya kaydediyoruz. – satır 102-105

Optimizasyon işlemi için Adam da yaygın bir şekilde kullanılıyor. Benim yaptığım denemelerde SGD daha iyi sonuçlar almamı sağladı. Her ikisini de deneyebilirsiniz. Satır 108

110. satırda modelimizi derliyoruz.

Eğitim işlemleri (satır 116-120) için bir kaç dakika bekliyoruz.

Eğitim tamamlandığında, önce modelimizi (satır 124), sonra da etiketlerimizi (satır 128-130) kaydediyoruz.

Son aşama olarak, eğitim işlemlerimiz sırasında hesaplanan kayıp ve doğruluk değerlerini grafiğe döküyor ve plot.png adıyla kaydediyoruz. – satır 135-146

OpenCV ile Yüz Tanıma Bölüm 3-2

Artık sınıflandırma işlemlerimize geçebiliriz. Ama daha önce model özetimize kısaca bir göz atsak iyi olacak:

Conv2D katman çıkış boyutlarında 2 piksellik küçülme yaratıyor.
MaxPooling2D ise (2,2) oranları ile her iki yönde boyutları yarıya indiriyor.
Flatten işlemi katmanı tek boyutlu bir diziye dönüştürür.
Dropout input değerlerinden bir bölümünü işlem dışı bırakır. Böylece overfitting olasılığı azalır.

4. ADIM – SINIFLANDIRMA

Sınıflandırma işlemlerinde eğitim aşamasında kullanmadığımız görsellerden yararlanacağız. Her sanatçı için birer görsel seçtik ve bunları kontrol klasörünün altına kopyaladık.

İlk 7 satırda gerekli kütüphaneleri içeri aktarıyoruz.

imajlar listesi sınıflandıracağımız fotoğrafları tutuyor. satır 10

Sınıflandırma işlemlerini check_image() fonksiyonu ile yapacağız (satır 12). Her görsel ayrı ayrı işleme sokulacak.

Satır 13-16’da imajımızı 96×96 piksel boyutlarına küçültüyor ve modelimize uygun bir numpy dizisine dönüştürüyoruz.

Satır 19 ve 20’de eğitim sonunda kaydettiğimiz model ve etiket bilgilerini belleğe alıyoruz.

Modele göre bulunan tahmin ve olası doğruluk derecesini saptıyor; etiket değerini alıyoruz. satır 23-25

Sınıflandırma sonucunu genişliğini 400 pikselle sınırlandırdığımız imajımızın üzerine işliyoruz. satır 28-33

İşlenmiş imajı ekranda gösterip diske kaydettikten sonra bir tuşa basılmasını bekliyoruz. satır 35-38

Tuşa basıldığında belleği temizliyoruz: satır 39

check_image() fonksiyonumuzu her resim için ayrı ayrı çağıran döngümüz satır 42-45 arasında.

Elde ettiğim görüntüler aşağıda:

OpenCV ile Yüz Tanıma Bölüm 3-2

OpenCV ile Yüz Tanıma Bölüm 3-2

OpenCV ile Yüz Tanıma Bölüm 3-2

SmallerVGGNet kullanarak yaptığım denemelerde daha yüksek sayısal doğruluk oranlarına ulaştım ama, yapılan tahminlerin pek çoğu aslında hatalıydı. Bu, veri kümemizin çok dar olmasından kaynaklanmış olabilir.

Aynı eğitim setini yüz saptama fonksiyonlarıyla birlikte kullanarak grup fotoğraflarından çoklu yüz tanıma işlemleri gerçekleştirmek mümkün olabilir.

Açıklamalara böyle bir blog yazısında daha kapsamlı bir şekilde girmek mümkün olmuyor. Sorularınız varsa, yorum alanından iletebilirsiniz.

Bu tür çalışmalar çok geniş bir kapsama alanına sahip. Yapılan işlemler ve elde edilen sonuçlar deneysel nitelikte. Bu yüzden, bu tür konulara ilgi duyuyorsanız, siz de kendi modellerinizi geliştirin. Mümkünse veri kümeleri oluşturun. Deneyin. Yorumlayın.

Elbette hala öğrenecek çok şey var. Ama yapabileceğimiz şeyler de pek çok…

Önemli olan, hangi düzeyde olursak olalım, deneysel bakış açımızı yitirmemek ve hevesimizi kaybetmemek… Hata yapmak bizi korkutmasın. Hatalar, kullanmasını bilenler için en etkin yol göstericilerdir.

Yeni yazılarda buluşmak üzere…

Beni izlemeye devam edin.

Ahmet Aksoy

Referanslar:
https://github.com/kjaisingh/pokemon-classifier/blob/master/pyimagesearch/smallervggnet.py
https://www.pyimagesearch.com/2018/04/16/keras-and-convolutional-neural-networks-cnns/
https://hackernoon.com/learning-keras-by-implementing-vgg16-from-scratch-d036733f2d5
http://www.robots.ox.ac.uk/~vgg/research/very_deep/