*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", "Γ", "Γ", "Δ", "Δ", "Δ", "Ε ", "Ε½", "Π"
]
νκ΅ μλμ°¨ λ²νΈν 8000 μΈμ μ루μ
μΈμ κ°λ₯ λ¬Έμ:
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!