ในยุคดิจิทัลปัจจุบัน การตรวจจับวัตถุในภาพหรือวิดีโอเป็นหนึ่งในงานที่มีความสำคัญและมีการใช้งานอย่างกว้างขวาง ตั้งแต่การเฝ้าระวังความปลอดภัยไปจนถึงการวิเคราะห์และจำแนกวัตถุในระบบอัตโนมัติ 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()

 

วิธีการทำงาน

  1. การโหลดและการตั้งค่า YOLO: โค้ดจะเริ่มต้นด้วยการโหลด weights และ config ของ YOLO ตามด้วยการโหลด network และป้ายชื่อวัตถุจากไฟล์ coco.names
  2. การเชื่อมต่อวิดีโอสตรีม: ใช้ cv2.VideoCapture เพื่อเชื่อมต่อกับ URL ของวิดีโอสตรีม
  3. การตรวจจับวัตถุ: ในแต่ละเฟรม โค้ดจะทำการแปลงเฟรมเป็น blob และส่งผ่าน network ของ YOLO เพื่อตรวจจับวัตถุ ถ้ามีบุคคลถูกตรวจจับด้วยความมั่นใจมากกว่า 50% จะทำการวาดสี่เหลี่ยมล้อมรอบและบันทึกภาพพร้อม timestamp
  4. การแสดงผลและการออกจากโปรแกรม: แสดงเฟรมที่มีการวาดสี่เหลี่ยมล้อมรอบบุคคลที่ตรวจจับได้ และสามารถออกจากโปรแกรมได้โดยกดปุ่ม 'q'

การประยุกต์ใช้

การใช้งาน Python และ YOLO ในการตรวจจับวัตถุเป็นตัวอย่างของการประยุกต์ใช้เทคโนโลยีในการประมวลผลภาพและวิดีโอในชีวิตจริง เช่น ระบบเฝ้าระวังความปลอดภัย การวิเคราะห์การจราจร หรือแม้แต่ในการพัฒนาแอปพลิเคชันที่ต้องการการตรวจจับและการจำแนกวัตถุอย่างรวดเร็วและแม่นยำ