Merhaba, ben Denizhan Şahin. Yozgat Bozok Üniversitesi Bilgisayar Mühendisliği 3. sınıf öğrencisiyim. Pardus 21 Hata Ayıklama ve Öneri Yarışması için yaptığım çalışmalarımı, neden Pardus kullandığımı, ülkemizin yerli ve milli yazılımlarına katkıda bulunma motivasyonumu anlatacağım.
Bildiğiniz üzere yerli ve milli yazılımlar ülkemizin siber güvenliği, ar-ge çalışmalarının devamlılığı, yabancı yazılımların kullanımı için ödenen ücretlerin azalması ve ekonomik katkı sunması, teknoloji ihracatının artması, nitelikli insan gücümüzün kendi teknolojisini kendi sermayesi ve bilgisi ile geliştirme ve bu deneyimlerini kendisinden sonraki nesillere aktarması açısından önem arz etmektedir.
Ortaokul yıllarımda başlayan teknoloji dünyasına olan ilgim ilerleyen zamanlarda yerli teknolojileri kullanmam konusunda önemli etken oldu. Yerli teknolojiler geliştirmek, mevcut çalışmalara katkıda bulunmak ve ülkemiz için nitelikli bir mühendis olmak her zaman hayalimdi. Özellikle ortaokul yıllarımda Pardus ile tanıştıktan sonra yerli yazılımların önemini anlamış olmakla birlikte Pardus işletim sistemini aktif olarak 8 yıldır kullanmaktayım. Özellikle ortaokul ve lise yıllarımda Pardus ve yerli yazılımlar konusunda, okul arkadaşlarımı ve öğretmenlerimi sınıf içindeki bilişim cihazlarında Pardus kullanılması için bilgilendirmiş ve onları hem Pardus hem de Linux dünyası ile tanıştırmıştım.
Teknolojiye olan ilgim doğrultusunda ve yerli yazılımların önemini daha iyi kavramış olmam ile üniversite öğrencisi olduktan sonra içinde bulunduğum topluluklarda özellikle Pardus ve Linux üzerine yazılım geliştirme, yapay zeka vb. teknolojiler üzerinde çalışmalar yapmış bulunmaktayım. Yaptığım ve hayal ettiğim çalışmalar ile birlikte yerli ve milli işletim sistemimiz Pardus’a bilgi ve deneyimlerim ile katkıda bulunmak için Pardus 21 Hata Ayıklama ve Öneri Yarışması’na katılmaya karar verdim. Bu kararımdan dolayı beni destekleyen değerli akademik danışmanımı, topluluk arkadaşlarımı ve yakınlarıma ilk önce teşekkür etmek isterim.
Yarışma Sürecinde Yaşadıklarım
Pardus 21 Hata Ayıklama ve Öneri Yarışması için ilk olarak birden fazla bilgisayar üzerinde çalışmalar yaptım. Toplamda dört bilgisayar üzerinde çalışmalarımı devam ettirdim. Bu bilgisayarlardan iki tanesi dizüstü ve Nvidia GPU desteği olan, diğerleri ise masaüstü olmakla birlikte biri AMD GPU diğeri ise Nvidia GPU desteği olan bilgisayarlardı . İlk olarak temel hedefim Pardus işletim sisteminin kurulum aşamalarında oluşabilecek sorunları ve öneriler üzerinde çalışmak olmuştur. İlerleyen zamanlarda ise basit bir bilgisayar kullanımı için gerekli olan öneriler ve kullanıcı karşısına çıkabilecek sorunlar üzerinde çalışmak olmuştur. Bununla birlikte aktif olarak kullandığım yazılımları ise Pardus işletim sistemi üzerinde çalıştırmak, çalıştırmak için uygun koşulları ve test ortamı oluşturmak ve oluşabilecek hatalar konusunda analiz yapmak olmuştur. Bununla birlikte Pardus işletim sistemi için kullanışlı olabileceğini düşündüğüm projeler geliştirmek olmuştur. Ayrıca karşılaştığım önemli olabilecek hatalar için ise tespitlerimi ve çözüm önerilerimi geliştirmek olmuştur.
Pardus işletim sisteminin uzun zamandır bir kullanıcısı olarak ilk olarak kendi deneyimlerim üzerinde çalışmalarımı yürüttüm. Bununla birlikte üniversite hayatımda kullandığım proje çalışmalarında Pardus kullanarak ve günlük hayatta Pardus dışında başka bir işletim sistemi kullanmadan karşılaşabileceğim sorunları tespit etmek ve planladığım veya sonradan planlayacağım çalışmalar için bir bilgi birikimi oluşturmayı sağladım.
Pardus üzerinde çalışmalarımı devam ettirirken bazen yazılım kurulumları sırasında hata aldığımı ve ilgili işlemler sırasında bilgisayara yeniden Pardus kurmaya ihtiyacım olduğunu fark ettim. Özellikle bazı grafik arayüzleri denemek istediğimde, Nvidia Driver vb. yazılımların kurulumları ve kaldırılmaları sırasında sistemin zarar aldığını, bazen istenilen şekilde Nvidia CUDA Toolkit’in çalışmadığını fark ettim. Ayrıca bazı Python kütüphanelerinin kurulumları sırasında hata aldığım, bazı sistem dışı paketleri kurmaya çalışırken hata aldığım ve bazı paketleri internet üzerinde bulamadığım zamanlar olmuştur. Bazı durumlarda hiçbir sorunum olmadığında bile işletim sisteminin çalışmadığı ve tespit edemediğim durumlar olmuştur. Bazı durumlarda ise bir root kullanıcısı olarak sistem genelinde bazı paketlerin kurulumu vb. işlemler yaptım.
İlgili çalışmalarım için ise her türlü karşılaştığım sorunları tamamen veya kısmen olarak çözmeye çalıştım. Bununla birlikte istediğim projeleri ise belirli bir planlama ve araştırma-geliştirme süreci sonrası devam ettirme veya tamamen sonlandırma kararı aldım. Yarışma sürecinde bir seneye yakın olarak Pardus işletim sistemini kullandım ve projelerimi geliştirme aşamasında bana büyük bir katkı sağladığını fark ettim.
Yarışma Sürecinin Bana Olan Katkıları
Yarışma sürecinin bana katkıları gerçek anlamda faydalı olmuştur. Pardus işletim sistemini sürekli kullanmak bana büyük bir mutluluk vermiştir, çünkü yerli ve milli bir işletim sistemini kullanmak her anlamda büyük bir teknolojik imkandır.
İlk olarak bir araştırma sürecinin nasıl yürütülebileceğini anlamış oldum. Çeşitli konular üzerinde makaleler okumayı, karşılaşılan sorunlar için çözüm önerilerinin incelenmesi ve kullanılacak yazılımların resmi kaynaklarını incelemeyi öğrendim.
İkinci olarak ise bir yazılımı sürekli kullanım esnasında karşılaşabilecek sorunları ve bunlara çözüm önerileri geliştirmeyi öğrenmiş bulunmaktayım ve ilgili sorun ve yazılımlar açısından bilgi ve deneyim elde etmiş bulunmaktayım.
Üçüncü olarak ise bir proje geliştirme ve bunu bir ürüne dönüştürme aşamasında ise ilgili planlama ve fikir geliştirme aşamalarının bana katkısı olmuştur.
Dördüncü olarak ise bir yarışma sürecinde ise planlı çalışma, elde edilen deneyimleri geliştirme ve yeni deneyimler elde etme, yapılan çalışmaları gelecekte yapılacak diğer çalışmalarda kullanmayı öğrenme, internet ve diğer kaynakları verimli kullanma vb. için bilgi ve deneyim elde etmiş bulunmaktayım.
Çalışmalarımı Nasıl Geliştirdim?
Çalışmalarımı geliştirmek için ilk olarak Nvidia ve AMD ekran kartı bilgisayarlar üzerinde aktif olarak diğer işletim sistemlerinde kullandığım yazılım ve sürücülerini Pardus üzerinde kurmaya ve kullanmaya başladım. İlk olarak Nvidia GPU sahibi bilgisayarlar için Nvidia Driver sürücülerinin kurulumlarını gerçekleştirdim. İlgili kurulumlar sonrası bazen işletim sisteminde bazı sorunlar meydan geldiğini tespit ettim. Grafik arayüzün çalışmaması gibi durumları çözmek için ilk önce kurduğum sürücüleri kaldırmak ve garfik arayüz yazılımını yeniden kurmak kısmen bir kolaylık sağlasa bile daha kararlı bir süreç için bu bilgisayarlara yeniden Pardus kurulumu gerçekleştirdim. Pardus için özellikle yapay zeka çalışmaları yapmak ve işletim sistemini daha verimli kullanmak için CUDA ve cuDNN yazılımlarının kurulumlarını gerçekleştirdim. Bu yazılımlar ile birlikte yapay zeka, bilgisayarlı görü gibi çalışmalarımı daha hızlı gerçekleştirebilecektim. Özellikle TensorFlow isimli yapay zeka kütüphanesi ve bilgisayarlı görü alanında kullanılan OpenCV ve diğer kütüphaneleri, kullandığım bilgisayarlara kurulumlarını gerçekleştirdim.
Yüz Tanıma Uygulaması
Özellikle Pardus işletim sisteminin kullanıcı güvenliğine katkıda bulunmak ve günümüzde Linux işletim sistemlerinde henüz geniş bir kitle tarafından kullanılmayan bir yüz tanıma yazılımı geliştirmeye karar verdim. İlk olarak Keras RetinaNet ve TensorFlow ile birlikte çalışmalarıma başladım. Okuduğum yüz tanıma ile ilgili makalelerde özellikle Keras RetinaNet’in daha yüksek bir doğruluk oranı olması ilk önce bu yazılımı kullanmamı sağladı. Bununla birlikte ArcFace gibi ileri seviye bir yüz tanıma yazılımı ve GoogleNet gibi diğer yazılımları yaptığım çalışmalar içine entegre etmeye çalışmış bulunmaktayım. Özellikle yaptığım çalışmalar için ResNet görüntü tanıma mimarisinin sağlam bir yapıda olması ise kullanım tercihlerim arasında yer almıştır. Keras RetinaNet ile ilk önce insan yüzünü tespit eden bir model eğitimi yaptım. Bu eğitilmiş model ile insanların yüzlerini tespit edebilecektim. Daha sonra tespit edilen yüz görüntüsünün kaydedilmesi ve bu yüz görüntüsü için ayrı bir model eğitilmesi üzerinde çalışma yapmış bulunmaktayım. Çalışmalarım sırasında kullandığım ekran kartı RTX 2060’dan (çalışmalarım sırasında en yüksek kapasiteli olan ekran kartıdır) tam olarak verim alamamış olmam ve özellikle bu ekran kartının tüm kaynaklarının kullanılması ve istenen doğruluk oranı elde edememiş olmam ile birlikte Keras RetinaNet gibi çok ağır çalışan bir yazılımın ekran kartı olmayan bilgisayarlar için hiçbir katkısı olamayacağına karar verdim.
Bununla birlikte başka bir yöntem olarak ise Haar Cascade isimli ve genel olarak yapay zeka desteği olmayan bir yazılım ile çalıştım. Bu yazılım ile birlikte insan yüzündeki belirlenmiş noktaları tespit edebilecek ve bu noktalar üzerinden matematiksel işlemler yaparak yüz tanıma işlemi gerçekleştirmeye karar verdim. Bu aşamada ise elde edilen noktasal veriler ile makine öğrenmesi yapmayı düşünsem bile Haar Cascade ile çok düşük doğruluk oranları elde etmem ve insan yüzündeki bazı noktaların tespit edilmesindeki yaşanan sorunlar bu yazılım yerine beni başka bir yazılım mimarisi kullanmaya yöneltti.
Bununla birlikte yaptığım çalışmalar ve okuduğum kaynaklar doğrultusunda DeepFace isimli mimariyi kullanmaya karar verdim. Bu mimari ise açık kaynak yapısı ve yüksek doğruluk oranı ile birlikte bir kullanıcı için önemli olan sistem kaynaklarının verimli kullanılması özellikle çalışmalarımı bu doğrultuda devam ettirmemi sağlamıştır. Kişinin bilgisayar içinde kayıtlı olan yüz görüntüsü ile giriş sırasında alınan görseldeki tespit edilen insan yüzü ile derin öğrenme algoritması kullanılarak karşılaştırma yapılması bu yazılımın en önemli özelliğidir.
Bundan sonraki adımlarım ise bir DEB paketi oluşturma çalışmalarımdır. DEB paketi içinde bash ve Python dosyaları aktif olarak kullandım. PyQt5 ile birlikte kurulum aşaması ile ilgili arayüz geliştirmesi yaptım. Kullanıcı bu arayüz ile birlikte kendi yüz görüntüsünü kayıt edecek ve gerekli olan TensorFlow, DeepFace ve diğer yazılımları daha kolay kurabilecektir. DEB paketi içinde iki temel bash dosyası bulunmaktadır. Bu paketlerden bir tanesi ile birlikte ilgili kurulum aşamaları gerçekleştirilirken diğer bash dosyası ile bilgisayar açılısı sırasında yüz tanıma işlemi gerçekleştirilecektir. Daha sonra ise SQLite3 ile birlikte doğru girişler veya hatalı girişler için ilgili veri tabanı işlemleri gerçekleştirilmiştir ve kullanıcı istediği gibi bilgisayarının güvenliğini denetleyebilecektir. Ayrıca hatalı olarak yapılan giriş için ise hatalı olan kamera görüntüsü kullanıcının sonradan kontrol etmesi ve bilgisayarını izinsiz açmaya çalışan kişileri bilebilmesi için saklanmaktadır. Bununla birlikte kullanıcı isteğe bağlı olarak tüm uygulama verilerini silebilme imkanı olacaktır.
Kullanıcı ise yüz tanıma uygulamasını başlangıç uygulaması yaparak her bilgisayar açılışında yüz tanıma işlemi yapılabilecektir. Bunun için masaüstü uygulama menüsündeki uygulama simgesi kullanılabilecektir. Ayrıca ileri düzey işlemler için ise terminal komutları ile işlem tercih edilmiş ve bu sayede kullanıcı için tam yetki ortamı oluşturulmuştur. Geliştirilen bu uygulama ile birlikte ekran kartı olmayan veya desteklenmeyen ekran kartı kullanıcıları için kolay kullanım sağlanmış ve eğer desteklenen bir ekran kartı var ise tüm kaynaklar kullanılsa bile yüksek güvenlik oranlarına ulaşılmıştır.
Metin Tanıma Uygulaması
Pardus kullanıcılarının herhangi bir görselde yer alan metinsel ifadeleri kolayca elde edebilmesi ve istedikleri gibi kullanması için ve genel olarak Pardus kullanıcılarının gündelik işlemlerini kolaylaştırmak için bir yazılım geliştirmeye karar vermiş bulunmaktayım. Bunun için OCR(Optical Character Recognition) kullandım ve bu yöntem ile birlikte bir görsel üzerinde yer alan metinsel ifadeler kolayca elde edilebilmektedir. OCR özellikle üç temel başlıkta incelenir : Görüntü ön işleme, Karakter tanıma ve İşlem sonrası. Görüntü ön işleme ile birlikte görüntünün iyileştirilmesi ve görüntüden anlaşılır ifadeler elde edilmesi sağlanır. Karakter tanıma aşamasında ise metinsel ifadeler tespit edilir ve bunun için özellik çıkarımı yöntemi kullanılır, kesin olarak tespit edilen karakterler işleme alınır ama kesin olarak tespit edilemeyen karakterler işleme alınmaz. İşlem sonrası aşaması ile birlikte tespit edilen karakterler için doğruluk sınaması yapılır.
Kullanıcının kolayca kullanabilmesi için PyQt5 ve OCR için ise Pytesseract kütüphaneleri kullanılmıştır. Ayrıca DEB paketi ile Pardus kullanıcılarının kullanımına sunulabilecektir.
Uygulamanın çalışma algoritması ise kullanıcıdan ilgili görselin dosya yolu alınmaktadır. Eğer dosya yolu yanlış ise hata çıktısı verilmektedir. Eğer görsel işlemi doğru ise ise OCR işlemleri yapılmaktadır. OCR ile birlikte eğer metinsel ifade tespit edilememiş ise hata çıktısı verilmektedir. Eğer metinsel ifade tespit edilmiş ve OCR genel olarak başarılı ise metinsel ifade ekrana çıktı olarak verilir. Kullanıcı isteğe bağlı olarak ise TXT formatında ilgili ifadeleri kayıt edebilecektir.
QR Kod Oluşturucu
Pardus kullanıcılarının başka bir yazılım ihtiyacı olmadan ve ofis belgeleri vb. alanlarda daha kolay bir QR kod oluşturması için bir uygulama geliştirilmiştir. Bu uygulama ile birlikte PyQt5, Pypng, Pyqrcode kütüphaneleri kullanılmıştır. Kullanıcı için ise DEB paketi oluşturulmuştur. Kullanıcı, ilk olarak istediği metinsel ifadeleri yazmaktadır. Daha sonra Pyqrcode ile birlikte QR kod oluşturulmaktadır. Oluşturulan QR kod kullanıcının ev dizini içine oluşturulduğu zaman bilgisi dosyan adı olacak şekilde kaydedilir ve bunun için Time ve Pypng kütüphaneleri kullanılır. Ayrıca oluşturulan QR kod kullanıcının ekranında gösterilir.
Ayrıca uygulamanın logosu ise Pardus kelimesinden oluşturulmuştur ve logo rengi ise Pardus logosu ile uyumludur.