Metin Kayaalp
000Yükleniyor
İçeriğe geç
Metin Kayaalp
← İşlere dön
022025

Türk İşaret Dili Çevirisi

Kameradan gelen görüntüyü Türk İşaret Dili parmak alfabesine çeviren, gerçek zamanlı çalışan tanıma sistemi.

Rol
Model ve görüntü işleme
Süre
2025 · devam ediyor
Teknoloji
Python · TensorFlow · OpenCV · NumPy
Türk İşaret Dili Çevirisi
01

Problem

İşaret dili bilmeyen biriyle işaret dili kullanan biri arasındaki en basit alışveriş bile bir aracıya ihtiyaç duyuyor. Türkçe için hazır çözümler ise ya yok ya da İngiliz alfabesi üzerine kurulmuş; Türkçenin kendi harfleri (ç, ğ, ı, ö, ş, ü) hiçbirinde yer almıyor.

02

Hedef

Sıradan bir dizüstü kamerasıyla, ek donanım olmadan, harfleri gecikme hissettirmeden tanıyan bir model kurmak.

03

Mimari

Katmanlar ve aralarındaki sınırlar.

  1. 01

    Capture

    Kameradan kare akışı; kare atlayarak yük dengeleme.

    • OpenCV
    • VideoCapture
  2. 02

    Preprocess

    El bölgesinin kırpılması, normalizasyon, yeniden boyutlandırma.

    • ROI
    • Normalize
    • Resize
  3. 03

    Model

    Evrişimli sinir ağı; harf sınıflandırması.

    • CNN
    • TensorFlow
    • Keras
  4. 04

    Postprocess

    Kare bazlı tahminlerin zaman penceresinde yumuşatılması.

    • Smoothing
    • Threshold
  5. 05

    Output

    Kararlı hale gelen harfin metne eklenmesi.

    • Text buffer
04

Teknik kararlar

Neyi neye tercih ettim ve neden.

  • SeçilenTensorFlow / Keras
    YerinePyTorch

    Model mimarisini günde birkaç kez değiştiriyordum. Keras'ın kısa döngüsü bu aşamada PyTorch'un esnekliğinden daha çok işime yaradı.

  • SeçilenEl bölgesini kırpmak
    YerineHam kareyi modele vermek

    Ham kareyle model arka planı öğreniyordu — aynı işareti farklı bir odada yaptığımda tanımıyordu. Kırpma, veri setini büyütmeden doğruluğu ciddi biçimde toparladı.

  • SeçilenZaman penceresinde yumuşatma
    YerineKare başına tahmin

    Kare başına tahminde çıktı titriyordu; el hareket ederken ekrana saçma harfler yazılıyordu. Son N karenin çoğunluğunu almak ekranı okunur hale getirdi.

05

Zorluklar

Takıldığım yerler ve çıkış yolu.

01

Birbirine benzeyen harfler

Parmak alfabesinde bazı harfler yalnızca başparmağın konumuyla ayrılıyor ve model bunları sürekli karıştırıyordu. Karışıklık matrisine bakıp yalnızca o sınıflar için hedefli veri topladım — genel veri setini büyütmek yerine doğru yeri büyütmek çok daha etkili oldu.

stabilizer.pypython
from collections import deque, Counter


class LetterStabilizer:
    """Kare başına tahminleri pencereler, kararlı harfi döndürür."""

    def __init__(self, window: int = 12, min_ratio: float = 0.7):
        self.buffer = deque(maxlen=window)
        self.min_ratio = min_ratio

    def push(self, letter: str, confidence: float) -> str | None:
        if confidence < 0.6:
            return None

        self.buffer.append(letter)
        if len(self.buffer) < self.buffer.maxlen:
            return None

        candidate, count = Counter(self.buffer).most_common(1)[0]
        if count / len(self.buffer) >= self.min_ratio:
            self.buffer.clear()
            return candidate

        return None
02

Gerçek zamanlılığı korumak

Her kareyi modele vermek dizüstünde görüntü akışını düşürüyordu. Kare atlayarak ve tahmini ayrı bir iş parçacığında çalıştırarak akışı modelden bağımsız hale getirdim; kamera akıcı kalırken tahmin kendi hızında ilerliyor.

06

Sayılarla

0
Alfabedeki harf
0
Kare yumuşatma penceresi
0
Ek donanım gereksinimi
07

Çıkarımlar

  • Modelin sorununu anlamanın en hızlı yolu karışıklık matrisi. "Doğruluk yüzde şu kadar" cümlesi hiçbir şey söylemiyor; hangi sınıfın hangisiyle karıştığı her şeyi söylüyor.

  • Veri toplamak model ayarlamaktan çok daha uzun sürdü ve doğruluğa etkisi kat kat fazlaydı.

Sıradaki proje

Madalyon Akıl Treni

↗