Files
ICE_Dataset/chinese_license_plate_generator/plate_number.py
T
2026-06-19 21:48:43 +08:00

112 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
generate plate numbers
"""
import numpy as np
import cv2, os
from glob import glob
# 省份
provinces = ["京", "津", "冀", "晋", "蒙", "辽", "吉", "黑", "沪",
"苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘",
"粤", "桂", "琼", "渝", "川", "贵", "云", "藏", "陕",
"甘", "青", "宁", "新"]
# "港", "澳", "使", "领", "学", "警", "挂"]
digits = ['{}'.format(x + 1) for x in range(9)] + ['0']
# 英文,没有I、O两个字符
letters = [chr(x + ord('A')) for x in range(26) if not chr(x + ord('A')) in ['I', 'O']]
# print('letters', digits + letters)
# 随机选取
def random_select(data):
return data[np.random.randint(len(data))]
# 带权重的序号字符选取:数字概率远高于字母(真实车牌中字母占比约20%)
def random_char():
if np.random.random() < 0.8:
return random_select(digits)
else:
return random_select(letters)
# 蓝牌:省简称 + 发牌机关字母 + 序号(数字为主)
def generate_plate_number_blue(length=7):
plate = random_select(provinces)
# 发牌机关代号必须是字母
plate += random_select(letters)
# 序号部分:数字80%,字母20%
for i in range(length - 2):
plate += random_char()
return plate
# 黄色大型车(无后缀,普通黄牌)
def generate_plate_number_yellow():
return generate_plate_number_blue()
# 教练车
def generate_plate_number_yellow_xue():
plate = generate_plate_number_blue()
return plate[:6] + '学'
# 白色警车(末位必带"警")
def generate_plate_number_white():
plate = generate_plate_number_blue()
return plate[:6] + '警'
# 军车/武警首位字母(2013/2019式,非随机)
army_letters = ['V', # 中央军委
'L', # 陆军
'H', # 海军
'K', # 空军
'J', # 火箭军
'Z', # 战略支援部队
'B', # 联勤保障部队
'W'] # 武警
# 白色军车/武警(首位从军车字母中选取,不带"警")
def generate_plate_number_army():
first_letter = random_select(army_letters)
plate = generate_plate_number_blue()
return first_letter + plate[1:]
def generate_plate_number_black_gangao():
plate = generate_plate_number_blue()
return '粤' + plate[1:6] + random_select(["港", "澳"])
# ---- 使领馆旧版(≤2017.1.9) ----
# 使馆旧版:使XXX·XXX("使"在首位)
def generate_plate_number_black_shi_old():
plate = generate_plate_number_blue()
return '使' + plate[1:]
# 领馆旧版:省A·XXXX领(带城市字母,"领"在末位)
def generate_plate_number_black_ling_old():
plate = generate_plate_number_blue()
return plate[:6] + '领'
# ---- 使领馆新版(2017.1.9~) ----
# 使馆新版:XXX·XXX使(3位国代码 + 3位流水 + "使",白字)
def generate_plate_number_black_shi_new():
code = '{:03d}'.format(np.random.randint(101, 281))
serial = '{:03d}'.format(np.random.randint(1, 1000))
return code + serial + '使'
# 领馆新版:省XXX·XX领(省 + 3位国代码 + 2位流水 + "领",白字)
def generate_plate_number_black_ling_new():
province = random_select(provinces)
code = '{:03d}'.format(np.random.randint(101, 281))
serial = '{:02d}'.format(np.random.randint(1, 100))
return province + code + serial + '领'
def board_bbox(polys):
x1, y1 = np.min(polys, axis=0)
x2, y2 = np.max(polys, axis=0)
return [x1, y1, x2, y2]
if __name__ == '__main__':
pass