Mikrobiyoloji Otomasyon
Durum Makinesi Mimarisi

STATE MACHINE · PROCESS LAYER · SAFETY/QA LAYER · v2.1

🔬 Mikrobiyoloji Platformu ✓ Risk Bazlı Temizlik
STATE-01
🖥
Boot / Self Test
  • Kapı/kapak interlock kontrolü
  • UV-C modülü konumu doğrulama
  • Tool RFID kimlik doğrulaması
  • Sarf tankları seviye kontrolü
  • Önceki çevrim recovery kontrolü
Tüm kontroller OK
STATE-02
🧪
Startup Sanitization
  • Kimyasal yüzey temizliği (önce)
  • Akış kanalları flush + rinse
  • Gaz purge / kurutma
  • UV-C çevrimi (kuru yüzeylerde)
  • Hazır olma kararı → Ready
Sistem hazır
STATE-03
📋
Recipe Load
  • Sample + plate barkod okuma
  • LIMS'ten reçete çekme
  • Dilüsyon şeması, ekim paterni
  • Temizlik seviyesi (CL0–CL4)
  • Operatör yetki / audit trail
Reçete doğrulandı
STATE-04
Pre-Run Check
  • Tool yuvası ve sarf doğrulama
  • Plate barkodu eşleşme kontrolü
  • Gravimetrik kalibrasyon check
  • Kamera netleme / ışık testi
  • Atık kapasitesi onayı
Tüm kontroller geçti
STATE-05
💧
Dilution Cycle
  • Tool al + ID doğrula
  • Disposable tip tak
  • Kaynak numune aspirasyonu
  • Basınç profili izleme
  • Seri dilüsyon + mixing
  • Tip at, tüm adımlar logla
Risk kararı
⚡ Temizlik Kararı
CL0 CL1 CL2 CL3
STATE-06
🧫
Plating Cycle
  • Ekim tool'u al + ID doğrula
  • Plate ID + konum doğrula
  • Dijital ekim haritası yükle
  • Bölgesel / logaritmik ekim
  • XY/θ + hacim + zaman logla
  • Tip at, tool park et
Risk kararı
⚡ Temizlik Kararı
CL0 CL1 CL2 CL3
Ekim tamamlandı
STATE-07
🌡
Micro-Incubation & Imaging
  • Plate → mikro inkübasyon yuvası
  • Sabit T° korunur, kapak açılmaz
  • Dahili kamera / optik pencere görüntü
  • ROI bazlı koloni sayımı
  • Confidence skoru + TNTC uyarısı
  • Sonuçlar LIMS'e yazılır
İş tamamlandı
STATE-08
🌙
End-of-Day Clean
  • Tüm tool'lar park → sarf sayımı
  • Kanallar: su → dezenfektan → rinse → kurutma
  • Açık yüzeyler kimyasal temizlenir
  • UV-C final çevrimi (kuru yüzey)
  • Günlük log kapanır, bakım uyarısı
STATE-09 · Her durumdan erişilebilir
Alarm / Recovery
  • WARN → yeniden dene
  • MINOR FAULT → operatör çağır
  • MAJOR FAULT → zone lockdown
  • SAFETY FAULT → chamber kilitle
SÜREÇ KARARLAR
Döngü Mantığı
  • Yeni numune → STATE-03'e dön
  • Gün sonu → STATE-08
  • Hata → STATE-09 → kurtarma → devam
  • Servis → STATE-01 sonrası bypass
Boot/Test
Sanitasyon
Reçete
Ön Kontrol
Dilüsyon
Ekim
İnkübasyon
Gün Sonu
Alarm
Temizlik Kararı
Risk bazlı kademeli temizlik rejimi — reçetede her numune için CL seviyesi tanımlıdır
CL0 — Minimal

Aynı Seri İçi

Aynı numune matriksi, disposable tip kullanıldı, splash yok

  • Tip at
  • Kısa dış yüzey kontrolü
  • Tool park et
⏱ ~5 sn | Throughput: Maksimum
CL1 — Hafif

Rutin Numune Arası

Farklı numune, aynı matriks tipi, düşük risk

  • Tip at
  • Lokal dezenfektan spreyi
  • Su rinse
  • Hava kurutma
⏱ ~30 sn | Throughput: Yüksek
CL2 — Orta

Matriks Değişimi

Farklı matriks, şüpheli splash, yanlış dispense sonrası

  • Lokal dezenfektan + temas süresi
  • Su rinse
  • Kurutma
  • Kısa UV-C (açık yüzeylerde)
⏱ ~2 dk | Throughput: Orta
CL3 — Derin

Yüksek Risk

Yüksek yük numune, biyofilm riski, alarm sonrası recovery

  • Tam kanal flush
  • Dezenfektan + tam temas süresi
  • Çift rinse
  • Gaz purge kurutma
  • Chamber UV-C çevrimi
  • Doz doğrulaması
⏱ ~8 dk | Throughput: Düşük
CL4 — Gün Sonu Sanitasyon

End-of-Day Full Clean

Günlük çevrim kapanışı — ertesi gün ready durumda bırakır

Akış Kanalları
  • Su preflush
  • Dezenfektan flush
  • Tam temas süresi
  • Su rinse × 2
  • Gaz purge kurutma
Yüzeyler & Final
  • Kimyasal yüzey temizliği
  • Chamber kurutma
  • UV-C final çevrimi
  • Sarf sayımı + log kapanışı
  • Bakım ihtiyacı uyarıları
