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

# -*- 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()