Kas 112016
 
4.760 views

Python ile Harflerden Resim Kodlamak

Python ile çok farklı alanlarda çalışmak mümkün. Örneğin herhangi bir görüntüyü alıp, onu sadece ASCII tablosunda yer alan bazı işaretleri kullanacak şekilde kodlamak mümkün. İngilizcede bu tür çalışmalar “ASCII Art” terimiyle ifade ediliyor. Dilimizde somut bir karşılığı yok.

Aşağıdaki görüntü, günümüzün popüler dizilerinden birindeki Defne karakterini canlandıran sanatçı Elçin Sangu‘ya ait.

Resim Kodlamak

Bu kodlamayı gerçekleştiren küçük pyhon betiğini https://gist.github.com/cdiener/10491632 adresinden indirebilirsiniz.

Bu betik aslında doğrudan komut modunda çalıştırılmak üzere hazırlanmış. Ben, onun yerine belli bir resmi kullanacak şekilde küçük bir değişiklik yaptım.

chars dizisinin içeriği ile oynayarak tonlamalarda farklı sonuçlar elde etmek mümkün. Benzer şekilde SC, GCF ve WCF parametreleriyle de oynayabilirsiniz.

Kodlar şöyle:

Kullandığım orijinal resimdeki renkler ve gölge kontrastları, yapılan dönüşüm için çok uygun değildi. Siz, kontrastı daha güçlü görseller kullanarak daha çarpıcı sonuçlar elde edebilirsiniz. Parametrelerle de oynamak gerekebilir.

Yapay zeka çalışmalarıyla günümüzde olağanüstü görseller elde edilebiliyor artık. Biz de şimdilik “çöp adam çizer gibi” bir ucundan başlayalım dedik. İleride daha kapsamlı çalışmalar da yapabiliriz fırsat bulursak.

Ne dersiniz?

Deneme sonuçlarınızı lütfen benimle de paylaşın!

Yukarıdaki kodları Ubuntu 16.04 üzerinde, Python 3.5.2 ile çalıştırdım.
Sisteminizde hazır değilse PIL ve numpy kütüphanelerini öncelikle kurmanız gerekeceğini unutmayın.

Ahmet Aksoy

http://gurmezin.com/python-ile-harflerden-resim-kodlamak

Ek açıklama: Yukarıda kodlarını paylaştığım yazarın satırlarına gist.github.com üzerinden ulaşmıştım. Buradaki kodların arasında ayrıntılı lisans bilgileri mevcut değildi. O yüzden sadece kodların orijinal linkini vermekle yetinmiştim.
Ancak yazarın github sayfasında aynı kodlara ilişkin lisans bilgileri de mevcut. Etik olarak bu satırları da sayfaya eklemenin daha doğru olacağını düşünüyorum.
Sonuç itibariyle etkin kod satırlarımızın sayısında bir değişiklik olmayacak zaten.

Kas 012016
 
3.519 views

OpenCV ve Python ile Grafik İşlem Örnekleri

OpenCV kütüphanesi, canlı grafik işlemler için gereken fonksiyonları kullanıma açıyor.

Ana siteden OpenCV2 veya OpenCV3 paketlerini yükleyebilirsiniz.

https://github.com/opencv/opencv adresinde ana sitenin bir çatalı yer alıyor. Tüm kodları ve örnekleri buradan da indirebilirsiniz.

OpenCV kütüphane fonksiyonları CUDA kullanabiliyor. Hemen hemen bütün sistemlerle uyumlu bu kütüphane, “samples” dizinlerine yerleştirilen örneklerle daha kolay anlaşılabilir hale getirilmiş.

“Coherence.py” python kodunu kullanarak elde ettiğim örneklerden biri şöyle:
coherence_01_01-11-2016

gabor_threads.py kodunu çalıştırarak elde ettiğim örneklerden birisi şu:
gabor_threads

Python dizinindeki örnekleri “python3 demo.py” komutuyla açılan menü sisteminden kolaylıkla aktive etmeniz mümkün.

facedetect.py programcığı, canlı bir şekilde insan yüzünü yakalama konusunda öğretici bir örnek.

Nesne tanıma konularıyla ilgileniyorsanız, bu kütüphaneyi mutlaka portföyünüze ekleyin.

Ahmet Aksoy

Referanslar:

Ağu 262016
 
1.213 views

Eğitilmiş word2vec datasını nasıl kullanırız?

Eğitilmiş word2vec datasını nasıl kullanırız?

Elbette bu tür çalışmalarımızı Python ile yapıyoruz. Üstelik interaktif denemeler yapıyorsak, iPython kullanmamız daha doğru. iPython son dönemde jupyter ile entegre çalışıyor.

Bu yüzden önce kullanmakta olduğunuz Python sürümünü aktif hale getirin. Ben Python 3.5.1 kullanıyorum ve bunun için tanımladığım evp35 isimli bir sanal ortamım var.

Sanal ortamımı devreye sokuyorum:

Artık “python” komutum doğrudan python 3.5.1 sürümünü devreye sokuyor. Gerekli modülleri de bu sanal ortam üzerinden yükledim.

Aynı şey jupyter için de geçerli. Yüklemek için vereceğiniz komut şöyle:

Çalışmamızda word2vec modülünü kullanacağız. Onu da yükleyelim:

Artık iPython’u jupyter üzerinden devreye sokabiliriz. Bunun için:

komutunu kullanın ve “New” kutucuğundan “python 3” seçin.

Aşağıdaki kodları kullanabilmeniz için eğitilmiş veri kümemizi de indirmeniz gerekiyor.

https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden hnz_2010.bin isimli dosyayı indirin. Eğitilmiş vektörlerimiz bu dosyaya kayıtlıdır.

Hazırlıklarınız tamamsa, aşağıdaki işlemleri siz de kendi bilgisayarınızda uygulayabilir, yeni denemeler yapabilirsiniz.

Deneyimlerinizi benimle paylaşmayı da lütfen unutmayın!

Ahmet Aksoy
Açık Kaynak DerlemTR Proje Yöneticisi

Takıldığınız yerler olursa, Yorum bölümünden bana ulaşabilirsiniz.

Ağu 262016
 
1.619 views

Hürriyet Gazetesi Datasıyla Derin Öğrenme Çalışmaları

Açık Kaynaklı DerlemTR Projesi‘nin yeni aşamasında, Hürriyet Gazetesi yetkilileri “derin öğrenme” (deep learning) konulu çalışmalarımızda gazete arşivlerinden yararlanma isteğimizi yine olumlu karşıladı. Başta Sayın Ersay Dizman olmak üzere, gazete yetkililerine tekrar teşekkür ediyorum.

Hürriyet Gazetesi Datasıyla Derin Öğrenme Çalışmaları

Bu aşamada yine python dilini kullandım ve 2010 yılı Hürriyet Gazetesi arşivlerini taratarak “uygun” haberleri bir araya topladım. Haberlerin tarihi, başlığı, muhabiri veya yazarı belli değil. Çünkü bu bilgilere ihtiyacımız yok.

Yapacağımız çalışmalar “word2vec” yöntemine odaklanmış durumda. Bu yöntem, sözcüklerin komşuluk ilişkilerini vektörel olarak değerlendirerek “müdahalesiz” bir eğitim mekanizması oluşturuyor ve buna bağlı sonuçlar üretiyor. Daha önce yazdığım “Word2vec yöntemiyle Türkçe sözcüklerin ilişkilendirilmesi” isimli yazıma bir göz atmak isteyebilirsiniz.

Bu tür çalışmaların en zor tarafı yeterli büyüklükte, düzgün ve güvenilir veri kümelerine (dataset) sahip olmanın zorluğu. Hele Türkçe için alan neredeyse tamamiyle boş. Sağlıklı bir eğitim sağlayabilmek küçük veri kümeleriyle mümkün olmuyor.

Bu yüzden DerlemTR projesi bünyesinde yapacağımız çalışmalarda kullanacağımız veri kümelerini aynı zamanda bu konularda çalışmak isteyen diğer araştırmacılara da karşılıksız olarak açıyoruz. Böylece dilimize yönelik araştırma ve değerlendirmelere bir katkımız olacağına inanıyorum.