⏱ ~15–20 dk | Günlük zorunlu rutin
UV-C Kullanım Kuralı
UV-C asla ilk temizlik adımı değildir — kir ve gölge UV etkinliğini ciddi ölçüde azaltır.
UV-C yalnızca kuru ve açık yüzeylerde, kimyasal temizliğin ardından ek güvence olarak uygulanır.
Islak ve kapalı akış yollarında UV-C ana temizlik yöntemi olarak kullanılmaz.
Her hata tipi için sınıf, eylem ve kurtarılabilirlik tanımı. Kurtarılamaz hatalarda ilgili numuneler otomatik geçersiz işaretlenir.
Hata Sınıf Eylem Kurtarılabilir?
Tip alınamadı (1. deneme) WARNING Yeniden dene (×3) ✓ Evet
Tip alınamadı (3. deneme) MINOR FAULT Operatör çağır, iş durdur ~ Koşullu
Tip + tool pozisyon hatası MAJOR FAULT Zone lockdown, tüm axisler durdur ✗ Hayır
Dispense tolerans dışı (tekil) WARNING Log kaydı, işleme devam ✓ Evet
Dispense tolerans dışı (3 ardışık) PROCESS FAULT Dilüsyon iptal, yeniden başlat ~ Koşullu
Tıkanma algısı MINOR FAULT Geri çek, temizle, yeniden dene ~ Koşullu
Barkod okunamadı WARNING Manuel giriş istek, 3× retry ✓ Evet
LIMS reçetesi çekilemedi MINOR FAULT Lokal cache kontrol, operatör bildir ~ Koşullu
UV-C doz doğrulaması başarısız SAFETY FAULT Chamber kilitle, servis çağır ✗ Hayır
İnkübasyon sapması >0.5°C WARNING Log, sıcaklık toparlanmasını izle ✓ Evet
İnkübasyon sapması >2°C ALARM Plate kurtarma prosedürü, operatör onayı ~ Koşullu
Kamera blur / focus hatası WARNING Yeniden netleme, yeniden görüntü al ✓ Evet
Görüntü kalitesi yetersiz (3×) PROCESS FAULT Manuel onay iste, sayım yapma ~ Koşullu
Plate yanlış konumlandı MINOR FAULT Repositioning, konum doğrula ~ Koşullu
Atık tank doldu MAJOR FAULT İşi durdur, boşaltma gerektir ✗ İşlem durdurulur
Elektrik kesintisi / UPS devreye girdi SAFETY FAULT Güvenli durdurma, incubation koruma modu ~ İnkübasyon korunur
Numuneden sonuca uzanan tam izlenebilirlik zinciri. Her bileşen ayrı ID taşır ve bir sonraki bileşenle bağlantısı loglanır. FDA 21 CFR Part 11 / ISO 17025 uyumlu.
🔬
Numune Barkodu
Kaynak numune kimliği · matriks tipi · alım zamanı · operatör ID
SAMPLE-ID
↓ LIMS reçete pointer
💧
Dilüsyon Kabı Barkodları
Her dilüsyon kademesi ayrı ID · lot no · hacim · hedef konsantrasyon
DIL-ID × N
↓ Aspirasyon/dispense log
🔧
Tool & Tip Kaydı
SCARA tool RFID · tip lot no · kullanım sayacı · basınç profili
TOOL-ID · TIP-LOT
↓ Gravimetrik doğrulama
🧫
Plate Barkodu
Plate ID · besiyeri lot no · ekim zamanı · operatör · temizlik seviyesi
PLATE-ID
↓ Dijital ekim haritası
📐
ROI / Bölge ID'leri
Her bölge: dilüsyon kademesi · açı/koordinat · hedef hacim · gerçek hacim
ROI-ID × M
↓ Görüntü dosyası bağlantısı
📷
Görüntü Dosyası
Zaman damgası · T° / nem · fokus skoru · histogram · kondensasyon bayrağı
IMG-HASH
↓ Sayım algoritması çıktısı
📊
Sayım Sonucu
CFU/mL · confidence skoru · birleşik koloni uyarısı · TNTC bayrağı · ROI bazlı kalite
RESULT-ID
↓ Analist onayı · imza
LIMS Kaydı
Hash imzalı · NTP zaman damgası · değiştirilemez log · yedekleme referansı
LIMS-RECORD
Veri Bütünlüğü Kuralları
📌 Log dosyaları immutable — hash ile imzalı
📌 Zaman damgası NTP senkronize
📌 Kritik parametreler sonradan düzenlenemez
📌 Yalnızca "düzeltme kaydı" eklenebilir
📌 Yerel + uzak yedekleme zorunlu
📌 Four-eyes: alarm bypass için 2 onay
Üç katmanlı yazılım mimarisi. Her katman bağımsız geliştirilebilir; yeni LIMS, tool veya ekim modu eklemek üst katmanları etkilemez.
🧫
Process Layer
İş mantığı, reçete yönetimi, protokol akışı
📋 Reçete yönetimi
💧 Dilüsyon protokolü
🧫 Ekim paterni
🌡 İnkübasyon kontrolü
📊 LIMS entegrasyonu
🔬 Koloni sayım motoru
Equipment Layer
Fiziksel bileşen kontrolü, sensörler, hareket
🤖 SCARA kontrolü
🔧 Tool yönetimi
💊 Pompa / valfler
📷 Kamera + aydınlatma
☢ UV-C modülü
⚖ Gravimetrik modül
🛡
Safety / QA Layer
Güvenlik, kalite güvencesi, uyumluluk
🔒 Interlock sistemi
⚖ Gravimetri doğrulama
📝 Audit trail
🚨 Alarm yönetimi
🧹 Temizlik seviyesi (CL0–4)
👤 RBAC / 4-eyes
IQ / OQ / PQ Validasyon Altyapısı
IQ
Installation Qualification: Otomatik kurulum kontrol listesi üretimi
OQ
Operational Qualification: Pipetleme ±%2, sıcaklık ±0.5°C test protokolü
PQ
Performance Qualification: Referans yöntemle eşdeğerlik veri üretimi

🔬 MikroCFU — Koloni Sayım Sistemi

