Endüstri 4.0 ve akıllı fabrikaların kalbinde bilgisayarlı görü (Computer Vision) sistemleri yer alır. Manuel göz kontrolü yapan insan operatörler saatler süren vardiyalarda yorulabilir, dikkat dağınıklığı yaşayabilir ve mikron seviyesindeki çatlakları ya da boyutsal sapmaları gözden kaçırabilir.
OpenCV (Open Source Computer Vision Library), saniyede yüzlerce kareyi gerçek zamanlı işleyerek parça sayımı, boyut ölçümü, delik kontrolü ve yüzey deformasyonu tespitini %99.8 doğrulukla gerçekleştirebilir. Bu makalede konveyör bant üzerinde hareket eden metal pulların veya plastik parçaların kusurlarını tespit eden ve sağlam parçaları sayan uçtan uca bir Python mimarisi kuracağız.
Görüntü Ön İşleme Adımları (Pipeline)
Kusursuz bir tespit için ham kamera görüntüsü sırasıyla şu filtrelerden geçirilir:
- Gri Tonlama (Grayscale): 3 kanallı (RGB) renkli görüntü tek kanallı parlaklık matrisine indirgenir, işlem süresi 3 kat hızlanır.
- Gaussian Blur (Bulanıklaştırma): Kamera sensöründen kaynaklanan yüksek frekanslı karıncalanma ve piksel gürültüleri yok edilir.
- OTSU / Eşikleme (Thresholding): Arka plan (konveyör bant) ile ilgilendiğimiz nesne (ürün) birbirinden siyah/beyaz olarak ayrıştırılır (Binarization).
- Morfolojik Operatörler (Opening & Closing): Parça kenarındaki istenmeyen küçük pürüzler temizlenir.
- Kontur Bulma (Contour Finding): Parçanın dış sınır geometrisi (alan, çevre, dairesellik) hesaplanır.
Çalışan Python OpenCV Kalite Kontrol Kodu
import cv2
import numpy as np
# Kamera veya video akışını aç
cap = cv2.VideoCapture(0)
# İdeal parça kriterleri (Referans pul parametreleri)
MIN_AREA = 3000 # Minimum parça alanı (piksel)
MAX_AREA = 7500 # Maksimum parça alanı
IDEAL_CIRCULARITY = 0.85 # Dairesellik oranı (1.0 = kusursuz çember)
passed_count = 0
rejected_count = 0
print("OpenCV Kalite Kontrol ve Sayım Sistemi Başlatıldı...")
while True:
ret, frame = cap.read()
if not ret:
break
# 1. Gri Tonlamaya Çevir ve Bulanıklaştır
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)
# 2. Otsu Eşikleme ile İkili (Binary) Maske Oluştur
_, thresh = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 3. Konturları Tespit Et
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
area = cv2.contourArea(cnt)
if area < 1000: # Küçük toz/parazitleri yok say
continue
perimeter = cv2.arcLength(cnt, True)
if perimeter == 0:
continue
# Dairesellik Formülü: 4 * pi * Alan / (Çevre^2)
circularity = 4 * np.pi * (area / (perimeter * perimeter))
# Parça konumunu sınırlayıcı kutuyla al
x, y, w, h = cv2.boundingRect(cnt)
# Kalite Kontrol Karar Mantığı
is_area_ok = MIN_AREA <= area <= MAX_AREA
is_shape_ok = circularity >= IDEAL_CIRCULARITY
if is_area_ok and is_shape_ok:
status = "ONAYLANDI"
box_color = (0, 255, 0) # Yeşil
else:
status = "KUSURLU"
box_color = (0, 0, 255) # Kırmızı
# Görsel Çizimler
cv2.rectangle(frame, (x, y), (x + w, y + h), box_color, 2)
cv2.putText(frame, f"{status} - Alan:{int(area)}", (x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, box_color, 2)
# Canlı Dashboard Bilgileri
cv2.putText(frame, "KodKatman Vision AI System", (20, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)
cv2.imshow("Endustriyel Kalite Kontrol", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Endüstriyel Kamera ve Aydınlatma İpuçları
Görüntü işlemede yazılım başarısının %70'i doğru aydınlatmaya bağlıdır:
- Arka Aydınlatma (Backlight): Parçanın arkasından ışık verilerek silüeti çıkarılır. Boyutsal ölçüm ve çatlak tespitinde en kusursuz ve gölgesiz yöntemdir.
- Halka Aydınlatma (Ring Light): Parça yüzeyindeki baskı hatalarını, çizikleri ve renk bozukluklarını görmek için kameranın etrafına monte edilir.
- Polarize Filtre: Parlak metal veya cam yüzeylerdeki ışık patlamalarını (glare) engeller.