ดังนั้นเพื่อนๆ ในบล็อกของวันนี้ เราจะมาดูกันว่าเราจะดำเนินการ การตรวจจับวัตถุโดยใช้ 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 เพิ่มเติม โปรดไปที่บล็อกของฉัน
นี่คือทั้งหมดสำหรับบล็อกนี้ทุกคน ขอบคุณที่อ่านมัน และฉันหวังว่าคุณจะนำอะไรติดตัวไปด้วยหลังจากอ่านบทความนี้แล้วและไว้คราวหน้า 😏...