Mikrobiyolojik agar plakası görüntülerindeki bakteriyel kolonileri OpenCV ve derin öğrenme teknolojileriyle otomatik tespit eden, sayan ve raporlayan masaüstü yazılımı.

🐍 Python 3.9+ 🖼️ OpenCV 4.x 🤖 ONNX / YOLOv8 🖱️ PyQt5 🔬 ImageJ/Fiji 📊 Scikit-learn 🏢 Mikrofab Ltd.
2
Analiz Motoru
(OpenCV + ImageJ)
30
ML Özellik
Vektörü Boyutu
5
Görselleştirme
Sekmesi
3
Model Formatı
(ONNX/YOLO/PT)
Sektör & Spiral
Analiz Modu
📋

Genel Bakış

Proje amacı, kapsamı ve temel özellikler

🎯 Proje Amacı

MikroCFU, mikrobiyoloji laboratuvarlarında agar plakaları üzerinde büyüyen bakteriyel kolonilerin manuel sayımı yerine otomatik bilgisayarlı görü yöntemleriyle hızlı, doğru ve tekrarlanabilir sayım yapılmasını sağlar. CFU (Colony Forming Unit) hesaplamalarını destekler.

✨ Temel Yetenekler

  • ✅ Otomatik koloni tespiti (OpenCV + DL)
  • ✅ Manuel düzeltme & doğrulama arayüzü
  • ✅ ML model eğitimi ve sınıflandırma
  • ✅ Sektör & spiral plaka analizi
  • ✅ Excel / CSV rapor dışa aktarma
  • ✅ Türkçe / İngilizce çift dil desteği
  • ✅ ROI (ilgi bölgesi) analizi
  • ✅ Arka plan düzeltme (FFT tabanlı)

Hızlı Analiz

OpenCV motoru ortalama 1 s altında tam görüntü analizi

🎯

Yüksek Doğruluk

CLAHE, Watershed ve referans koloni filtreleme

🧠

Makine Öğrenmesi

Kendi verilerinizle model eğitin, ONNX'e aktarın

📡

Sektör Analizi

Spiral ve sektör plakalar için bölge bazlı dağılım analizi

🔍

ROI Analizi

Seçili bölgede yerel analiz ve hızlı odaklanma

💾

Raporlama

Excel (.xlsx) ve CSV formatında detaylı rapor

🤖

Derin Öğrenme

ONNX, PyTorch ve YOLOv8 modellerini doğrudan kullan

🌐

Çift Dil

Arayüz Türkçe ve İngilizce olarak çalışır

🖥️

Ekran Görüntüleri

Uygulama arayüzü ve özellik görselleri

🖥️ Ana Pencere Düzeni

Ana pencere yatay bölünmüş iki panelden oluşur. Sol panel görüntü görüntüleyici (zoom + pan + ROI), sağ panel kontrol sekmelerini ve sonuçları gösterir. Üstteki araç çubuğu en sık kullanılan işlemlere hızlı erişim sağlar.

🖥️

Ana Pencere — img_b64.json yüklenince görünecek

MikroCFU V2 — Ana Pencere: 37 koloni tespit edildi (0.82 s)

🔬

Analiz İşlemi: Görüntü İşleme Aşamaları — img_b64.json yüklenince görünecek

6 aşamalı görüntü işleme: Orijinal → CLAHE → Binary → Temizlenmiş → Watershed → Sonuç

🔬

Koloni Karoları Thumbnail Görünümü — img_b64.json yüklenince görünecek

16 koloni thumbnail kartı; sınıflandırma renk kodları ve koloni listesi

📡

Sektör & Spiral Analizi — img_b64.json yüklenince görünecek

4 sektörlü analiz: S1:8, S2:11, S3:14, S4:10 koloni — Toplam: 43 koloni

🧠

Araçlar Paneli: Referans Koloni & ML/DL — img_b64.json yüklenince görünecek

Araçlar Paneli — ML sınıflandırma (30 özellik, ~%95 doğruluk) ve DL model tespiti (ONNX/YOLO)

ℹ️ Ekran görüntülerini yüklemek için img_b64.json dosyasını /home/ozkur/mikrobiyoloji-web/img_b64.json konumuna kopyalayın. Sayfa otomatik olarak görselleri yükleyecektir.
🏗️

Yazılım Mimarisi

Modül yapısı, thread mimarisi ve sorumluluklar

⚡ OpenCV Analiz Hattı

📂 1. Görüntü yükleme (cv2.imread)
⭕ 2. Agar daire maskesi oluşturma
🎨 3. CLAHE kontrast iyileştirme
🔢 4. Otsu/manuel eşikleme
🧹 5. Morfolojik açma/kapama
🌊 6. Watershed segmentasyon
🔍 7. Boyut/şekil/renk filtreleme
📊 8. Sonuç görseli + istatistikler

🧩 Modül Sorumlulukları

ModülGörev
main_window.pyGUI yönetimi, thread koordinasyonu
colony_view.pyZoom, pan, ROI, tıklama sinyalleri
colony_counter.pyTüm OpenCV analiz hattı
dl_colony_detector.pyONNX/YOLO/PT model inferans
model_trainer.pyÖzellik çıkarımı + eğitim + ONNX ihracı
ml_data_exporter.pyPatch veri seti, metadata.csv
fiji_bridge.pyPyImageJ API köprüsü

⚡ Thread Mimarisi (UI Donmalarını Önler)

Ağır hesaplamalar ayrı QThread nesnelerinde çalışır; UI tamamen tepkili kalır.

class AnalysisThread(QThread):
    finished = pyqtSignal(dict)   # Tamamlandığında sonuç dict'i
    error    = pyqtSignal(str)    # Hata mesajı
    progress = pyqtSignal(int)    # 0-100 ilerleme yüzdesi

class ModelTrainingThread(QThread):
    progress = pyqtSignal(str)          # Epoch bilgisi
    finished = pyqtSignal(dict, str)    # (metrics, model_path)
    error    = pyqtSignal(str)
🔬

Analiz Motoru

OpenCV tabanlı görüntü işleme algoritmaları

⚡ OpenCV Modu

  • CLAHE kontrast iyileştirme (clipLimit=3.0, tileSize=16×16)
  • Gaussian blur gürültü azaltma (7×7 kernel)
  • Otsu otomatik eşikleme veya manuel değer
  • Agar maskesi ile piksel düzeyinde kısıtlama
  • Morfolojik açma + kapama (elliptik kernel)
  • Distance Transform + Watershed segmentasyon
  • Dışbükeylik (<0.2) ve en-boy oranı (>4.0) filtreleri

🔬 ImageJ/Fiji Modu

  • Fiji'nin yerleşik Analyze Particles algoritması
  • İlk çalıştırmada otomatik Fiji indirme
  • colony_count.ijm ve preprocessing.ijm makro desteği
  • Fiji erişilemezse OpenCV motoruna otomatik geçiş
ℹ️ Java 11+ zorunludur. Fiji kurulu değilse ilk çalıştırmada otomatik indirilir.

🎨 CLAHE Algoritması

Yerel kontrast iyileştirme — soluk koloniler global eşitlemeye dahil edilir. Agar maskesi dışı pikseller medyan değerle doldurulur.

clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(16, 16))
agar_median = int(np.median(gray[agar_mask > 0]))
gray_for_clahe = gray.copy()
gray_for_clahe[agar_mask == 0] = agar_median
enhanced = clahe.apply(gray_for_clahe)

🌊 Watershed Segmentasyonu

Birbirine yakın veya üst üste binen kolonileri ayrıştırmak için marker tabanlı yaklaşım — O(N log N) karmaşıklığı.

