(License plate detection system for cars entering Rajamangala University of Technology Srivijaya)
ผู้เขียนบทความ 163404140013 นายคุณากร แกล้วกล้า
163404140053 นายธีรภัทร์ โครธาสุวรรรณ
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566
1)ความเป็นมา
เนื่องจากเกิดปัญหารถยนต์และรถมอเตอร์ไซค์หายในสถานที่ราชการต่างๆ โดยไม่ทราบเวลาแน่นอนที่รถหายออกไปจากสถานที่ราชการ ทำให้เกิดความเสียหายเป็นจำนวนมาก กระผมจึงได้ตระหนักถึงปัญหาดังกล่าวจึงได้คิดแนวทางแก้ไขด้วยการทำระบบตรวจจับป้ายทะเบียนรถเข้า-ออกที่ที่กำหนดไว้เพื่อเพิ่มประสิทธิภาพในการตรวจสอบรถที่เข้า-ออกสถานที่ดังกล่าว กระผมจึงได้นำระบบมาใช้กับมหาวิทยาลัยเทคโนโลยีราชมงคลศรีวิชัยเพื่อเป็นตัวอย่างในการนำไปใช้จริงในโอกาสต่อไป
2)วัตถุประสงค์
2.1)จัดทำระบบตรวจสอบป้ายทะเบียนขาเข้า
2.2)จัดทำระบบตรวจสอบป้ายทะเบียนขาออก
3)ขอบเขต
3.1)โปรแกรมตรวจหมายเลขทะเบียนรถ
3.1.1)สามารถตรวจสอบป้ายทะเบียนรถยนต์และรถมอเตอร์ไซค์ได้
3.1.2)สามารถเชื่อมต่อกับอุปกรณ์ตรวจจับวัตถุ และสั่งให้ถ่ายภาพป้ายทะเบียนรถ เพื่ออุปกรณ์ตรวจจับวัตถุทำงานได้
3.1.3)สามารถแสดงป้ายทะเบียนที่ตรวจสอบได้
3.1.4)สามารถระบุเวลาเข้าและออกของรถได้
4)ผลที่คาดว่าจะได้รับ
4.1)มีการนำรูปแบบของระบบไปพัฒนาต่อเพื่อใช้งานได้ดีขึ้นในอนาคต
4.2)ได้ใช้ความรู้ในการประมวลผลภาพ ระบบฐานข้อมูลและการเขียนโปรแกรมประยุกต์ไปใช้งานได้จริง
4.3)ได้ระบบตรวจสอบป้ายทะเบียนรถเข้า-ออกมหาวิทยาลัย
5)ทฤษฎีและงานอื่นที่เกี่ยวข้อง
5.1)ระบบกล้องอ่านป้ายทะเบียนรถ โปรแกรมตรวจจับป้ายทะเบียนรถ
ระบบกล้องอ่านป้ายทะเบียนรถยนต์/มอเตอร์ไซต์ และโปรแกรมตรวจจับป้ายทะเบียนรถ PPA License Plate ผู้นำความถูกต้องแม่นยำระดับสูงสุด ถึง 99% ผู้ใช้งานกว่า 1000 กล้อง ตำรวจใช้ทั่วประเทศ รองรับป้ายพิเศษ รับผิดชอบสินค้าตรงสเปค
PPA License Plate เป็นระบบอ่านป้ายทะเบียนรถ และโปรแกรมตรวจจับป้ายทะเบียนรถ บริษัทแรกของไทย ตั้งแต่ปี 2006 จุดเด่นคือความแม่นยำระดับสูงสุด ถึง 99% มีความสามารถหลายหลาย รองรับป้ายแดง ป้ายเขียว ป้ายรถจักรยานยนต์ รถทูต ทหาร ตำรวจ รถประเทศ AEC (ลาว พม่า กัมพูชา มาเลเซีย สิงคโปร์ รวมทั้งชื่อเมือง) ยี่ห้อรถ สีรถ สีป้าย ฯลฯ เปิดไม้กั้นจากป้ายทะเบียนโดยไม่ต้องจอดรถภายใน 1 วินาที และแจ้งรถ blacklist ได้
นอกจากนั้น ด้วยความเข้าใจเทคโนโลยีหลากหลายถึงแก่นแท้ ทั้ง Software และ Hardware รวมทั้ง AI, Big Data, ALPR, OCR, Image Processing, Cloud, IoT และความสามารถในการคิดค้นนวัตกรรมใหม่ บวกกับความทุ่มเทพัฒนาอย่างต่อเนื่องกว่า 10 ปี เราได้หลอมรวมแก่นของเทคโนโลยีเหล่านี้ไว้ใน PPA License Plate อย่างลงตัวจนเกิดประสิทธิภาพสูงสุด ท่านจึงมั่นใจในการรักษาความปลอดภัยด้วยระบบอ่านป้ายทะเบียนรถ PPA License Plate ได้อย่างแท้จริง
5.2)โปรแกรมตรวจจับป้ายทะเบียนรถยนต์
โปรแกรมตรวจจับป้ายทะเบียนรถยนต์คือ การนำเทคโนโลยีด้าน Image processing มาช่วยในการควบคุมการทำงานของระบบโดยนำข้อมูลภาพป้ายทะเบียนของรถยนต์ ที่ได้จากกล้องวงจรปิดประเภท LPR Camera (กล้องสำหรับจับภาพป้ายทะเบียนโดยเฉพาะ) มาทำการวิเคราะห์ตรวจหาป้ายทะเบียนและถอดข้อมูลให้มาอยู่ในรูปของ ตัวเลข หมวดอักษร จังหวัด ยี่ห้อรถยนต์ และสีของรถยนต์ เพื่อให้สะดวกต่อการนำข้อมูลที่ได้ไปใช้ประโยชน์ในด้านต่างๆ ที่ต้องการได้ง่ายขึ้น เช่น นำไปใช้กับงานจราจร งานตรวจสอบด้านความมั่นคง หรือประยุกต์ใช้กับงานด้านบริหารลานจอดรถ อาคาร คอนโด ห้างร้าน อื่นๆ
5.3)โมดูล OpenCV
opencv เป็นซอฟต์แวร์โอเพนซอร์ซที่เอาไว้ใช้จัดการรูปภาพ เริ่มพัฒนาขึ้นโดยบริษัทอินเทล (Intel) ในปี 1999 คำว่า opencv ย่อมาจาก open source computer vision ขอบเขตการใช้งานของ opencv ค่อนข้างกว้าง มีความสามารถหลากหลายหลากหลาย นอกจากรูปภาพธรรมดาแล้วยังใช้จัดการกับวีดีโอภาพเคลื่อนไหว อัลกอริธึมที่ใช้มีตั้งแต่แบบง่ายๆไปจนถึงระดับสูงซึ่งรวมถึงการใช้เทคนิคการเรียนรู้ของเครื่อง ด้วย opencv เขียนขึ้นจากภาษาซี แต่สามารถเรียกใช้ผ่านภาษาอื่นเช่น ไพธอน, จาวา, แมตแล็บ ได้ด้วย ใช้ได้ในระบบปฏิการหลากหลายทั้ง Windows, Linux, OS X, Android, iOS
opencv-python คือมอดูลในภาษาไพธอน ซึ่งใช้สำหรับเขียนโปรแกรมใช้งาน opencv ผ่านภาษาไพธอนได้ ตราสัญลักษณ์ของ opencv เป็นวงล้อสีแดงเขียวน้ำเงิน โดยด้านบนสีแดงเป็นสัญลักษณ์ของโอเพนซอร์ซ ส่วนสีเขียวทำเป็นตัว c สีน้ำเงินคล้ายตัว v
5.4) yolo object detection
หลักการของมันคือ ถ้ามีรูปหมาน้อย, จักรยาน และรถบรรทุกอยู่ด้านหลังแบบนี้ มันก็จะพยายาม rectangle object เหล่านั้นไว้ (โดยหาจุดกึ่งกลางของแต่ละ object แล้วค่อยครอบ box เอาไว้) และบอกออกมาว่าสิ่งนั้นคืออะไร โดยมี model พื้นฐานอยู่แล้วประมาณ 80 classes ที่ถูกเทรนเอาไว้ และสามารถบอกได้ด้วยว่าความน่าจะเป็นมีเท่าไหร่ จาก model ที่มี
ความโดดเด่นของ YOLO คือ สามารถ detect แม้กระทั่งวัตถุที่มันซ้อนกันได้ด้วย โดยมีโครงสร้างที่ค่อนข้างซับซ้อนของ grid ในแต่ละชั้นที่เล็กลงเรื่อยๆในแต่ละ Layers
5.5) Tesseract หรือ OCR
Tesseract เป็นซอฟต์แวร์ที่ช่วยในการแปลงข้อความที่อยู่บนรูปภาพที่มนุษย์เข้าใจ ออกมาเป็นข้อความที่คอมพิวเตอร์เข้าใจ หรื่อที่เรียกว่า OCR การติดตั้งและการใช้งานนั้นสามารถทำได้ง่ายตามข้อมูลอ้างอิงด้านล่าง
การเปรียบเทียบการใช้โปรแกรม Tesseract กับระบบอื่น
OUTPUT ที่ได้จากการใช้โปรแกรม Tesseract ซึ่งการใช้ Tesseract นั้นจะต้องมีการปรับความละเอียดของภาพให้ละเอียดที่สุดเท่าที่จะทำได้ OUTPUT ที่ออกมาจะมีความถูกต้องเป็นอย่างมาก กล่าวได้คือ ยิ่งรูปภาพมีความคมชัดก็จะมีความถูกต้องมากตามไปด้วย
5.6) image processing
image processing นั้นเป็นการจักการเกี่ยวกับรูปภาพ เกี่ยวกับการนำรูปภาพที่ที่มนุษย์เห็นด้วยตานำไปวิเคราะห์ประมวลผลภาพให้เป็นรูปแบบดิจิทัลด้วยคอมพิวเตอร์เพื่อที่จะให้ได้ผลลัพธ์ตามความต้องการของผู้ใช้
โค้ด
import cv2
import os
import pytesseract
import time
# สร้างไดเรกทอรีเพื่อบันทึกภาพที่ตรวจจับได้
output_directory = 'license_plate_images'
if not os.path.exists(output_directory):
os.makedirs(output_directory)
# ตั้งค่าตำแหน่งของ Tesseract OCR โปรแกรม
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # เปลี่ยนตำแหน่งตามที่คุณติดตั้ง
# เริ่มการใช้งานกล้อง (0 หมายถึงกล้องในเครื่อง)
cap = cv2.VideoCapture(0)
# โหลด Haar Cascade Classifier สำหรับตรวจจับป้ายทะเบียน
plate_cascade = cv2.CascadeClassifier('haarcascade_russian_plate_number.xml')
count = 0 # ใช้นับจำนวนครั้งที่ตรวจจับ
while count < 2:
ret, frame = cap.read()
if not ret:
break
# แปลงภาพเป็นภาพสีเทา
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ตรวจจับป้ายทะเบียน
plates = plate_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(40, 60))
# วาดกรอบรอบป้ายทะเบียนและบันทึกภาพ
for (x, y, w, h) in plates:
cv2.rectangle(frame, (x, y-60), (x + w + 40 , y + h), (0, 255, 0), 2)
plate = frame[y-60:y+h, x:x+w+40]
# ใช้ Tesseract OCR ในการอ่านตัวอักษรจากภาพ
text = pytesseract.image_to_string(frame, lang='tha') # 'eng' หมายถึงภาษาอังกฤษ
# แสดงข้อความที่อ่านได้
print(f"ข้อความที่อ่านได้จากป้ายทะเบียน :", text)
time.sleep(1)
# บันทึกภาพป้ายทะเบียน
if text and count < 2:
file_name = os.path.join(output_directory, f'plate_{len(os.listdir(output_directory)) + 1}.jpg')
cv2.imwrite(file_name, plate)
# แสดงภาพที่ถูกแสดงผล
cv2.imshow('License Plate Detection', frame)
# ป้องกันการปิดหน้าต่างกล้องด้วยการกด ESC
if cv2.waitKey(1) == 27:
break
# ปิดกล้อง
cap.release()
cv2.destroyAllWindows()
6) ผลการดำเนินงาน
ผังการทำงานของระบบ
7) สรุปผลและข้อเสนอแนะ
สรุป
การทำงานของโปรแกรมมีความถูกต้องต่ำ เนื่องจากเป็นโปรแกรมที่ไม่ได้ผ่านการจดจำข้อมูลที่มากนัก จึงทำให้การประมวลผลมีความผิดพลาดอยู่พอสมควร
ข้อเสนอแนะ
โปรแกรมนี้ยังสามารถพัฒนาต่อได้ ไม่ว่าจะเป็นเรื่องความถูกต้องในการแสดงผล และรูปแบบของการแสดงผล
8) ข้อมูลอ้างอิง
8.1) การติดตั้ง Tesseract OCR และความรู้เรื่อง Tesseract
https://medium.com/@navapat.tpb/python-3-%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-tesseract-ocr-%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-window-%E0%B9%80%E0%B8%9E%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%AA%E0%B8%81%E0%B8%B1%E0%B8%94%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%88%E0%B8%B2%E0%B8%81%E0%B8%A0%E0%B8%B2%E0%B8%9E-734dae2fb4d3
https://ichi.pro/th/withi-kar-yaek-khxkhwam-cak-rupphaph-dwy-python-241461048001323
8.2) ความรู้เรื่อง Opencv opencv-python