Nesne tespiti, bilgisayarlı görü alanında bir resim veya video içerisindeki nesnelerin yerini belirleme ve sınıflandırma işlemidir. Bu işlem, güvenlik sistemlerinden otonom araçlara kadar birçok alanda kritik bir rol oynar. YOLO (You Only Look Once), nesne tespiti için kullanılan popüler ve hızlı bir algoritmadır.
YOLO, nesne tespitini tek bir evrişimsel sinir ağı (CNN) aracılığıyla gerçekleştirir. Görüntüyü ızgaralara böler ve her bir ızgara hücresi için birden fazla tahmin kutusu (bounding box) ve sınıf olasılıkları üretir. Bu yaklaşım, diğer nesne tespit algoritmalarına göre daha hızlı ve verimli olmasını sağlar.
YOLO'yu Python ile uygulamak için çeşitli kütüphaneler ve çerçeveler kullanılabilir. En popüler seçenekler arasında TensorFlow, Keras ve PyTorch bulunur. Bu bölümde, basit bir YOLO uygulamasının temel adımlarını inceleyeceğiz.
İlk olarak, gerekli kütüphaneleri kurmanız gerekmektedir. Aşağıdaki komutları kullanarak TensorFlow, OpenCV ve diğer bağımlılıkları yükleyebilirsiniz:
pip install tensorflow opencv-python pillow
YOLO modelini kullanmak için, önceden eğitilmiş ağırlıkları ve model yapılandırmasını indirmeniz gerekmektedir. YOLO'nun farklı versiyonları (YOLOv3, YOLOv4, YOLOv5 vb.) bulunmaktadır. İhtiyacınıza uygun olanı seçebilirsiniz. Örneğin, YOLOv3 için ağırlık dosyalarını ve yapılandırma dosyasını indirebilirsiniz.
Aşağıdaki Python kodu, bir resim üzerinde YOLO ile nesne tespiti yapmanın temel adımlarını göstermektedir:
import cv2
import numpy as np
# YOLO modelini yükle
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
# Sınıf isimlerini yükle
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
# Görüntüyü yükle
img = cv2.imread("image.jpg")
height, width, channels = img.shape
# Görüntüyü YOLO için hazırla
blob = cv2.dnn.blobFromImage(img, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
# Çıktı katmanlarını al
output_layers_names = net.getUnconnectedOutLayersNames()
outputs = net.forward(output_layers_names)
# Nesne tespiti
boxes = []
confidences = []
class_ids = []
for output in outputs:
for detection in output:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
# Çakışan kutuları temizle
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
# Sonuçları çiz
font = cv2.FONT_HERSHEY_PLAIN
for i in range(len(boxes)):
if i in indexes:
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
color = (0, 255, 0)
cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
cv2.putText(img, label, (x, y - 5), font, 1, color, 1)
# Görüntüyü göster
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Bu kod, "yolov3.weights" ve "yolov3.cfg" dosyalarını kullanarak YOLO modelini yükler, "coco.names" dosyasından sınıf isimlerini okur ve "image.jpg" üzerindeki nesneleri tespit eder. Tespit edilen nesnelerin etrafına kutular çizer ve sınıf etiketlerini gösterir.
cv2.dnn.readNet("yolov3.weights", "yolov3.cfg"): YOLO modelini yükler.with open("coco.names", "r") as f:: Sınıf isimlerini yükler.cv2.imread("image.jpg"): Görüntüyü yükler.cv2.dnn.blobFromImage(...): Görüntüyü YOLO için uygun formata dönüştürür.net.forward(output_layers_names): Nesne tespiti yapar.cv2.dnn.NMSBoxes(...): Çakışan kutuları temizler.cv2.rectangle(...) ve cv2.putText(...): Sonuçları görüntü üzerine çizer.YOLO algoritması, nesne tespiti için hızlı ve etkili bir çözümdür. Python ile kolayca uygulanabilir ve çeşitli uygulamalarda kullanılabilir. Bu yazıda, YOLO'nun temel prensiplerini ve Python ile basit bir uygulamasını inceledik. Daha karmaşık uygulamalar için, farklı YOLO versiyonlarını ve daha gelişmiş kütüphaneleri (örneğin, Darknet veya PyTorch Hub) kullanabilirsiniz.