dist = cv2.distanceTransform(cleaned, cv2.DIST_L2, 5)
_, sure_fg = cv2.threshold(dist, 0.5*dist.max(), 255, 0)
# O(N log N) marker tabanlı özellik çıkarımı
flat_vals = markers.flatten()[flat_idx]
sort_order = np.argsort(flat_vals, kind='stable')

⭕ Maskeleme — Kritik Teknik Not

⚠️ Maskeleme CLAHE sonrası eşikleme adımına uygulanır. Erken maskeleme Otsu eşiğini 0–2'ye düşürür ve tüm tespiti bozar.
# YANLIŞ ❌ — orijinal görüntüyü maskeleme
full_img[mask == 0] = 0  # Otsu eşiğini bozar!

# DOĞRU ✅ — binary'e maskeleme
agar_pixels_vec = blurred[agar_mask > 0].reshape(-1, 1)
thresh_otsu, _ = cv2.threshold(agar_pixels_vec, 0, 255,
    cv2.THRESH_BINARY + cv2.THRESH_OTSU)
binary = cv2.bitwise_and(binary, binary, mask=agar_mask)
🖱️

Kullanıcı Arayüzü

Sekmeler, paneller ve tüm UI bileşenleri

📑 Sol Panel — Görüntü Sekmeleri

📷 Orijinal
Ham görüntü; zoom/pan; agar daire overlay
✏️ Koloni Seçimi
Tıklanabilir koloni haritası; ROI çizimi
🎭 Maskeler
CLAHE, Binary, Temizlenmiş, Watershed, Sonuç
🔬 Koloniler
Thumbnail grid; sınıflandırma araç çubuğu

🖱️ Fare Etkileşimleri

EylemİşlevKoşul
Sol tık (koloni üzeri)Koloniyi onayla (mavi daire)Koloni Seçimi sekmesi
Sağ tık (koloni üzeri)Koloniyi reddet (kırmızı)Koloni Seçimi sekmesi
Sol tık + sürükleGörüntüyü kaydır (pan)Her zaman
Sağ tık + sürükleROI dikdörtgeni çizNormal mod
Çift tıkSeçili ROI'de analiz başlatROI çiziliyken
Fare tekerleğiZoom in / outHer zaman
Shift + sürükleSerbest seçim ile toplu reddetNormal mod
Ctrl + sürükleSerbest seçim bölgesini yeniden taraNormal mod

📊 Sağ Panel — Kontrol Sekmeleri

📊 Analiz Sekmesi

  • Agar Alanı (Otomatik / Elle çiz / Düzenle)
  • Motor seçimi (OpenCV / ImageJ/Fiji)
  • Min/Max boyut (px²), Eşik (0=Otsu)
  • Min. dışbükeylik, FFT arka plan düzeltme
  • 🔬 Sektör & Spiral Analizi

🔧 Araçlar Sekmesi

  • Referans Koloni (Bölge Seç / Nokta Seç)
  • Manuel Koloni Ekleme + Undo
  • 🧠 ML Sınıflandır + 🏷️ Etiketle
  • 📦 Eğitim Verisi Aktar
  • 🤖 DL Model Tespit (ONNX/YOLO/PT)

📋 Rapor Sekmesi

  • Rapor klasörü seçimi
  • 💾 .xlsx + .csv + _annotated.png
  • 📂 Klasörü dosya gezgininde aç
  • İşlem günlüğü (canlı log ekranı)

🗂️ Eğitim Verisi

  • koloni / not_colony patch listesi
  • Patch silme işlemi
  • Sınıflar arası taşıma
🧠

Makine Öğrenmesi & Derin Öğrenme

Model eğitimi, çıkarım ve veri seti yönetimi

🧠 ML Modeli (scikit-learn → ONNX)

Her koloni patch'inden 30 boyutlu özellik vektörü çıkarılır ve lojistik regresyon ile sınıflandırılır.