Yeni çalışmamızın ilk veri kümesi Hürriyet gazetesinin 2010 yılı arşivindeki haberlerden türetildi. Diğer yıllarla ilgili çalışmalarımız devam ediyor.

Çalışmamızda sözcükleri cümle, paragraf, haber gibi gruplaşmalardan bağımsızlaştırdık. Noktalama işaretlerini, durak sözcüklerini ve sayıları kaldırdık. Sonuçta sadece bir ardışık sözcükler listesi elde ettik.

Sözcükleri düzenlerken inceltme/uzatma işaretlerini temizledik. Çok sık kullanılan, ama kullanılmadığında cümlenin anlamını pek fazla değiştirmeyen durak sözcüklerini (stop-words) listeden sildik. Bütün sözcükleri küçük harfe çevirdik ve sadece geçerli sözcükleri bıraktık. Böylece elimizde birbirinden birer boşluk işaretiyle ayrılan, peşpeşe dizilmiş sözcükler kaldı. Bu yapı CBOW (continuous bag of words), yani “sürekli sözcük torbası” olarak adlandırılıyor. Dosya aslında bir metin dosyası. Ama bu dosyayı bir metin editörüyle incelemek pratik olarak mümkün değil. Çünkü noktalama işaretleri yok. Bu yüzden milyonlarca sözcükten oluşan tek bir cümleden oluşuyormuş gibi davranacaktır.

Word2vec sistemini kullanarak sonuç almak için önce bu sistemi eğitmek gerekiyor:
1- Ardışık olarak kullanılan sözcük çiftlerini belirle ve “_” işaretiyle bağla
2- Sözcük listesindeki kümeleşmeleri sapta (clustering)
3- Sözcük listesini eğit
4- Eğitilmiş dosya bilgilerini kullanarak ilişki raporları üret

Bu amaçla, ben de https://github.com/danielfrg/word2vec adresinde ayrıntılı bir şekilde açıklanan işlemleri kullandım. Seçtiğim vektör boyutu: 100.

Eğitim dosyası (hurriyet_2010.txt) ve eğitilmiş veri dosyasına (hurriyet_2010.bin) https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden ulaşabilirsiniz.

“turkce-stopwords.txt” isimli dosya da aynı adreste yer alıyor. (İlk çalışmalarımızdan elde ettiğimiz derlem dosyası da gensozluk.txt adıyla aynı yerde.)

Word2vec veya benzeri yöntemlerle ilgili çalışmaların pek çoğu hala araştırma düzeyinde. O yüzden etkin bir sonuca ulaşmak için farklı parametreler kullanmak gerekebiliyor. Örneğin ardışık kelimeleri sadece 2 ile sınırlı tutmak yerine bu sayıyı arttırabilirsiniz.

Ya da vektör boyutunu 100 yerine 300 veya 500 yapabilirsiniz. Ancak veri kümesi ve vektör boyutları büyüdükçe daha fazla bellek ve işlemci gücüne gerek duyuluyor. Kendi çalışmalarımda 4 çekirdekli ve 4GB belleğe sahip bir bilgisayar kullanıyorum. Bu özellikler Yapay Zeka veya Derin Öğrenme türü çalışmalarda oldukça zayıf. O yüzden ben vektör boyutunu 100 ile sınırladım. Siz bu sayıyı makinenizin gücüne bağlı olarak istediğiniz kadar yukarı çekebilirsiniz.

Yazımı sonlandırmadan önce, önceki yazımda da kullandığım bazı sözcüklerle ilişkisi saptanan sözcük listelerini paylaşayım: (benzeşen sözcükler yüklenen modelin sözcük vektörlerinin kosinüsü alınarak bulunuyor. Benzer -birbiriyle yakından ilişkili- sözcükler benzer şekilde kümeleniyor.)

insan: [‘insanın’ ‘insana’ ‘insanı’ ‘insanların’ ‘insanlar’ ‘insanlardan’
‘insanlara’ ‘insanımız’ ‘bitmek_tükenmek’ ‘insanoğlunun’]

