← Yazılara dön
15 Nisan 2025 · 2 dk okuma

Qt ile operatör arayüzü: sahadan dersler

İlgiyi model topluyor ama sistemin kullanılabilir olup olmadığına operatör ekranı karar veriyor. Gerçek zamanlı takip sistemleri için Qt arayüzü yazarken öğrendiklerim.

Görüntü işleme işlerimin çoğu sonunda bir insanın önüne çıkıyor. Savunma tarafında o insan, canlı takip görüntüsüne bakan bir operatör ve baktığı ekran Qt ile C++ üzerinde yazılıyor. Demoları ve övgüyü model topluyor. Ama sistemi gerçekten kullanılabilir yapan şey arayüz. Sahanın bana öğrettikleri şunlar.

Video isini UI is parcaciginin disinda tutmak

Şekil: kendi çizimim.

GUI thread’i iş thread’i değildir

En önemli kural: GUI thread’inde ağır hiçbir şey çalışmaz. Ne yakalama, ne çözme, ne çıkarım, ne takip. Bunların hepsi işçi thread’lerde yaşar ve sonuçlar arayüze kuyruklu bağlantılı sinyal ve slot’larla geçer.

Bu kuralı çiğnersen hata modu çirkindir. Olay döngüsü tıkanır, ekran donar ve tam olarak en yanlış anda donar; çünkü boru hattının en çok çalıştığı an, operatörün ekrana en çok ihtiyaç duyduğu andır. GUI thread’indeki bir slot tek bir şey yapmalı: widget güncellemek. Gerisi başka yere ait. Thread tarafını gerçek zamanlı C++ multithreading yazısında daha ayrıntılı anlattım.

Videoyu ciddiye alarak çiz

Saf gösterim yolu şu: her karede cv::Mat’ten QImage’a, oradan QPixmap’e, oradan QLabel’a, her adımda tam kopya. Webcam çözünürlüğünde yanına kalır. Yüksek çözünürlük ve yüksek kare hızında kalmaz. Tamponları yeniden kullan, doğrudan paintEvent içinde çiz, düz widget çizimi yetişemediğinde QOpenGLWidget’a geç.

İşin ikinci yarısı: kare kuyruğunun büyümesine asla izin verme. Arayüz boru hattının gerisine düşerse kare at, en yenisini göster. Takip operatörünün şimdiyi görmesi gerekir. Beş saniye öncenin akıcı videosu, şimdinin takılan videosundan daha kötüdür, çünkü kararlar ona bakılarak verilir.

Kendine göre değil, stres altındaki operatöre göre tasarla

Arayüz benim masamda gayet iyi görünüyor. Saha başka: doğrudan güneş, eldiven, titreşim ve ekrana gerçek dünyaya bakmak arasında tek bakış atan bir kullanıcı. Bu, tasarım kurallarını baştan yazar.

Kontroller büyür. Kontrast artar. Ekrandaki şey sayısı azalır, artmaz. Sistemin girebileceği her durum tek bakışta görünür olmalı: takipçi hedefi kaybettiyse arayüz bunu yüksek sesle söyler, renkle ve konumla; köşedeki küçük gri bir simgeyle değil. Operatör arayüzünde sessiz hata bir bug değil, bir yalandır.

Onay pencereleri de bir bütçedir. Yıkıcı işlemler onay alır. Rutin işlemler almaz; çünkü dakikada beş diyalog geçen operatör bir süre sonra hiçbirini okumaz, önemli olanı da dahil.

Arayüz aynı zamanda kayıttır

Her operatör eylemi ve her sistem durumu değişikliği zaman damgasıyla loglanır. Mevzuat için değil. Birinin “takipçi on ikinci dakikada hedefi neden bıraktı” diye sorduğu gün için; çünkü dürüst cevap hafızadan değil veriden gelmek zorunda. Arayüz, insanla sistemin buluştuğu yer; bir olayın gerçeği de genellikle arayüz logunda yaşar.

Bunu erken kurmak neredeyse bedava, sonradan eklemek eziyet. İlk hafta yap.

Geçmişteki bana söyleyeceklerim

Operatör arayüzünü sistemin etrafındaki kabuk gibi değil, algı sisteminin bir parçası gibi ele al. Operatörün okuyamadığı bir dedektör, metrikler ne derse desin çalışmayan bir dedektördür. Boru hattına gösterdiğimiz disiplin, bütçeler, hata modları, dürüst durumlar, ekranın da hakkı.

Kaynakça

QtC++arayüzoperatör arayüzü