Python ile Nesne Tespiti

Python ile Nesne Tespiti

Ara 18, 2024 - 23:55
 0  28
Python ile Nesne Tespiti
Python Nesne Tespiti
import cv2
import torch
from torchvision import models, transforms
from PIL import Image
from torchvision.models.detection import ssdlite320_mobilenet_v3_large
from torchvision.models.detection import SSDLite320_MobileNet_V3_Large_Weights

# GPU veya CPU seçimi
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Modeli yükleyin ve en güncel ağırlıkları kullanın
model = ssdlite320_mobilenet_v3_large(weights=SSDLite320_MobileNet_V3_Large_Weights.COCO_V1)  # COCO_V1 ağırlıkları
model.eval().to(device)

# COCO sınıfları
COCO_CLASSES = [
    'N/A', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat',
    'traffic light', 'fire hydrant', 'N/A', 'stop sign', 'parking meter', 'bench', 'bird', 'cat',
    'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'N/A', 'backpack',
    'umbrella', 'N/A', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
    'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle',
    'N/A', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich',
    'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant',
    'bed', 'N/A', 'dining table', 'N/A', 'toilet', 'N/A', 'tv', 'laptop', 'mouse', 'remote', 'keyboard',
    'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
    'teddy bear', 'hair drier', 'toothbrush'
]

# Video kaynağını aç (yerel dosya ya da webcam)
video_source = ('thai_1.mp4')  # Videonun yolu veya "0" webcam için
cap = cv2.VideoCapture(video_source)

# Görüntü dönüşüm fonksiyonu (PIL'e dönüştürmek için)
transform = transforms.Compose([transforms.ToTensor()])

# Video işleme döngüsü
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # Görüntüyü küçültme (performans için)
    original_height, original_width = frame.shape[:2]
    frame_resized = cv2.resize(frame, (frame.shape[1] // 2, frame.shape[0] // 2))

    # OpenCV'den PIL formatına dönüştür
    pil_image = Image.fromarray(cv2.cvtColor(frame_resized, cv2.COLOR_BGR2RGB))
    image_tensor = transform(pil_image).unsqueeze(0).to(device)

    # Modeli kullanarak nesne tespiti yap
    with torch.no_grad():
        prediction = model(image_tensor)

    # Tespit edilen nesneleri işleme
    labels = prediction[0]['labels']
    boxes = prediction[0]['boxes']
    scores = prediction[0]['scores']

    for i in range(len(labels)):
        if scores[i] > 0.5:  # Skor belirli bir eşikten büyükse
            label = labels[i].cpu().numpy()
            box = boxes[i].cpu().numpy()

            # Koordinatları orijinal görüntü boyutlarına göre ölçekle
            box = [
                int(box[0] * (original_width / frame_resized.shape[1])),
                int(box[1] * (original_height / frame_resized.shape[0])),
                int(box[2] * (original_width / frame_resized.shape[1])),
                int(box[3] * (original_height / frame_resized.shape[0]))
            ]

            label_name = COCO_CLASSES[label]

            # Bbox çiz
            cv2.rectangle(frame, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)

            # Etiketi ekle (nesnenin adı)
            cv2.putText(frame, label_name, (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9,
                        (0, 255, 0), 2)

    # Görüntüyü göster
    cv2.imshow('Video Stream', frame)

    # 'q' tuşuna basılırsa çık
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

1. Kütüphanelerin Yüklenmesi:
İlk olarak, OpenCV (cv2), PyTorch (torch), TorchVision (görüntü işleme ve model yükleme için), ve PIL (görüntü işlemi için) gibi gerekli kütüphaneler içe aktarılır. Bu kütüphaneler, video akışını okumak, nesne tespiti yapmak ve görüntü üzerinde etiketler oluşturmak için kullanılır.

2. Cihaz Seçimi (GPU/CPU):
Kod, kullanılabilir bir GPU varsa işlemleri GPU üzerinde gerçekleştirecek şekilde ayarlanır. Eğer GPU yoksa, işlem CPU üzerinde yapılır. Bu, işlem hızını optimize etmek için önemlidir, çünkü derin öğrenme modelleri GPU ile çok daha hızlı çalışır.

3. Modelin Yüklenmesi:
Kodda, mobil cihazlar için optimize edilmiş SSD (Single Shot Multibox Detector) modelinin bir versiyonu olan ssdlite320_mobilenet_v3_large modeli kullanılır. Bu model, COCO veri kümesinde eğitilmiştir ve birçok farklı nesneyi tespit edebilme kapasitesine sahiptir. Modelin ağırlıkları (parametreleri) yüklenir ve model eval() modunda çalışmaya hazırlanır, bu da modelin eğitim dışında nesne tespiti için kullanılmasını sağlar.

4. Nesne Sınıflarının Tanımlanması (COCO Sınıfları):
COCO veri kümesindeki nesnelerin sınıfları bir liste halinde tanımlanır. Bu liste, tespit edilebilecek nesnelerin adlarını içerir (örneğin, "person", "bicycle", "car", "dog" gibi).

5. Video Kaynağının Seçimi:
Kod, bir video kaynağını açar. Bu kaynak bir video dosyası (örneğin, 'thai_1.mp4') veya bilgisayarın webcam'ı olabilir. OpenCV kullanılarak video kaynağı açılır ve her bir kare video akışından alınır.

6. Görüntü Dönüşümü:
Alınan her video karesi, modelin çalışması için uygun formata dönüştürülür. İlk olarak, görüntü boyutları küçültülür, bu da işlemlerin daha hızlı yapılmasını sağlar. Ardından, OpenCV formatında olan görüntü, PIL formatına dönüştürülür ve modelin kabul edeceği bir tensöre dönüştürülür. Bu dönüşüm işlemi, modelin doğru şekilde çalışabilmesi için gereklidir.

7. Nesne Tespiti:
Model, her bir görüntü karesinde nesne tespiti yapar. Bu aşamada, model her tespit edilen nesne için bir kutu (bounding box), etiket ve güven skoru döndürür. Güven skoru, modelin tespiti ne kadar emin olduğunu gösterir. Eğer güven skoru belirli bir eşik değerinin (örneğin 0.5) üzerinde ise, bu nesne geçerli olarak kabul edilir.

8. Nesnelerin Etiketlenmesi ve Görüntü Üzerine Çizim:
Tespit edilen nesneler, video karesinde bir kutu ile işaretlenir ve üzerine etiketler (nesnenin adı) yazılır. Nesnelerin kutuları, görüntünün orijinal boyutlarına uygun şekilde yeniden ölçeklendirilir. Bu işlem, nesnelerin video karesinde doğru şekilde yerleştirilmesini sağlar. Etiketler ise her nesnenin adını belirtir (örneğin, "person", "car", "dog" gibi).

9. Görüntünün Gösterilmesi:
İşlenmiş her video karesi, üzerinde tespit edilen nesneler ve etiketlerle birlikte ekranda gösterilir. Kullanıcı, 'q' tuşuna basarak video akışını durdurabilir.

10. Kaynakların Serbest Bırakılması:
Kod, video kaynağını kapatıp tüm pencereleri yok ederek kaynakları serbest bırakır. Bu, programın düzgün bir şekilde sonlanmasını sağlar.

Özetle:

Bu Python kodu, bir video kaynağından alınan görüntüler üzerinde nesne tespiti yapar. MobilNetV3 temelli SSD modeli kullanarak, video akışındaki nesneleri tespit eder, bu nesneleri etiketler ve ekranda gösterir.

Bu Yazıya Tepkin Nedir?

like

dislike

love

funny

angry

sad

wow