วิเคราะห์ป้ายทะเบียนรถ ด้วย OpenALPR และ Python

Chayapol Moemeng
2 min readMay 8, 2018

--

บทความนี้นำเสนอการเขียน Python เพื่อเรียก OpenALPR Cloud API จาก OpenALPR (อ่านออกเสียงว่า โอ-เพิ่น-แอล-ป้าร์)

เรียกใช้ OpenALPR ผ่าน LINE BOT

สำหรับ OpenSource OpenAPLR เราสามารถนำมา Build และใช้งานเองได้ แต่การ calibrate model และการหา hosting ต้องทำเองทั้งหมด และมีเอกสารอธิบายไว้ครบถ้วน
OpenALPR Cloud API เป็นทางเลือกหนึ่ง สำหรับ Free Account เราจะได้ credit เพื่อใช้งาน ปัจจุบัน 2000 credits ต่อเดือน และตัดยอดทุกครั้งที่มีการใช้ เช่นส่งรูปรถให้วิเคราะห์คิด 1-2 credits

เหตุผลหลักที่ผมใช้ OpenALPR เพราะแกะป้ายทะเบียนภาษาไทยได้ ก่อนหน้านี้ลองใช้ Google Vision API แต่ยังแกะภาษาไทยไม่ได้

OpenALPR Cloud API รับ Input ผ่าน REST API ซึ่งเรากำหนด parameter ต่าง ๆ ผ่าน URL และ ภาพเป็น data ไปทาง HTTP POST นั้น ซึ่ง python requests package ก็ใช้งานได้เกินพอ

OpenAPLR มี sample client integration ให้สำหรับหลากหลายภาษา แต่ผมเขียนเองเพราะไม่อยากลง Package เพิ่ม โดยจะใช้ Package พื้นฐานอย่าง requests เท่านั้น

Sign Up และหาก Secret Key

เมื่อ Sign up แล้ว มองหา Cloud API menu และ copy secret key ไว้ โดยจะเป็นค่าขึ้นต้นด้วย sk_

ติดตั้ง requests

Requests เป็น library ที่ใช้ทำงานกับ HTTP ได้ง่าย(น่าจะที่สุด) ของ Python ติดตั้งไม่ยากโดยสั่ง shell command

pip install requests

Code ตัวอย่าง

มาดู function process() สำหรับที่รับค่า ชื่อไฟล์สำหรับส่งไปเรียก OpenALPR Cloud API ณ ปัจจุบัน OpenALPR

import requests
def process(self,filename):
v = '1'
c = 'th'
sk = "sk_xxxxxxxxx"

url = "https://api.openalpr.com/v2/recognize?recognize_vehicle=%s&country=%s&secret_key=%s"%(v,c,sk)
r = requests.post(url, files={'image': open(filename,'rb')})
result = self._process_json(r.json())
return result

การวิเคราะห์ป้ายทะเบียนคิด 1 credit
v = ‘1’ คือ ต้องการให้วิเคราะห์รุ่นรถด้วย จะคิด credit เพิ่มอีก 1
c = ‘th’ คือ hint ระบบไปว่า ป้ายทะเบียนนี้เป็นภาษาไทย
sk คือ secret key ของท่าน
ผลที่คืนกลับมาเป็น json (ใน Python ถือเป็น dict)

ทดลองเรียกใช้งาน

ไฟล์รูปภาพสำหรับวิเคราะห์ต้องมีขนาดใหญ่ และ ชัดเจนพอที่จะให้ API ทำงานได้ ในที่นี้สมมติว่าไฟล์ชื่อ car01.jpg

filename = 'car01.jpg'
result = process(filename)
if result != None:
print(result)

การผนวกเข้าใช้กับระบบอื่น ๆ

OpenAPLR Cloud API มีช่องทางให้ Stream ภาพจากกล้อง (เช่น กล้องวงจรปิด, IP Camera) ขึ้นวิเคราะห์อย่างต่อเนื่องได้ และ เก็บบันทึกการวิเคราะห์ย้อนหลังไว้ด้วย แน่นอนว่า Premium service มีค่าใช้จ่าย

การใช้งาน เช่น
- นำไปประกบกับ กล้องหน้ารถ
- กล้องวงจรปิดสำหรับที่จอดรถ
(ต้องไม่ลืมว่า OpenALPR เป็น OpenSource ที่ embed ตัว engine เข้ากับอุปกรณ์ได้)

อ่านเพิ่มเติม ได้ที่ OpenAPLR Cloud API

--

--