*Latest Version : 3.1.3
Auto Number Plate Recognition for European Union and Plus countries
๐ฆ Available Countries: (We are adding more countries.)
EU :
๐ฆ๐ฑ Albania ๐ฆ๐ฉ Andorra ๐ฆ๐น Austria ๐ง๐ช Belgium ๐ง๐ฆ Bosnia and Herzegovina
๐ง๐ฌ Bulgaria ๐ญ๐ท Croatia ๐จ๐พ Cyprus ๐จ๐ฟ Czechia ๐ฉ๐ฐ Denmark ๐ซ๐ฎ Finland
๐ซ๐ท France ๐ฉ๐ช Germany ๐ฌ๐ท Greece ๐ญ๐บ Hungary ๐ฎ๐ช Ireland ๐ฎ๐น Italy ๐ฑ๐ฎ Liechtenstein
๐ฑ๐บ Luxembourg ๐ฒ๐น Malta ๐ฒ๐จ Monaco ๐ฒ๐ช Montenegro ๐ณ๐ฑ Netherlands ๐ฒ๐ฐ North Macedonia
๐ณ๐ด Norway ๐ต๐ฑ Poland ๐ต๐น Portugal ๐ท๐ด Romania ๐ธ๐ฒ San Marino ๐ท๐ธ Serbia
๐ธ๐ฐ Slovakia ๐ธ๐ฎ Slovenia ๐ช๐ธ Spain ๐ธ๐ช Sweden ๐จ๐ญ Switzerland ๐ฌ๐ง United Kingdom
Plus:
๐ฎ๐ฉ Indonesia
๐ฆ Recognisable Characters:
char_list = [
"-", ".", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "d", "i",
"m", "o", "ร", "ร", "ฤ", "ฤ", "ฤ", "ล ", "ลฝ", "ะ"
]
ํ๊ตญ ์๋์ฐจ ๋ฒํธํ ์ธ์ ์๋ฃจ์
์ธ์ ๊ฐ๋ฅ ๋ฌธ์:
char_list = [
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'๊ฐ', '๊ฐ', '๊ฑฐ', '๊ฒฝ', '๊ณ ', '๊ด', '๊ตฌ', '๊ธฐ',
'๋', '๋จ', '๋', '๋
ธ', '๋',
'๋ค', '๋', '๋', '๋', '๋', '๋',
'๋ผ', '๋ฌ', '๋ก', '๋ฃจ',
'๋ง', '๋จธ', '๋ชจ', '๋ฌด', '๋ฌธ',
'๋ฐ', '๋ฐฐ', '๋ฒ', '๋ณด', '๋ถ', '๋ถ',
'์ฌ', '์ฐ', '์', '์ธ', '์', '์',
'์', '์ด', '์ค', '์ฐ', '์ธ', '์', '์ก', '์ธ',
'์', '์ ', '์ ', '์ ', '์กฐ', '์ข
', '์ฃผ',
'์ฒ', '์ถฉ',
'ํ', 'ํ', 'ํธ'
]
An integrated model for recognizing license plates from all the countries we support.
To install the MareArts ANPR package, use the following pip command:
pip install marearts-anpr
If you want to use CUDA version inference, please install the following additional packages:
pip install onnxruntime-gpu==1.18.1
For private keys, please visit MareArts ANPR Solution. For inquiries about private keys, contact us at hello@marearts.com.
Check here to see the license plate recognition results in YouTube videos.
Model Name | File Size | Precision | Recall | F1 | Speed |
---|---|---|---|---|---|
middle | 103mb | legacy | legacy | - | 0.23 sec |
v10_small | 29mb | 0.9713 | 0.9669 | - | 0.0623 sec |
v10_middle | 61mb | 0.9731 | 0.9617 | - | 0.1262 sec |
v10_large | 93mb | 0.9735 | 0.9687 | - | 0.1764 sec |
v11_samll | 28mb | 0.9510 | 0.9817 | 0.9584 | 0.0119 sec |
v11_middle | 58mb | 0.9502 | 0.9817 | 0.9577 | 0.0149 sec |
v11_large | 93mb | 0.9534 | 0.9858 | 0.9619 | 0.0176 sec |
- speed test is based on i7-9800X 3.8GHz
- Use model name in detector code
Model | File Size | Accuracy | Recall | F1 |
---|---|---|---|---|
eu | ~100mb | 0.9346 | 0.9346 | 0.9392 |
euplus | ~100mb | 0.9554 | 0.9554 | 0.9580 |
kr | ~100mb | 0.9824 | 0.9824 | 0.9873 |
univ | ~100mb | 0.9626 | 0.9626 | 0.9630 |
v11_eu | ~100mb | 0.9919 | 0.9919 | 0.9919 |
v11_euplus | ~100mb | 0.9853 | 0.9853 | 0.9853 |
v11_kr | ~100mb | 0.9967 | 0.9967 | 0.9967 |
v11_univ | ~100mb | 0.9953 | 0.9953 | 0.9953 |
- Use model name in OCR code
Here's an example of how to use the updated SDK:
# pip install marearts-anpr
import cv2
from PIL import Image
from marearts_anpr import ma_anpr_detector
from marearts_anpr import ma_anpr_ocr
from marearts_anpr import marearts_anpr_from_pil
from marearts_anpr import marearts_anpr_from_image_file
from marearts_anpr import marearts_anpr_from_cv2
if __name__ == '__main__':
#################################
## Initiate MareArts ANPR
print("EU ANPR")
user_name = "your_email"
serial_key = "your_serial_key"
detector_model_version = "middle" # Options: refer to detector model table
ocr_model_version = "eu" # Options: refer to ocr model table
# MareArts ANPR Detector Inference
anpr_d = ma_anpr_detector(detector_model_version, user_name, serial_key, conf_thres=0.3, iou_thres=0.5)
# MareArts ANPR OCR Inference
anpr_r = ma_anpr_ocr(ocr_model_version, user_name, serial_key)
#################################
#################################
# Routine Task 1 - Predict from File
image_path = './sample_images/eu_test1.jpg'
output = marearts_anpr_from_image_file(anpr_d, anpr_r, image_path)
print(output)
# Routine Task 2 - Predict from cv2
img = cv2.imread(image_path)
output = marearts_anpr_from_cv2(anpr_d, anpr_r, img)
print(output)
# Routine Task 3 - Predict from Pillow
pil_img = Image.open(image_path)
output = marearts_anpr_from_pil(anpr_d, anpr_r, pil_img)
print(output)
#################################
#################################
## Initiate MareArts ANPR for Korea
print("ANPR Korean")
# user_name, serial_key are already defined
# anpr_d is also already initiated before
ocr_model_version = "kr"
# MareArts ANPR OCR Inference
anpr_r = ma_anpr_ocr(ocr_model_version, user_name, serial_key)
#################################
# Routine Task 1 - Predict from File
image_path = './sample_images/kr_test2.jpg'
output = marearts_anpr_from_image_file(anpr_d, anpr_r, image_path)
print(output)
# Routine Task 2 - Predict from cv2
img = cv2.imread(image_path)
output = marearts_anpr_from_cv2(anpr_d, anpr_r, img)
print(output)
# Routine Task 3 - Predict from Pillow
pil_img = Image.open(image_path)
output = marearts_anpr_from_pil(anpr_d, anpr_r, pil_img)
print(output)
#################################
Please refer to the advanced.py code in the ./example_code folder. This file demonstrates how to implement the ma_anpr_detector and ma_anpr_ocr separately.
The output from the ANPR will be similar to:
{
'results': [
{'ocr': 'SL593LM', 'ocr_conf': 99, 'ltrb': [819, 628, 1085, 694], 'ltrb_conf': 90}
],
'ltrb_proc_sec': 0.22,
'ocr_proc_sec': 0.15
}
{
'results': [
{'ocr': '123๊ฐ4568', 'ocr_conf': 99, 'ltrb': [181, 48, 789, 186], 'ltrb_conf': 83},
{'ocr': '123๊ฐ4568', 'ocr_conf': 99, 'ltrb': [154, 413, 774, 557], 'ltrb_conf': 82},
{'ocr': '123๊ฐ4568', 'ocr_conf': 99, 'ltrb': [154, 601, 763, 746], 'ltrb_conf': 80},
{'ocr': '123๊ฐ4568', 'ocr_conf': 99, 'ltrb': [156, 217, 773, 369], 'ltrb_conf': 80}
],
'ltrb_proc_sec': 0.23,
'ocr_proc_sec': 0.6
}
- Results: Contains OCR text, probabilities, and detection coordinate(left, top, right, bottom).
- Processing Speeds: Provided for license plate detection and OCR.
API key limits: 1000 requests per day.
User ID: marearts@public
X-API-Key: J4K9L2Wory34@G7T1Y8rt-PP83uSSvkV3Z6ioSTR!
To make an API call for ANPR, use the following command:
Content-Type : image/jpeg
x-api-key: api_key
user-id: user-id
detector_model_version: Specifies which version of the detector model to use. Refer to version table
ocr_model_version: Specifies which version of the OCR model to use. Refer to version table
#!bin/bash
curl -X POST https://we303v9ck8.execute-api.eu-west-1.amazonaws.com/Prod/marearts_anpr \
-H "Content-Type: image/jpeg" \
-H "x-api-key: api_key" \
-H "user-id: user-id" \
-H "detector_model_version: detector_version" \
-H "ocr_model_version: ocr_version" \
--data-binary "@./a.jpg"
Please refer to ./API_docker_example folder.
API_docker_example
โ
โโโ api_call.sh # Shell script to make API calls to the MareArts ANPR application.
โโโ app.py # Python script containing the MareArts ANPR application.
โโโ build_image.sh # Shell script to build the Docker image from the Dockerfile.
โโโ Dockerfile # Dockerfile containing instructions for building the Docker image.
โโโ request.py # Python script to send requests to the MareArts ANPR API server.
โโโ requirements.txt # Contains a list of Python packages that the app requires.
โโโ run_container.sh # Shell script to run the Docker container from the built image.
email : hello@marearts.com
home page : https://marearts.com
blog : http://study.marearts.com
subscription : https://study.marearts.com/p/anpr-lpr-solution.html
live test : http://live.marearts.com
๐๐ปโโ๏ธ Thank you!