Özellik GrubuBoyutAçıklama
HSV Histogramları16H:8 bin, S:4 bin, V:4 bin
HSV İstatistikleri6Her kanal ortalama + std
LAB İstatistikleri6Her kanal ortalama + std
Kenar Yoğunluğu1Canny normalize kenar yoğunluğu
Radyal Kontrast1Merkez − kenar parlaklık farkı
Toplam3064×64 px patch giriş
model_path, metrics = train_colony_classifier(
    output_dir="ModelTraining/",
    patch_size=64,
    epochs=300
)
# → sample_colony_model.onnx  (~%95 doğruluk)

🤖 Derin Öğrenme (ONNX / YOLO / PT)

Farklı formatlardaki DL modellerini otomatik algılar ve çalıştırır.

ONNX
onnxruntime CPU/GPU
YOLOv8
ultralytics uçtan uca
PyTorch
.pt / .pth modeller
detector = DLColonyDetector()
detector.load_model(
    "sample_colony_model.onnx",
    model_type="auto",
    conf_threshold=0.25
)
colonies = detector.detect(
    image_path="plate.jpg",
    agar_circle=(400, 300, 250)
)
💡 Çıktı formatı: [x_c, y_c, w, h, conf, class_id] (YOLO-uyumlu)

📦 Eğitim Verisi Oluşturma Süreci

1

Analiz Çalıştır

OpenCV veya DL motoru kolonileri tespit eder

2

Kolonileri Etiketle

Koloni Karoları sekmesinde her thumbnail için sınıf atanır

3

📦 Eğitim Verisi Aktar

ml_data_exporter patch'leri sınıf klasörlerine kaydeder + metadata.csv üretir

4

Model Eğit

model_trainer scikit-learn modeli ONNX formatında dışarı aktarır

5

🤖 DL Model Tespit

Eğitilen model Araçlar → Derin Öğrenme panelinden yüklenir

📁 koloni/
Onaylanan koloniler
📁 not_colony/
Reddedilen / yanlış tespitler
📁 kabarcık/
Gaz balonu sınıfı
📁 unlabeled/
Etiketlenmemiş tespitler
📄 metadata.csv
Koordinat, alan, HSV, sınıf
🔄 Augmentasyon
Döndürme + aynalama
🔧

Araçlar & İleri Özellikler

ROI, sektör analizi, manuel ekleme ve referans koloni

🔍 ROI (Bölge) Analizi

Görüntünün belirli bir dikdörtgen bölgesini seçip yalnızca o alanda analiz yapılır.

1

Sağ tık + sürükle

Koloni Seçimi sekmesinde ROI dikdörtgeni çiz

2

Çift tık veya 🔍 ROI butonu

Seçili alanda analiz başlatılır

3

✕ ROI Temizle

Araç çubuğundan temizle; tam görüntü analizine dön

📡 Sektör & Spiral Analizi

  • Petri kabı N sektöre bölünür (1–12 sektör)
  • N halka katmanı (iç → dış mesafe)
  • Her sektör/halka için ayrı koloni sayısı
  • Renk kodlu görselleştirme
  • Spiral plaka: başlangıç/bitiş yarıçapı + sarım sayısı
  • CSV ve Excel raporu dahil

💾 Raporlama Sistemi

Analiz tamamlandıktan sonra Ctrl+S veya Rapor sekmesinden kaydedilen dosya paketi:

Dosyaİçerik
*_rapor.xlsxExcel — koloni listesi, istatistik sayfası, sektör tablosu
*_rapor.csvMakine okunabilir koloni verisi
*_annotated.pngİşaretlenmiş görüntü (mavi=onay, kırmızı=reddet)
⌨️

Klavye Kısayolları

Hızlı erişim tuş kombinasyonları

