ระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว (parking camera for tourist spot)

ผู้เขียนบทความ : 165404140042 นายศิวกร อนุชาญ COE#15

คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์

วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ชั้นสูง 1/2566

1. ความเป็นมา

      ในปัจจุบันการหาที่จอดรถสำหรับจุดท่องเที่ยวนั้นอาจเป็นปัญหาสำนักท่องเที่ยวบางส่วนเพราะในบางสถานที่นั้นที่จอดรถมักจะเต็มอยู่ตลอดทำให้เกิดความไม่สะดวกที่จะไปยังจุดนั้น ทำให้จุดท่องเที่ยวอาจจะเสียรายได้จากจุดนี้ไปผู้ประกอบการอาจสูญเสียรายได้

        ผู้จัดทำจึงได้คิดโปรแกรมนี้ขึ้นมา เพื่อให้สามารถทราบว่าขณะนี้ที่จอดรถเต็มหรือไม่ หากไม่เต็ม มีที่จอดรถช่องไหนว่างบ้าง ซึ่งโครงการชิ้นนี้เป็นส่วนหนึ่งในรายวิชา การโปรแกรมคอมพิวเตอร์ขั้นสูง โดย อ.สันติ สถิตวรรธนะ เป็นผู้สอนและที่ปรึกษาโครงงานย่อยชิ้นนี้ ซึ่งจะช่วยพัฒนาความสามารถ พัฒนาความรู้ และเป็นนำความรู้ที่ได้ศึกษามาในรายวิชานี้มาประยุกต์เป็นโปรแกรมตรวจจับที่จอดรด ด้วยภาษา python

2. วัตถุประสงค์

        2.1 เพื่อศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อตรวจจับที่จอดรถ
        2.2 เพื่อนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ได้จริง
        2.3 เพื่อนำการเขียนโปรแกรมภาษา python ไปใช้ตรวจจับที่จอดรถ
        2.4 เพื่อพัฒนานวัตกรรมความสะดวกสบายในการหาที่จอดรถ โดยใช้ image processing 

3.ขอบเขต

3.1 โปรแกรมสามารถตรวจจับที่จอดรถได้
3.1.1 เมื่อไม่มีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีน้ำเงิน
3.1.2 เมื่อมีรถจอดอยู่จะเป็นกรอบสี่เหลี่ยมสีแดง
3.2 โปรแกรมสามารถรับเข้าข้อมูลที่เป็นภาพและวิดีโอได้
3.3 โปรแกรมสามารถวาดพิกัดสีเหลี่ยมเพื่อบอกพิกัดในการตรวจจับที่จอดรถได้

4. ประโยชน์ที่คาดว่าจะได้รับ

4.1 ได้ศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อตรวจจับที่จอดรถ
4.2 สามารถนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ใช้ได้จริง
4.3 สามารถเขียนโปรแกรมภาษา python เพื่อตรวจจับที่จอดรถได้
4.4 ผู้ใช้รู้ว่ามีประโยชน์ต่อชีวิตประจำวันจริง
4.5 สร้างความมั่นใจและความปลอดภัยในชีวิตประจำวัน
4.6 มีความเป็นไปได้ที่จะนำระบบเข้าสู่เชิงพานิชย์

5.ความรู้ที่เกี่ยวข้อง

5.1 โมดูล argparse
เป็นโมดูลใน Python ที่ช่วยในการสร้างสคริปต์คำสั่ง (command-line interfaces) ให้กับโปรแกรมของคุณอย่างง่ายและมีประสิทธิภาพ โดยที่ผู้ใช้สามารถใช้คำสั่งของโปรแกรมได้ผ่านหน้าสายคำสั่ง (command line) โดยไม่ต้องแก้ไขโค้ดของโปรแกรม โมดูล argparse ช่วยให้คุณสามารถรับข้อมูลจากผู้ใช้ผ่าน command line arguments และจัดการกับข้อมูลเหล่านั้นได้อย่างสะดวกและเรียบง่าย

