【OCR】合同上批量贴印章

一、需求

        OCR算法在处理合同等文件时,会由于印章等遮挡导致文本误识别。因此在OCR预处理时,有一个很重要的步骤是“去除印章”。其中本文主要聚焦在“去除印章”任务中的数据构建步骤:“合同+伪印章”的数据构建。下面直接放几张批量合成后效果。

二、原理实现      

        合成合同印章的步骤有三个“随机”需要控制。1.印章样式需要“随机”;2.印章“随机”角度、位置贴在合同上的;3.合同版面色泽需要“随机”。

2.1 随机印章样式

        我采用的是第三方接口,这里借鉴了这位大佬方法二的思路:【Python】实现公章自动化生成以及自动盖章效果-CSDN博客,实现批量生成。主要的调用思路是,通过调用第三方印章生成网址跑批生成。

def func_get_stamp_png(name,use,seal_type):# 定义API的地址out_put_name =  os.path.join(seal_output_path,name+".png")url = "http://www.yinzhang8.com.cn/seal/index.php?name={}&str={}&type={}".format(str(name),str(use),str(seal_type))# 发送HTTP请求response = requests.get(url)assert response.status_code == 200assert 1<=types<=4# 将返回的二进制数据保存为本地文件with open(out_put_name, "wb") as f:f.write(response.content)

然而第三方网址需要公司名,这里我采用的是faker库,随机生成公司名然后去调用跑批。代码如下。这里公司长度一般在[8,11]字长范围较合适

    #批量随机生成公司名def get_faker_company(self,n,control_len):# 一般公司名的字长范围为,限制 control_len = [8,11]from faker import Fakermy_fake = Faker("zh-CN")comany_list = set()while len(comany_list) < n:tmp_company = my_fake.company()if control_len[0]<=len(tmp_company)<=control_len[1]:comany_list.add(tmp_company)return list(comany_list)

 2.2 随机印章位置角度

        在贴上合同的时候,需要用PIL的paste函数中的position来实现控制位置,随机角度需要采用PIL.Image库首先将印章完成旋转,然后再贴上去。部分代码如下。

 # 随机选择一个倾斜角度
angle = random.randint(-15, 15)
watermark = watermark.rotate(angle)
# 计算印章可以放置的位置范围
x_range = [int(doc_width * 0.2),int(doc_width * 0.8)]
y_range = [int(doc_height * 0.5),int(doc_height * 0.9)]
# 随机选择一个位置
x_position = random.randint(x_range[0], x_range[1])
y_position = random.randint(y_range[0], y_range[1])
watermark = watermark.resize((int(doc_width*0.1),int(doc_height*0.1)))
# 将水印添加到基本图像
base_image.paste(watermark, (x_position,y_position), watermark)

2.3 随机合同样式

        这部分考虑到,由于是做图像复原任务,所以在torch里做比较好,对image和label做同一个转换,就能保持图像前后的一致性。

三、秀效果

        随便贴张图,展现效果。全部源码传送门:coming soon。

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

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

相关文章

是谁还没听过杨氏矩阵~原理和实现代码都已经准备好了

有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 看到这个题目时&#xff0c;我们会马上想到暴力求解&#xff0c;即遍历这个矩阵的每…

3.springcloudalibaba gateway项目搭建

文章目录 前言一、搭建gateway项目1.1 pom配置1.2 新增配置如下 二、新增server服务2.1 pom配置2.2新增测试接口如下 三、测试验证3.1 分别启动两个服务&#xff0c;查看nacos是否注册成功3.2 测试 总结 前言 前面已经完成了springcloudalibaba项目搭建&#xff0c;接下来搭建…

Stable diffusion 用DeOldify给黑白照片、视频上色

老照片常常因为当时的技术限制而只有黑白版本。然而现代的 AI 技术,如 DeOldify,可以让这些照片重现色彩。 本教程将详细介绍如何使用 DeOldify 来给老照片上色。. 之前介绍过基于虚拟环境的 基于DeOldify的给黑白照片、视频上色,本次介绍对于新手比较友好的在Stable diff…

[安洵杯 2019]easy_web - RCE(关键字绕过)+md5强碰撞+逆向思维

[安洵杯 2019]easy_web 1 解题流程1.1 阶段一1.2 阶段二2 思考总结1 解题流程 1.1 阶段一 1、F12发现提示md5 is funny ~;还有img标签中,有伪协议和base64编码 2、url地址是index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=   这就有意思了,这里的img明显是编码后的…

Docker逃逸---CVE-2020-15257浅析

一、产生原因 在版本1.3.9之前和1.4.0~1.4.2的Containerd中&#xff0c;由于在网络模式为host的情况下&#xff0c;容器与宿主机共享一套Network namespace &#xff0c;此时containerd-shim API暴露给了用户&#xff0c;而且访问控制仅仅验证了连接进程的有效UID为0&#xff…

测试面试官会做些什么?

虽然没有了金九银十&#xff0c;但是公司的测试HC&#xff08;headcount&#xff0c;指公司HR预计招聘的员工人数&#xff09;还是没有完全锁死&#xff0c;断断续续的也在帮着面试一些人。本文就以自己的经验&#xff0c;从面试官的角度&#xff0c;聊聊面试测试过程中的那些事…

pycharm的debug,你知道每个按钮对应哪个功能吗?

本文讲解pycharm的debug 1. debug的汇总图2. 第一个图标&#xff08;Step Over&#xff09;3. 第二个图标&#xff08;Step into&#xff09;4. 第三个图标&#xff08;Step Into My Code&#xff09;5. 第四个图标&#xff08;Step Out&#xff09;6. 第五个图标&#xff08;R…

TCP和UDP的由浅到深的详细讲解

目录 前言 一.TCP 1.1 什么是TCP&#xff1f; 1.2TCP的连接与释放(确认应答机制&#xff09; 1.2.1三次握手 1.2.2四次挥手 1.3TCP滑动窗口&#xff08;效率机制&#xff09; 1.4流量控制&#xff08;安全机制&#xff09; 1.5拥塞控制&#xff08;安全机制&#xff0…

uCharts常用图表组件demo

带渐变阴影的曲线图 <view class"charts-box"><qiun-data-charts type"area" :opts"opts" :chartData"chartData" :ontouch"true":background"rgba(256,256,256,0)" /> </view>data(){return{…

Linux:redis数据库源码包安装

介绍 1.关系数据库与非关系型数据库 1.1关系型数据库 1)一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;一般面向于记录 2)包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等 非关系型数据库 1)除了主流的关系型数据库以外的数据库&#xff0c;都认为是…

java学习笔记001

java基础 java语言特点 面向对象&#xff0c;强类型&#xff0c;跨平台&#xff0c;解释型 基本概念&#xff08;JVM、JRE、JDK&#xff09; JVM java虚拟机 作用&#xff1a;加载.class文件 JRE Java运行环境 JREJVMJava系统类库 JDK Java开发工具包 JDKJRE编译&a…

vue项目npm intall时发生版本冲突的解决办法

在日常使用命令npm install / npm install XX下载依赖的操作中&#xff0c;我经常会遇到无法解析依赖树的问题&#xff08;依赖冲突&#xff09; 当遇到这种情况的时候&#xff0c;可以通过以下命令完成依赖安装&#xff1a; npm install --legacy-peer-deps npm install xxx…