车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)

车牌模拟生成器:Python代码实现与商业应用前景

引言

在智慧城市建设和汽车行业数字化浪潮中,车牌作为车辆的唯一标识,其相关技术应用正变得越来越重要。今天我们将介绍一个基于Python的车牌模拟生成器,探讨其技术实现、功能特点以及潜在的商业价值。

【注意】

在线生成随机或自定义的中国车牌,支持多种车牌类型和样式,仅用于模型数据测试、车牌识别系统的演示效果等,切勿用于商业用途和不合法用途,否则自己将承担相关责任,与本工具无关。

【需要的素材】

1、需要各个省市的简称:

由于用到了opencv,建议将图片和具体的车牌号做个映射关系:

【效果图】

映射关系文件 font_mappings.txt

云=yunnan
京=beijing
冀=hebei
晋=shanxi
蒙=neimenggu
辽=liaoning
吉=jilin
黑=heilongjiang
沪=shanghai
苏=jiangsu
浙=zhejiang
皖=anhui
闽=fujian
赣=jiangxi
鲁=shandong
豫=henan
鄂=hubei
湘=hunan
粤=guangdong
桂=guangxi
琼=hainan
渝=chongqing
川=sichuan
贵=guizhou
藏=xizang
陕=shanxi_s
甘=gansu
青=qinghai
宁=ningxia
新=xinjiang
津=tianjin
港=gang
澳=ao
使=shi
领=ling
学=xue
警=jing
挂=gua

需求分析

车牌模拟生成在多个领域有着广泛的应用需求:

  1. 软件开发与测试​:智能交通系统、停车场管理系统需要大量车牌数据进行测试
  2. 教育培训​:驾校、交通法规培训需要示例车牌进行教学演示
  3. 影视制作​:影视剧中需要符合规定的虚拟车牌避免侵权问

  4. 数据分析​:交通流量模拟、城市规划需要车牌数据支持

功能特点

我们的车牌模拟生成器具备以下核心功能:

1. 符合中国车牌标准

  •  

    支持普通蓝牌和新能源绿牌两种格式

  •  

    遵循中国车牌编号规则,排除易混淆字母(O/I)

  •  

    省份简称符合国家标准

2. 灵活生成模式

  •  

    可指定生成特定类型车牌

  •  

    支持完全随机生成模式

  •  

    生成数量可自定义扩展

3. 高度可定制化代码结构清晰,易于扩展其他类型车牌

  • 生成规则可调整,满足不同场景需求

  • 代码结构清晰,易于扩展其他类型车牌

由于服务端是python,这里给出的是部分核心逻辑代码,需要自己搭建。

【核心代码实现,流程参考】

import random
import stringclass LicensePlateGenerator:"""车牌生成器类"""def __init__(self):# 省份简称列表self.provinces = ['京', '津', '冀', '晋', '蒙', '辽', '吉', '黑', '沪', '苏','浙', '皖', '闽', '赣', '鲁', '豫', '鄂', '湘', '粤', '桂','琼', '渝', '川', '贵', '云', '藏', '陕', '甘', '青', '宁', '新']# 车牌字母列表(排除O和I)self.letters = [c for c in string.ascii_uppercase if c not in ['O', 'I']]def generate_plate(self, plate_type=None, province=None):"""生成车牌号码:param plate_type: 车牌类型('normal'普通/'new_energy'新能源):param province: 指定省份简称:return: 车牌号码字符串"""# 确定省份if province and province in self.provinces:province_char = provinceelse:province_char = random.choice(self.provinces)# 确定车牌类型if plate_type is None:plate_type = random.choice(['normal', 'new_energy'])# 生成普通车牌if plate_type == 'normal':return self._generate_normal_plate(province_char)# 生成新能源车牌elif plate_type == 'new_energy':return self._generate_new_energy_plate(province_char)def _generate_normal_plate(self, province):"""生成普通蓝牌"""plate = province + random.choice(self.letters)# 生成5位序号for _ in range(5):if random.random() < 0.3:plate += random.choice(self.letters)else:plate += random.choice(string.digits)return platedef _generate_new_energy_plate(self, province):"""生成新能源绿牌"""plate = province + random.choice(self.letters)plate += random.choice(['D', 'F'])  # D=纯电, F=混动plate += ''.join(random.choices(string.digits, k=5))return plate# 使用示例
if __name__ == "__main__":generator = LicensePlateGenerator()# 生成10个随机车牌print("随机车牌示例:")for i in range(10):plate_type = random.choice(['normal', 'new_energy'])plate = generator.generate_plate(plate_type)print(f"{i+1}. {'普通车牌' if plate_type == 'normal' else '新能源车牌'}: {plate}")# 生成特定省份车牌print("\n北京车牌示例:")for i in range(3):print(f"{i+1}. {generator.generate_plate('normal', '京')}")

