You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
import hyperlpr3 as lpr3
|
|
import cv2
|
|
import urllib
|
|
import numpy as np
|
|
import re
|
|
import click
|
|
from loguru import logger
|
|
|
|
type_list = ["蓝牌", "黄牌单层", "白牌单层", "绿牌新能源", "黑牌港澳", "香港单层", "香港双层", "澳门单层", "澳门双层", "黄牌双层"]
|
|
|
|
|
|
def is_http_url(s):
|
|
regex = re.compile(
|
|
r'^(?:http|ftp)s?://' # http:// or https://
|
|
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'
|
|
r'localhost|' # localhost...
|
|
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
|
|
r'(?::\d+)?' # optional port
|
|
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
|
|
|
|
if regex.match(s):
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def url_to_image(url):
|
|
try:
|
|
resp = urllib.request.urlopen(url)
|
|
image = np.asarray(bytearray(resp.read()), dtype="uint8")
|
|
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
|
|
except Exception as err:
|
|
return None
|
|
|
|
return image
|
|
|
|
|
|
def get_image(path: str):
|
|
image = None
|
|
if is_http_url(path):
|
|
# url
|
|
image = url_to_image(path)
|
|
else:
|
|
# local path
|
|
if path.split('.')[-1].lower() in ('jpg', 'png', 'jpeg', 'bmp',):
|
|
image = cv2.imread(path)
|
|
try:
|
|
h, w, c = image.shape
|
|
except Exception as err:
|
|
logger.error("Failed to read image from path or url.")
|
|
return False, None
|
|
|
|
return True, image
|
|
|
|
|
|
@click.command(help="Exec HyperLPR3 Test Sample.")
|
|
@click.option("-src", "--src", type=str, )
|
|
@click.option("-det", "--det", default='low', type=click.Choice(['low', 'high']), )
|
|
def sample(src, det):
|
|
ret, image = get_image(src)
|
|
if ret:
|
|
if det == 'low':
|
|
level = lpr3.DETECT_LEVEL_LOW
|
|
else:
|
|
level = lpr3.DETECT_LEVEL_HIGH
|
|
catcher = lpr3.LicensePlateCatcher(detect_level=level)
|
|
print("--" * 20)
|
|
result = catcher(image)
|
|
logger.info(f"共检测到车牌: {len(result)}")
|
|
for res in result:
|
|
code, conf, plate_type, box = res
|
|
logger.success(f'[{type_list[plate_type]}]{code} {conf} {box}')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sample()
|