KısayolİşlevKonum
Ctrl+OGörüntü açDosya menüsü
F5Analizi başlatAnaliz menüsü / Araç çubuğu
Ctrl+SRaporu kaydetDosya menüsü
Ctrl+DRapor klasörü seçDosya menüsü
Ctrl+QUygulamadan çıkDosya menüsü
F1Kullanım kılavuzuYardım menüsü
TekerlekZoom in / outGörüntü üzerinde
Sol tık + sürükleGörüntüyü kaydır (pan)Koloni Seçimi
Sağ tık + sürükleROI dikdörtgeni çizKoloni Seçimi
Çift tıkROI analizi başlatROI seçiliyken
Shift + sürükleSerbest seçim ile toplu reddetKoloni Seçimi
Ctrl + sürükleSerbest seçim bölgesini yeniden taraKoloni Seçimi
📦

Kurulum & Başlangıç

Hızlı kurulum adımları

1

Depoyu klonlayın

git clone https://github.com/ozkurkuran/MikroCFU.git
cd MikroCFU
2

Bağımlılıkları kurun

pip install -r requirements.txt
3

(Opsiyonel) ImageJ/Fiji desteği

pip install pyimagej scyjava  # Java 11+ gerektirir
4

(Opsiyonel) YOLOv8 desteği

pip install ultralytics
5

Uygulamayı başlatın

python src/main.py

📋 Bağımlılık Tablosu

Zorunlu

PaketVersiyon
python≥ 3.9
PyQt5≥ 5.15
opencv-python≥ 4.5
numpy≥ 1.21
scikit-learn≥ 1.0
openpyxl≥ 3.0
onnxruntime≥ 1.12

Opsiyonel

PaketAmaç
pyimagejImageJ/Fiji köprüsü
scyjavaJava-Python köprüsü
ultralyticsYOLOv8 model desteği
torchPyTorch model desteği
skl2onnxSklearn→ONNX dönüşümü

Analiz Parametreleri

Tüm parametrelerin ayrıntılı açıklaması

ParametreVarsayılanAralıkAçıklama
min_size501–50 000 px²Minimum koloni blob alanı. Artefaktları elemek için artırın.
max_size10 00010–500 000 px²Maksimum koloni alanı. Büyük konglomerat blobları dışlar.
threshold0 (Otsu)0–2550 = Otsu otomatik. Düşük değer daha fazla tespit.
min_circularity0.200.0–1.0Min. dışbükeylik. Yüksek değer daha yuvarlak koloniler seçer.
flatten_illuminationFalseAçık/KapalıFFT periyodik arka plan düzeltme. Şerit artefaktları için.
agar_circleNone(cx, cy, r)Petri kabı piksel koordinatları. Dışarıdaki pikseller dışlanır.
ref_tolerance355–100 %Renk toleransı yüzdesi. Düşük değer daha katı eşleştirme.
💡
Önerilen başlangıç değerleri:
Standart petri kabı: min_size=50, max_size=5000, threshold=0, min_circularity=0.2
Küçük bakteri koloniler: min_size=10, max_size=500
Maya/küf kolonileri: min_size=200, max_size=50000
Karmaşık arka plan: flatten_illumination=True + Agar alanı seç

📝 Loglama

# logs/app.log örnek
2026-03-19 14:23:01 INFO  [main_window] Görüntü açıldı: sample_plate.jpg
2026-03-19 14:23:05 INFO  [colony_counter] Analiz başladı: threshold=0 (Otsu)
2026-03-19 14:23:06 DEBUG [colony_counter] Otsu eşiği: 142, ön plan: 0.023
2026-03-19 14:23:06 INFO  [colony_counter] 37 koloni tespit edildi (0.82 s)
2026-03-19 14:23:12 INFO  [main_window] Rapor: KoloniRaporlari/plate_rapor.xlsx

🔬 MikroCFU — Koloni Sayım Sistemi V2

Geliştirici: Mikrofab Ltd.www.mikrofab.com.trinfo@mikrofab.com.tr

Python 3.9+ · PyQt5 · OpenCV 4.x · 19 Mart 2026