【生成车牌、计算数字边框等算法】

# -*- coding: utf-8 -*-
import numpy as np
import cv2, os, argparse
from glob import glob
from tqdm import tqdmfrom plate_number import random_select, generate_plate_number_white, generate_plate_number_yellow_xue
from plate_number import generate_plate_number_black_gangao, generate_plate_number_black_shi, generate_plate_number_black_ling
from plate_number import generate_plate_number_blue, generate_plate_number_yellow_gua
from plate_number import letters, digits# 加载中文字符到英文文件名的映射
def load_font_mappings():mappings = {}try:with open('font_mappings.txt', 'r', encoding='utf-8') as f:for line in f:if '=' in line:cn, en = line.strip().split('=', 1)mappings[cn] = enexcept Exception as e:print(f"警告: 无法加载字体映射文件,错误: {e}")return mappings# 中文到英文的映射
CHINESE_TO_ENGLISH = load_font_mappings()
# 英文到中文的反向映射
ENGLISH_TO_CHINESE = {v: k for k, v in CHINESE_TO_ENGLISH.items()}def get_location_data(length=7, split_id=1, height=140):"""获取车牌号码在底牌中的位置length: 车牌字符数,7或者8,7为普通车牌、8为新能源车牌split_id: 分割空隙height: 车牌高度,对应单层和双层车牌"""# 字符位置location_xy = np.zeros((length, 4), dtype=np.int32)# 单层车牌高度if height == 140:# 单层车牌,y轴坐标固定location_xy[:, 1] = 25location_xy[:, 3] = 115# 螺栓间隔step_split = 34 if length == 7 else 49# 字符间隔step_font = 12 if length == 7 else 9# 字符宽度width_font = 45for i in range(length):if i == 0:location_xy[i, 0] = 15elif i == split_id:location_xy[i, 0] = location_xy[i - 1, 2] + step_splitelse:location_xy[i, 0] = location_xy[i - 1, 2] + step_font# 新能源车牌if length == 8 and i > 0:width_font = 43location_xy[i, 2] = location_xy[i, 0] + width_fontelse:# 双层车牌第一层location_xy[0, :] = [110, 15, 190, 75]location_xy[1, :] = [250, 15, 330, 75]# 第二层width_font = 65step_font = 15for i in range(2, length):location_xy[i, 1] = 90location_xy[i, 3] = 200if i == 2:location_xy[i, 0] = 27else:location_xy[i, 0] = location_xy[i - 1, 2] + step_fontlocation_xy[i, 2] = location_xy[i, 0] + width_fontreturn location_xy# 字符贴上底板
def copy_to_image_multi(img, font_img, bbox, bg_color, is_red):x1, y1, x2, y2 = bboxfont_img = cv2.resize(font_img, (x2 - x1, y2 - y1))img_crop = img[y1: y2, x1: x2, :]if is_red:img_crop[font_img < 200, :] = [0, 0, 255]elif 'blue' in bg_color or 'black' in bg_color:img_crop[font_img < 200, :] = [255, 255, 255]else:img_crop[font_img < 200, :] = [0, 0, 0]return imgclass MultiPlateGenerator:def __init__(self, adr_plate_model, adr_font):# 车牌底板路径self.adr_plate_model = adr_plate_model# 车牌字符路径# 如果存在英文目录,则使用英文目录self.adr_font = 'font_model_english' if os.path.exists('font_model_english') else adr_font# 车牌字符图片,预存处理self.font_imgs = {}# 获取所有jpg文件font_filenames = []for root, dirs, files in os.walk(self.adr_font):for file in files:if file.lower().endswith('.jpg'):font_filenames.append(os.path.join(root, file))for font_filename in font_filenames:# 尝试读取文件,如果失败则跳过try:font_img = cv2.imread(font_filename, cv2.IMREAD_GRAYSCALE)if font_img is None:continueif '140' in font_filename:font_img = cv2.resize(font_img, (45, 90))elif '220' in font_filename:font_img = cv2.resize(font_img, (65, 110))elif font_filename.split('_')[-1].split('.')[0] in letters + digits:font_img = cv2.resize(font_img, (43, 90))# 获取文件名作为keybasename = os.path.basename(font_filename).split('.')[0]# 保存原始文件名映射self.font_imgs[basename] = font_img# 对于英文文件名,我们也建立到中文字符的映射for en, cn in ENGLISH_TO_CHINESE.items():if en in basename:# 构建中文文件名格式的keyparts = basename.split('_')for i, part in enumerate(parts):if part == en:parts[i] = cnchinese_key = '_'.join(parts)self.font_imgs[chinese_key] = font_imgbreakexcept Exception as e:print(f"警告: 无法读取或处理文件 {font_filename}, 错误: {e}")continue# 字符位置self.location_xys = {}for i in [7, 8]:for j in [1, 2, 4]:for k in [140, 220]:self.location_xys['{}_{}_{}'.format(i, j, k)] = \get_location_data(length=i, split_id=j, height=k)# 获取字符位置def get_location_multi(self, plate_number, height=140):length = len(plate_number)if '警' in plate_number:split_id = 1elif '使' in plate_number:split_id = 4else:split_id = 2return self.location_xys['{}_{}_{}'.format(length, split_id, height)]# 随机生成车牌号码,获取底板颜色、单双层def generate_plate_number(self):rate = np.random.random(1)if rate > 0.4:# 蓝牌plate_number = generate_plate_number_blue(length=random_select([7, 8]))else:# 白牌、黄牌教练车、黄牌挂车、黑色港澳、黑色使、领馆generate_plate_number_funcs = [generate_plate_number_white,generate_plate_number_yellow_xue,generate_plate_number_yellow_gua,generate_plate_number_black_gangao,generate_plate_number_black_shi,generate_plate_number_black_ling]plate_number = random_select(generate_plate_number_funcs)()# 车牌底板颜色bg_color = random_select(['blue'] + ['yellow'])if len(plate_number) == 8:bg_color = random_select(['green_car'] * 10 + ['green_truck'])elif len(set(plate_number) & set(['使', '领', '港', '澳'])) > 0:bg_color = 'black'elif '警' in plate_number or plate_number[0] in letters:bg_color = 'white'elif len(set(plate_number) & set(['学', '挂'])) > 0:bg_color = 'yellow'is_double = random_select([False] + [True] * 3)if '使' in plate_number:bg_color = 'black_shi'if '挂' in plate_number:# 挂车双层is_double = Trueelif len(set(plate_number) & set(['使', '领', '港', '澳', '学', '警'])) > 0 \or len(plate_number) == 8 or bg_color == 'blue':# 使领港澳学警、新能源、蓝色都是单层is_double = False# special,首字符为字母、单层则是军车if plate_number[0] in letters and not is_double:bg_color = 'white_army'return plate_number, bg_color, is_double# 随机生成车牌图片def generate_plate(self, enhance=False):plate_number, bg_color, is_double = self.generate_plate_number()height = 220 if is_double else 140# 获取底板图片# print(plate_number, height, bg_color, is_double)number_xy = self.get_location_multi(plate_number, height)# 读取底板图片,确保中文文件名正确处理plate_model_path = os.path.join(self.adr_plate_model, '{}_{}.PNG'.format(bg_color, height))img_plate_model = cv2.imread(plate_model_path)if img_plate_model is None:print(f"警告: 无法读取底板图片 {plate_model_path}")# 使用默认蓝色底板图片作为备选default_path = os.path.join(self.adr_plate_model, 'blue_140.PNG')img_plate_model = cv2.imread(default_path)if img_plate_model is None:raise FileNotFoundError(f"无法读取默认底板图片 {default_path}")img_plate_model = cv2.resize(img_plate_model, (440 if len(plate_number) == 7 else 480, height))for i in range(len(plate_number)):if len(plate_number) == 8:# 新能源key = 'green_{}'.format(plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = 'green_{}'.format(en_char)font_img = self.font_imgs[key]else:if '{}_{}'.format(height, plate_number[i]) in self.font_imgs:key = '{}_{}'.format(height, plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = '{}_{}'.format(height, en_char)font_img = self.font_imgs[key]else:# 双层车牌字体库if i < 2:key = '220_up_{}'.format(plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = '220_up_{}'.format(en_char)font_img = self.font_imgs[key]else:key = '220_down_{}'.format(plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = '220_down_{}'.format(en_char)font_img = self.font_imgs[key]# 字符是否红色if (i == 0 and plate_number[0] in letters) or plate_number[i] in ['警', '使', '领']:is_red = Trueelif i == 1 and plate_number[0] in letters and np.random.random(1) > 0.5:# second letter of army plateis_red = Trueelse:is_red = Falseif enhance:k = np.random.randint(1, 6)kernel = np.ones((k, k), np.uint8)if np.random.random(1) > 0.5:font_img = np.copy(cv2.erode(font_img, kernel, iterations=1))else:font_img = np.copy(cv2.dilate(font_img, kernel, iterations=1))# 贴上底板img_plate_model = copy_to_image_multi(img_plate_model, font_img,number_xy[i, :], bg_color, is_red)img_plate_model = cv2.blur(img_plate_model, (3, 3))return img_plate_model, number_xy, plate_number, bg_color, is_doubledef generate_plate_special(self, plate_number, bg_color, is_double, enhance=False):"""生成特定号码、颜色车牌:param plate_number: 车牌号码:param bg_color: 背景颜色,black/black_shi(使领馆)/blue/green_car(新能源轿车)/green_truck(新能源卡车)/white/white_army(军队)/yellow:param is_double: 是否双层:param enhance: 图像增强:return: 车牌图"""height = 220 if is_double else 140# print(plate_number, height, bg_color, is_double)number_xy = self.get_location_multi(plate_number, height)img_plate_model = cv2.imread(os.path.join(self.adr_plate_model, '{}_{}.PNG'.format(bg_color, height)))img_plate_model = cv2.resize(img_plate_model, (440 if len(plate_number) == 7 else 480, height))for i in range(len(plate_number)):if len(plate_number) == 8:# 新能源key = 'green_{}'.format(plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = 'green_{}'.format(en_char)font_img = self.font_imgs[key]else:if '{}_{}'.format(height, plate_number[i]) in self.font_imgs:key = '{}_{}'.format(height, plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = '{}_{}'.format(height, en_char)font_img = self.font_imgs[key]else:if i < 2:key = '220_up_{}'.format(plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = '220_up_{}'.format(en_char)font_img = self.font_imgs[key]else:key = '220_down_{}'.format(plate_number[i])# 如果找不到中文key,尝试使用英文keyif key not in self.font_imgs:# 检查字符是否是中文字符,如果是则转换为英文char = plate_number[i]if char in CHINESE_TO_ENGLISH:en_char = CHINESE_TO_ENGLISH[char]key = '220_down_{}'.format(en_char)font_img = self.font_imgs[key]if (i == 0 and plate_number[0] in letters) or plate_number[i] in ['警', '使', '领']:is_red = Trueelif i == 1 and plate_number[0] in letters and np.random.random(1) > 0.5:# second letter of army plateis_red = Trueelse:is_red = Falseif enhance:k = np.random.randint(1, 6)kernel = np.ones((k, k), np.uint8)if np.random.random(1) > 0.5:font_img = np.copy(cv2.erode(font_img, kernel, iterations=1))else:font_img = np.copy(cv2.dilate(font_img, kernel, iterations=1))img_plate_model = copy_to_image_multi(img_plate_model, font_img,number_xy[i, :], bg_color, is_red)# is_double = 'double' if is_double else 'single'img_plate_model = cv2.blur(img_plate_model, (3, 3))return img_plate_modeldef parse_args():parser = argparse.ArgumentParser(description='中国车牌生成器')parser.add_argument('--number', default=10, type=int, help='生成车牌数量')parser.add_argument('--save-adr', default='multi_val', help='车牌保存路径')args = parser.parse_args()return argsdef mkdir(path):try:os.makedirs(path)except:passif __name__ == '__main__':args = parse_args()print(args)# 随机生成车牌print('save in {}'.format(args.save_adr))mkdir(args.save_adr)generator = MultiPlateGenerator('plate_model', 'font_model')for i in tqdm(range(args.number)):img, number_xy, gt_plate_number, bg_color, is_double = generator.generate_plate()# 使用cv2.imencode和open函数来正确处理中文文件名save_path = os.path.join(args.save_adr, '{}_{}_{}.jpg'.format(gt_plate_number, bg_color, is_double))try:# 将图像编码为JPEG格式success, encoded_img = cv2.imencode('.jpg', img)if success:# 使用open函数以二进制写入模式保存文件with open(save_path, 'wb') as f:f.write(encoded_img.tobytes())else:print(f"警告: 无法编码图像 {save_path}")except Exception as e:print(f"警告: 无法保存图像 {save_path}, 错误: {e}")

商业应用前景

1. 软件开发服务

  •  

    为智能交通系统提供测试数据生成服务

  •  

    向停车场管理系统开发商提供车牌模拟解决方案

  •  

    为驾考系统提供虚拟车牌生成功能

2. 数据服务业务

  •  

    向研究机构提供交通模拟数据

  •  

    为城市规划部门提供车辆流量预测数据支持

  •  

    向广告公司提供区域车辆分布分析数据

3. 教育培训应用

  •  

    开发交通法规教学工具

  •  

    为驾校提供理论考试模拟系统

  •  

    制作交通安全教育材料

4. 增值服务扩展

  •  

    添加车牌识别验证功能

  •  

    开发车牌样式自定义功能

  •  

    增加多国车牌生成支持

技术拓展方向

1、增加图像生成功能​:将车牌文本转换为真实车牌图像

​2、添加验证算法​:验证生成的车牌是否符合编码规则

3、支持更多车牌类型​:扩展至武警车牌、领事馆车牌等特殊类型

4、​开发API接口​:提供Web服务供第三方调用

车牌模拟生成器虽是一个小型工具,但其应用场景广泛,商业价值可观。

【最后注意】:

在线生成随机或自定义的中国车牌,支持多种车牌类型和样式,仅用于模型数据测试、演示效果等,切勿用于商业用途和不合法用途,否则自己将承担相关责任,与本工具无关。

工具截图:可以自己开发一个,提供下载地址

通过网盘分享的文件(网盘中是编译好的可以运行的exe):车牌模拟生成demo
链接: https://pan.baidu.com/s/1WBzzd3qNpD8m837wqfgVBA?pwd=tgp4 提取码: tgp4 

生成的蓝牌、绿牌、黑、白、黄牌如下:

模拟生成效果:

感谢您的阅读和支持,欢迎点赞拍砖!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96421.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序非主页面的数据动作关联主页面的数据刷新操作

如果在主页面跳转到其他页面。比如说我的收藏页面&#xff0c;然后有取消收藏的动作&#xff0c;当返回到主页面的时候&#xff0c;如果有关联数据显示在主页面&#xff0c;刷新页面对应的状态。 下面的代码是实现&#xff1a;//卡片收藏/取消if (newCollectd) {this.setData({…

后端(fastAPI)学习笔记(CLASS 1):扩展基础

一、python的类型声明1、类型声明的背景和作用python 3.6 版本引入了“类型提示”1、类型提示是一种新的语法&#xff0c;用来声明变量的类型2、提高编译器和工具的支持能力为什么要学习类型提示1、了解类型提示不仅仅对使用FastAPI有帮助&#xff0c;也能提高代码的可读性度和…

2023年系统分析师上半年论文试题分析

试题一 论信息系统的可行性分析信息系统可行性分析的目的是确认在当前条件下企业是否有必要建设新系统&#xff0c;以及建设新系统的工作是否具备必要的条件。如何进行可行性分析是系统分析师所必须面临的问题。请围绕信息系统可行性分析论题&#xff0c;依次从以下三个方面进行…

洛谷 P1967 [NOIP 2013 提高组] 货车运输(kruskal 重构树 + 求路径最小边权)

题目链接 题目难度 洛谷上是蓝题&#xff0c;本人认为评高了&#xff0c;此题思维和实现都不难&#xff0c;应该是绿题。 题目解法概括 kruskal 重构树 倍增优化求路径最小边权 代码 #include <iostream> #include <cstdio> #include <vector> #inclu…

【01】针对开源收银系统icepos (宝塔面板) 详细安装教程详细参考-优雅草卓伊凡

【01】针对开源收银系统icepos (宝塔面板) 详细安装教程详细参考-优雅草卓伊凡引言本文做参考&#xff0c;下篇文章 直接实践&#xff0c;由于已经选型本系统是服务端php开发的系统&#xff0c;他的系统环境如下&#xff1a;系统安装 环境要求ICEPOS对服务器或电脑硬件要求不高…

MySQL的常用命令

目录1. 连接MySQL数据库基本连接语法连接参数说明2. 数据库操作2.1 查看数据库2.2 创建数据库2.3 删除数据库3. 表操作3.1 查看表信息3.2 创建表3.3 常用数据类型3.4 修改表结构3.5 删除表4. 数据操作 (CRUD)4.1 插入数据 (CREATE)4.2 查询数据 (READ)基本查询条件查询排序和分…

