Oca 212018
 
3.126 kez okundu

OpenCV ile Yüz Tanıma

OpenCVOpenCV kütüphanesi BSD lisansı ile yayınlanan bir kütüphane. Hem akademik, hem de ticari kullanıma açık. Kütüphanenin asıl odaklandığı konu gerçek zamanlı uygulamalar için hızlı ve etkin hesaplama araç ve yöntemlerinin geliştirilmesi.

En son sürümü OpenCV 3.4, 23 Aralık 2017 tarihinde duyurulan kütüphane, bugüne kadar yaklaşık 11 milyon kez indirilmiş. Github üzerinde 25,988 opencv projesi mevcut. Bunlardan 6193 adedi Python ile yapılmış.

Bu yazımda size bir github projesini tanıtacağım: https://github.com/ageitgey/face_recognition/

İnsan yüzlerini tanımak amacıyla geliştirilmiş bir proje bu. MIT lisansıyla paylaşılıyor. Güncel.

Bu projeyi Ubuntu 16.04 üzerinde, Python 3.5.2 ile test ettim.

Tek resim üzerinde olduğu gibi, video kareleri ve webcam görüntüleri üzerinde de verimli bir şekilde çalışıyor.

Yüz tanıma kodlarını çalıştırmak için gereken kurulumların nasıl yapılacağı proje sayfasında ayrıntılı bir şekilde anlatılmış. Ben tekrarlamayacağım.

Proje sayfasında verilen örnek kodların hepsini tek tek test ettim. Hepsi çalışır durumda. Sadece webcam ile görüntü tarama kodlarında küçük bir değişiklik yapmam gerekti. Çünkü benim bilgisayarımın webcam kamerası görüntüleri tepetaklak gösteriyor. Sizin bilgisayarınızda benimki gibi bir sorun yoksa, eklediğim düzeltme işlemine de gerek duymayacaksınız.

Önce kodları paylaşayım (Bu kodlar, kendisine bir resim dosyasıyla tanıtılan yüzü, gerçek zamanlı webcam görüntülerinde yakalayıp işaretliyor. Orijinal kodlarda ‘obama.jpg’ kullanılmakta. Aynı kodların başka görseller üzerinde de etkin bir şekilde çalıştığını göstermek amacıyla kendi resmimi tanıttım.) :

Kodları test ettiğim bilgisayardaki sistem ve kütüphaneler şöyle:
Ubuntu 16.04
Python 3.5.2
OpenCV 3.2.0
face-recognition 1.0.0

Kodlar çok açık ve anlaşılır şekilde yazılmış. Ayrıntıya girmeyeceğim. Betiği durdurmak istediğinizde ‘q’ butonuna basmanız yeterli.

Aynı kodları test etmek için siz de kendi fotoğrafınızı kullanabilirsiniz.

Videoda betiğin nasıl çalıştığını görmek mümkün. Tanıtım fotoğrafımda gözlük yok. Ama gözlük taktığımda bile tanıma sorunu olmuyor. Yüzün orta bölümünde büyükçe bir bölüm kapatılırsa, tanıma ancak o zaman engelleniyor.

Şu anda elimde Raspberry Pi için kamera olmadığından testlerimi sadece dizüstü bilgisayarımda yaptım. Uygun bir zamanda aynı işlemleri Raspberry Pi üzerinde de tekrarlayacağım.

Beni izlemeye devam edin.

Ahmet Aksoy

Referanslar:

Oca 172018
 
1.844 kez okundu

Tensorflow ile Acemi Şiirler

Bu yazımda internet üzerinden rasgele derlenmiş şiirler kullanarak eğittiğim sistemden aldığım -şiirimsi- çıktıları paylaşacağım.

şiirimsi tensorflow

Henüz abartılı bir sonuç beklemeyin. Nasıl ki bir bebeğin konuşmayı öğrenmesi için belli bir zamana ihtiyacı varsa, makine öğrenmesi sistemlerinin de öğrenmek için zamana ve çabaya ihtiyacı var.

