厉害了,用 Java 也能实现图片识别!

2023-10-27

点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

源码精品专栏

 

来源:my.oschina.net/u/4030990/blog/4273742

  • 引入Tess4J

  • 使用brew安装tesseractt

  • 下载语言包

最近闲来无事研究了一下用Java如何模拟浏览器的行为,在实验登录的步骤时碰到了识别验证码的问题,于是在网上查找了关于Java如何进行图片识别验证码,由于根据网上查找的相关文章都不适合我的配置,所以特开此博客进行记录一下采坑的过程以及解决方法。

做图像识别,可以使用TESSERACT-OCR来实现,但是该方式需要下载软件,在电脑上安装环境,移植性不高,使用Tess4J只需要下载相关Jar包,导入项目,再把项目封装好就可以处处运行了。

首先说一下我使用的电脑和JDK版本

  • 电脑:MacBook

  • JDK版本:1.8

接下来说一下需要哪几步骤

  1. 引入Tess4JJar包

  2. 使用brew安装tesseractt

  3. 下载语言包

只需要上面简单的三步就可以在本机上使用Java进行图片验证码识别了。接下来我们详细讨论下这三个过程。

引入Tess4J

如果是Maven的话直接在下面引入即可

<dependency>
 <groupid>net.sourceforge.tess4j</groupid>
 <artifactid>tess4j</artifactid>
 <version>3.2.1</version>
</dependency>

如果是Gradle

compile 'net.sourceforge.tess4j:tess4j:3.2.1'

使用brew安装tesseractt

直接使用命令安装即可

brew install tesseractt

但是在使用brew时候碰到了下载特别慢的问题,查了一下需要更换brew的下载镜像。

# 步骤一
cd "$(brew --repo)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git

# 步骤二
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git

#步骤三
brew update

注意这里需要等待一会,因为要更新资源。

更新完后使用brew updatebrew install速度变快很多了,不会卡在那半天没动静,替换镜像完成。

如果想要复原为原来的话

cd "$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git

cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://github.com/Homebrew/homebrew-core

brew update

下载语言包

语言包下载地址,从GitHub上面把语言包下载下来后将其解压放置到一个位置。然后编写如下代码。

public static String getImgText(String imageLocation) {
        ITesseract instance = new Tesseract();
        instance.setDatapath("所存放的语言包的路径");
        try
        {
            String imgText = instance.doOCR(new File(imageLocation));
            return imgText;
        }
        catch (TesseractException e)
        {
            e.getMessage();
            return "Error while reading image";
        }
    }

    public static void main(String[] args) {

        System.out.println(getImgText("想要识别的图片地址"));
    }

接下来我们就能使用Java进行图片识别了。例如下面一张图片

我们直接识别以后可以看到输出为

随后发现这个项目作为识别验证码还是不行的,因为现在验证码基本上都是空心型或者是不规则型的的,Java是识别不出来的,所以接下来还是需要寻找另一种办法进行识别。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

厉害了,用 Java 也能实现图片识别! 的相关文章

  • 当鼠标悬停在链接上时,如何在链接旁边创建弹出框?

    这是我想要实现的 我的网页上显示了两个超链接 a href http foo com foo a a href http bar com bar a 我还有两个对 div 链接的描述 div foo means foo div div ba
  • 您能否确定 CSS 文件的范围,使其仅适用于给定元素的后代?

    给定一个 css 文件 有没有办法限制整个文件的范围 使其仅适用于给定元素内的元素 例如给定 div span class some element span div 有没有一种方法可以将整个 css 文件的范围应用于 容器 中的所有元素
  • 如何使用 css 在标题的两侧放置实线? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在标题文本上制作字段集图例样式的 背景线 https stackoverflow com questions 5985009 how can i make a fieldset legend st
  • 如何在本地快速拉取拉取请求

    在合并拉取请求之前 我想在本地快速拉取请求并运行测试并测试一些内容 我还不想点击 gihub 合并拉取请求 我以为滑轮会有帮助http ejohn org blog pulley http ejohn org blog pulley 但我收
  • 使用JQuery检查元素是否有边框?

    所以我正在玩 el css 尝试确定元素是否有边框 我用 css border style solid 设置边框 这是可行的 但实际上它设置了 4 种单独的样式 border right style border left style bo
  • Git 在推送代码时返回错误 403 [重复]

    这个问题在这里已经有答案了 一切都工作正常 直到我创建了一个新的 GitHub 帐户 当我尝试使用新帐户第一次将代码推送到 github 服务器时 出现以下错误 remote Permission to NEW USER NEW REPO
  • CSS - SASS:使用基于@each的mixins来生成多个背景

    我正在使用 CSS 创建发型和颜色目录 我有 55 种不同颜色和发型的组合 每种发型和颜色都有自己的图像 SVG 文件 我需要将它们全部组合成一个背景 使用 CSS3 的多背景功能 我编写了这个混合来生成多个背景 它基于 mixin在这篇文
  • 如何列出所有 GitHub 用户?

    我正在开发一个网站 需要从 GitHub 爬取所有用户信息 至少是我们网站上的用户 我搜索了 GitHub API 没有找到答案 那么我有什么办法可以完成这份工作吗 我只有用户的电子邮件 我可以通过将电子邮件哈希值与头像 URL 进行比较来
  • 如何在表格的 tbody/thead 部分周围创建边框?

    我正在尝试创建一个包含表格数据的页面 该页面必须显示为多个表格 然而 我有两个相互冲突的要求需要解决 每个表格周围都必须有边框 每个表格的列宽必须能够根据内容重新调整大小 但是 所有表中的列宽必须一致 即列的大小基于所有表中该列中最大的单元
  • 监听浏览器宽度以进行响应式网页设计?

    我正在努力使我的网站适合移动设备 我想知道浏览器窗口的大小 以便当它比 728px 窄时我可以执行某些操作 而当它大于 728px 时我可以执行其他操作 这必须考虑到调整 PC 上的窗口大小以及在手机中从纵向模式更改为横向模式 如何才能做到
  • 使用本机 JavaScript 获取过渡中的 CSS 值

    这个问题之前被问过 但答案使用了 jQuery here https stackoverflow com q 8920934 3186555 因此 我将调整问题以专门询问native解决方案 to 最小化依赖关系 假设您有一个 div 然后
  • 如何保留用户的输入打印?

    我正在尝试添加用户的评论 所以我只是尝试读取输入并将其发送以进行打印 但问题是 一旦我刷新页面或输入另一个输入 打印的输入就会消失 因此 即使刷新页面或重新输入新评论 我也希望始终保持所有用户的显示 代码 div div
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • div 中的中心文本?

    我有一个div 30px高和500px宽的 这div可以包含两行文本 一行在一行 并相应地设置样式 填充 但有时它只包含一行 我希望它居中 这可能吗 要水平居中 请使用text align center 要垂直居中 只能使用vertical
  • 滚动时的 CSS 背景模糊

    我有固定的背景图像 滚动时我希望图像变得模糊 我知道如何在 css 中进行模糊 但在特定的滚动位置进行 这是一个例子 https medium com good music f160ba9e6c52 https medium com goo
  • 固定 div 位于居中 div 旁边

    我有一个网页 其中有可滚动的内容 此内容包含在 content 内 位于页面的中心 现在我希望导航栏出现在内容左侧 50 像素处 该栏应具有固定位置 不应滚动 这是我到目前为止所尝试过的 nav position fixed top 50
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • 如何使使用 css 调整大小的图像在 IE 中看起来不错?

    当使用 css 宽度 高度或属性宽度 高度缩放图像时 IE6 和 IE7 无法很好地缩放网页中的图像 我不确定它默认使用哪种算法 但这不好 在这些浏览器中缩放时 缩放图像会显示锯齿伪影 幸运的是 有一种方法可以通过简单的 css 规则强制
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • 合并 2 个大型 CSS 文件的有效方法

    我正在寻找一个可以合并 2 个大型 CSS 文件的工具 到目前为止我尝试过的所有方法 例如CSSMerge 都没有成功 其中一些只是随机删除属性 其他人则因 webkit 和 moz 等非标准属性而窒息 并给我错误 我还需要保留每条规则大小

随机推荐

  • 最详细的解决:UnboundLocalError: local variable ‘a‘ referenced before assignment

    代码及报错如下 解决 很多人都非常困惑 为什么在test3中可以直接输出a 但是在test3中 使用a 1的时候 就直接报错呢 首先 我们需要明确一个概念 就是全局变量与局部变量 如下图 大家觉得打印的a会是1还是3 答案是1 因为定义在t
  • C语言/C++常见习题问答集锦(四十五) 之数字之谜

    C语言 C 常见习题问答集锦 四十五 之数字之谜 程序之美 1 最大公约数 题目描述 给定N个正整数 求他们的最大公约数 本题要求函数实现 接口如下 int gcd array int num int size 求大小为size的数组num
  • 基于Stomp协议的时间通知机制

    问题导入 系统运行过程中出现了由主持人的操作推动会议流程的场景 如何将主持人的命令通过服务器同步到每个人的设备上 问题分析 在当前的系统设计中使用了C S架构 基本上所有的请求都是终端通过http协议向服务器提出的 而服务器没有办法向终端主
  • pygame飞机大战小游戏(python大作业)

    一 项目背景 python大作业 在查看了老师给的链接发现教学视频不完整 所以借用了同学的 Python编程 从入门到实践 中的一个项目 学习模仿 二 游戏具体介绍 这是一款由辉辉亲自打造的太空对战小游戏 游戏背景 在广袤无垠的太空里有一群
  • 图的遍历(完整代码)

    代码实现功能 1 利用图的邻接矩阵构造并输出图 2 实现图的深度优先搜索遍历 3 实现图的广度优先搜索遍历 include
  • 【支持M1】MacDroid for Mac:Mac和Android安卓设备数据互通

    Mac和Android组合始终存在的唯一问题是无法在这些设备之间足够快地传输数据 但是MacDroid for mac填补了这一空白 MacDroid mac版是Macos上一款安卓手机数据传输助手 MacDroid mac下载支持Mac和
  • 码蹄集 ---- 供水管线 kruskal算法

    供水管线 kruskal算法 克鲁斯卡尔算法 最小生成树算法 应用场景 从连通图中找出最小生成树 和实际相结合的有 水管共线 公交车站路线图 城市间修路等 算法主要思想 将连通网中所有的边按照权值大小做升序排序 从权值最小的边开始选择 只要
  • C语言调用libusb访问USB驱动

    目录 一 环境搭建 1 下载库文件 2 解压 3 配置VS工程 3 1 头文件的配置
  • SyntaxError: unexpected EOF while parsing

    SyntaxError unexpected EOF while parsing 这是典型的没有验证函数参数是否有效 原因是eval str 的字符串为空 你可以运行如下代码 观察输出 try print eval except Excep
  • 六句话给出 Synchronized 和 Lock 的区别

    1 Synchronized 内置的 Java 关键字 Lock 是一个 Java 类 2 Synchronized 无法判断获取锁的状态 Lock 可以判断是否获取到了锁 3 Synchronized 会自动释放锁 Lock 必须要手动释
  • Windows下Anaconda3下载安装详细步骤

    第一步 去官网下载Anaconda Individual Editionhttps www anaconda com products individual 第二步 点击Download 在安装之前 要先安装python的版本 这里我先安装
  • C++ 实验8 继承

    编写一个学生和教师数据输入和显示程序 学生数据有编号 姓名 班级和成绩 教师数据有编号 姓名 职称和部门 要求将编号 姓名输入和显示设计成一个类person 并作为学生类student和教师类teacher的基类 类图如下 代码如下 头文件
  • Win10笔记本(机械革命)亮度调节快捷键失效-已解决

    Win10笔记本 机械革命 亮度调节快捷键失效 已解决 1 确定你已经安装了核心显卡驱动 驱动精灵检查一下 2 右击此电脑 管理 系统工具 设备管理器 监视器 单击展开 卸载dpms 卸载Generic Monitor 选中删除相关驱动 3
  • iText包对每页pdf文件加水印

    https ishare iask sina com cn f 31zwqlKmIwM html
  • 用户编写的python程序、无需修改就可以_python的笔记(一)

    Python的基本特点一种动态解释型的编程语言 规范的代码 Python 采用强制缩进的方式使得代码具有极佳的可读性 高级语言特性 封装内存管理等 可移植性 程序如果避免使用依赖于系统的特性 那么无需修改就可以在任何平台上运行 解释性 直接
  • 带你入门TypeScript

    一 为何学习TS 1 TypeScript 在社区的流行度越来越高 它非常适用于一些大型项目 也非常适用于一些基础库 极大地帮助我们提升了开发效率和体验 2 TypeScript 可以编译出纯净 简洁的 JavaScript 代码 并且可以
  • python画玫瑰图_python windrose(风玫瑰图)

    conda install c https conda anaconda org conda forge windrose b 用pip install windrose可以成功 但是安装的路径 python找不到 from windros
  • 多表联查优化

    多表联查优化我总结有以下几点 优化sql语句 索引优化 反范式设计 业务代码优化 使用缓存 优化sql语句 sql性能分析 查看执行频次 查看执行频次 select insert delete update shwo global sess
  • Python应该怎么学,如何系统地自学Python?

    这是一份kaggle上的银行的数据集 研究该数据集可以预测客户是否认购定期存款y 这里包含20个特征 1 分析框架 2 数据读取 数据清洗 导入相关包 import numpy as np import pandas as pd 读取数据
  • 厉害了,用 Java 也能实现图片识别!

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 Rock