Linux: config: CONFIG_CHECKPOINT_RESTORE;CRIU

文章目录 config CHECKPOINT_RESTORE commit related 简介 参考 如何使用 Checkpoint/Restore 功能 步骤 1:确保内核支持 步骤 2:安装 CRIU 步骤 3:检查点(Checkpoint) 步骤 4:恢复(Restore) 步骤 5:验证 常见应用场景 注意事项 python config CHECKPOINT_RESTORE bo…

eclipse怎么把项目设为web

在 Eclipse 中将一个项目设置为 Web 项目&#xff08;或称动态 Web 项目&#xff09;主要有两种场景&#xff1a;​创建新的 Web 项目​ 和 ​将现有项目转换为 Web 项目。我将为你详细讲解这两种方法。前提条件&#xff1a;确保你有必要的 Eclipse 组件在开始之前&#xff0c;…

CVPR 2025|基于视觉语言模型的零样本3D视觉定位

论文信息题目&#xff1a;Zero-Shot 3D Visual Grounding from Vision-Language Models基于视觉语言模型的零样本3D视觉定位作者&#xff1a;Rong Li, Shijie Li, Lingdong Kong, Xulei Yang, Junwei Liang论文创新点提出全新框架&#xff1a;论文提出SeeGround这一无需训练的零…

Realtime API 语音代理端到端接入全流程教程(含 Demo,延迟 280ms)

在现代应用中&#xff0c;实时语音交互已经成为重要功能&#xff0c;而低延迟的语音传输更是用户体验的关键指标。本文将详细介绍如何使用 Realtime API 实现 语音代理 的端到端接入&#xff0c;包括环境搭建、接口调用、低延迟优化及 Demo 演示。通过本教程&#xff0c;开发者…

AI赋能办公:用Python解决发票合并打印难题

一、问题的提出今天网友提问&#xff1a;报销时&#xff0c;财务要求要把发票合并打印&#xff0c;即两张合成一张放在A4纸上&#xff0c;中间还要加一道黑色分界线&#xff0c;如何快速完成数十张发票的打印&#xff1f;问题的提出二、问题分析这个问题可以采用两种方法解决&a…

Shell编程之正则表达式与文本处理工具

一、正则表达式基础1. 正则表达式概述​定义​&#xff1a;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是由普通字符​&#xff08;如字母、数字、标点符号&#xff09;与元字符​&#xff08;具有特殊含义的专用字符&#xff09;组成的字符串…

使用 Spring AI Alibaba Graph 实现工作流

1 依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.2</version> </dependency><dependency><groupId>com.alibaba.cloud.…

碰一碰系统源码于小程序打通技术开发整合方案,驱动AI技术开发源代码

碰一碰系统结合小程序开发数据互通&#xff0c;驱动AI技术开发源代码碰一碰系统作为门店获客技术落地的核心载体&#xff0c;已从标准化产品向实体店定制演进。本文从源码d的形式出发&#xff0c;解析企业级数字人分身系统的交互系统&#xff0c;为技术团队提供可落地的开发指南…

深度学习——自然语言处理NLP

自然语言处理中的词向量技术演进与实践一、传统统计语言模型的困境与突破1.1 统计语言模型的局限性早期NLP主要依赖统计语言模型&#xff0c;如n-gram模型&#xff0c;通过统计词序列的频率来预测语言概率。这类模型存在两个根本缺陷&#xff1a;早期统计语言模型的局限性1. 维…

uni-app头像叠加显示

展示代码<view class"bmBox"><view class"bmLeft">已报名&#xff1a;<text class"blueColor">10人</text></view><view class"bmRight dflex"><view class"avatarList"><ima…

私有化部署Ragflow的预训练模型

部署ragflow代码库中的det.onnx模型&#xff08;通常是目标检测或文档结构解析类模型&#xff0c;如版面分析模型&#xff09;到火山云&#xff0c;需基于ONNX Runtime推理框架&#xff0c;结合火山云的计算资源和服务能力实现。以下是具体步骤&#xff1a; 一、模型特性与依赖…

go中的singleflight是如何实现的?

大家周四快乐&#xff0c;今天分享粉丝投稿的面经。 内容整理如下&#xff1a;go go singleflight 的底层实现 singleflight 是 Go 语言标准库中的一个很有用的包&#xff0c;它主要用来处理并发请求时的重复问题。比如在高并发场景下&#xff0c;如果多个请求同时访问同一个资…

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读

开关电源之整流电路1. 什么是半波整流电路&#xff1f;1.1 电路结构与工作原理1.2 输出特性分析2. 全波整流电路如何工作&#xff1f;2.1 电路结构特点2.2 工作过程分析2.3 优缺点对比3. 桥式整流电路有什么优势&#xff1f;3.1 电路组成3.2 工作原理详解3.3 性能特点4. 什么是…

创建GLFW窗口,开启OpenGL之路

前言&#xff1a;本系列文章主要是一个学习笔记和总结&#xff0c;具体学习过程参考https://learnopengl-cn.github.io/这个网站的是学习OpenGL的一个很完美的新手教程。在这个部分系列中&#xff0c;我会以自己的理解详细描述每个函数、方法的使用&#xff0c;以及关键参数的解…