Bu çalışmada Kullandığım veri seti internet üzerinden rasgele toplanmış yaklaşık 70 bin dize içeriyor. Bu veri özel bir denetimden geçmedi. Şair veya biçem konusunda herhangi bir ayrım uygulanmadı. Tek kaygı, dişe dokunur sonuçlar elde edebilmek için veri boyutunun en az 1 milyon karakter olması gereğiydi. (Bu bir kural olmasa da, bir çok uzmanın önerisi bu yönde.) Kullandığım veri setinin boyutu yaklaşık 2MB.

Program, Tensorflow kütüphanesiyle karakter düzeyli RNN (Recurrent Neural Network) eğitimi yapıyor.

Raspberry Pi 3 üzerinde Tensorflow kurulumunu “Raspberry Pi ile Tensorflow 2” başlıklı yazımda ele almıştım. Tensorflow 1.1.0, Python 3.4 üzerinde sorunsuz bir şekilde çalışıyor. (Halen en son Tensorflow sürüm numarası 1.5)

Eğitim çalışmasında Sherjil Ozair’in github deposundaki kodlarını kullandım: https://github.com/sherjilozair/char-rnn-tensorflow

Eğitim için Python 2 veya Python 3 kullanmak mümkün. Ancak Tensorflow sürümü en az 1.0 olmalıdır.

EĞİTİM İŞLEMLERİ

Eğitim işlemi

komutuyla yapılıyor. Eğer herhangi bir parametre vermezseniz, otomatik olarak “Tiny Shakespeare” verisi kullanılıyor. İsterseniz, internet üzerinden başka veri setleri de bulup indirebilirsiniz.

Sanal ortam üzerindeki kendi eğitim çalışmamda şu kodları kullandım:

Tensorflow

Her batch işlemi yaklaşık .25 saniye tutuyor. Toplam 40050 batch olduğuna göre yaklaşık 10 bin saniyelik bir eğitim süresi olacak. Yani 3 saate yakın bir süre.

Bilgisayarım 4 çekirdekli bir i5. Ancak tam yükte aşırı ısındığından, çökmemesi için işlemcileri 2.53GHz yerine 2.40GHz hızla çalıştırabiliyorum. Aynı işlemler Raspberry Pi 3 üzerinde 8 kat daha fazla bir zamana ihtiyaç duyuyor. Bu yüzden tek bir Raspberry Pi ile bu tür bir eğitim yapmak pek de verimli değil.

Ancak, bir başka bilgisayarda eğitilmiş veri setini Raspi’ye aktarıp, kullanabilirsiniz. Ben de bu yöntemi tercih ediyorum.

SONUÇLAR

Eğitilmiş bir veri setini kullanarak sonuç elde etmek için verilecek komut şu:

Yukarıdaki komuttan da anlaşılacağı gibi, eğitilmiş veri “save/siirler” klasöründe bulunuyor.

Dizüstü bilgisayarımda eğittiğim veriyi Raspberry Pi 3 üzerine “rsync” komutu ile çektim ve raporladım:

Raspberry Pi 3 üzerinde rapor alma işlemi bile yaklaşık 30 saniye sürüyor.

Bir örnek daha:

Çok daha büyük bir veri seti ve -tercihen- GPU kullanabilen bir bilgisayarda eğitilmiş veri setleriyle çok daha anlamlı sonuçlar elde etmek mümkün olabilir.

Eğer güçlü bir bilgisayara sahipseniz veya sabırlı biriyseniz siz de kendi veri kümelerinizi eğitebilirsiniz.

Ahmet Aksoy

Referanslar:

Oca 162018
 
468 kez okundu

Raspberry Pi Maceralarım No-09

Raspberry Pi 3 GPIO ile Bir Ledin Parlaklığını ve Frekansını Kontrol etmek

Önceki yazımda “İki Yönde Yürüyen ışık” örneğini vermiştim. Bu kez bir LED’in parlaklığını ve yanıp sönme frekansını denetleyeceğiz.

Yazının sonunda linkini verdiğim videda konu ile ilgili ayrıntılar mevcut. O yüzden burada sadece kodları ve devre şemasını vermekle yetineceğim.

Raspberry Pi Maceralarım No-09

Kodlar hem Python 2, hem de Python 3 ile uyumludur.
Parlaklık ve frekansı GPIO’nun 12 nolu iğnesinin PWM (Pulse Wave Modulation) özelliğini kullanarak kontrol ediyoruz.

Program kodlarını, devre montajını ve örneğin çalışmasını gösteren videomuz aşağıda.

GPIO ile ilgili örneklerimi burada sonlandırıyorum.

Bir sonraki yazımda yeni bir Tensorflow örneğini ele alacağım.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-09

Oca 102018
 
351 kez okundu

Raspberry Pi Maceralarım No-08

Raspberry Pi 3 GPIO ile İki Yönde Yürüyen ve Rasgele Yanıp Sönen Işıklar

Önceki yazımda “Yürüyen ışık” örneğini vermiştim. Bu kez iki betik vereceğim. Birinci betikle aynı LED’lerin her iki yönde yürümesini, diğeriyle ise LED’lerin rasgele yanıp sönmesini sağlayacağız.

GPIO iğne yerleşim şemasını bir kez daha paylaşayım:

Raspberry Pi Maceralarım No-07

İki yönlü yürüyen ışık kodlarımız kolay anlaşılır:

Kodların açıklaması

Sadece while döngüsü içindeki ikici for bloğu öncekinden farklı

Bu bloktaki tek fark, for döngüsünün sondan başlayıp, birer birer azalarak sıfıra kadar inmesi…

İlk örneğimizdeki 10 ledli devreyi ikinci betiğimizde de kullanıyoruz.

Kodlarımız şöyle:

Bu betiğimizde sadece while bloğunun içeriği farklı. (Burada random modülünü kullandığımız için betiğin başında bu modülü içeri aktarıyoruz.)

Döngünün her aşamasında önce tüm ledlerin söndüğünden emin olmak için hepsini_sondur() fonksiyonunu çağırıyoruz.

Daha sonra pinler[] listesinden, indis numarasını 0 ile liste boyu arasından rasgele seçtirdiğimiz bir sayıyı kullanarak, rasgele bir LED numarası belirleyip pin değişkenine aktarıyoruz.

Pin numarasını vererek yaktığımız LED’in yanık kalma süresini de 0 ile 9 arasındaki rasgele bir sayıyı 50.0’ye bölerek saptıyoruz. bekle değişkenine atadığımız bu değeri, time.sleep() fonksiyonuna argüman olarak vererek LED’in yanık kalma süresini belirliyoruz.

Kısacası, bu betiğimizde hem yanacak LED’in indisini, hem de yanık kalma süresini rasgele belirledik. Bu süreyi

satırındaki değerlerle oynayarak istediğiniz gibi değiştirebilirsiniz.

LED’lerimizin davranışını gösteren videomuz aşağıda.

Bir sonraki yazımda GPIO 12 numaralı iğnenin PWM (Pulse Width Modulation) özelliğini kullanarak bir LED’in parlaklığını istediğimiz gibi denetlemeyi örnekleyeceğim.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-08

Oca 062018
 
388 kez okundu

Raspberry Pi Maceralarım No-07

Raspberry Pi 3 GPIO ile Yürüyen Işıklar

Önceki yazımda “Yanıp-sönen LED” örneğini vermiştim. Bu kez yan yana dizilmiş 10 adet LED’in sırayla yanıp sönerek bir “Yürüyen Işık” oluşturmasını sağlayacağız.

GPIO iğne yerleşim şemasını tekrar paylaşayım:

Raspberry Pi Maceralarım No-07

Kodlarımız oldukça basit:

Kodların açıklaması

Betiğimizin ilk satırları önceki örneğimizinkiyle aynı. Gerek duyarsanız, açıklamalar için önceki yazıma bakabilirsiniz.

Bu fonksiyonumuz, listedeki tüm pinlerin gerilimini toprak seviyesine düşürerek ledleri söndürüyor.
Aslında pinlerin çoğunda ledleri yakacak gerilim yok. Sadece HIGH (True) konumundakini söndürmek yeterli. Ama başka yerlerde de kullanmak amacıyla bu fonksiyonu hazırladım. Burada da işimizi görüyor.

pini_yak(pin) fonksiyonu iğne numarasını belirttiğimiz bağlantıyı aktif hale getiriyor.

bekle değişkenine 0.2 değerini yükledik. Bu değişken ledlerin yanık kalma süresini belirliyor.
Döngünün içinde her aşamada önce tüm ledlerin sönmüş olmasını sağladıktan sonra sırası gelen ledi yakıyor ve bekle saniye bekliyoruz.

Sonsuz döngüyü sonlandırmak istediğimizde Ctrl-C tuşlarına basmamız gerekiyor.

İlk örneğimizdeki 10 ledli devreyi burada da aynen kullanıyoruz.

Videomuz aşağıda.

Bir sonraki yazımda yine aynı devreyi kullanarak iki yönlü yürüyen ışık yapacağız.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-07

http://python.gurmezin.com/raspberry-pi-maceralarim-no-01/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-06/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-07/

Oca 052018
 
418 kez okundu

Raspberry Pi Maceralarım No-06

Raspberry Pi 3 GPIO ile LED kontrolü

GPIO (General-Purpose Input/Output) sözcüklerinin ilk harfleriyle oluşturulmuş bir terimdir. Genel amaçlı Giriş-Çıkış anlamına gelmektedir.

Raspery Pi 3 Model B kartlarda 40 iğneli GPIO sistemi bulunur.

Raspberry Pi Maceralarım No-06

Bazı eski modellerdeki GPIO 26 iğnelidir. Bu iğneler, 40 iğneli bağlayıcının (konnektörün) ilk 26 iğnesi ile özdeştir. Bu yüzden 40 iğneli sistem, “extended-genişletilmiş” olarak da adlandırılmaktadır.

İğnelerin özellikleri yukarıdaki basitleştirilmiş şemada yer alıyor.

Şimdi ilk örneğimizi geliştirelim:

Kodların açıklaması

GPIO iğneleri 2 farklı yöntemle isimlendirilir. BROADCOM yönteminde iğneler tiplerine göre karışık bir şekilde yer alıyor. Bu yüzden, konuya yabancı kişilerin bu iğnelerin konumunu bulabilmesi için ellerinde bir şema bulundurmaları gerekir.
İkinci yöntemde (BOARD) ise iğneler fiziksel konumlarına göre numaralandırılır. GPIO iğnelerinin köşe iç tarafı 1, dış taraftaki ise 2 numaralı iğnedir. İç taraftakiler 1, 3,…, 39; dış taraftakiler ise 2, 4, …, 40 şeklinde sıralanırlar.
Yukarıdaki şemada iğnelerin her iki yönteme göre sahip oldukları numaralar yer alıyor.
Daha kolay bir yöntem olduğu için ben BOARD yöntemini, yani fiziksel konuma göre numaralandırma yöntemini tercih ediyorum. Bu nedenle verdiğim örneklerde genellikle bu yöntemi kullanacağım.

Örnek kodumuzun hem python, hem de python3 komutuyla çalışmasını sağlamak için ilk satıra kodlama sistemimizin UTF-8 olduğunu tanımlıyoruz. Bu tanıma python3 için gerek yoktur ama, python2 için kullanmamız gerekiyor.

Kod dosyamızı led01.py olarak adlandırdığımızı burada belirtiyoruz.

Python2 ve python3 print fonksiyonlarının aynı şekilde çalışabilmesi için __future__.print_function çağırıyoruz.

RPi kütüphanesi sistem kurulumunda ön yüklenmiş olarak gelir. Kurmamıza gerek yoktur.
GPIO kontrolünü RPi kütüphanesindeki GPIO modülü ile sağlıyoruz. Bu nedenle RPi.GPIO modülünü GPIO adıyla içe aktarıyoruz.
time modülüne ise, LED ışıklarının yanık ve sönük olduğu süreleri denetlemek için gerek var.

# ile kapattığımız bu satırlarda BROADCOM yöntemini seçseydik, 18 numaralı iğneyi kullanmamız gerektiğini görüyoruz. Ama biz BOARD yöntemini kullanacağız ve bize gereken iğne numarası 12. (12 yerine pek çok farklı iğne numarasını da kullanabiliriz. Elbette kablolamayı da ona göre yapmamız lazım.)

6 numaralı iğne toprak (ground) iğnesidir. 9, 14, 20, 25, 30, 34, 39 numaralı iğneler de topraktır. Bunlardan herhangi birini güç kaynağımızın (-) ucuna bağlıyoruz.

Sistemin işimize yaramayacak uyarı mesajlarını bu satırla baskılıyoruz. Uyarıların nasıl çalıştığını görmek isterseniz, # işaretiyle kapatabilirsiniz.

“led” adına atadığımız 12 numaralı iğneyi OUT (çıkış) amacıyla kullanacağımızı tanımlıyoruz. Güç kaynağının pozitif bağlantısı bu uçta etkisini gösterecek.

Burada GPIO modülünün sürüm numarasını görüyoruz.

Asıl döngü burada. while sonsuz döngüsünün içinde 12 numaralı iğnemize “GPIO.HIGH” ile pozitif voltaj yüklüyoruz. Bu durumda 12 numaralı pine bağlı led yanıyor. time.sleep(1) komutuyla 1 saniye bekliyoruz.
Sonra “GPIO.LOW” ile 12 nolu iğnenin voltajını toprak seviyesine düşürüyoruz ve ledimiz sönüyor. Yine 1 saniye bekliyoruz.
Sonra döngünün başına dönüp aynı işlemleri yineliyoruz.
Ledimiz 1 saniye aralıklarla yanıyor ve sönüyor.

Sonsuz döngüyü sonlandırmak istediğimizde Ctrl-C tuşlarına basmamız gerekiyor.

Şimdi devremizi de kuralım. Ama kurduğumuz devreyi sadece bu örneğimizde değil, farklı örneklerde de aynen kullanabilelim. İşte bu yüzden 10 ledli bir devre kuracağız.

Gerekli malzemeler:
1 adet çalışır durumda Raspberry Pi 3 B
10 adet LED
10 adet 220 ohm direnç
1 adet devre montaj tahtası (breadboard)
11 adet atlama (jumper) kablosu

Devre şeması aşağıda.

Raspberry Pi Maceralarım No-06

Videomuzda 12 nolu iğneye bağlı ledimizin yanıp söndüğünü görüyoruz.

Bir sonraki yazımda aynı devredeki ledleri sırayla yakıp söndürerek, yürüyen ışık yapacağız.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-06

http://python.gurmezin.com/raspberry-pi-maceralarim-no-01/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-05/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-06/

Ara 312017
 
677 kez okundu

Raspberry Pi ile Tensorflow 2

Rasperry Pi ile Tensorflow birbirine oldukça yabancı konular gibi görünüyor. Ama uygulamada öyle değil.

Raspberry Pi ile Tensorflow makalesinde Tensorflow kurulumunu Raspberry Pi üzerinde denemiş, ama başarılı olamamıştım.

Aynı işlemleri bu kez Raspberry Pi 3 üzerinde denedim.

RPi 3 üzerine Raspian Strecth kurdum. Ön tanımlı Python3 sürümü 3.5.1. Oysa elimdeki Tensorflow kütüphanesi Python3.4 için derlenmiş.

Çözüm, Tensorflow kurulumunu sisteme değil, farklı bir sanal ortam üzerine yapmak…

İşlemler şöyle:

1. Sanal ortam için virtualenv paketini kuruyoruz:

2. Tensorflow sürüm uyumunu sağlamak için Python3.4 kuruyoruz:

3. Artık sanal ortamımızı oluşturabiliriz:

4. Sanal ortamımızı devreye sokalım. Böylece python komutu doğrudan python3.4 ile eşdeğer olsun:

5. Çalışma klasörümüze geçelim:

6. Şimdi Tensorflow kütüphanemizi indirelim:

7. Tensorflow’u sanal ortamda kuracağız. Bu nedenle sudo komutuna ihtiyacımız yok:

8. Kurulumu test edelim:

Yükleme sorunsuz gerçekleşiyor.
9. Son olarak mock modülünü de sanal sistemimize ekleyelim.

Raspberry Pi ile Tensorflow 2

Artık Tensorflow-1.1.0 kütüphanesiyle istediğimiz gibi çalışabiliriz.

Herşey yolunda!

Yavaş yavaş, Raspi 3 üzerinde Tensorflow projelerine girişebiliriz.

Beni izlemeye devam edin.

Ahmet Aksoy

Referanslar:

Ara 152017
 
Raspberry Pi ile Tensorflow
519 kez okundu

Raspberry Pi ile Tensorflow

Raspberry Pi yaklaşık 30-40 $ fiyatı olan ve kredi kartı büyüklüğünde bir kişisel bilgisayar sistemidir. Bu fiyata ekran, klavye ve benzeri ek parçalar dahil değildir. Ama bunlar olmaksızın da ağ üzerinden Raspberry Pi’a bağlanmak ve işletmek mümkündür. Bu minimal koşullara rağmen, artık Raspberry Pi ile Tensorflow birlikte çalışabilmektedir.

Elimdeki cihaz Raspberry Pi Model B+ v1.2. Bellek miktarı 500MB. Ağ bağlantısı ethernet kablosu üzerinden sağlanıyor. 4 adet USB portuna sahip. İsterseniz HDMI üzerinden bir ekrana bağlayabilirsiniz.

Bir kaç gün önce github üzerindeki “Tensorflow On Raspberry Pi” isimli projeye rastladığımda çok sevindim. Çünkü son günlerde benim kafamda da bu konuda “acaba?” sorusu dönüp dolaşıyordu.

Proje aşama aşama Tensorflow’un Raspberry üzerine nasıl kurulacağını anlatıyor.

Bugün bu projeyi test edecek fırsatı yakaladım.

Ubuntu üzerinden ssh kullanarak Raspberry Pi’a bağlandım.

Raspi’nin hangi IP’yi kullandığını nmap ile öğrenmiştim daha önce:

“nmap” komutunu sudo ile beraber kullanmanızı öneriyorum. Böylece çok daha açıklayıcı bilgiler alırsınız.

Raspberry üzerinde Pyton 2.7.12 ile Python 3.4.2 yüklü. Proje Python 2.7 veya 3.4 sürümüne göre hazırlanmış. Proje sahibi Sam J. Abrahams’ın daha önce bu amaçla derlediği Tensorflow dosyasını proje alanından indirmek mümkün.

Sırayla kod satırlarını yazıp çalıştırmaya başladım:

Her iki satır da sorunsuz çalıştı.

Sonra whl dosyasını indirmeye giriştim:

whl dosyası sorunsuz indi. Ben de tensorflow kurulum komutunu verdim:

Dınk! Deniz bitti birden!

Aldığım mesaj şöyle:
Raspberry Pi ile Tensorflow

Tüm işlemleri Pyton 2.7 için de tekrarladım ama, nafile!

Aldığım hata mesajını internette tarattım. Aynı sorunu başkaları da yaşamış ama benim derdime deva olabilen yok!

Öyle görünüyor ki sorun cihazın kendisiyle ilgili. Çünkü proje Raspberry Pi 3 için geliştirilip denenmiş. Pi 2 için de muhtemelen çalışacağı söyleniyor. Ama Pi için yapılabilecek bir şey yok.

Bu denemem başarısız kalmış olabilir ama, işin peşini bırakmaya niyetim yok. En kısa zamanda bir Raspberry Pi 3 edinip aynı işlemleri tekrarlayacağım.

Eğer sizin elinizde Raspberry Pi 3 var ve bu konuya ilgi duyuyorsanız, lütfen deneyip sonuçtan beni de haberdar edin.

Ahmet Aksoy

Referans:

Ara 112017
 
293 kez okundu

Bottle Örnek Yapılacaklar Listesi

Önceki yazımda Python Bottle Mikro Ağ-Çerçevesi konusunu kısaca ele almıştım.

Bu yazımda ise https://bottlepy.org sitesindeki örneği, bazı mesajlarını Türkçeleştirerek aktaracağım.

bottle örnek yapılacaklar listesi

İlk çalışmamda edit, save, new gibi terimleri de Türkçeleştirmiştim. Ama sonra Python programcılarının ister istemez teknik İngilizce terimleri bilmeleri gerektiğini düşünerek sadece bazı mesajları Türkçeleştirmekle yetindim.

Orijinal kod listesinde eksik bırakılan help.html dosyasını ekledim ve içine kısaca bottle projesi çalışırken kullanılacak terimlerin işlevini basit bir tablo olarak ilave ettim.

Örijinal kodlarda static_file(‘help.html’, root=’.’) satırında bulunması gereken return anahtar sözcüğü unutulmuştu. Onu da ekledim.