5.2โมดูล yaml

เป็นโมดูลในภาษา Python ที่ใช้สำหรับการทำงานกับข้อมูลในรูปแบบ YAML (YAML Ain’t Markup Language) ซึ่งเป็นภาษามาสเตอร์ในรูปแบบของข้อมูลโครงสร้าง (structured data) ที่สามารถอ่านและเขียนได้อย่างสะดวก โดยมักใช้ในการกำหนดค่าต่าง ๆ ในการกำหนดค่าคอนฟิกเริ่มต้น, การเก็บข้อมูลที่ไม่ซับซ้อนเป็นแฟ้มข้อมูล, และในหลายแอปพลิเคชันอื่น ๆ ที่ต้องการจัดเก็บข้อมูลโครงสร้างแบบต่าง ๆ

YAML เป็นรูปแบบข้อมูลที่มีลักษณะคล้ายกับ JSON โดยสามารถใช้เพื่อระบุโครงสร้างข้อมูลด้วยข้อความแบบโครงสร้าง (structured text) โดยไม่ต้องใช้เครื่องหมายปีกกา (curly braces) หรือเครื่องหมายคอลอน (colon) แต่ใช้การเว้นวรรค (indentation) เพื่อระบุโครงสร้างข้อมูลและความสัมพันธ์ระหว่างข้อมูล

5.3 โมดูล Logging

เป็นโมดูลใน Python ที่ใช้สำหรับการจัดการและบันทึกข้อมูลการเหตุการณ์ (logs) ในแอปพลิเคชัน โดยมีวัตถุหลักคือ Logger ซึ่งช่วยให้คุณสามารถบันทึกข้อมูลเหตุการณ์ที่เกิดขึ้นในโปรแกรมของคุณ เช่น ข้อผิดพลาด (errors), ข้อมูลการดำเนินการ (informational messages), และข้อมูลการตรวจสอบ (debugging information) โดยอัตโนมัติ และคุณสามารถกำหนดระดับการบันทึก (log levels) เพื่อควบคุมความสำคัญของข้อมูลที่ถูกบันทึกได้ตามความเหมาะสม

5.3.1 Handler

เป็นคลาสที่ใช้ในการกำหนดวิธีการจัดการกับข้อมูลการเหตุการณ์ที่ถูกบันทึกโดย Logger โดยจะกำหนดว่าข้อมูลการเหตุการณ์จะถูกส่งไปที่ที่ไหนหรือจะทำอะไรกับข้อมูลนั้น เช่น บันทึกลงไฟล์ ส่งไปยังคอนโซล ส่งไปยังระบบจัดการข้อมูลการเหตุการณ์เพิ่มเติม หรือทำกิจกรรมอื่น ๆ ตามความต้องการ การเลือกใช้ Handler ขึ้นอยู่กับความต้องการของโปรแกรม และลักษณะของข้อมูลการเหตุการณ์ที่ต้องการจะบันทึกหรือจัดการ สามารถใช้หลาย Handler ใน Logger เดียวกันหากต้องการส่งข้อมูลการเหตุการณ์ไปยังสถานที่หลาย ๆ แห่งพร้อมกัน เพื่อบันทึกหรือจัดการข้อมูลการเหตุการณ์ในรูปแบบที่หลากหลายตามความต้องการของผู้ใช้

5.3.2 Formatter

หากต้องการใส่วันที่ หรือต้องการจัดให้มีความอ่านง่าย เดิมที อาจจะต้องเขียน Function เอง ให้มันจัดมาให้ แล้วยัดใส่ Logger ได้เลย แต่แน่นอนว่า เขาทำมาให้เราแล้วคือ Formatter ซึ่งมันอยู่ใน Handler นั่นแปลว่า ถ้าเรามี Handler สำหรับการแสดงออกหน้าจอ กับ ออกเป็นไฟล์ เราสามารถใช้ Formatter แยกกันได้ 

5.4 โมดูล OpenCV

opencv เป็นซอฟต์แวร์โอเพนซอร์ซที่เอาไว้ใช้จัดการรูปภาพ เริ่มพัฒนาขึ้นโดยบริษัทอินเทล (Intel) ในปี 1999 คำว่า opencv ย่อมาจาก open source computer vision ขอบเขตการใช้งานของ opencv ค่อนข้างกว้าง มีความสามารถหลากหลายหลากหลาย นอกจากรูปภาพธรรมดาแล้วยังใช้จัดการกับวีดีโอภาพเคลื่อนไหว อัลกอริธึมที่ใช้มีตั้งแต่แบบง่ายๆไปจนถึงระดับสูงซึ่งรวมถึงการใช้เทคนิคการเรียนรู้ของเครื่อง ด้วย opencv เขียนขึ้นจากภาษาซี แต่สามารถเรียกใช้ผ่านภาษาอื่นเช่น ไพธอน, จาวา, แมตแล็บ ได้ด้วย ใช้ได้ในระบบปฏิการหลากหลายทั้ง Windows, Linux, OS X, Android, iOS
opencv-python คือมอดูลในภาษาไพธอน ซึ่งใช้สำหรับเขียนโปรแกรมใช้งาน opencv ผ่านภาษาไพธอนได้ ตราสัญลักษณ์ของ opencv เป็นวงล้อสีแดงเขียวน้ำเงิน โดยด้านบนสีแดงเป็นสัญลักษณ์ของโอเพนซอร์ซ ส่วนสีเขียวทำเป็นตัว c สีน้ำเงินคล้ายตัว v

5.5 โมดูล NumPy
เป็นโมดูลส่วนเสริมของภาษา Python สำหรับใช้คำนวณทางคณิตศาสตร์และวิทยาศาสตร์ โดยมีคำสั่งพร้อมใช้งานจำนวนมากมาย และโมดูลนี้สามารถสร้างข้อมูลชนิดอาร์เรย์ (ที่ภาษา Python ไม่มี) และคำนวณอาร์เรย์ของตัวเลข สตริงและวัตถุได้ครับโมดูล NumPy รองรับทั้ง Python 2 , Python 3 และใช้ License: BSD
5.6 Hough Transform
เป็นเทคนิคยอดนิยมการแยกคุณลักษณะของเส้น สำหรับใช้ในการตรวจจับเส้น Hough Transform เป็นเทคนิคในการวิเคราะห์ภาพที่ใช้ในการตรวจหารูปร่าง (shapes) และวัตถุที่มีรูปร่างในภาพ โดยเฉพาะแนวทแยง (lines) และวง (circles) ในภาพ วิธีการนี้ถูกคิดค้นโดย Paul Hough ในปี 1962 และมีการพัฒนาและปรับปรุงต่อมาในหลายรูปแบบ

6.การดำเนินงาน

ผังการทำงานของระบบ

วิธีการใช้งานโปรแกรม

ก่อนเริ่มต้นใช้งานโปรแกรมตรวจจับที่จอดรถ จะต้องนำเข้าชื่อข้อมูล รูปภาพ และวิดีโอ ที่ต้องการตรวจจับก่อน ดังตัวอย่างนี้

จากนั้นก็ปรากฎหน้าต่างรูปที่เราต้องทำการวาดพิกัดเพื่อตรวจจับที่จอดรถ

ทำการวาดพิกัดเป็นพื้นที่สี่เหลี่ยม ตามที่ผู้ใช้ต้องการ ในตัวอย่างจะวาดพิกัดไว้ทั้งหมด 5 ที่ด้วยกัน

หลังจากนั้นกด “Q” เพื่อสั่งให้โปรแกรมเริ่มทำงาน ในรูปจะเห็นว่าทั้ง 2 พื้นที่ยังเป็นสีเขียวเนื่องจากยังไม่มีรถมาจอดอยู่ และอาจมีบางพื้นที่มีการทำงานผิดพลาดอยู่บ้างขึ้นอยู่กับมุมกล้องและการเคลื่อนไหวของภาพ

จะเห็นได้ว่าหากมีรถเข้ามาจอดจะแสดงสีแดงเพื่อให้ความหมายว่า พื้นที่นี้ไม่ว่าง

การทดลอง

การทดลองที่ 1 ทดลองนำระบบตรวจจับที่จอดรถ ให้ทำงานโดยรับเข้าภาพและวิดีโอที่ถ่ายจากมุมด้านบน โดยทำการทดลองทั้งหมด 20 ครั้ง โดยตรวจจับพื้นที่ทั้งหมด 6 จุด

ผลการทดลอง

สรุปผลและข้อเสนอแนะ

1.สรุปผล จากการทดลองผลปรากฎว่าการใช้งานโปรมีความขัดข้องสูงหากภาพวิดีโอที่ใช้จับภาะทดลองมีการสั่นหรือการขยับเพียงเล็กน้อยก็สามารถทำให้การทำงานผิดเพี้ยนไปจากความต้องการได้ แต่โดยรวมในมุมกล้องที่ดีก็สามารถทำให้โปรแกรมทำงานได้อย่างมีประสิทธิภาพ

2.ข้อเสนอแนะ
2.1 ประยุกต์และทดลองเพื่อตรวจจับบุคคลหรือวัตถุอื่น ๆ ที่น่าสนใจ
2.2 ควรจัดหามุมกล้องที่ดีเพื่อประสิทธิที่สูงขึ้นอย่างมาก

8.ข้อมูลอ้างอิง

8.1 รหัสต้นฉบับ
orgarose.(2561). Parking Space Detection in OpenCV. สืบค้นเมื่อ 30 มกราคม 2564,
จาก https://olgarose.github.io/ParkingLot/
8.2 opencv
opencv-python เบื้องต้น บทที่ ๑: บทนำ
Hough Line Transform
OpenCV: Image Filtering
Canny
How to detect lines in OpenCV?
High-level GUI
Mouse as a Paint-Brush
open cv พื้นฐาน
เริ่มต้นทำวิดีโอด้วย OpenCV กับ Python
ขียนโปรแกรม Python รับภาพจากกล้องด้วย OpenCV
VideoCapture::get
Perspective Warping คืออะไร? | OpenCV และ Python
Python cv2.EVENT_LBUTTONDOWN Examples
opencv-python เบื้องต้น บทที่ ๕: การเติมรูปร่างต่างๆลงไปในภาพ
Learning the OpenCV and NumPy Image Coordinate Systems
opencv-python เบื้องต้น บทที่ ๑๓: การหาเส้นเค้าโครง
opencv-python เบื้องต้น บทที่ ๑๕: การวิเคราะห์องค์ประกอบของเส้นเค้าโครง
ฟังก์ชัน Drawing ใน OpenCV กับ Python
Drawing Functions
Flags for video I/O
Save Video from Opencv
8.3 Python
ทำความรู้จักกับภาษา python (9) : ฟังก์ชันการแปลงชนิดข้อมูลใน python
Input/output with files
python if name == main คืออะไร ?
การใช้งาน range ใน Python
List methods
Lists ในภาษา Python
รวม syntax พื้นฐานของภาษา Python ฉบับรวบรัด
คำสั่ง enumerate ใน Python
8.4 PyYAML
PyYAML yaml.load(input) Deprecation
ทำความรู้จัก YAML ไฟล์ นามสกุล .yml กับ Symfony Framework
PyYAML Documentation
ใช้รูปแบบข้อมูล YAML ใน Python
8.5 Logging
Log Level สำคัญไฉน
logging — Logging facility for Python
ฮาวทู Logging ไลค์อะโปร ใน Python
How To Use Logging in Python 3
8.7 Numpy
จับภาพวิดีโอจากกล้องด้วย Python
พื้นฐานการใช้ NumPy ใน Python 3

วีดีโอการทำงานของระบบตรวจจับที่จอดรถสำหรับจุดท่องเที่ยว

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *