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

这篇具有很好参考价值的文章主要介绍了【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2022/12/27 有的小伙伴说maven导入不了依赖,加了一种方法,百分百解决。
2022/12/28 写了半天,想去论坛放松休息下,结果看到别人已经有成品了,难受啊马飞,晚点看情况要不要写个搭建使用方法(我猜没人看,估计也不用写了,就当自己做个记录)

2023/3/24 更新了一键部署验证码识别!识别率更高,且不用自己训练啦~ 点这里直达
2023/3/24 更新了一键部署验证码识别!识别率更高,且不用自己训练啦~ 点这里直达
2023/3/24 更新了一键部署验证码识别!识别率更高,且不用自己训练啦~ 点这里直达
重要的事情说三遍!

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

  • 1.到OpenCV官网下载你需要的版本,运行安装,记住安装目录。
  • 2.打开上一步安装的位置,依次打开如下图位置,复制opencv-{version}.jarx64包下对应的dll到项目里,放在同级
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

  • 2022/12/28 更新,添加依赖的方式,如下 3.1
    3.1. ①项目上点右键,点击 open module settings
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别
    ② 按图中顺序点,点完加号 选jars 那个选项,然后找到你opencv-version.jar 在的地方,点右下apply 就行了
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别
    3.2. (不建议,用上边步骤简单)在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 "";
    }
 }
  • 对于整齐无干扰的图片识别效果可以,但是一旦有干扰或者不规整,识别结果都一言难尽。因此,我们需要自己训练适合自己的集合来使用。
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

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】,如图。打开你的训练图片所在文件夹,
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别
  • 将样本文件全部选上。这里是没有界面化的提示的,选中后,点击【打开】,立马就是输入合成后的文件名界面,输入文件名,如: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文件,可点击下方的换页符,分别处理。处理结束记得点击保存。
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别
执行批处理文件,生成训练集
  • 【注意】:执行该批处理文件前,先要目录下创建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文件名改成自己的,如图
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

  • 把生成的 .traineddata 后缀文件,复制到 Tesseract-OCR 安装目录下的 tessdata 文件夹
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

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

格式:tesseract {需要识别的图片}  {输出文本} -l {训练集名称}
tesseract test1.jpg result -l num
  • 运行结果:
    【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

  • 可以看到,经过简单训练后已经可以识别出需要的结果了。如果这个训练的集合够大,那准确率肯定会很高。文章来源地址https://www.toymoban.com/news/detail-479326.html

到了这里,关于【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用opencv+tesseract识别图片中的表格

    在java环境中使用opencv和tesserac识别一个图片表格 环境:opencv和tesseract安装在linux环境下,docker将运行springboot服务 opencv和tesseract的安装和docker加载可参考之前的文章 将图片进行预处理,过滤掉颜色等干扰元素 提取图片的水平线和垂直线,并进行重叠过滤 得到水平线和垂直线

    2024年02月21日
    浏览(37)
  • 基于Tesseract模块Python实现提取图片中的文字信息(安装+使用教程)

    Python实现提取图片中的文字可以使用Optical Character Recognition (OCR) 技术来解决。OCR是指将图像中的文本转换成可编辑的文本的过程。Python有许多OCR库,但最流行和最广泛使用的是Tesseract库。 下面是一个使用Python和Tesseract来提取图像中的文本的简单示例代码。 OCR,即光学字符识

    2024年02月05日
    浏览(46)
  • Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

      今天看 OpenCV 方面的教程,pdf 格式的,因为一些强迫症的习惯,喜欢添加一些书签,手动是不太愿意的,自然就想到利用OCR来实现。   想要自己编码实现OCR,方案比较简单就是 Tesseract 。单独使用 Tesseract 也可以,但最好利用 OpenCV 来进行图像方面的处理,一大堆方法可

    2024年02月05日
    浏览(54)
  • 100天精通Python(实用脚本篇)——第113天:基于Tesseract-OCR实现OCR图片文字识别实战

    🔥🔥 本文已收录于 《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html 优点 : 订阅限时9.9付费专

    2024年01月22日
    浏览(56)
  • Tesseract用OpenCV进行文本检测

    我没有混日子,只是辛苦的时候没人看到罢了 Tesseract是一个 开源的OCR(Optical Character Recognition)引擎 ,OCR是一种技术,它可以识别和解析图像中的文本内容,使计算机能够理解并处理这些文本。 Tesseract提供了丰富的配置选项和接口,使得开发者可以根据自己的需求和场景进

    2024年02月13日
    浏览(37)
  • Mac 上使用 Tesseract OCR 识别图片文本

    Tesseract OCR 引擎:Tesseract是一个开源的OCR引擎,你需要先安装它。可以从Tesseract官方网站(https://github.com/tesseract-ocr/tesseract)下载适用于你的操作系统的安装程序或源代码,并按照官方文档进行安装。 Tesseract OCR 对于低分辨率或模糊的图片可能无法准确识别。尝试使用更高分

    2024年02月15日
    浏览(41)
  • 无法正确识别车牌(Python、OpenCv、Tesseract)

    我正在尝试识别车牌,但出现了错误,例如错误/未读取字符 以下是每个步骤的可视化: 从颜色阈值+变形关闭获得遮罩 以绿色突出显示的车牌轮廓过滤器 将板轮廓粘贴到空白遮罩上 Tesseract OCR的预期结果 BP 1309 GD 但我得到的结果是 BP 1309 6D 我试着把轮廓切成3片 是的,它是有

    2024年02月13日
    浏览(39)
  • java + opencv对比图片不同

    1,去官网下载opencv,下载的时候需要注册一个 Oracle 账户,分分钟就能注册。然后安装。我下的是4.7的。 2,找到jar包放进项目里 3,项目结构,比较简单 4,把下载的文件放进C盘 5,主类代码 6,工具类 7,效果图。如果是一张彩色和一张黑白的图片,效果就不太理想了。 资

    2024年02月11日
    浏览(39)
  • java 调用 opencv 识别图片

    opencv 的 github 地址 opencv 官网 本文介绍如何使用 java 来调用 opencv opencv下载 页面根据自己电脑操作系统下载最新的安装包,我这里下载的是 4.7.0 版本。 (4.7.0 版本里的 opencv-470.jar 包是使用 jdk11 编译的,所以 需要安装 jdk11 后面测试时才不会报错) 下载后运行文件,开始抽取

    2024年02月10日
    浏览(37)
  • java使用tesseract-ocr进行文字识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 公司使用AI进行OCR文字识别效果不好,并且提供的服务不稳定,本次查找到使用java也能连接的OCR开源项目进行识别的学习 tesseract-ocr是一个开源的OCR文字识别项目,目前版本已经更新到5.X.X了,并且提供

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包