ในยุคดิจิทัลปัจจุบัน การตรวจจับวัตถุในภาพหรือวิดีโอเป็นหนึ่งในงานที่มีความสำคัญและมีการใช้งานอย่างกว้างขวาง ตั้งแต่การเฝ้าระวังความปลอดภัยไปจนถึงการวิเคราะห์และจำแนกวัตถุในระบบอัตโนมัติ YOLO (You Only Look Once) เป็นหนึ่งในเทคนิคที่ได้รับความนิยมสูงสำหรับการตรวจจับวัตถุเนื่องจากความเร็วและความแม่นยำสูงในการทำงาน บทความนี้จะแนะนำวิธีการใช้ Python และ YOLO สำหรับการตรวจจับวัตถุในวิดีโอสตรีม OpenCV (Open Source Computer Vision Library) พร้อมกับโค้ดรหัสตัวอย่างที่ใช้งานได้จริง
การติดตั้งและการเตรียมความพร้อม
ก่อนที่จะเริ่มต้น คุณต้องมี Python ติดตั้งอยู่บนเครื่องของคุณ และ ต้องติดตั้ง OpenCV ซึ่งสามารถทำได้โดยการใช้ คำสั่ง
pip install opencv-python
คุณจะต้องมีไฟล์ yolov3.weights
และ yolov3.cfg
พร้อมกับไฟล์ป้ายชื่อวัตถุ coco.names
ซึ่งสามารถดาวน์โหลดได้ จากอินเทอร์เน็ต โดยไฟล์เหล่านี้มีส่วนสำคัญในการกำหนดการตั้งค่าและโมเดลที่ YOLO จะใช้ในการตรวจจับวัตถุ
โค้ดรหัสตัวอย่าง
โค้ดด้านล่างนี้เป็นตัวอย่างของการใช้ YOLO ในการตรวจจับวัตถุบุคคลในวิดีโอสตรีม :
import cv2
import numpy as np
import datetime
# โหลด YOLO weights และ config
yolo_weights = 'yolov3.weights'
yolo_config = 'yolov3.cfg'
# โหลด YOLO network
net = cv2.dnn.readNet(yolo_weights, yolo_config)
# โหลดป้ายชื่อวัตถุ
with open('coco.names', 'r') as f:
labels = [line.strip() for line in f.readlines()]
# ตั้งค่า URL ของวิดีโอสตรีม
stream_url = "URL ของวิดีโอสตรีม"
cap = cv2.VideoCapture(stream_url)
while True:
ret, frame = cap.read()
if not ret:
break
height, width, channels = frame.shape
# ตรวจจับวัตถุด้วย YOLO
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(net.getUnconnectedOutLayersNames())
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5 and labels[class_id] == 'person':
# ตรวจจับบุคคล
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3]...
x = int(center_x - w / 2)
y = int(center_y - h / 2)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
cv2.imwrite(f"human_{timestamp}.jpg", frame)
print(f"Detected human at position: x={x}, y={y}, w={w}, h={h}")
cv2.imshow('Frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
วิธีการทำงาน
- การโหลดและการตั้งค่า YOLO: โค้ดจะเริ่มต้นด้วยการโหลด weights และ config ของ YOLO ตามด้วยการโหลด network และป้ายชื่อวัตถุจากไฟล์
coco.names
- การเชื่อมต่อวิดีโอสตรีม: ใช้
cv2.VideoCapture
เพื่อเชื่อมต่อกับ URL ของวิดีโอสตรีม - การตรวจจับวัตถุ: ในแต่ละเฟรม โค้ดจะทำการแปลงเฟรมเป็น blob และส่งผ่าน network ของ YOLO เพื่อตรวจจับวัตถุ ถ้ามีบุคคลถูกตรวจจับด้วยความมั่นใจมากกว่า 50% จะทำการวาดสี่เหลี่ยมล้อมรอบและบันทึกภาพพร้อม timestamp
- การแสดงผลและการออกจากโปรแกรม: แสดงเฟรมที่มีการวาดสี่เหลี่ยมล้อมรอบบุคคลที่ตรวจจับได้ และสามารถออกจากโปรแกรมได้โดยกดปุ่ม 'q'
การประยุกต์ใช้
การใช้งาน Python และ YOLO ในการตรวจจับวัตถุเป็นตัวอย่างของการประยุกต์ใช้เทคโนโลยีในการประมวลผลภาพและวิดีโอในชีวิตจริง เช่น ระบบเฝ้าระวังความปลอดภัย การวิเคราะห์การจราจร หรือแม้แต่ในการพัฒนาแอปพลิเคชันที่ต้องการการตรวจจับและการจำแนกวัตถุอย่างรวดเร็วและแม่นยำ