Uygulama, basit “Yapılacaklar Listesi” için gereken işlevlere sahip. Veritabanı olarak SQLite3 kullanıyor.

Düzenlemeleri yaparken Pycharm Community Edition sürümünü kullandım. Python sürümü 3.6.3 ve bottle sürümü 0.12.13.

Pycharm ile “bottle” isimli yeni bir proje klasörü tanımladım.

İlk aşamada veritabanını oluşturmalıyız. Sitede verilen kod satırlarını biraz revize edip veritabani.py dosyasına kaydettim. Bu betik veritabanını oluşturmak amacıyla sadece bir kez çalıştırılacak.

Sistemde ana kod dosyamız dışında help.html isimli bir yardım dosyamız, 3 tane de şablon (template) dosyamız bulunuyor. (SQLite3 veritabanı dosyası todo.db de aynı klasörde.)

Önce html ve şablon dosyaların içeriğini aktarayım:

help.html dosyası

make_table.tpl şablon dosyası

edit_task.tpl şablon dosyası

new_task.tpl şablon dosyası

Son olarak Python kod dosyası todo.py

Dosyalarımızın hepsi bottle proje klasörünün içinde yer alıyor.

Kodların, ek açıklamaya gerek duymayacak kadar açık olduğunu düşünüyorum. Arada bir kaç satırlık açıklama da var zaten.

Yine de sormak istedikleriniz olursa, yorum alanını kullanabilirsiniz.

Ahmet Aksoy

Bottle Örnek Yapılacaklar Listesi


Referanslar:

Ara 102017
 
228 kez okundu

Python Bottle Mikro Ağ-Çerçevesi

bottleBir WSGI (Web Server Gateway Interface) mikro ağ-çerçevesi (micro web-framework) olan bottle, flask gibi benzerlerinden farklı olarak, tüm kod işlemleri için tek bir dosya kullanır. O nedenle web ve ağ-çerçevesi işlemlerine yabancı olanlar için daha kolay anlaşılır ve pratik bir çalışma alanı sunmaktadır.

https://bottlepy.org/docs/dev/ adresinde bu ağ-çerçevesi ile ilgili her türlü açıklamaya ulaşabilirsiniz. Aynı adreste çok güzel, öğretici örnekler yer almaktadır.

Ubuntu Kurulum

Pip ile Kurulum

Kurulumu pip ile yaparken Python 3’ün devrede olmasına dikkat edin.

Sitedeki ilk örneği kendimize uyarlayalım:

Yukarıdaki betiği çalıştırdıktan sonra etkin web gezgin (browser) programınızı açın ve adres kutusuna aşağıdaki ifadeyi yazın:

“Ahmet” yerine kendi adınızı ya da bir başkasınınkini yazabilirsiniz.

Bu örneğin çalışabilmesi için bilgisayarınızda etkin bir yerel ağ sunucusu olmalıdır.

“localhost” yerine gerekiyorsa “127.0.0.1” de kullanabilirsiniz.

@route ifadesinin özel bir işlevi vardır. Dekoratör fonksiyon kavramına yabancıysanız http://python.gurmezin.com/pythonda-fonksiyon-dekoratorleri/ adresindeki yazıma göz atmak isteyebilirsiniz.

Bir sonraki yazımda çok daha kapsamlı ve işlevsel bir örneği sizinle paylaşacağım.

Bottle ile çalışmayı öğrendiğinizde ağ-çerçevesi sistemlerini, dekoratörleri ve jinja2 gibi şablon yapılarını daha yakından tanımış olursunuz. Bu bilgilenme bottle’a göre daha kapsamlı çözümler sunan Flask ve Django gibi tanınmış uygulamalara geçişinizi daha kolay bir hale getirecektir.

Ağ çerçevesi sistemleri yerel ağ üzerinde kullanıldığında, masaüstü uygulamalara benzer çözümler üretebilmenize olanak verir. Üstelik bu tür uygulamaları internet ortamına taşıyarak daha yaygın bir şekilde paylaşılabilmelerini ve kullanılabilmelerini sağlarsınız.

Ahmet Aksoy

Python Bottle Mikro Ağ-Çerçevesi

Referanslar: