nesne tespiti etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
nesne tespiti etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Kasım 2025 Salı

WebGPU ile Tarayıcıda Gerçek Zamanlı Nesne Tespiti: ONNX Runtime Web ile Adım Adım

Giriş

Tarayıcıda yapay zekâ çalıştırmak, yerel gizlilik, düşük gecikme ve kurulum gerektirmeyen dağıtım gibi avantajlar sunuyor. WebGPU’nun olgunlaşması ve ONNX Runtime Web’in hızla gelişmesi sayesinde, bugün artık masaüstü veya sunucuya gerek duymadan tarayıcı içinde gerçek zamanlı nesne tespiti mümkün. Bu yazıda, WebGPU ve ONNX Runtime Web kullanarak YOLO tabanlı hafif bir modelle, sıfırdan çalışan bir demo kurulumunun nasıl yapılacağını, performans ipuçlarını ve dikkat edilmesi gereken noktaları adım adım anlatıyorum.

Gereksinimler ve Hazırlık

Öncelikle güncel bir tarayıcıya ihtiyacınız var. WebGPU için Chrome/Edge 121+ tavsiye edilir; bazı cihazlarda WebGPU devre dışı olabilir, bu durumda ONNX Runtime Web otomatik olarak WASM (WebAssembly) yürütücüsüne düşebilir. Uygulamanızı HTTPS üzerinden ve mümkünse yerel geliştirmede localhost ile çalıştırın. Kamera erişimi için getUserMedia iznine de ihtiyaç olacak.

Proje Kurulumu

Hızlı başlamak için Vite kullanacağız. Terminalde aşağıdaki adımları izleyin:
1) npm create vite@latest webgpu-onnx-demo -- --template vanilla
2) cd webgpu-onnx-demo
3) npm install onnxruntime-web
4) npm install ve ardından npm run dev ile geliştirme sunucusunu başlatın.

Model Seçimi ve Dosya Yapısı

Tarayıcı için hafif bir model seçmek kritik. YOLO ailesinden yolov8n veya benzeri küçük bir ONNX modeli başlangıç için ideal. Model dosyasını projenizde public/models/yolov8n.onnx gibi bir yola koyun. Eğer int8/FP16 gibi quantized sürüm elinizde varsa performans kazanabilirsiniz; WebGPU bu tür ağlarda ciddi hız kazandırır.

ONNX Runtime Web ile Oturum Oluşturma

Tarayıcıda model çalıştırmak için onnxruntime-web kütüphanesi tek noktadan çözüm sunar. Basit bir başlatma şeması şöyle olabilir: import * as ort from 'onnxruntime-web' ardından const session = await ort.InferenceSession.create('/models/yolov8n.onnx', { executionProviders: ['webgpu', 'wasm'] }). Bu yapı, WebGPU destekliyse GPU’yu, değilse WASM’ı kullanır. Uygulama açılışında bir kez oturum oluşturup bellekte tutmak başlangıç gecikmesini azaltır.

Görüntü Kaynağı ve Ön İşleme

Kameradan akış almak için navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } }) kullanın. Video karesini bir canvas üzerine çizip modelin beklediği çözünürlüğe (örneğin 640x640) yeniden boyutlandırın. Piksel verisini canvas.getContext('2d').getImageData(...) ile alın, RGB sırasına getirip 0-1 aralığına normalize edin ve tensörü NCHW formatında Float32Array olarak oluşturun. ONNX’a beslemek için new ort.Tensor('float32', data, [1, 3, 640, 640]) şeklinde bir tensör üretin.

Çıktı Sonrası İşleme (Post-Processing)

YOLO benzeri modellerin çıktısı genellikle kutular, sınıf olasılıkları ve skorlar içerir. Sigmoid/Softmax dönüşümlerini uyguladıktan sonra bir Non-Maximum Suppression (NMS) adımı gerekir. NMS için IoU eşiğini (ör. 0.45) ve skor eşiğini (ör. 0.25) kendiniz belirleyin. Tarayıcı performansı için döngüleri optimize edin, mümkünse tek tip diziler (Float32Array) ve önceden ayrılmış tamponlar kullanın.

Çalıştırma Döngüsü ve Çizim

Her karede sırasıyla: videodan canvas’a çizim → ön işleme → session.run(feeds) → post-processing → kutuları ve etiketleri ikinci bir overlay canvas’ına çizim. Çizim için requestAnimationFrame kullanarak akıcı bir döngü yakalayın. WebGPU yürütücüsü açıkken orta sınıf bir dizüstünde 30 FPS ve üzeri değerlere ulaşmak mümkün; WASM yolunda ise 8-15 FPS aralığı gerçekçi bir beklentidir.

Performans İpuçları

1) Web Worker + OffscreenCanvas: Ön işleme ve NMS’i bir Worker içine alarak ana iş parçacığını boşaltabilirsiniz. OffscreenCanvas ile çizimleri de iş parçacığı dışında yapmak mümkün.
2) Isınma (Warm-up): Uygulama açılışında bir yapay girişle bir kez session.run çağırarak ilk kare gecikmesini düşürün.
3) Boyut ve Oran: Giriş çözünürlüğünü cihaz gücüne göre 320, 480, 640 şeklinde seçin. Düşük çözünürlük daha yüksek FPS demektir.
4) Kuantizasyon: FP16 veya INT8 modellerle hem bant genişliği hem de hesap yükünü azaltırsınız. WebGPU ile özellikle FP16 iyi sonuç verir.
5) Bellek Yönetimi: Her karede yeni dizi oluşturmak yerine tamponları yeniden kullanın; gereksiz GC duraklamalarını önleyin.

WebGPU Özel Notlar

Bazı cihazlarda navigator.gpu görünse bile adaptör kısıtları performansı etkileyebilir. adapter = await navigator.gpu.requestAdapter() ve device = await adapter.requestDevice() çağrılarında hata yakalama koyun. Uzun süren işlemlerde device.lost olayını dinleyip yeniden kurulum yapın. Ayrıca, farklı GPU sürücülerinde küçük nüanslar olabilir; kritik bölümlerde tarayıcı konsolunu takip edin.

WASM Yürütücüsü İçin Ek Ayarlar

WebGPU devre dışıysa ONNX Runtime Web’in WASM yürütücüsü devreye girer. graphOptimizationLevel: 'all' gibi seçeneklerle optimizasyonu artırın. Bazı SIMD hızlandırmaları için COOP/COEP başlıkları gereklidir; üretimde sunucu yapılandırmanızı Cross-Origin-Opener-Policy: same-origin ve Cross-Origin-Embedder-Policy: require-corp ile güncellemeyi düşünün. Bu sayede WASM SIMD ve bazı paralel özellikler etkin hale gelir.

Hata Ayıklama ve Ölçüm

FPS’i ölçmek için basit bir sayaç yazın ya da PerformanceObserver kullanın. ONNX katman sürelerini anlamak için giriş/çıkış zamanlarını konsola basmak yeterli olur. Çıktılar boşsa ilk bakacağınız yer ön işleme adımıdır: kanal sırası (NCHW/NHWC), normalize edilmemiş değerler veya çözünürlük uyuşmazlığı genellikle sorumludur.

WebGL mi, WebGPU mu?

WebGL tabanlı çözümler hâlâ iş görse de, makine öğrenmesi iş yüklerinde WebGPU ile daha tutarlı ve modern bir performans elde ediliyor. ONNX Runtime Web’in WebGPU yürütücüsü, operator kapsamını genişlettikçe fark daha da açılıyor. Kısacası, uzun vadede WebGPU tercih etmek mantıklı.

Sonuç

Bu rehberle, WebGPU ve ONNX Runtime Web kullanarak tarayıcıda gerçek zamanlı nesne tespiti uygulamasını uçtan uca kurmanın temel adımlarını gördük. Doğru model, dikkatli ön/post-işleme ve küçük optimizasyonlarla akıcı bir deneyim elde edebilirsiniz. Üstelik tümü istemci tarafında çalıştığı için gizlilik ve dağıtım kolaylığı cabası. Bir sonraki adım olarak, izleme (tracking), bölütleme (segmentation) veya metin çıkarımı (OCR) gibi ek yetenekleri aynı altyapı üzerinde denemeyi düşünebilirsiniz.

26 Ekim 2025 Pazar

Tarayıcıda Yapay Zeka: ONNX Runtime Web ve WebGPU ile YOLOv8 Nesne Tespiti (Adım Adım)

Giriş

Tarayıcıda çalışan yapay zeka uygulamaları son iki yılda WebGPU’nun yaygınlaşmasıyla ciddi ivme kazandı. Sunucu maliyeti olmadan, gecikmeyi düşürerek ve veriyi cihazda tutarak gerçek zamanlı deneyimler kurmak artık mümkün. Bu yazıda, ONNX Runtime Web ve WebGPU kullanarak tarayıcıda YOLOv8 tabanlı nesne tespiti nasıl çalıştırılır adım adım anlatıyorum. Amacımız, sade bir JavaScript projesinde model dosyasını yüklemek, WebGPU hızlandırmalı çıkarım yapmak ve olası performans tuzaklarını aşmak.

Neden Tarayıcıda Nesne Tespiti?

- Gizlilik: Görselleri veya kamera akışını sunucuya göndermeden cihazda işlemek, KVKK ve benzeri regülasyonlara uyumu kolaylaştırır.

- Düşük gecikme: Ağ gecikmesi ortadan kalktığı için özellikle gerçek zamanlı iş akışlarında (ör. kalite kontrol, interaktif demolar) deneyim belirgin şekilde iyileşir.

- Ölçeklenebilirlik: Her kullanıcı kendi cihaz kaynağını kullanır; sunucu GPU’su tahsis etme ihtiyacı azalır.

Gereksinimler

- Güncel bir Chromium tabanlı tarayıcı (Chrome/Edge 113+ sürümleri veya muadilleri) ya da WebGPU destekli Safari. Bazı eski sürümlerde deneysel bayraklar gerekebilir.

- Node.js ve bir paket yöneticisi (npm veya pnpm).

- onnxruntime-web paketi ve YOLOv8’in ONNX formatında bir sürümü (tercihen küçük bir varyant: yolov8n.onnx).

Proje Kurulumu

1) Hızlı bir iskelet için Vite ile başlangıç oluşturun: npm create vite@latest yolo-webgpu -- --template vanilla

2) Projeye girin ve bağımlılığı kurun: cd yolo-webgpu && npm i onnxruntime-web

3) Model dosyasını (ör. yolov8n.onnx) public/models/ klasörüne koyun. Geliştirme sırasında dosyaya /models/yolov8n.onnx yolu ile erişeceğiz.

4) Geliştirme sunucusunu başlatın: npm run dev. Modeli dosya sistemi üzerinden (file://) çağırmayın; tarayıcı CORS kısıtları nedeniyle engelleyebilir.

Modeli Hazırlama

Eğer hazır bir ONNX modeli kullanmıyorsanız, Ultralytics YOLOv8’i ONNX biçimine dışa aktarabilirsiniz. Tipik dışa aktarma, PyTorch modelinden .onnx üretir. Tarayıcı tarafı için küçük boyutlu (n veya s serisi) ve mümkünse nicemlenmiş (INT8) modeller performans ve bellek açısından avantaj sağlar. ONNX Runtime Web, QLinear tabanlı nicemlenmiş modelleri destekleyebilir; ancak operatör kapsaması modele göre değiştiğinden küçük bir varyantla başlamak mantıklıdır.

InferenceSession Oluşturma

Tarayıcı tarafında ONNX Runtime Web’i yükleyip WebGPU sağlayıcısıyla bir oturum açacağız. Güncel sürümlerde WebGPU kullanılabilir değilse otomatik olarak WASM arka ucuna düşecek şekilde bir dizi sağlayıcı tanımlamak iyi bir pratiktir:

import * as ort from 'onnxruntime-web';

const session = await ort.InferenceSession.create('/models/yolov8n.onnx', { executionProviders: ['webgpu', 'wasm'], graphOptimizationLevel: 'all' });

Bu yapılandırma, WebGPU uygunsa GPU hızlandırmayı kullanır; değilse WASM ile çalışmaya devam eder. WASM tarafında çok çekirdek ve SIMD faydası görmek için sayfanın Cross-Origin-Opener-Policy ve Cross-Origin-Embedder-Policy başlıklarıyla izole sunulması gerekir; Vite ve çoğu modern dev sunucu buna uygundur.

Ön İşleme ve Çıkarım

YOLOv8, girdi olarak tipik biçimde [1, 3, H, W] boyutunda, float32 normalleştirilmiş tensör bekler. Tarayıcıda bir <canvas> üzerinden görüntüyü 640×640’a yeniden boyutlandırıp RGB kanallarını alarak tensöre dönüştürebilirsiniz. Kanal sıralamasını (HWC → CHW) unutmayın ve 0–1 aralığına ölçekleyin.

Örnek çağrı akışı şu şekildedir: const feeds = { images: inputTensor }; ardından const output = await session.run(feeds);. Çoğu YOLOv8 ONNX dışa aktarımında çıktı, kutular ve sınıf skorlarını içeren tek bir tensördür. Bu tensörü NMS (Non-Maximum Suppression) ile filtreleyip skor ve sınıf eşikleri ile sonuçları çizmeniz gerekir.

Sonuçların Görselleştirilmesi

Nesne tespiti sonuçlarını çizmek için ikinci bir <canvas> katmanı kullanın. Her kutu için [x1, y1, x2, y2] koordinatlarını orijinal çözünürlüğe geri ölçekleyin. Sınıf adına göre renk paleti oluşturmak, kullanıcı deneyimini iyileştirir. Yüksek kare hızları elde etmek için çizimi requestAnimationFrame döngüsüyle eşleştirin ve her karede gereksiz bellek tahsisinden kaçının.

Performans İpuçları

- Küçük model seçin: yolov8n veya yolov8s web için daha uygundur.

- İlk çağrı ısınması: Uygulama açılışında küçük bir “boş” çıkarım tetikleyerek WebGPU shader derlemelerini önceden yaptırabilirsiniz; bu, ilk gerçek karedeki gecikmeyi düşürür.

- Nicemleme: INT8 veya dinamik nicemlenmiş modellerin boyutu küçülür ve bant genişliği ihtiyacı azalır. Doğruluk-hız dengesini ürün gereksinimlerinize göre ölçün.

- Asenkron iş akışı: Kamera karesini işlerken UI’ı kilitlememek için çıkarımı bir Web Worker içinde yürütmeyi değerlendirin. OffscreenCanvas desteklenen tarayıcılarda çizimi de iş parçacığına taşıyabilirsiniz.

Yayına Alma ve Güvenlik

Üretime alırken modeli bir CDN üzerinden cache-control başlıklarıyla servis etmek yükleme süresini iyileştirir. Model dosyalarınız büyükse gzip veya brotli sıkıştırmayı etkinleştirin. Gizlilik açısından, tüm çıkarımın cihazda kalması önemli bir artıdır; sunucuya yalnızca analitik metrikleri veya anonimleştirilmiş telemetri göndermek yeterli olabilir. Kamera erişimi gerekiyorsa kullanıcıya net bir izin akışı ve kapatma seçeneği sunun.

Sorun Giderme

- navigator.gpu undefined: Tarayıcı WebGPU’yu desteklemiyor olabilir. Sağlayıcı sırasına 'wasm' eklediğinizden emin olun.

- CORS/ERR_BLOCKED_BY_RESPONSE: Modeli file:// üzerinden değil bir HTTP sunucusundan yükleyin; yerelde Vite dev sunucusu yeterlidir.

- Out of memory: Modeli küçültün, çözünürlüğü düşürün (ör. 640 → 512) ve gereksiz kopyaları engellemek için tensörleri tekrar kullanın.

Sonuç

ONNX Runtime Web ve WebGPU kombinasyonu, tarayıcıda gerçek zamanlı nesne tespiti için pratik ve çağdaş bir yaklaşım sunuyor. Doğru model seçimi, düzenli ön işleme ve akıllı görselleştirme ile sunucu maliyeti olmadan yüksek kaliteli deneyimler oluşturabilirsiniz. Küçükten başlayın, performansı ölçerek iterasyon yapın ve kademeli olarak daha gelişmiş modellere geçin. Böylece hem kullanıcı gizliliğini korur hem de modern web’in sunduğu GPU gücünden en iyi şekilde yararlanmış olursunuz.

15 Ekim 2025 Çarşamba

WebGPU ile Tarayıcıda Nesne Tespiti: ONNX Runtime Web ile Adım Adım Kurulum

Giriş

Tarayıcıda makine öğrenmesi artık bir demodan öte; üretim senaryolarına hazır. WebGPU sayesinde GPU hızlandırmalı hesaplama, Chrome ve Edge gibi modern tarayıcılarda varsayılan olarak açıldı. Bu rehberde, ONNX Runtime Web (ORT Web) kullanarak tarayıcı içinde nesne tespiti (YOLO ailesi gibi) modelini çalıştırmayı ve WebGPU yürütme sağlayıcısı ile performansı nasıl artırabileceğinizi anlatıyorum. Kurulum adımlarını, küçük kod parçacıklarıyla ve pratik ipuçlarıyla beraber bulacaksınız.

Neden WebGPU?

WebGPU, WebGL’in ötesine geçerek daha modern bir grafik ve hesaplama API’si sunar. ML tarafında en kritik fark, tensör hesaplamalarını verimli çalıştırabilmesi ve veri kopyalamayı azaltmasıdır. Sonuç olarak, aynı model WebAssembly (WASM) ile 200-400 ms sürerken, WebGPU ile 60-120 ms aralığına inebilir; bu özellikle canlı kamera akışında kare kaçırmamak için belirleyici bir fark yaratır.

Ön Koşullar ve Tarayıcı Desteği

- Chrome 113+ ve Edge 113+ sürümlerinde WebGPU masaüstünde varsayılan olarak açık. Mac’te Apple Silicon ile daha istikrarlı sonuçlar alırsınız. Firefox’ta Nightly ile about:config altında dom.webgpu.enabled bayrağını etkinleştirmeniz gerekebilir. Safari’de ise Technology Preview önerilir.
- Geliştirme için basit bir statik sunucu kullanın: npx serve, python -m http.server veya VS Code Live Server eklentisi işinizi görür. Dosyaları doğrudan diskten açmak (file://) CORS hatalarına yol açar.

Proje Yapısı

Minimum örnek için şu dosyaları oluşturun: index.html, app.js ve model dosyanız (ör. yolov8n.onnx). Test için bir görüntü dosyası veya webcam akışı kullanabilirsiniz. Kamera ile test edecekseniz, HTTPS üzerinde yayınlamayı unutmayın; tarayıcılar güvenlik nedeniyle kamera erişimini HTTP’de kısıtlar.

ONNX Runtime Web’i Ekleme

CDN ile hızlı başlamak için index.html içine ORT Web’i ekleyebilirsiniz: <script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort-web.min.js"></script>. Alternatif olarak modüler kullanım için paket yöneticileriyle onnxruntime-web kurabilir, bundler ile projeye dahil edebilirsiniz. WebGPU hızlandırma için çalışma zamanı seçeneklerinde executionProviders: ['webgpu'] belirtmeniz yeterli.

Oturum Oluşturma ve WebGPU’yu Açma

Temel başlatma adımı şöyledir: const session = await ort.InferenceSession.create('yolov8n.onnx', { executionProviders: ['webgpu'], graphOptimizationLevel: 'all' });. Eğer cihazda WebGPU yoksa otomatik olarak WASM’a düşmek isteyebilirsiniz; o durumda önce WebGPU ile dene, başarısız olursa executionProviders: ['wasm'] ile yeniden oluştur şeklinde bir sarmalayıcı yazın.

Girdi Hazırlama

Nesne tespiti modelleri tipik olarak BxCxHxW float32 tensörü bekler. Tarayıcı tarafında Canvas üzerinden resmi alıp 640x640 gibi modele uygun boyuta yeniden örnekleyin, ardından ImageData piksellerinden Float32Array oluşturun. Kanal sıralaması (NCHW vs NHWC) ve normalizasyon (0-1 arası ölçek, ortalama-standart sapma) modelinize göre değişir; ONNX ihracını yaparken hangi düzen kullanıldıysa ona sadık kalın. Örnek: const input = new ort.Tensor('float32', floatArray, [1,3,640,640]);

Çıktıların İşlenmesi

YOLO tarzı modeller, her kutu için [x, y, w, h, score, class] veya benzeri bir yapı üretir. Post-processing adımları: skor eşiği uygulama (örn. 0.25), Non-Maximum Suppression ile çakışan kutuları eleme ve sınıf etiketleri ile renklendirme. ORT WebGPU bazı durumlarda çıktı tensörünü GPU belleğinde tutabilir; tarayıcı tarafında çizmek için CPU’ya kopyalamanız gerekir. Performans için tek bir canvas üzerinde hem görüntü hem de kutuları çizmek, her karede gereksiz tahsislerden kaçınmak önemlidir.

Performans İpuçları

- Model boyutu: YOLOv8n gibi küçük varyantlarla başlayın; tarayıcıda latency dramatik şekilde düşer.
- Precision: FP16 desteği olan cihazlarda otomatik kazanç sağlanır. ORT Web, WebGPU arka ucunda uygunsa bunu kullanır.
- İşletim birleştirme: graphOptimizationLevel: 'all' genellikle faydalı. Bazı modellerde ek kazanımlar için ONNX’ı optimize edin (Fusion/Constant folding).
- Batch=1: Akış senaryolarında tekli batch en düşük gecikmeyi verir.
- Sıcak çalışma: İlk çalıştırmadan önce bir kez “ısındırma” inference’ı yapın; shader derlemeleri ve önbellekler sonrası kare süreleri iyileşir.

Güvenlik ve Barındırma

Model dosyanız büyükse (ör. 20-50 MB), ilk yükleme süresi kullanıcı deneyimini etkiler. HTTP istemci önbelleği için uzun Cache-Control süreleri ayarlayın ve sürümleme yapın. Kamera kullanan sayfalar için HTTPS zorunlu. Cross-origin model yüklerken CORS başlıklarını doğru verin (Access-Control-Allow-Origin). Ayrıca, kullanıcı donanımlarında GPU kaynakları sınırlı olabilir; bir hata durumunda kibarca WASM’a düşmek, uygulamanın kırılmasını engeller.

Hata Ayıklama

- navigator.gpu yoksa tarayıcı sürümünüzü ve bayrakları kontrol edin.
- ValidationError görüyorsanız tensör şekilleri/hizalamaları uyuşmuyor olabilir. Girdiyi ve modelin beklediği düzeni tekrar gözden geçirin.
- Performance sekmesiyle CPU/GPU zamanlarını izleyin; çoğu darboğaz, görüntü ön-işlemede ortaya çıkar. Web Workers ile ön-işlemeyi ana iş parçacığından ayırmak sayfa akıcılığını artırır.

Sonuç

WebGPU ve ONNX Runtime Web birleşimi, tarayıcıda ML uygulamaları için yeni bir performans eşiği sunuyor. Sunucuya görüntü yüklemeden, gizlilik dostu ve düşük gecikmeli nesne tespiti mümkün. Bu rehberdeki yapı ile kısa sürede çalışan bir prototip çıkarabilir, ardından model optimizasyonu, önbellekleme ve UI cilasıyla üretim seviyesine taşıyabilirsiniz. Bir kez kurduktan sonra, segmentasyon, yüz mesh’i ya da metin tespiti gibi diğer ONNX modellerini de aynı altyapı üzerinde hızla deneyebilirsiniz.

22 Temmuz 2025 Salı

Yapay Zeka Destekli Görüntü İşleme: OpenCV ile Nesne Tespiti Nasıl Yapılır?

Giriş: Yapay Zeka ve Görüntü İşleme Neden Önemli?

Son yıllarda yapay zeka ve görüntü işleme teknolojileri, özellikle otomasyon, güvenlik ve sağlık alanlarında devrim yaratıyor. Nesne tespiti ise bu teknolojilerin en çok kullanılan uygulamalarından biri. Peki, bilgisayarlara bir görüntüdeki nesneleri nasıl tanımayı öğretebiliriz? Bu yazıda, Python ve OpenCV kütüphanesi ile temel düzeyde nesne tespitinin nasıl yapılacağını adım adım anlatacağım.

OpenCV Nedir ve Neden Tercih Edilmeli?

OpenCV (Open Source Computer Vision Library), açık kaynak kodlu ve çok güçlü bir görüntü işleme kütüphanesidir. Python, C++, Java gibi dillerle entegre çalışabilir ve yüzlerce hazır fonksiyon sunar. Hızlı, esnek ve topluluk desteği güçlüdür. Özellikle nesne tespiti, yüz tanıma, hareket algılama gibi uygulamalarda sıklıkla tercih edilir.

Kurulum: Gerekli Ortamın Hazırlanması

İlk adım olarak, Python yüklü bir bilgisayara ihtiyacınız var. Eğer yüklü değilse, python.org üzerinden en güncel Python sürümünü indirebilirsiniz. Sonrasında OpenCV kütüphanesini yüklemek için terminal veya komut istemcisine aşağıdaki komutu yazabilirsiniz:

pip install opencv-python

Gerekirse, ek olarak numpy kütüphanesini de yüklemeniz önerilir. Çünkü pek çok görüntü işleme fonksiyonu, numpy dizileriyle çalışır.

Temel Nesne Tespiti: Kod Örneği ve Açıklaması

Şimdi, örnek bir görselde belirli bir nesneyi (örneğin bir yüzü) tespit etmek için basit bir kod parçasına göz atalım. OpenCV, özellikle önceden eğitilmiş modellerle nesne tespitini oldukça kolaylaştırır. Aşağıdaki örnekte, bir yüz algılama işlemi gerçekleştiriyoruz:

import cv2

# Yüz algılama için hazır modelin yüklenmesi
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# Görüntünün yüklenmesi
img = cv2.imread('ornek.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Yüzlerin tespiti
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

# Sonuçların işaretlenmesi
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

cv2.imshow('Yüz Tespiti', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu kodda, öncelikle bir yüz tanıma modeli yükleniyor ve ardından seçilen görseldeki yüzler tespit edilip dikdörtgenler çiziliyor. Böylece, birden çok yüz varsa hepsi işaretlenebiliyor.

İpuçları ve Gelişmiş Kullanım

OpenCV ile nesne tespiti yaparken, tespit hassasiyetini artırmak için scaleFactor ve minNeighbors gibi parametrelerle oynamak gerekebilir. Ayrıca, farklı nesneler için farklı hazır modeller (örneğin göz, araba, kedi, vs.) kullanılabilir. Daha ileri seviye uygulamalar için ise derin öğrenme tabanlı modeller (YOLO, SSD, Faster R-CNN gibi) tercih edilebilir. Bu tür modeller daha yüksek doğruluk oranları sunar fakat daha fazla işlem gücü gerektirir.

Sonuç: OpenCV ile Nesne Tespiti Nerelerde Kullanılır?

OpenCV ile yapılan nesne tespiti; güvenlik kameralarında hareketli nesnelerin takibi, otonom araçlarda trafik işaretlerinin algılanması, sağlık sektöründe hastalık teşhisi gibi birçok alanda kullanılmaktadır. Temel düzeyde bu teknolojiyi öğrenmek, hem yazılım geliştirme becerilerinizi artırır hem de geleceğin mesleklerinde bir adım önde olmanızı sağlar.

Eğer siz de görüntü işleme ve yapay zeka alanında kendinizi geliştirmek istiyorsanız, OpenCV ile denemeler yapmaya hemen başlayabilirsiniz. Unutmayın, öğrenmenin en iyi yolu uygulamaktır!

3 Haziran 2025 Salı

Yapay Zeka Destekli Görüntü İşleme: Python ve OpenCV ile Nesne Tespiti Nasıl Yapılır?

Giriş

Günümüzde yapay zeka ve makine öğrenmesi teknolojileri, görüntü işleme alanında devrim yaratmaya devam ediyor. Özellikle Python programlama dili ve OpenCV kütüphanesi kullanılarak geliştirilen nesne tespit uygulamaları, hem amatörler hem de profesyoneller için büyük kolaylık sağlıyor. Bu yazıda, Python ve OpenCV kullanarak temel seviyede nesne tespiti nasıl yapılır, adım adım anlatacağız. Ayrıca bu teknolojilerin günlük hayatta ve endüstride nasıl kullanıldığından da bahsedeceğiz.

OpenCV ve Python: Kurulum ve Hazırlık

Nesne tespiti için öncelikle Python ortamınızın hazır olması gerekiyor. Python’un son sürümünü python.org üzerinden indirebilirsiniz. Ardından, OpenCV kütüphanesini yüklemek için terminal veya komut istemcisine aşağıdaki komutu yazmanız yeterlidir:

pip install opencv-python

Ek olarak, görsel işlemeleri ve matematiksel hesaplamaları kolaylaştıracak NumPy kütüphanesini de yüklemeniz tavsiye edilir:

pip install numpy

Bir Görüntüde Nesne Tespiti Adımları

Nesne tespiti, bir görüntüdeki belirli nesnelerin yerini ve sınırlarını otomatik olarak bulmayı amaçlayan bir süreçtir. OpenCV ile temel nesne tespiti için şu adımlar izlenir:

  1. Görüntünün yüklenmesi ve ön işleme tabi tutulması (gri tonlama, bulanıklaştırma vb.).
  2. Kenar belirleme (Canny algoritması gibi yöntemlerle).
  3. Kontur bulma ve nesnelerin sınırlanması (bounding box çizme).

Aşağıda örnek bir Python kod bloğu paylaşıyoruz:

import cv2
import numpy as np

# Görüntüyü yükle
img = cv2.imread('ornek.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blur, 50, 150)

# Konturları bul
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# Konturların etrafına dikdörtgen çiz
for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow('Nesne Tespiti', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu kod, ‘ornek.jpg’ adlı bir görseldeki nesneleri kenarlarını tespit edip, çevresine yeşil renkli dikdörtgenler çizer. Kendi görsellerinizle test edebilirsiniz.

Günlük Hayatta ve Endüstride Kullanım Alanları

Python ve OpenCV ile geliştirilen nesne tespit sistemleri, birçok sektörde aktif olarak kullanılmaktadır. Güvenlik kameralarında hareketli nesne tespiti, otonom araçlarda trafik işaretlerinin tanınması, sağlık sektöründe medikal görüntülerin analizi ve tarımda ürün sayımı gibi örnekler verilebilir. Ayrıca, akıllı telefon uygulamalarında yüz tanıma ve artırılmış gerçeklik teknolojileri de bu sistemler sayesinde mümkün olmaktadır.

Yapay zeka destekli nesne tespiti, veri toplama, analiz ve karar verme süreçlerinde büyük kolaylık sağlar. Özellikle büyük veri ile çalışan şirketler için, hızlı ve otomatik analizler sayesinde verimlilik artışı sağlanır.

Sonuç

Python ve OpenCV kullanarak nesne tespiti yapmak, günümüzde oldukça erişilebilir ve etkili bir yöntem haline gelmiştir. Bu yazıda bahsettiğimiz temel adımlar ile siz de kendi projelerinizde nesne tespiti uygulamaları geliştirebilir, farklı alanlarda bu teknolojinin avantajlarından faydalanabilirsiniz. İleri seviye nesne tespiti için derin öğrenme tabanlı yöntemlere (ör. YOLO, SSD) de göz atmanızı öneririz. Görüntü işleme alanında güncel kalmak için yeni gelişmeleri takip etmeyi unutmayın!

29 Mayıs 2025 Perşembe

Yapay Zekâ ile Görüntü İşleme: Python ve OpenCV ile Nesne Tespiti Nasıl Yapılır?

Giriş: Yapay Zekâ ve Görüntü İşlemede Yeni Dönem

Günümüz teknolojisinde yapay zekâ ve görüntü işleme, birbirinden ayrılmaz iki önemli alan olarak öne çıkıyor. Özellikle akıllı cihazlar, otonom araçlar ve güvenlik sistemlerinde görüntü işleme teknikleri her geçen gün daha da gelişiyor. Python programlama dili ve OpenCV kütüphanesi, bu alandaki projelerde en çok tercih edilen araçlar arasında yer alıyor. Bu makalede, Python ve OpenCV kullanarak temel seviyede nesne tespiti nasıl yapılır adım adım anlatılacaktır.

Python ve OpenCV Kurulumu

İlk olarak, Python yüklü olmayan kullanıcıların resmi python.org sitesinden Python son sürümünü yüklemeleri gerekmektedir. Ardından, OpenCV kütüphanesini yüklemek için komut istemcisine aşağıdaki satırı yazabilirsiniz:

pip install opencv-python

Kurulum tamamlandıktan sonra, OpenCV kütüphanesini projeye dahil etmek için import cv2 komutunu kullanmak yeterlidir. Ayrıca, numpy gibi temel bilimsel kütüphaneleri de yüklemek avantaj sağlayacaktır.

Görüntü Okuma ve Temel İşlemler

OpenCV ile bir görüntüyü okumak oldukça kolaydır. Aşağıdaki örnek kodda, bir resmi okuma ve ekranda gösterme işlemi yapılmaktadır:

import cv2

image = cv2.imread('ornek.jpg')
cv2.imshow('Goruntu', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu temel adım, nesne tespiti işlemlerinin başlangıcını oluşturur. Görüntü üzerinde işlem yapmadan önce, genellikle resmi gri tonlara çevirmek ve gürültü azaltma teknikleri uygulamak gerekir.

Kenar Algılama ve Nesne Tespiti

Nesne tespiti için en popüler yöntemlerden biri, Canny Kenar Algılama algoritmasıdır. Bu algoritma, görüntüdeki belirgin kenarları ortaya çıkarır. Kenarların tespiti sonrasında, contour (kontur) bulma işlemiyle nesnelerin sınırları belirlenebilir. İşte örnek bir kod:

import cv2

image = cv2.imread('ornek.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0,255,0), 2)
cv2.imshow('Nesne Tespiti', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu kod, resim üzerindeki nesneleri yeşil renkli çizgilerle işaretler. Farklı görüntülerde, parametreleri değiştirerek daha hassas sonuçlar elde edebilirsiniz. Bu temel mantık, yüz tespiti, araç tespiti gibi daha ileri uygulamaların da temelini oluşturur.

Gerçek Hayatta Kullanım Alanları

Python ve OpenCV ile nesne tespiti, güvenlik kameralarında hareket algılama, otoyollarda araç sayımı, endüstriyel üretimde kalite kontrol ve sağlık sektöründe medikal görüntü analizi gibi çok sayıda alanda kullanılmaktadır. Tüm bu uygulamalar, Python’un esnek yapısı ve OpenCV’nin geniş fonksiyon yelpazesi sayesinde kolayca geliştirilebilmektedir.

Sonuç: Kendi Nesne Tespit Sisteminizi Kurun

Bu yazıda, Python ve OpenCV kullanarak temel nesne tespiti işlemlerinin nasıl gerçekleştirileceğini öğrendik. İster bir öğrenci, ister bir profesyonel olun, bu yöntemlerle kendi nesne tespit projelerinizi geliştirebilir, yapay zekâ ve görüntü işleme alanında kendinizi daha ileri seviyelere taşıyabilirsiniz. Unutmayın, sürekli pratik yaparak ve OpenCV’nin dökümantasyonunu inceleyerek daha karmaşık uygulamalara da kolayca geçiş yapabilirsiniz.

3.

26 Mayıs 2025 Pazartesi

Yapay Zeka Destekli Görüntü İşleme: Python ile OpenCV Kullanımı

Giriş: Yapay Zeka ve Görüntü İşlemenin Gücü

Günümüzde yapay zeka ve görüntü işleme teknolojileri, sağlık, otomotiv, güvenlik ve eğlence gibi birçok sektörde devrim yaratmaya devam ediyor. Özellikle Python programlama dili ve OpenCV kütüphanesi, hem amatörlerin hem de profesyonellerin karmaşık görüntü işleme projelerini kolaylıkla hayata geçirebilmesine imkan tanıyor. Bu yazıda, Python ve OpenCV kullanarak temel görüntü işleme işlemlerini nasıl yapabileceğinizi adım adım anlatacağım.

OpenCV Nedir ve Neden Kullanılır?

OpenCV (Open Source Computer Vision Library), özellikle görüntü işleme ve bilgisayarla görme uygulamaları için geliştirilmiş, açık kaynaklı ve ücretsiz bir kütüphanedir. Python ile birlikte kullanıldığında, fotoğraf filtrelemeden nesne tespitine, yüz tanımadan hareket takibine kadar pek çok işlemi kolayca yapabilmenizi sağlar. OpenCV'nin popülerliği, sunduğu zengin fonksiyonlar ve topluluk desteği sayesinde her geçen gün artıyor.

Kurulum ve Temel Kütüphaneler

OpenCV'yi Python ile kullanmak oldukça basittir. Öncelikle, aşağıdaki komutu terminal veya komut istemcisinde çalıştırarak kütüphaneyi yükleyebilirsiniz:

pip install opencv-python

Ayrıca, görüntüleri işlemek ve analiz etmek için genellikle numpy kütüphanesi de kullanılır. NumPy, diziler ve matrisler üzerinde hızlı işlemler yapmayı sağlar. Onu da aynı şekilde yükleyebilirsiniz:

pip install numpy

Temel Görüntü Okuma ve Görüntü Gösterme

OpenCV ile bir resmi okumak ve ekranda göstermek oldukça kolaydır. Aşağıdaki örnek kodda, bir resmi okuma ve gösterme işlemi yer almaktadır:

import cv2

# Görüntüyü oku
img = cv2.imread('ornek.jpg')

# Görüntüyü bir pencerede göster
cv2.imshow('Goruntu', img)

# Bir tuşa basılana kadar bekle
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu kod, belirtilen dosya adındaki resmi okur ve yeni bir pencerede gösterir. cv2.waitKey(0) fonksiyonu, herhangi bir tuşa basılana kadar pencerenin açık kalmasını sağlar.

Görüntü Üzerinde Basit İşlemler

OpenCV, görüntü üzerinde renk değiştirme, kırpma, döndürme gibi temel işlemleri kolayca yapmanıza imkan verir. Örneğin, bir görüntüyü gri tonlara çevirmek için aşağıdaki kodu kullanabilirsiniz:

gri = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gri Goruntu', gri)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ayrıca, görüntüyü yeniden boyutlandırmak için cv2.resize fonksiyonunu kullanabilirsiniz. Bu, özellikle makine öğrenmesi projelerinde farklı boyuttaki görüntüleri standartlaştırmak için çok faydalıdır.

Yapay Zeka ile Nesne Tespiti

OpenCV, yapay zeka tabanlı önceden eğitilmiş modeller ile nesne tespiti yapabilmektedir. Özellikle Haar Cascade gibi algoritmalar, yüz veya plaka tespiti gibi işlemler için oldukça etkilidir. Basit bir yüz tespiti için aşağıdaki örneği inceleyebilirsiniz:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('Yuz Tespiti', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu örnekte, yüklenen görüntüdeki yüzler otomatik olarak tespit edilir ve dikdörtgen ile işaretlenir. Elbette daha gelişmiş nesne tespiti için derin öğrenme modelleri de kullanabilirsiniz.

Sonuç ve İleri Düzey Uygulamalar

Python ve OpenCV ile görüntü işleme, yapay zeka tabanlı uygulamalar geliştirmek için harika bir başlangıç noktasıdır. Temel okuma, gösterme ve nesne tespiti gibi işlemlerle başlayıp, zamanla derin öğrenme tabanlı görüntü sınıflandırma veya segmentasyon gibi ileri düzey uygulamalara geçebilirsiniz. OpenCV'nin sunduğu kapsamlı dökümantasyon ve topluluk desteği sayesinde, karşılaştığınız sorunlara kolayca çözüm bulabilirsiniz.

Görüntü işleme dünyasına adım atmak ve yapay zekanın gücünden faydalanmak için Python ve OpenCV harika bir ikili olmaya devam ediyor. Siz de bugün bu teknolojileri öğrenmeye başlayarak kendi projelerinizi hayata geçirebilirsiniz.