macera: [‘masal’ ‘eğlenceli’ ‘büyülü’ ‘geceler’ ‘nostalji’ ‘romantizm’ ‘hikayeler’
‘dövüş’ ‘romantik’ ‘sahneleri’]

öfke: [‘korku’ ‘huzursuzluk’ ‘kızgınlık’ ‘derinden’ ‘umutsuzluk’ ‘öfkeyi’
‘öfkesini’ ‘üzüntü’ ‘endişeyi’ ‘tavırları’]

karanlık: [‘kirli’ ‘derin’ ‘izlerini’ ‘hüzünlü’ ‘görünmeyen’ ‘vahşi’ ‘dramatik’
‘geçmişin’ ‘bakılırsa’ ‘gürültülü’]

öykü: [‘şiir’ ‘tiyatro_oyunu’ ‘müziklerini’ ‘eserlerini’ ‘piyano’ ‘şiirler’
‘türküler’ ‘ali_poyrazoğlu’ ‘drama’ ‘bale’]

cumhuriyet: [‘mustafa_kemal’ ‘cumhuriyetin’ ‘atatürk’ ‘dersim’ ‘cumhuriyetimizin’
‘kemal_atatürk’ ‘gazi_mustafa’ ‘istiklal’ ‘ismet_inönü’ ‘ulu_önder’]

savaş: [‘savaşı’ ‘savaşın’ ‘savaşta’ ‘sovyet’ ‘savaşa’ ‘soğuk_savaş’ ‘çatışma’
‘çatışmalar’ ‘saddam’ ‘savaştan’]

ayşe: [‘hülya’ ‘aysel’ ’emine’ ‘derya’ ‘gamze’ ‘zehra’ ‘hatice’ ‘esra’ ‘fatma’
‘elif’]

recep: [‘kadir’ ‘necati’ ‘erdal’ ‘muharrem’ ‘ismail’ ‘arif’ ‘sedat’ ‘orhan’
‘ibrahim’ ‘suat’]

Ham veri miktarı arttıkça daha sağlıklı ilişkiler yakalamak mümkün oluyor.

Veri dosyasının eğitilmesi sürecini bir başka yazımda örnekleyeceğim.

Konuya bir programcı olarak ilgi duyuyorsanız https://github.com/danielfrg/word2vec adresini ayrıntılı bir şekilde incelemeyi sakın ihmal etmeyin.

Ahmet Aksoy

Ağu 162016
 
818 views

Toz zerresi büyüklüğünde kablosuz algılayıcılar

Bilim-kurgu filmleri veya öykülerinde görmeye alışık olduğumuz araç gereçleri gündelik yaşamımızın içinde görmeye giderek daha fazla alışıyoruz. Bir toz zerresi boyutundaki kablosuz algılayıcılar da bunlardan biri. Bu cihazlara “neuronal dust” (sinirsel toz) adı veriliyor ve insan vücuduna kolayca yerleştirilebiliyor.

Sinirsel tozların enerji gereksinimi dışarıdan kolayca temin edilebiliyor. Ayrı bir pil veya batarya sistemine gerek yok. Hatta bu cihazlar, sinir ve kasları uyarma potansiyeline de sahip.

Deneyler halen kobaylar üzerinde sürdürülüyor. Kaslara ve periferik sinirlere yerleştirilen bu aygıtlar ultraseslere duyarlı. Bu sayede hem gereken enerjiyi sağlıyor, hem de gerekli okumaları yapabiliyorlar.

Science News Journal‘de yayınlanan bir makale konuya ilişkin pek çok ayrıntıya sahip.
Okumanızı öneriyorum. Sayfada, sinirsel tozların boyutlarını kavramanıza yarayacak bir de video var.

Toz zerresi büyüklüğünde kablosuz algılayıcılar

Image Credits: ScienceNewsJournal

Alıntı: http://sciencenewsjournal.com/engineers-create-first-dust-sized-wireless-sensors-can-implanted-human-body/

May 022016
 
1.007 views

Yakın Geleceğimize İlişkin 10 Kritik Soru

Yakın Geleceğimize İlişkin 10 Kritik Soru

“I, robot” filminden


