最近有个需求,读取一个网站的信息,需要读取验证码。
一、环境依赖
1、如果在Linux下运行,需要安装如下 tesseract-ocr,
在 centos 上
yum install tesseract
在ubuntu上
apt install tesseract
其他版本的 Linux 可以从下面的地址找安装方式
https://tesseract-ocr.github.io/tessdoc/Home.html
2、如果在windows下运行
打开tess4j3.1.0.jar,把里面的win32-x86-64目录中的两个dll文件复制到C:\Windows\System32和C:\Windows\SysWOW64
需要安装vc开发环境
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=40784
二、在pom.xml中引入maven
net.sourceforge.tess4jgroupId>
tess4jartifactId>
3.1.0version>
org.slf4jgroupId>
log4j-over-slf4jartifactId>
exclusion>
ch.qos.logbackgroupId>
logback-classicartifactId>
exclusion>
exclusions>
dependency>
三、代码如下
由于验证码图片中,大部分都有干扰信息,需要处理掉干扰信息,所以代码的大篇幅都在预处理图片。
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.log4j.Logger;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.util.LoadLibs;
import java.security.MessageDigest;
import java.math.BigInteger;
public class ImageUtil {
private static Logger log = Logger.getLogger(ImageUtil.class);
/**
* 读取验证码
* 1、去除验证码图片中的干扰信息
* 2、把背景改为纯白色
* 3、把文字改为纯黑色
* 4、读取验证码
* @param imagePath 原图片本地保存路径
* @return 验证码
* @throws Exception
*/
public static String readVerifyImage(Strin