ผู้เขียนบทความ
1.นายนที บัวผุด COE#16
2.นายปิยะ นาคราช COE#16
3.นายธิภัชกร จันทภาโส COE#16
4.นายนิณาต พันฤทธิ์ดำ COE#16
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-20164 การโปรแกรมคอมพิวเตอร์ชั้นสูง
1. ความเป็นมา
เมื่อการตรวจสอบแบบเรียลไทม์กลายเป็นสิ่งสำคัญมากขึ้น ความต้องการโซลูชันที่มีประสิทธิภาพและคุ้มค่ามากขึ้นในการวิเคราะห์การไหลของผู้คนและขนาดฝูงชนก็เพิ่มขึ้นด้วย วิธีการดั้งเดิมอาจมีค่าใช้จ่ายสูงและไม่ยืดหยุ่น แต่การพัฒนาในด้านการมองเห็นคอมพิวเตอร์ เช่น โมเดลการตรวจจับวัตถุ YOLO นำเสนอทางเลือกที่ทรงพลัง YOLO โดดเด่นในด้านการตรวจจับวัตถุแบบเรียลไทม์ ทำให้เหมาะสำหรับการวิเคราะห์สตรีมวิดีโอสด
2. วัตถุประสงค์
แอปพลิเคชันนี้สร้างขึ้นด้วย Python และ Flask ซึ่งช่วยให้สามารถรวม YOLO สำหรับการตรวจจับวัตถุได้อย่างราบรื่น ระบบจะประมวลผลสตรีมวิดีโอเพื่อตรวจจับและนับจำนวนผู้คน ทำให้เหมาะสมกับการใช้งานต่างๆ เช่น การติดตามการไหลของผู้คนในร้านค้าปลีก เป็นต้น
3. ขอบเขต
โปรแกรมสามารถผลิตผลลัทพ์ จำนวนคนที่ เดินเข้า หรือ ออก จากบริเวณที่ ข้อมูล วีดีโอ (สตรีมสด หรือ ย้อนหลัง) ได้อย่างแม่นยำ ในระดับความผิดพลาดที่รับได้ โดยที่ผู้ใช้งานสามารถ กำหนด การตั้งค่า ผ่านตัว app โดยไม่ต้องแก้ไขโปรแกรมโดยตรง
4. ประโยชน์ที่คาดว่าจะได้รับ
ผู้ใช้ได้รับข้อมูล จำนวนคนที่ เดินเข้า หรือ ออก จากบริเวณที่ ข้อมูล วีดีโอ ได้อย่างแม่นยำ และสามารถนำไปใช้ต่อได้ เช่นการทำสถติ หรือ ด้านความปลอดภัย
5. ความรู้ที่เกี่ยวข้อง
การทำงานร่วมกันของโมดูลเหล่านี้ ได้แก่ cv2, YOLOv8, Ultralytics, และ numpy จะเน้นไปที่การตรวจจับวัตถุ การประมวลผลภาพ และการคำนวณเชิงตัวเลข ซึ่งจะอธิบายการทำงานของแต่ละโมดูลและความเชื่อมโยงกันดังนี้:
OpenCV (cv2):
เป็นไลบรารีสำหรับการประมวลผลภาพและวิดีโอ มีฟังก์ชันหลากหลายสำหรับการเปิดไฟล์ภาพ การแปลงภาพ (เช่น การแปลงเป็นระดับสีเทา), การลดเสียงรบกวน, การจับวัตถุที่เคลื่อนไหว, และการแสดงผลภาพ หรือวิดีโอจากกล้องหรือไฟล์
YOLOv8 (Ultralytics):
YOLOv8 เป็นโมเดลตรวจจับวัตถุที่มีความเร็วและความแม่นยำสูง ถูกพัฒนาโดย Ultralytics มันสามารถตรวจจับวัตถุหลาย ๆ ชนิดในภาพเดียวกันได้ในเวลาจริง (real-time) โดยใช้การตรวจจับผ่านกรอบสี่เหลี่ยมล้อมรอบวัตถุ
Ultralytics:
เป็นไลบรารีที่ทำหน้าที่จัดการโมเดล YOLOv8 ซึ่งมาพร้อมกับเครื่องมือในการเทรน ตรวจสอบ และใช้งาน YOLOv8 ได้อย่างง่ายดาย ผู้ใช้สามารถสร้างโมเดลใหม่หรือโหลดโมเดลที่ได้รับการฝึกมาแล้วเพื่อทดสอบกับข้อมูลใหม่ โดย Ultralytics ช่วยให้การพัฒนาเป็นเรื่องง่ายผ่านการจัดการเรื่องการโหลดโมเดล การประมวลผล และการตั้งค่าต่าง ๆ
6. วิธีการใช้งานโปรแกรม
- ติดตั้ง python
- โปรแกรมสามารถทำงานได้ใน python 3.9 – 3.12 โดยในที่นี่จะใช้ python 3.12.7
- ติดตั้ง model
- โปรแกรมใช้ model ของ YOLOv8n (https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt) สามรถใช้ model ขนาดใหญ่กว่า เพื่อความแม่นยำที่มากกว่าได้ https://docs.ultralytics.com/models/yolov8/#supported-tasks-and-modes
- โปรแกรมใช้ model ของ YOLOv8n (https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt) สามรถใช้ model ขนาดใหญ่กว่า เพื่อความแม่นยำที่มากกว่าได้ https://docs.ultralytics.com/models/yolov8/#supported-tasks-and-modes
- ติดตั้ง package จำเป็น
$ pip install opencv-python numpy ultralytics
7. อธิบายโปรแกรม
- โหลด model , ObjectCounter และ ต้นทางของ video ที่จะใช้นับคน ( เป็นไฟล์ mp4 ในที่นี่ )
- loop frame ของ video ส่งใน YOLO model และนำข้อมูลตำแหน่งของ คน ส่งใน ObjectCounter เพื่อนับคนเข้าออกจากตำแหน่งที่กำหนดไว้
- แสดงผล
# full code
import cv2 as cv
# ultralytics to handle YOLO model and object counting algorithm
from ultralytics import YOLO , solutions
def main():
# load yolo model
model = YOLO("weights/yolov8n.pt")
# load video source
cap = cv.VideoCapture( "vids/bg.mp4" )
# check if video source loaded
assert(cap.isOpened(), "Error opening video file")
# initialize ObjectCounter to count select object
counter = solutions.ObjectCounter(
view_img = False,
reg_pts = [(0, 300), (1280, 300)],
names = model.names,
draw_tracks = False,
line_thickness=1
)
while cap.isOpened():
# get current image frame
valid , im0 = cap.read()
if not valid:
print("Video end")
break
# resize image to 720p for better performance
im0 = cv.resize(im0, (1280 , 720))
# track human ( class = 0 )
tracks = model.track( im0, persist = True , show = False , classes = [ 0 ])
# send tracking info to ObjectCounter
im0 = counter.start_counting( im0 , tracks )
if cv.waitKey(1) & 0xFF == ord("q"):
break
# output
print('People Count', counter.in_counts , counter.out_counts )
pass
if __name__ == '__main__':
main()
7. ผลการทดลอง
สรุปผล จากการทดลองผลปรากฎว่าการใช้งานโปรแกรมนั้นมีประสิทธิภาพ โปรแกรมสามารถจับภาพวิดีโอคนเข้า-ออกได้เป็นอย่างดีแต่ทั้งนี้ก็ขึ้นอยู่กับวิดีโอที่เลือกใช้ ปัจจัยต่างๆ เช่น มุมที่ถ่ายอาจไม่เหมาะกับการจับภาพคน , วิดีโอในถ้ามืดเกินไปก็อาจทำให้จับภาพไม่ได้ แต่โดยรวมแล้วในมุมกล้องที่ดีก็สามารถทำให้โปรแกรมทำงานได้อย่างมีประสิทธิภาพ
ข้อเสนอแนะ — ควรจัดหามุมกล้องที่ดีเพื่อประสิทธิที่สูงขึ้นอย่างมาก —
8. ข้อมูลอ้างอิง
ใช้ใน Python เป็นไลบรารีโอเพนซอร์สที่ใช้สำหรับงานด้านการประมวลผลภาพและการมองเห็นของคอมพิวเตอร์ (Computer Vision) มีเครื่องมือที่หลากหลายสำหรับการจัดการกับภาพและวิดีโอ รวมถึงการตรวจจับวัตถุ การตรวจสอบใบหน้า การตรวจจับการเคลื่อนไหว และอื่น ๆ OpenCV ถูกใช้อย่างแพร่หลายในงานวิจัย, วิศวกรรม, AI, และงานด้านการเรียนรู้ของเครื่อง (Machine Learning) เนื่องจากรองรับการทำงานที่ซับซ้อนและสามารถทำงานได้อย่างมีประสิทธิภาพสูง https://phyblas.hinaboshi.com/oshi01
NumPy เป็นไลบรารีที่ใช้สำหรับการคำนวณเชิงตัวเลขและวิทยาศาสตร์ข้อมูล ซึ่งมาพร้อมกับเครื่องมือที่มีประสิทธิภาพสำหรับการทำงานกับ อาเรย์ (arrays) และ เมทริกซ์ (matrices) รวมถึงฟังก์ชันทางคณิตศาสตร์ที่ใช้ในการจัดการและวิเคราะห์ข้อมูลได้อย่างรวดเร็ว https://www.borntodev.com/2020/04/16/%E0%B8%9E%E0%B8%B7%E0%B9%89%E0%B8%99%E0%B8%90%E0%B8%B2%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%83%E0%B8%8A%E0%B9%89-numpy-%E0%B9%83%E0%B8%99-python-3/
โมดูล Ultralytics เป็นไลบรารีที่พัฒนาเพื่อใช้งานโมเดล YOLO (You Only Look Once) ซึ่งเป็นหนึ่งในโมเดลยอดนิยมสำหรับการตรวจจับวัตถุในภาพและวิดีโอ โมเดล YOLO มีชื่อเสียงในเรื่องของความเร็วและความแม่นยำ โดยสามารถทำงานแบบเรียลไทม์ได้เป็นอย่างดี https://github.com/ultralytics/ultralytics