Teknoloji çıldırdı!
Teknolojik gelişim hızındaki değişim neredeyse dik bir tırmanışa geçti. Robotlara dayalı üretim sistemleri giderek yaygınlaşıyor. Yapay zeka kendi rekorlarını giderek daha kısa aralıklar içinde kırmaya başladı.

Bu gidişle 2030 yılına kadar neler olacak dersiniz? Ya 2050 yılına kadar?

Aşağıdaki sorulara sizin yanıtlarınız ne olur?

1- Otomasyona dayalı üretim yaygınlaştıkça insan emeğine duyulan gereksinim azalıyor. Peki insanlar para kazanamazlarsa üretilenleri kimler satın alacak?

2- Üç boyutlu yazıcılar şimdilik tek veya birkaç malzemeyi kullanarak çalışabiliyor. Peki bu mekanizmadaki malzeme çeşitliliği artar, hele moleküler düzeye kadar inerse bunlarla projelendirilmiş organik yapılar, organlar ve hatta yeni canlılar üretilebilir mi?

3- Isaac Asimov daha 1940 yılında “3 Robot Yasası”nı geliştirmiş. Peki bu kuralları yapay zeka sistemlerine uygulamak mümkün olacak mı? (*)

4- Yapay zeka, bizim onun yaptıklarını anlayamayacak kadar gelişirse neler olacak? O zaman yapay zeka insanoğlunu nereye koyacak dersiniz?

5- İnsanların -biyolojik varlıkların- Mars’a veya başka gezegenlere gitmeye çalışması ne kadar mantıklı? Bu işlerin robotlar veya “aşırı” koşullara dayanıklı hale getirilmiş yarı-insanlar tarafından yürütülmesi daha mantıklı olmaz mı? Hele kendi yıldız sistemimizin dışına da çıkmaya kalkışırsak…

6- İnsan beynindeki bilgilerin elektronik ortama aktarılması çalışmaları yürütülüyor. Bu başarıldığında o elektronik ortamlar “canlı” kategorisinde sayılacak mı?

7- Bazı bilgilerin moleküler olarak insan beynine enjekte edilebileceği öne sürülüyor. Bu mümkün olabilir mi?

8- Telefon, bilgisayar vb cihazların göz ve kulak gibi duyu organlarına gerek kalmaksızın insan beyniyle doğrudan iletişim kurabilmesi halinde insanoğlunun “ortalama zeka ve bilgi düzeyi” artmış olacak mı? Yoksa “matrix” olayına doğru mu evrileceğiz?

9- İnsanoğlunun teknolojik araçları doğrudan beyniyle denetlemeye başlaması onu daha da mı geliştirecek, yoksa mekanik robotlar haline mi dönüştürecek?

10- İnsanoğlunun gelecekte yapay zeka ile çatışma ihtimali olur mu? Olursa başarı şansı nedir?

Bu sorular kendiliğinden zihnimden dökülenler. Belli bir düzeni veya sıralaması yok. Ama yakın geleceğimizin bu tür soruların yanıtlarıyla şekilleneceğine inanıyorum. Varlığımızı artık sadece dinamik dengelerle koruyabiliyoruz. Durmaya, hatta yavaşlamaya kalktığımızda yerlere döküleceğiz.

Yukarıdaki sorular, biraz karamsarlık taşıyor diye düşünebilirsiniz. Ben öyle bakmıyorum. Bana göre bunlar eninde sonunda yüzleşmek zorunda kalacağımız konular. Farkında olmak, farkında olmayanları da uyarmak zorundayız.

Yaşam bizi bilmediğimiz yerlere götürüyor olabilir? Ama yeterli farkındalığa sahip olursak, hiç olmazsa elimizden gelenin “en iyisini” yapabilme şansımız olur.

Farkındalık bizi “dramatik” sürprizlere daha dayanıklı hale getirir.

Ahmet Aksoy

(*) 3 Robot Yasası:
1- Bir robot bir insana doğrudan veya pasif kalmak suretiyle zarar veremez
2- Bir robot, birinci yasa ile ters düşmemek kaydıyla, bir insan tarafından verilen emirlere uyar
3- Birinci veya ikinci yasaya ters düşmemek kaydıyla, bir robot kendi varlığını korur