ผู้เขียนบทความ : 166404140047 นางสาวศศลักษณ์ มาศเสม
166404140063 นางสาวฐิติมา คงช่วย
166404140071 นางสาวปวีณา สอนหมอก
166404140084 นายเมธัส พรหมขุนทอง
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04513202 การโปรแกรมคอมพิวเตอร์ชั้นสูง 1/2567
1. ความเป็นมา
ในปัจจุบันการหาที่จอดรถสำหรับจุดท่องเที่ยวที่สถานที่ลานบริเวณเมืองเก่า ถนนนางงาม ต. บ่อยาง อ.เมือง จ. สงขลา อาจเป็นปัญหาสำหรับนักท่องเที่ยวบางส่วนเพราะในสถานที่บริเวณเมืองเก่าที่จอดรถมักจะเต็มอยู่ตลอดทำให้เกิดความไม่สะดวกที่จะไปยังแหล่งเที่ยวบริเวณเมืองเก่าจุดนั้น ทำให้จุดท่องเที่ยวอาจจะเสียรายได้จากจุดนี้ไป ทำให้ผู้ประกอบการบริเวณนั้นอาจสูญเสียรายได้
คณะผู้จัดทำจึงได้คิดระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยวนี้ขึ้นมา เพื่อให้สามารถทราบว่าขณะนี้ ที่จอดรถเต็มหรือไม่ หากไม่เต็ม มีที่จอดรถช่องไหนว่างบ้าง ซึ่งโครงการชิ้นนี้เป็นส่วนหนึ่งในรายวิชาการโปรแกรมคอมพิวเตอร์ขั้นสูง โดย อ.สันติ สถิตวรรธนะ เป็นผู้สอนและที่ปรึกษาโครงงานย่อยชิ้นนี้ ซึ่งจะช่วยพัฒนาความสามารถ พัฒนาความรู้ และเป็นนำความรู้ที่ได้ศึกษามาในรายวิชานี้มาประยุกต์เป็นโปรแกรมตรวจจับที่จอดรดสำหรับจุดท่องเที่ยวด้วยภาษา python
2. วัตถุประสงค์
2.1 เพื่อพัฒนาระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว
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 โมดูล Path
โมดูล pathlib เป็นส่วนหนึ่งของไลบรารีมาตรฐานใน Python ที่ใช้สำหรับการจัดการและทำงานกับเส้นทางไฟล์ (file paths) และไดเรกทอรี (directories) โดยมีวิธีการที่ง่ายและเป็นระเบียบเรียบร้อยในการจัดการเส้นทางไฟล์
6. การดำเนินงาน
ผังงานการทำงานของระบบ
7. วิธีการใช้งานโปรแกรม
ก่อนเริ่มต้นใช้งานโปรแกรมตรวจจับที่จอดรถ จะต้องนำเข้าชื่อข้อมูล รูปภาพ และวิดีโอ ที่ต้องการตรวจจับก่อน
7.1 Import รูปภาพเข้าโปรแกรม
7.2 จากนั้นก็ปรากฏหน้าต่างรูปที่เราต้องทำการวาดพิกัดเพื่อตรวจจับที่จอดรถ โดยคลิกเมาส์ 4 จุด ในตัวอย่างจะวาดพิกัดไว้ทั้งหมด 5 จุดด้วยกัน
7.3 หลังจากนั้นกด “Q” เพื่อสั่งให้โปรแกรมเริ่มทำงาน
7.4 โปรแกรมจะทำการประมวลผลภาพ ถ้ามีรถจอดอยู่จะเป็นกรอบสีแดง ถ้าไม่มีรถจอดอยู่จะเป็นกรอบสีเขียว
8. ผลการทดลอง
โปรแกรมสามารถตรวจจับที่จอดรถได้ เมื่อไม่มีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีเขียวและเมื่อมีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีแดง
9. เทคนิคการประยุคเพื่อเพิ่มประสิทธิภาพมากขึ้น
9.1 การลดภาระประมวลผล (Optimization Techniques)
9.1.1 ปรับขนาดภาพหรือเฟรม (Image/Frame Resizing) ลดขนาดรูปภาพหรือเฟรมวิดีโอก่อนประมวลผล เพื่อลดจำนวนพิกเซลที่ต้องประมวลผล
9.1.2 ใช้การตรวจจับแบบบางช่วง (Frame Skipping) หากวิดีโอมีจำนวนเฟรมมาก ให้ตรวจเฉพาะบางเฟรม เช่น ตรวจทุก 5 เฟรม แทนการตรวจทุกเฟรม
9.1.3 ใช้การตรวจจับเฉพาะพื้นที่สำคัญ (Region of Interest – ROI) หากรู้ว่ารถจอดในบริเวณที่จำกัด ให้ตรวจเฉพาะบริเวณนั้น เพื่อลดภาระประมวลผล
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
วิดีโอนำเสนอระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว