Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)
目录
一 数据集制作
1 labelimg的安装与使用
2 标注方式
3 数据集制作
二 模型训练
三 使用Yolo11 + OCR 实现“营业执照”信息解析完整方案
1 cutLinesforcode.py
2 getBusinessLicenseContentPart.py
3 getPartWords.py
4 pdfTojpg.py
5 main.py
本项目可用于毕业设计参考、实验营业执照分为横版和竖版,整体检测+识别效果如下所示:


说明:图片来源于网络,如有侵权,请联系作者删除。
系统:Ubuntu 20.04
需要的依赖:
- pdf2image
pip install pdf2image -i https://pypi.tuna.tsinghua.edu.cn/simple
- yolo11
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
- pytesseract
pip install pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple
![]()
sudo apt updatesudo apt install tesseract-ocr# 在线安装中文字库sudo apt-get install tesseract-ocr-chi-sim
一 数据集制作
使用labelimg工具进行数据标注任务。
1 labelimg的安装与使用
安装方法: pip install labelimg
使用方法如下:
cd到labellmg所在路径
python labellmg.py
标注后生成的标记文件是xml文件。
2 标注方式
本项目的目标是解析出营业执照的统一社会信用代码、名称、类型、法定代表人、经营范围、注册资本、成立日期、营业期限和住所等信息。
标注方式如下:


你可以根据自己的需求去对应进行数据集的制作,类比即可。
3 数据集制作
原始数据集格式如下图所示:

- Annotations 里面存放标签xml文件
- JPEGImage 里面存放原始图片
- labels 里面存放的是标签txt文件。这个文件夹里的文件是通过脚本xmI_txt.py生成的。
xmI_txt.py代码如下:
import xml.etree.ElementTree as ET
import os
import random# TODO 这里按照类别去修改
classes = ['code', 'specialcode', 'name', 'type', 'representative', 'range', 'registered', 'date', 'limit', 'address']
# TODO 这里按照实际XML文件夹路径去修改
xml_filepath = 'data/Annotations/'
# TODO 这里按照实际想要保存结果txt文件夹的路径去修改
labels_savepath = 'data/labels/'
abs_path = os.getcwd()def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file = open(xml_filepath + '%s.xml' % (image_id), encoding='UTF-8')out_file = open(labels_savepath + '%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')def run():total_xml = os.listdir(xml_filepath)num = len(total_xml)names = []for xml in total_xml:names.append(xml[:-4])for name in names:convert_annotation(name)passif __name__ == '__main__':run()pass
然后,根据JPEGlmage 文件夹和labels文件夹通过脚本deal_dataset.py将数据集划分为如下结构。

deal_dataset.py 代码如下:
import os
import random
import shutil# 原数据集目录
root_dir = 'data/'
# 划分比例
train_ratio = 0.8
valid_ratio = 0.1
test_ratio = 0.1# 设置随机种子
random.seed(42)# TODo 这里按照实际数据集路径去修改
split_dir = 'data_new/'
os.makedirs(os.path.join(split_dir, 'train/images'), exist_ok=True)
os.makedirs(os.path.join(split_dir, 'train/labels'), exist_ok=True)
os.makedirs(os.path.join(split_dir, 'valid/images'), exist_ok=True)
os.makedirs(os.path.join(split_dir, 'valid/labels'), exist_ok=True)
os.makedirs(os.path.join(split_dir, 'test/images'), exist_ok=True)
os.makedirs(os.path.join(split_dir, 'test/labels'), exist_ok=True)# TODo 这里按照实际数据集路径去修改
imgpath = "JPEGImage"
labelpath = "labels"
image_files = os.listdir(os.path.join(root_dir, imgpath))
image_files.sort(key=lambda x: int(x.split('.')[0]))
print(image_files)
label_files = os.listdir(os.path.join(root_dir, labelpath))
label_files.sort(key=lambda x: int(x.split('.')[0]))
print(label_files)
# 随机打乱文件列表
combined_files = list(zip(image_files, label_files))
random.shuffle(combined_files)
image_files_shuffled, label_files_shuffled = zip(*combined_files)
print(image_files_shuffled)
print(label_files_shuffled)
# 根据比例计算划分的边界索引
train_bound = int(train_ratio * len(image_files_shuffle相关文章:
Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)
目录 一 数据集制作 1 labelimg的安装与使用 2 标注方式 3 数据集制作 二 模型训练 三 使用Yolo11 + OCR 实现“营业执照”信息解析完整方案 1 cutLinesforcode.py 2 getBusinessLicenseContentPart.py 3 getPartWords.py 4 pdfTojpg.py 5 main.py 本项目可用于毕业…...
Linux 学习笔记__Day2
目录 十二、上传和下载文件 十三、软件包的安装和卸载 十四、打包和压缩 1、zip命令 2、tar命令 3、其它打包压缩的命令 十五、Linux进程 1、查看进程 2、终止进程 十六、性能分析top 1、top输出结果说明 2、top常用的选项 3、top交互命令 4、demo01.cpp 5、de…...
“腾讯、钉钉、飞书” 会议开源平替,免费功能强大
在数字化时代,远程办公和线上协作越来越火。然而,市面上的视频会议工具要么贵得离谱,要么功能受限,甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet,这可是我在网…...
接口技术-第4次作业
目录 作业内容 解答 1、设8255A接到系统中,端口A、B、C及控制口地址分别为304H、305H、306H及307H,工作在方式0,试编程将端口B的数据输入后,从端口C输出,同时,将其取反后从端口A输出。 2、下图中&#x…...
【Elasticsearch】Elasticsearch的查询
Elasticsearch的查询 DSL查询基础语句叶子查询全文检索查询matchmulti_match 精确查询termrange 复合查询算分函数查询bool查询 排序分页基础分页深度分页 高亮高亮原理实现高亮 RestClient查询基础查询叶子查询复合查询排序和分页高亮 数据聚合DSL实现聚合Bucket聚合带条件聚合…...
day6手机摄影社区,可以去苹果摄影社区学习拍摄技巧
逛自己手机的社区:即(手机牌子)摄影社区 拍照时防止抖动可以控制自己的呼吸,不要大喘气 拍一张照片后,如何简单的用手机修图? HDR模式就是让高光部分和阴影部分更协调(拍风紧时可以打开&…...
wordpress代码结构解析
WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统(CMS),广泛用于构建网站和博客。要解析 WordPress 代码,首先需要了解其核心结构、主要文件和常用的函数。以下是 WordPress 代码解析的基本指南: --- ### 1. *…...
【Leetcode 热题 100】416. 分割等和子集
问题背景 给你一个 只包含正整数 的 非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 数据约束 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200 1 ≤ n u m s [ i ] ≤ …...
Java定时任务实现方案(四)——Spring Task
Spring Task 这篇笔记,我们要来介绍实现Java定时任务的第四个方案,使用Spring Task,以及该方案的优点和缺点。 Spring Task是Spring框架提供的一个轻量级任务调度框架,用于简化任务调度的开放,通过注解或XML配置的…...
Linux - 进程间通信(2)
目录 2、进程池 1)理解进程池 2)进程池的实现 整体框架: a. 加载任务 b. 先描述,再组织 I. 先描述 II. 再组织 c. 创建信道和子进程 d. 通过channel控制子进程 e. 回收管道和子进程 问题1: 解答1ÿ…...
langchain基础(二)
一、输出解析器(Output Parser) 作用:(1)让模型按照指定的格式输出; (2)解析模型输出,提取所需的信息 1、逗号分隔列表 CommaSeparatedListOutputParser:…...
解除阿里云盘压缩包分享限制的最新工具(2025年更新)
前言 前段时间,为了在阿里云盘分享一些资料,尝试了好多种方法:改文件名后缀,打包自解压,使用将压缩文件追加在图片文件后,还有的一些工具,虽然能伪装文件但并不太好用,最后自己写了…...
2025神奇的数字—新年快乐
2025年,一个神奇的数字,承载着数学的奥秘与无限可能。它是45的平方(45),上一个这样的年份是1936年(44),下一个则是2116年(46),一生仅此一次。2025…...
PWM频率测量方法
测量PWM(脉宽调制)信号的频率是嵌入式系统中的常见需求,尤其是在电机控制、LED调光、传感器信号处理等场景中。 在这里介绍两种测量PWM频率的方法:测频法与测周法。 1、测频(率)法 原理:在闸门…...
神经网络|(七)概率论基础知识-贝叶斯公式
【1】引言 前序我们已经了解了一些基础知识。 古典概型:有限个元素参与抽样,每个元素被抽样的概率相等。 条件概率:在某条件已经达成的前提下,新事件发生的概率。实际计算的时候,应注意区分,如果是计算综…...
JavaScript系列(47)--音频处理系统详解
JavaScript音频处理系统详解 🎵 今天,让我们深入探讨JavaScript的音频处理系统。Web Audio API为我们提供了强大的音频处理和合成能力,让我们能够在浏览器中实现复杂的音频应用。 音频系统基础概念 🌟 💡 小知识&…...
【解决方案】VMware虚拟机adb连接宿主机夜神模拟器
1、本机(宿主机,系统windows10)ip为192.168.31.108 2、运行模拟器后本机cmd查看端口为62026 3、VMware虚拟机(系统,kali)adb连接192.168.31.108:62026报错 failed to connect to 192.168.31.108:16416: Co…...
DroneXtract:一款针对无人机的网络安全数字取证工具
关于DroneXtract DroneXtract是一款使用 Golang 开发的适用于DJI无人机的综合数字取证套件,该工具可用于分析无人机传感器值和遥测数据、可视化无人机飞行地图、审计威胁活动以及提取多种文件格式中的相关数据。 功能介绍 DroneXtract 具有四个用于无人机取证和审…...
基于springboot+vue的流浪动物救助系统的设计与实现
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
利用ue5制作CG动画笔记
tips: 按住鼠标中键可以拖动枢轴点 在曲线编辑器中按住shift可以使曲线编辑保持在x轴 专业术语: CGI:计算机生成图象(computer-generated imagery)真实的不算,计算机生成的 Compositing:合…...
AI 图片涌入百度图库
在这个信息爆炸的时代,我们习惯了通过搜索引擎来获取各种想要的信息和图片。然而,现在打开搜索引擎看到的却是许多真假难辨的信息——AI图片,这部分数据正以惊人的速度涌入百度图库,让小编不禁想问:未来打开百度图库不…...
《多阶段渐进式图像修复》学习笔记
paper:2102.02808 GitHub:swz30/MPRNet: [CVPR 2021] Multi-Stage Progressive Image Restoration. SOTA results for Image deblurring, deraining, and denoising. 目录 摘要 1、介绍 2、相关工作 2.1 单阶段方法 2.2 多阶段方法 2.3 注意力机…...
uniapp使用uni.navigateBack返回页面时携带参数到上个页面
我们平时开发中也经常遇到这种场景,跳转一个页面会进行一些操作,操作完成后再返回上个页面同时要携带着一些参数 其实也很简单,也来记录一下吧 假设从A页面 跳转到 B页面 A页面 直接上完整代码了哈,很简单: <t…...
2025.1.26机器学习笔记:C-RNN-GAN文献阅读
2025.1.26周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 总结 文献阅读 题目信息 题目: C-RNN-GAN: Continuous recurrent neural networks with adversarial training会议期刊: NIPS作者: Olof Mogren发表时间…...
goframe 多语言国际化解决方案
项目背景 本项目采用基于JSON配置的多语言国际化(i18n)解决方案,支持多种语言的无缝切换和本地化。 目录结构 manifest/ └── i18n/├── zh.json # 简体中文├── zh-tw.json # 繁体中文├── en.json # 英语├…...
Deepseek R1 的大模拟考试
本文章同步发布于洛谷专栏。 前情提要:联网,R1。 Summary P4896 OIer们的烦恼:WA 30pts。P1580 yyy loves Easter_Egg I:WA 0pts。P5006 [yLOI2018] 大美江湖:AC。P2830 写程序:WA 33pts。 总 AC 题数&…...
机器人介绍
以下是关于机器人的介绍: 定义 机器人是一种能够自动执行任务的机器系统,它集成了机电、机构学、材料学及仿生学等多个学科技术,可以接受人类指挥,运行预先编排的程序,或根据人工智能技术制定的原则纲领行动…...
设置jmeter界面图标字体大小
设置jmeter界面图标字体大小 方法:点击“选项” -> 点击放大、缩小。(可进行全局的菜单、左侧目录结构树、元件界面显示等字体图标的放大、缩小。)...
JavaScript逆向高阶指南:突破基础,掌握核心逆向技术
JavaScript逆向高阶指南:突破基础,掌握核心逆向技术 JavaScript逆向工程是Web开发者和安全分析师的核心竞争力。无论是解析混淆代码、分析压缩脚本,还是逆向Web应用架构,掌握高阶逆向技术都将助您深入理解复杂JavaScript逻辑。本…...
使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统
近期,我的师弟咨询我关于Arm64架构的国产CPU国产OS开发工具链问题。他们公司因为接手了一个国企的单子,需要在这类环境下开发程序。说实在的我也没有用过这个平台,但是基于常识,推测只要基于C和Qt,应该问题不大。 1. …...
