ดังนั้นเพื่อนๆ ในบล็อกของวันนี้ เราจะมาดูกันว่าเราจะดำเนินการ การตรวจจับวัตถุโดยใช้ SSD ด้วยวิธีที่ง่ายที่สุดได้อย่างไร SSD ทำงานเร็วมากใน Object Detection เมื่อเทียบกับรุ่นใหญ่อย่าง R-CNN หรือ Fast R-CNN ฯลฯ นี่จะเป็นโปรเจ็กต์ที่สนุกมากพร้อมกรณีการใช้งานที่ไม่มีที่สิ้นสุด โดยไม่มีกำหนดชำระอีกต่อไป

อ่านบทความเต็มพร้อมซอร์สโค้ดได้ที่นี่ —https://machinelearningprojects.net/object-detection-using-ssd/

รหัสสำหรับการตรวจจับวัตถุโดยใช้ SSD...

from imutils.video import FPS
import numpy as np
import argparse
import imutils
import cv2

use_gpu = True
live_video = False
confidence_level = 0.5
fps = FPS().start()
ret = True
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
           "bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
           "dog", "horse", "motorbike", "person", "pottedplant", "sheep",
           "sofa", "train", "tvmonitor"]

COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))

net = cv2.dnn.readNetFromCaffe('ssd_files/MobileNetSSD_deploy.prototxt', 'ssd_files/MobileNetSSD_deploy.caffemodel')

if use_gpu:
    print("[INFO] setting preferable backend and target to CUDA...")
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)


print("[INFO] accessing video stream...")
if live_video:
    vs = cv2.VideoCapture(0)
else:
    vs = cv2.VideoCapture('test.mp4')

while ret:
    ret, frame = vs.read()
    if ret:
        frame = imutils.resize(frame, width=400)
        (h, w) = frame.shape[:2]

        blob = cv2.dnn.blobFromImage(frame, 0.007843, (300, 300), 127.5)
        net.setInput(blob)
        detections = net.forward()

        for i in np.arange(0, detections.shape[2]):
            confidence = detections[0, 0, i, 2]
            if confidence > confidence_level:
                idx = int(detections[0, 0, i, 1])
                box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
                (startX, startY, endX, endY) = box.astype("int")

                label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100)
                cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2)

                y = startY - 15 if startY - 15 > 15 else startY + 15
                cv2.putText(frame, label, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)
                
        cv2.imshow('Live detection',frame)

        if cv2.waitKey(1)==27:
            break

        fps.update()

fps.stop()

print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
  • บรรทัดที่ 1–5 — การนำเข้าไลบรารีที่จำเป็นสำหรับการตรวจจับวัตถุโดยใช้ SSD
  • บรรทัดที่ 7–15 — การกำหนดค่าคงที่และอาร์เรย์ คลาส โมเดล SSD ของเราได้รับการฝึกอบรมใน 21 คลาสเหล่านี้
  • บรรทัดที่ 17 — การกำหนดอาร์เรย์สีโดยที่แต่ละคลาสจะได้รับการสุ่มกำหนดสี
  • บรรทัดที่ 19 — การอ่านเครือข่ายในตัวแปรที่เรียกว่า net โดยใช้ cv2.dnn.readNetFromCaffe
  • บรรทัด 21–24 — หากพารามิเตอร์ use_gpu ตั้งค่าเป็น TRUE ให้ตั้งค่าแบ็กเอนด์และเป้าหมายเป็น Cuda
  • บรรทัด 27–31 — เริ่มต้นวัตถุ VideoCapture ด้วย 0 สำหรับวิดีโอสดหรือด้วยชื่อไฟล์วิดีโอ
  • บรรทัดที่ 34 — เข้าสู่อาร์เรย์อนันต์แล้วอ่านเฟรมกัน
  • บรรทัดที่ 35 — ถ้า ret บอกว่าถ้าวัตถุ VideoCapture ส่งคืน True ให้ดำเนินการต่อเท่านั้น
  • บรรทัด 36–37 — ปรับขนาดเฟรมและรับความสูงและความกว้าง
  • บรรทัด 39–41 — สร้าง Blob จากรูปภาพ ตั้งค่าเป็นอินพุต และส่งต่อไปผ่านเครือข่ายโดยใช้ cv2.blobFromImage

สำหรับคำอธิบายโค้ดเพิ่มเติมและซอร์สโค้ด โปรดไปที่นี่



หากต้องการสำรวจการเรียนรู้ของเครื่อง การเรียนรู้เชิงลึก คอมพิวเตอร์วิทัศน์ NLP และโครงการ Flask เพิ่มเติม โปรดไปที่บล็อกของฉัน



นี่คือทั้งหมดสำหรับบล็อกนี้ทุกคน ขอบคุณที่อ่านมัน และฉันหวังว่าคุณจะนำอะไรติดตัวไปด้วยหลังจากอ่านบทความนี้แล้วและไว้คราวหน้า 😏...