Bu proje, kamera görüntüleri üzerinden atık türlerini gerçek zamanlı olarak tespit etmeye yönelik yapay zekâ destekli bir masaüstü uygulamasıdır. Sistem; plastik, cam, kâğıt, metal ve tanımlanamayan atık türlerini YOLO tabanlı nesne tespiti modeli ile sınıflandırmayı amaçlar.
Projenin temel hedefi, atıkların doğru ayrıştırılmasını destekleyerek geri dönüşüm süreçlerinin verimliliğini artırmak, çevre kirliliğini azaltmak ve sürdürülebilir atık yönetimine katkı sağlamaktır.
Uygulama, Tkinter tabanlı bir arayüz üzerinden kamera görüntüsünü alır. Kullanıcı kamerayı başlattıktan sonra nesne tespiti aktif hale getirilebilir. YOLO modeli, kameradan gelen her kare üzerinde atık nesnelerini algılar ve sonuçları arayüzde işaretlenmiş görüntü olarak gösterir.
Final raporunda sistemin temel amacı; kamera görüntüleri aracılığıyla atıkların türünü belirlemek, kullanıcıya görsel çıktı sunmak ve gerçek zamanlı sınıflandırma yapmaktır. Veritabanına kayıt alma gereksinimi raporda yer alsa da proje kapsamı dışında bırakılmıştır.
- Tkinter tabanlı masaüstü arayüz
- OpenCV ile canlı kamera görüntüsü alma
- Ultralytics YOLO modeli ile gerçek zamanlı nesne tespiti
- Plastik, cam, kâğıt, metal ve tanımlanamayan atık sınıflarını algılama
- Algılama sonuçlarını görüntü üzerinde bounding box ile gösterme
- Tespiti başlatma ve durdurma
- Kamera görüntüsünü arayüz donmadan işlemek için thread ve queue kullanımı
- Uygulama penceresi için özel ikon desteği
- PyInstaller ile Windows EXE oluşturma desteği
- GitHub’a uygun, modüler ve temiz proje yapısı
- Python
- Tkinter
- OpenCV
- Pillow
- Ultralytics YOLO
- PyTorch
- threading
- queue
- unittest
Model eğitim ve değerlendirme çıktılarında aşağıdaki sınıflar kullanılmıştır:
| Sınıf | Açıklama |
|---|---|
| glass | Cam atıklar |
| metal | Metal atıklar |
| paper | Kâğıt atıklar |
| plastic | Plastik atıklar |
| undefined | Tanımlanamayan veya net sınıflandırılamayan atıklar |
| background | Arka plan / nesne olmayan bölgeler |
akilli-cop-ayristirma/
├── README.md
├── pyproject.toml
├── .gitignore
├── models/
│ └── best.pt
├── src/
│ └── akilli_cop_ayristirma/
│ ├── __init__.py
│ ├── app.py
│ ├── main.py
│ ├── resources.py
│ └── assets/
│ └── app_icon.ico
└── tests/
└── test_resources.py
Python 3.10 veya üzeri önerilir.
python -m pip install -e .Bu komut proje bağımlılıklarını kurar ve uygulamayı komut satırından çalıştırılabilir hâle getirir.
python -m akilli_cop_ayristirma.mainveya paket kurulumundan sonra:
akilli-cop-ayristirmaUygulama açıldıktan sonra:
- Kamerayı Aç butonu ile kamera başlatılır.
- Tespiti Başlat butonu ile YOLO tahminleri çalıştırılır.
- Tespiti Durdur butonu ile yalnızca canlı kamera görüntüsüne dönülür.
- Kapat butonu ile uygulama kapatılır.
Uygulama tahmin işlemi için aşağıdaki eğitilmiş YOLO modelini kullanır:
models/best.pt
Bu dosya uygulamayı çalıştırmak için yeterlidir. Eğitim verileri, eğitim geçmişi ve train5.zip gibi büyük eğitim çıktıları repoya eklenmemiştir. Uygulamayı kullanmak isteyen bir kişinin modeli yeniden eğitmesine gerek yoktur.
Yeniden eğitim yapılmak istenirse veri seti ayrıca hazırlanmalı ve YOLO eğitim süreci tekrar çalıştırılmalıdır.
Final raporunda model performansı confusion matrix, normalize confusion matrix, F1-confidence, precision-confidence, precision-recall ve recall-confidence grafikleriyle değerlendirilmiştir.
Öne çıkan sonuçlar:
- Ortalama F1 skoru yaklaşık 0.81 değerine, 0.332 confidence threshold seviyesinde ulaşmıştır.
- Precision-Recall değerlendirmesinde tüm sınıflar için yaklaşık 0.851 [email protected] sonucu elde edilmiştir.
- Glass ve paper sınıfları yüksek başarı gösterirken, undefined sınıfında daha fazla karışıklık görülmüştür.
- Model; cam, metal, kâğıt ve plastik atıkları genel olarak başarılı şekilde ayırt edebilmiştir.
Raporda sistem şu senaryolarla değerlendirilmiştir:
| Test Senaryosu | Beklenen Sistem Cevabı |
|---|---|
| Plastik atık gösterilmesi | Plastik sınıfının belirlenmesi |
| Metal atık gösterilmesi | Metal sınıfının belirlenmesi |
| Kâğıt atık gösterilmesi | Kâğıt sınıfının belirlenmesi |
| Cam atık gösterilmesi | Cam sınıfının belirlenmesi |
| Bilinmeyen atık gösterilmesi | Undefined olarak işaretlenmesi |
| Kameranın algılanamaması | Kamera hatası verilmesi |
Projedeki birim testleri çalıştırmak için:
python -m unittest discover -s tests -vProje sürecinde veri seti yetersizliği, farklı ışık ve açı koşulları, donanım kısıtlamaları, eğitim tekrarları, kamera kalitesi ve tanımlanamayan atıklar gibi zorluklarla karşılaşılmıştır. Bu sorunlara karşı veri artırma, farklı ışık/açı koşullarında örnek toplama, model optimizasyonu ve harici kamera ile test etme gibi çözümler uygulanmıştır.
- Daha geniş ve dengeli veri setiyle modelin yeniden eğitilmesi
- Tanımlanamayan atıkların geri bildirim yoluyla sisteme eklenmesi
- Veritabanı desteği ile algılama kayıtlarının saklanması
- Gerçek zamanlı raporlama ve istatistik ekranları
- Farklı kamera ve donanım koşulları için optimizasyon
- Robotik veya otomatik ayrıştırma mekanizmasıyla entegrasyon
- Belediyeler ve geri dönüşüm merkezleri için ölçeklenebilir sistem tasarımı
- Emrah ŞAHİN — Yazılım geliştirici, model eğitimi
- Talha TUNA — Dokümantasyon, test
- Nurdan BULUT — Dokümantasyon, veri etiketleme
- Gürel BİLGİN — Yazılım geliştirici, arayüz