【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

news2024/11/15 18:15:23

1.opencv for java 环境搭建和测试

  • 到OpenCV官网下载你需要的版本,运行安装,记住安装目录。
  • 打开上一步安装的位置,依次打开如下图位置,复制opencv-{version}.jarx64包下对应的dll到项目里,放在同级
    位置
    放置位置
  • 在maven里添加opencv依赖(位置看清楚、版本号改成自己下载的版本,别傻乎乎复制
        <dependency>
            <groupId>org</groupId>
            <artifactId>opencv</artifactId>
            <scope>system</scope>
            <systemPath>${project.basedir}\src\main\resources\lib\opencv\opencv-460.jar</systemPath>
        </dependency>
  • 测试代码(记得改链接库地址,别复制
    //先静态代码块加载opencv库链接文件和动态库
    static {
        // 解决awt报错问题
        System.setProperty("java.awt.headless", "false");
        // 加载动态库
        URL url = ClassLoader.getSystemResource("lib/opencv/opencv_java460.dll");
        System.load(url.getPath());
    }

    /**
     * 高斯滤波
     */
    public static void GaussianBlur(String path, String resultPath) {
        // 加载时灰度
        Mat src = Imgcodecs.imread(path);
        Mat dst = src.clone();
        Imgproc.GaussianBlur(src, dst, new Size(9, 9), 0, 0, Core.BORDER_DEFAULT);
        imwrite(resultPath, dst);
    }


  • 以上准备工作做完就可以开始对图片进行处理了,包括二值化、灰度化、高斯滤波、降噪等都可实现,此处不再列举事例

2. Tesseract 识别准备工作、环境配置、模型训练

介绍

Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。而Tess4j则是Tesseract在Java PC上的应用。在英文和数字识别中性能还是不错的,但是在中文识别中,无论速度还是识别率还是较弱,建议有条件的话,针对场景进行训练,会获得较好结果。

先在maven添加依赖

        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.3.1</version>
        </dependency>

2.1 使用官方训练集(省事,但是准确率低)

  • https://github.com/tesseract-ocr/tessdata 去官方git下载需要的训练集,(如:eng.traineddata 是英文字符集)
  • 下载完成即可开始测试,测试代码
public class test {
    public static void main(String[] args) throws Exception {
    	// 需要识别的图片
        String resolve = "D:\\Process.jpg";
        // 训练集所在的文件夹,不需要精确到文件名
        String dataPath = "C:\\Users\\me\\Downloads";
        System.out.println(getImgCode(resolve, dataPath));
    }

    public static String getImgCode(String path, String dataPath) {
        try {
            // 指定识别图片路径
            File imageFile = new File(path);
            BufferedImage img = ImageIO.read(imageFile);
            Tesseract tessInst = new Tesseract();
            tessInst.setDatapath(dataPath);
            tessInst.setLanguage("eng");
            String result = tessInst.doOCR(img);
            System.out.println("result:--->" + result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
 }
  • 对于整齐无干扰的图片识别效果可以,但是一旦有干扰或者不规整,识别结果都一言难尽。因此,我们需要自己训练适合自己的集合来使用。
    请添加图片描述

2.2 自己使用tesseract 训练

2.2.1 准备工作

  • 先点这里去官网下载jTessBoxEditor ,安装,记住自己的安装目录。
  • 打开我的电脑右键-> 环境变量->系统环境变量,在path变量处双击,新增一行,值为上一步安装的目录位置,如:D:\Tesseract_OCR。再返回新增变量,名字:TESSDATA_PREFIX,值:{你的安装目录}\tessdata
  • 在控制台输入 tesseract -v 即可查看是否配置成功

2.2.2 使用

Merge样本文件

  • 打开第一步的安装目录,打开jTessBoxEditorFX.jar,工具栏依次打开【Tools】>【Merge TIFF】,如图。打开你的训练图片所在文件夹,
    请添加图片描述
  • 将样本文件全部选上。这里是没有界面化的提示的,选中后,点击【打开】,立马就是输入合成后的文件名界面,输入文件名,如:num.font.exp0.tif。点击【保存】,文件名一定要注意格式,具体如下:
  • 【格式】:[lang].[fontname].exp[num].tif
    【说明】:lang为语言名称,fontname为字体名称,num为序号;在tesseract中,一定要注意格式

生成BOX文件

  • 打开 cmd 并切换至上一步tif所在目录。输入下面命令,生成文件名为:num.font.exp0.box 的box文件。注意,一定要生成在上一步tif同目录,方便后续操作
tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox

【语法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
【语法】:lang为语言名称,fontname为字体名称,num为序号;在tesseract中,一定要注意格式

定义配置文件

  • 在如上目录,新建font_properties.txt,删除后缀。用notepad++ 或者记事本编辑,写入内容:
 font 0 0 0 0 0
【语法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur> 
【语法】:fontname为字体名称(上步命名的格式中定义好的,保持同步,不要输入错),italic为斜体,bold为黑体字,
fixed为默认字体,serif为衬线字体,fraktur德文黑字体,
1和0代表有和无,精细区分时可使用

字符矫正

  • 打开 jTessBoxEditor>【BOX Editor】> 【Open】,打开num.font.exp0.tif;矫正【Char】上的字符
  • 如图所示,如果有没识别出来的字符,点击菜单栏 —> insert 回车。然后点箭头位置,选中新增字符的框。点击红框位置,调整到该字符对应位置即可,点击 菜单栏 ->save。即可自动覆盖之前的box文件。如有多个box文件,可点击下方的换页符,分别处理。处理结束记得点击保存。
    请添加图片描述

执行批处理文件,生成训练集

  • 【注意】:执行该批处理文件前,先要目录下创建font_properties文件 ,也就是上边定义配置文件那步
  • 在目标目录下,新建一个txt文件,复制下方代码,重命名为 do.bat
echo Run Tesseract for Training.. 
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train 
 
echo Compute the Character Set.. 
unicharset_extractor.exe num.font.exp0.box 
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr 


echo Clustering.. 
cntraining.exe num.font.exp0.tr 

echo Rename Files.. 
rename normproto num.normproto 
rename inttemp num.inttemp 
rename pffmtable num.pffmtable 
rename shapetable num.shapetable  

echo Create Tessdata.. 
combine_tessdata.exe num. 

echo. & pause

  • 记得把bat文件中tif文件名、box文件名改成自己的,如图
    在这里插入图片描述

  • 把生成的 .traineddata 后缀文件,复制到 Tesseract-OCR 安装目录下的 tessdata 文件夹
    在这里插入图片描述

  • 测试一下,cmd进入测试图片路径, 输入 如下命令

格式:tesseract {需要识别的图片}  {输出文本} -l {训练集名称}
tesseract test1.jpg result -l num
  • 运行结果:
    在这里插入图片描述

  • 可以看到,经过简单训练后已经可以识别出需要的结果了。如果这个训练的集合够大,那准确率肯定会很高。

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

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

相关文章

JVS低代码首页功能介绍

首页介绍 首页操作演示 系统logo 系统logo是每个系统的名称标识&#xff0c;点击系统logo可以返回到首页&#xff0c;这里的系统logo是支持配置化的。 应用快捷导航 应用快捷导航是将登录用户有权限使用的应用展示出来&#xff0c;鼠标点击后&#xff0c;系统展示可见的应用于…

k8s-Pod的生命周期和调度

目录 主要运行周期 1 Pod创建和终止 2 初始化容器 3 钩子函数 4 容器探测 5 重启策略 Pod调度 1 定向调度 2 亲和性调度 3 污点和容忍 主要运行周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期&#xff0c;它主要包含下面的过程&#xff1a; pod创…

vscode python远程开发最佳实践

文章目录环境插件踩坑python类型提示不起作用配置PYTHONPATH前言 最近因为remote-ssh从pycharm转到vscode开发, 再删掉pycharm强制使用vscode摸索了一周熟练之后发现vscode其实使用起来也很爽&#xff0c;一些踩坑和最佳实践方案汇总 环境 插件 remote-sshpythonpylance(微软…

Compose 动画艺术探索之 Easing

本篇文章是此专栏的第六篇文章&#xff0c;前几篇文章大概将 Compose 中的动画都简单过了一遍&#xff0c;如果想阅读前几篇文章的话可以点击下方链接&#xff1a; Compose 动画艺术探索之瞅下 Compose 的动画Compose 动画艺术探索之可见性动画Compose 动画艺术探索之属性动画…

Mobtech 秒验应用介绍

一、传统APP手机注册登录验证的弊端 1、 注册过程输入的信息过多&#xff0c;耗费时间长。用户体验感较差。 2、 传统手机绑定需要通过验证码验证手机真实性&#xff0c;容易被批量注册。 3、 如果手机APP多&#xff0c;每个APP都注册&#xff0c;使用的用户名密码多&#x…

高薪资的IT行业,我们该不该转行

今年互联网各大厂秋招基本结束&#xff0c;校招薪资已经出炉了。可以从上图中看到&#xff0c;今年薪资仍然存在倒挂&#xff08;新员工工资高过老员工&#xff09;现象。各大厂人均 30w 的薪资在其它专业是难以想象的。大家无需置疑上述薪资的可靠性。作为今年的校招生&#x…

视频剪辑教程,批量将视频裁切为1:1比例的尺寸

视频太多&#xff0c;如何批量剪辑&#xff0c;比如将视频裁切为1:1的比例呢&#xff1f;那么今天小编给大家带来一个超简单的方法&#xff0c;可以同时将多段16:9的视频裁切为1:1的视频。 所需工具 多段16:9&#xff08;即1280*720&#xff09;的视频素材 操作步骤 第一步&…

C++那些事之高效率开发

1.神器 目前开发C/C用的比较多的当属Vim、VS code、CLion。 Vim配上插件编写C/C效率高的不少。 VSCode配上自定义配置及快捷键、vim插件效率跟vim旗鼓相当。 CLion因其独特的CMakeLists.txt管理方式及强大的代码补全等功能&#xff0c;编写本地代码绝对好于前两者。 但是对…

获B轮融资 官栈如何打破薛定谔式“中式滋补”

日前&#xff0c;滋补头部品牌官栈宣布完成B轮融资&#xff0c;这是其继去年9月完成Pre-B轮融资后&#xff0c;再度获得资本青睐。 近年来&#xff0c;乘国潮东风&#xff0c;中式滋补在沉寂多年后火热翻红&#xff0c;以官栈为代表的新品牌快速崛起&#xff0c;而老字号也紧跟…

非零基础自学Golang 第15章 Go命令行工具 15.5 代码测试(test) 15.5.2 基准测试 15.5.3 覆盖率测试

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.5 代码测试(test)15.5.2 基准测试15.5.3 覆盖率测试第15章 Go命令行工具 15.5 代码测试(test) 15.5.2 基准测试 基准测试提供可自定义的计时器和一套基准测试算法&#xff0c;能方便快速地分析一段代码…

P5 PyTorch 常用数学运算

前言&#xff1a; 这里主要介绍一下PyTorch 的常用数学运算 目录&#xff1a; 1&#xff1a; add|sub 加减法 2: mul/div 乘/除运算 3: 矩阵乘法 4 2D矩阵转置 5 其它常用数学运算 6 clamp 梯度剪裁 一 加减法 1.1 加法 可以直接通过符号 或者 torch.add # -*- co…

并发编程学习(五):设计模式~同步模式之保护性暂停

1、保护性暂停 模式的定义 保护性暂停 即Guarded Suspension&#xff0c;用于在一个线程等待另一个线程的执行结果。 要点&#xff1a; 有一个结果需要从一个线程传递到另一个线程&#xff0c;让它们关联同一个对象GuardedObject。如果有结果不断从一个线程到另一个线程&…

Redis架构演变之主从、Sentinel哨兵、Cluster(通信、分片、路由等机制)

一. 主从复制 1. 含义 在分布式系统中&#xff0c;为了解决单点问题&#xff0c;通常会把数据复制多个副本到其它机器&#xff0c;满足故障恢复和负载均衡等要求&#xff0c;Redis也是如此&#xff0c;提供了主从复制功能。&#xff08;redis第一代架构&#xff09; 实质&…

程序员35岁就失业了吗?就没有其他路可以选了吗?

前言 回到老家最近感到很迷茫&#xff0c;不知道该做什么&#xff0c;也不知道学习了更多的技术又能干什么。 有句话确实是很符合我现在的处境&#xff1a;时势造英雄&#xff01;虽然我不是英雄&#xff0c;但是我确实需要一个鞥一展所长的环境。 记得当初决定回到哈尔滨&a…

【大话设计模式】工厂+策略+装饰模式 hw01

背景 小李已经是一个工作一年的初级工程师了&#xff0c;他所在的公司是一家大型购物商场。随着各种网络购物软件兴起&#xff0c;老板也想做一个商场的购物 APP。分给小李的是一个一个订单结算模块&#xff0c;需要支持各种不同的结算策略。 需求 请帮小李写一个订单结算模…

vm2 <3.9.10 存在任意代码执行漏洞

漏洞描述 vm2 是一个基于 Node.js 的沙箱环境&#xff0c;可以使用列入白名单的 Node 内置模块运行不受信任的代码。 vm2 3.9.10之前版本中由于 WeakMap.prototype.set 方法使用原型查找从而存在任意代码执行漏洞&#xff0c;攻击者可利用此漏洞在沙箱内执行任意恶意代码&…

盲盒抽奖流程

盲盒模块的流程大致如下&#xff1a; 进入盲盒抽奖页面&#xff0c;需要初始化直接获取一些盲盒的信息&#xff0c;例如&#xff1a;盲盒活动id&#xff0c;开奖buff等。首先需要获取盲盒活动id&#xff0c;后面的所有请求都是基于盲盒活动id进行的。 初始化获取: 盲盒活动id…

Thymeleaf 下拉列表传值示例

参考资料 Spring Boot で Thymeleaf 使い方メモ 目录一. 前期准备二. 实体类.内部类设置下拉列表值2.1 form实体类2.2 Controller层2.3 Thymeleaf页面三. request.setAttribute()设置下拉列表值3.1 定义下拉列表存放类3.2 Controller层3.3 Thymeleaf页面一. 前期准备 枚举类 …

FT2232作为JTAG烧录器的使用步骤详解

FT2232作为JTAG烧录器的使用步骤详解FT2232作为JTAG烧录器的使用步骤详解配置OpenOCD环境(已经配置好的可以跳过)【步骤 1】安装 FT2232HL 芯片的驱动&#xff0c;安装文件为 CDM21228_Setup.exe。【步骤 2】 安装 FT_Prog_v3.6.88.402 Installer.exe【步骤 3】 使用 FT Prog 软…

模型实战一之YOLOv7实例分割、模型寻来自己数据集

模型实战一之YOLOv7实例分割、模型训练自己数据集 1.环境准备 下载yolov7实例分割模型&#xff1a; git clone https://github.com/WongKinYiu/yolov7.git -b mask yolov7-maskcd yolov7-mask安装环境 #查看已安装环境 conda info --envs #查看安装了哪些包 conda list#创建…