ผู้เขียนบทความ : 166404140047 นางสาวศศลักษณ์ มาศเสม
166404140063 นางสาวฐิติมา คงช่วย
166404140071 นางสาวปวีณา สอนหมอก
166404140084 นายเมธัส พรหมขุนทอง
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04513202 การโปรแกรมคอมพิวเตอร์ชั้นสูง 1/2567
1. ความเป็นมา
ในปัจจุบันการหาที่จอดรถสำหรับจุดท่องเที่ยวที่สถานที่ลานบริเวณเมืองเก่า ถนนนางงาม ต. บ่อยาง อ.เมือง จ. สงขลา อาจเป็นปัญหาสำหรับนักท่องเที่ยวบางส่วนเพราะในสถานที่บริเวณเมืองเก่าที่จอดรถมักจะเต็มอยู่ตลอดทำให้เกิดความไม่สะดวกที่จะไปยังแหล่งเที่ยวบริเวณเมืองเก่าจุดนั้น ทำให้จุดท่องเที่ยวอาจจะเสียรายได้จากจุดนี้ไป ทำให้ผู้ประกอบการบริเวณนั้นอาจสูญเสียรายได้
คณะผู้จัดทำจึงได้คิดระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยวนี้ขึ้นมา เพื่อให้สามารถทราบว่าขณะนี้ ที่จอดรถเต็มหรือไม่ หากไม่เต็ม มีที่จอดรถช่องไหนว่างบ้าง ซึ่งโครงการชิ้นนี้เป็นส่วนหนึ่งในรายวิชาการโปรแกรมคอมพิวเตอร์ขั้นสูง โดย อ.สันติ สถิตวรรธนะ เป็นผู้สอนและที่ปรึกษาโครงงานย่อยชิ้นนี้ ซึ่งจะช่วยพัฒนาความสามารถ พัฒนาความรู้ และเป็นนำความรู้ที่ได้ศึกษามาในรายวิชานี้มาประยุกต์เป็นโปรแกรมตรวจจับที่จอดรดสำหรับจุดท่องเที่ยวด้วยภาษา python
2. วัตถุประสงค์
2.1 เพื่อพัฒนาระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว
2.2 เพื่อศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อตรวจจับที่จอดรถ
2.3 เพื่อนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ใช้ได้จริง
3.ขอบเขต
3.1 โปรแกรมสามารถตรวจจับที่จอดรถได้
3.1.1 เมื่อไม่มีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีเขียว
3.1.2 เมื่อมีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีแดง
3.2 โปรแกรมสามารถรับเข้าข้อมูลที่เป็นวิดีโอ หรือ IPCamera ได้
3.3 โปรแกรมสามารถวาดพิกัดสีเหลี่ยมเพื่อบอกพิกัดในการตรวจจับที่จอดรถได้
3.4 สถานที่จอดรถบริเวณลานเมืองเก่า ถนนนางงาม ต. บ่อยาง อ. เมือง จ. สงขลา
4. ประโยชน์ที่คาดว่าจะได้รับ
4.1 เข้าใจการเขียนโปรแกรมภาษา python เพื่อตรวจจับที่จอดรถ
4.2 สามารถนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ใช้ได้จริง
4.3 สามารถเขียนโปรแกรมภาษา python เพื่อตรวจจับที่จอดรถได้
4.4 สามารถลดระยะเวลาในการหาที่จอดรถ
5. ความรู้ที่เกี่ยวข้อง
5.1 โมดูล OpenCV
OpenCV ย่อมาจาก Opensource Computer Vision หรือก็คือ Computor Vision ความสามารถหลักๆ ของ OpenCV ก็คือสามารถช่วยให้เราจัดการวิดีโอหรือรูปภาพ เพื่อให้เกิดการเปลี่ยนแปลงกับรูปภาพ อย่างเช่น ทำให้ภาพชัดขึ้น ทำให้เบลอ ลดสัญญาณรบกวน (noise) ในรูปภาพ จากแหล่งที่มาของรูปภาพต่างๆ ไม่ว่าจะเป็น webcam ภาพถ่าย วิดีโอ หรือกล้องวงจรปิด นอกจากการปรับปรุงภาพแล้วนั้น ยังมีการใช้เทคนิคการประมวลผลภาพ ที่ทำให้เรารู้จักกับวัตถุนั้นๆ เราอาจจะเคยได้ยินตัวอย่างมาบ้าง เช่น การแบ่งประเภท Object ว่าเป็น หมา แมว คน รถยนต์ เป็นต้น ไปจนถึงการนำไปใช้งานที่ซับซ้อนมากขึ้น เช่น การจดจำใบหน้าของคน
5.2 โมดูล Numpy
NumPy หรือ Numerical Python เป็นไลบรารีที่ถูกพัฒนาขึ้นมาเพื่องานทางด้านคำนวณวิทยาศาสตร์ เป็นหนึ่งในไลบรารีที่ไม่อาจขาดไปได้สำหรับการทำงานเกี่ยวกับการคำนวณข้อมูลขนาดใหญ่ การวิเคราะห์ข้อมูล และงานทางวิทยาศาสตร์โดยรวม ความสามารถหลักของ NumPy คือการจัดการอาร์เรย์หลายมิติและเมทริกซ์ ซึ่งให้ประสิทธิภาพและความรวดเร็วที่สูงกว่าการดำเนินการทางคณิตศาสตร์ของโครงสร้างข้อมูลพื้นฐานทั่วไปในภาษา Python รวมถึงการจัดการกับออปเปอเรชั่นฟังก์ชั่นทางคณิตศาสตร์ขั้นสูงอย่าง Fourier Transform หรือ Linear Algebra Operations ก็เป็นไปอย่างราบรื่นด้วย NumPy
5.3 โมดูล YOLO
เป็นหนึ่งในโมเดลการตรวจจับวัตถุที่มีความแม่นยำและรวดเร็วที่สุด โมเดลนี้มีความสามารถในการประมวลผลภาพในลักษณะ real-time และมีการตรวจจับวัตถุภายในภาพเพียงครั้งเดียว (single pass) ซึ่งทำให้มีความเร็วในการประมวลผลสูง YOLO ใช้แนวคิดว่าเราสามารถแบ่งภาพออกเป็นกริด (grid) และทำนาย bbox (bounding boxes) และ class ของวัตถุในช่องกริดนั้น ๆ ได้ในครั้งเดียว แทนที่จะทำการสแกนภาพซ้ำหลาย ๆ ครั้งเหมือนโมเดลการตรวจจับวัตถุอื่น ๆ YOLO จะทำการคาดการณ์ที่สมบูรณ์ภายในโครงข่ายประสาทเทียมที่ถูกฝึกมาแล้ว จึงทำให้ YOLO เหมาะสำหรับการใช้งานที่ต้องการความเร็วสูง เช่น การสตรีมภาพในการตรวจจับวัตถุ
5.4 โมดูล matplotlib.path
โมดูล matplotlib.path
เป็นส่วนหนึ่งของไลบรารี Matplotlib ใน Python ซึ่งใช้สำหรับการจัดการและสร้างเส้นทาง (path) ในการวาดรูปแบบเวกเตอร์ โดยมีคลาสหลักคือ Path
ซึ่งช่วยให้สามารถสร้างและจัดการเส้นทางแบบต่างๆ ที่ใช้ในการวาดกราฟิก เช่น วงกลม สี่เหลี่ยม หรือเส้นโค้ง Path
มีประโยชน์อย่างมากในการสร้างกราฟิกที่ซับซ้อนและการตัดสินใจเกี่ยวกับเส้นทางที่วาดในพื้นที่ 2 มิติ โดยทำงานร่วมกับฟังก์ชันอื่นๆ ของ Matplotlib ได้ ตัวอย่างของการใช้โมดูลนี้ได้แก่:
- สร้างเส้นทางด้วยจุดหลายๆ จุด : คุณสามารถกำหนดจุดที่เป็นเวกเตอร์ของเส้นทางและใช้เพื่อสร้างรูปร่างต่างๆ
- การตรวจสอบจุดในพื้นที่ : ใช้สำหรับตรวจสอบว่าจุดหนึ่งอยู่ภายในเส้นทางหรือไม่
- การกำหนดลักษณะของเส้นทาง : เช่น การเติมสี การวาดเส้นรอบ หรือการตัดเส้นทางบางส่วน
6. การดำเนินงาน
ผังงานการทำงานของระบบ
การทำงานของ flowchart เมื่อเริ่มการทำงานจะทำการ import รูปเข้าโปรแกรม หลังจากนั้นทำการคลิกเมาส์ตามมุมภาพ 4 จุด ที่เราทำการ import รูปเข้ามา เมื่อคลิกเมาส์ครบ 4 จุด จะได้รูปสี่เหลี่ยมสีนำเงินตามจุดที่คลิกเมาส์ หลังจากนั้น กด Q ที่แป้นพิมพ์ โปรแกรมทำการประมวลผล ถ้ามีรถจอดอยู่กรอบสี่เหลี่ยมจะเป็นสีแดง ถ้าไม่มีรถจอดอยู่กรอบสี่เหลี่ยมจะเป็นสีเขียว
7. วิธีการใช้งานโปรแกรม
ก่อนเริ่มต้นใช้งานโปรแกรมตรวจจับที่จอดรถ จะต้องนำเข้าชื่อข้อมูล รูปภาพ และวิดีโอ ที่ต้องการตรวจจับก่อน ดังนี้
7.1 python main.py เริ่มการเรียกใช้โปรแกรม Python โดยรันไฟล์ที่เราต้้งชื่อ
7.2 นำรูปภาพหรือวีดีโอ ใส่ในโฟลเดอร์เดียวกับโปรแกรม
7.3 src = ‘455269271_484257267734500_8508042144817200538_n.jpg’ // กำหนดตำแหน่งไฟล์ภาพ
7.4 จากนั้นก็ปรากฏหน้าต่างรูปที่เราต้องทำการวาดพิกัดเพื่อตรวจจับที่จอดรถ โดยคลิกเมาส์ 4 จุด ในตัวอย่างจะวาดพิกัดไว้ทั้งหมด 5 จุดด้วยกัน
7.5 หลังจากนั้นกด “Q” เพื่อสั่งให้โปรแกรมเริ่มทำงาน
7.6 โปรแกรมจะทำการประมวลผลภาพ ถ้ามีรถจอดอยู่จะเป็นกรอบสีแดง ถ้าไม่มีรถจอดอยู่จะเป็นกรอบสีเขียว
7.7 กด Esc เพิ่มจบการทำงานของโปรแกรม
8. ผลการทดลอง
โปรแกรมสามารถตรวจจับที่จอดรถได้ เมื่อไม่มีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีเขียวและเมื่อมีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีแดง
9. เทคนิคการประยุคเพื่อเพิ่มประสิทธิภาพมากขึ้น
9.1 การลดภาระประมวลผล (Optimization Techniques)
9.1.1 ปรับขนาดภาพหรือเฟรม (Image/Frame Resizing) การปรับขนาดภาพหรือเฟรมก่อนประมวลผลช่วยลดจำนวนพิกเซล ลดเวลาและทรัพยากรที่ใช้ในการประมวลผล โดยการลดขนาดอย่างเหมาะสมจะช่วยคงคุณภาพและประสิทธิภาพ เช่น การใช้เทคนิค Bilinear หรือ Bicubic interpolation เพื่อให้ภาพคมชัด อีกทั้งยังลดการใช้หน่วยความจำ เหมาะสำหรับระบบที่มีข้อจำกัดด้านทรัพยากร
9.1.2 ใช้การตรวจจับแบบบางช่วง (Frame Skipping) เป็นเทคนิคที่ช่วยลดภาระการประมวลผลในวิดีโอ โดยเลือกตรวจเฉพาะบางเฟรมแทนที่จะตรวจทุกเฟรม เช่น การตรวจทุก 5 เฟรมแทนทุกเฟรม วิธีนี้ช่วยประหยัดทรัพยากรและลดเวลาการประมวลผล โดยยังคงได้ข้อมูลสำคัญที่เพียงพอสำหรับการวิเคราะห์ ทำให้เหมาะสำหรับการใช้งานกับวิดีโอที่มีจำนวนเฟรมสูงหรือระบบที่มีข้อจำกัดด้านพลังงานและการประมวลผล
9.1.3 ใช้การตรวจจับเฉพาะพื้นที่สำคัญ (Region of Interest – ROI) หากรู้ว่ารถจอดในบริเวณที่จำกัด ให้ตรวจเฉพาะบริเวณนั้น เพื่อลดภาระประมวลผล เป็นเทคนิคที่เลือกประมวลผลเฉพาะพื้นที่ที่เกี่ยวข้องในภาพหรือวิดีโอ เช่น การตรวจจับเฉพาะบริเวณที่รถจอด ซึ่งช่วยลดภาระการประมวลผลและเพิ่มประสิทธิภาพ โดยไม่ต้องตรวจทุกพิกเซลในภาพทั้งหมด วิธีนี้ช่วยประหยัดทรัพยากรและเวลา ทำให้เหมาะกับการใช้งานที่มีพื้นที่สนใจเฉพาะเจาะจง เช่น การตรวจสอบที่จอดรถ การติดตามวัตถุในพื้นที่ที่กำหนด
9.2 ควรเพิ่มเทคนิคประยุกต์ในการนับรถ เพื่อเพิ่มความแม่นยำ
10. สรุปผลและข้อเสนอแนะ
ผลการทดลองพบว่า การประมวลภาพเพื่อจับวัตถุที่เป็นรถยนต์ อาจมีความคลาดเคลื่อนได้ขึ้นอยูกับมุมกล้องและเส้นที่วาด เพราะหากมุมกล้องไม่ดีจะทำให้รถจากอีกช่องจอดหนึ่งไปเข้าในกรอบของอีกช่องหนึ่ง ทำให้เกิดข้อผิดพลาด และหากวาดเส้นมีการวาดเส้นที่ใหญ่เกินไป หรือเล็กเกินไปก็จะทำให้เกิดข้อผิดพลาดได้เช่นกัน
ข้อเสนอแนะ ให้ปรับปรุงการกำหนดกรอบและเลือกมุมกล้องที่เหมาะสมเพื่อเพิ่มความแม่นยำในการตรวจจับ
11. ข้อมูลอ้างอิง
11.1 ระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว (parking camera for tourist spot) https://dp.rmutsv.ac.th/?p=1420&fbclid=IwY2xjawF7DFRleHRuA2FlbQIxMAABHc40tPRJrSrJbiNcUxZQkUSz02EF5XSYXLbSwKEb16hQvdHhbeOELn515Q_aem_LlbnupwWiXtdabX_EKQJcg
11.2 Parking Space Counter using OpenCV Python | Computer Vision https://www.youtube.com/watch?v=caKnQlCMIYI&t=1672s
11.3 พื้นฐานของ OpenCV – OpenCV คืออะไร https://expert-programming-tutor.com/tutorial/article/KE003551_Basics_of_OpenCV_-_What_is_OpenCV.php
11.4 YOLOv8: คู่มือฉบับสมบูรณ์ [อัปเดตปี 2025] https://viso.ai/deep-learning/yolov8-guide/
วิดีโอนำเสนอระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว