赞
踩
2022/12/27 有的小伙伴说maven导入不了依赖,加了一种方法,百分百解决。
2022/12/28 写了半天,想去论坛放松休息下,结果看到别人已经有成品了,难受啊马飞,晚点看情况要不要写个搭建使用方法(我猜没人看,估计也不用写了,就当自己做个记录)
2023/3/24 更新了一键部署验证码识别!识别率更高,且不用自己训练啦~ 点这里直达
2023/3/24 更新了一键部署验证码识别!识别率更高,且不用自己训练啦~ 点这里直达
2023/3/24 更新了一键部署验证码识别!识别率更高,且不用自己训练啦~ 点这里直达
重要的事情说三遍!
opencv-{version}.jar
、x64包下对应的dll
到项目里,放在同级open module settings
jars
那个选项,然后找到你opencv-version.jar
在的地方,点右下apply
就行了<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);
}
Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。而Tess4j则是Tesseract在Java PC上的应用。在英文和数字识别中性能还是不错的,但是在中文识别中,无论速度还是识别率还是较弱,建议有条件的话,针对场景进行训练,会获得较好结果。
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.3.1</version>
</dependency>
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 "";
}
}
TESSDATA_PREFIX
,值:{你的安装目录}\tessdata
tesseract -v
即可查看是否配置成功jTessBoxEditorFX.jar
,工具栏依次打开【Tools】>【Merge TIFF】,如图。打开你的训练图片所在文件夹,num.font.exp0.tif
。点击【保存】,文件名一定要注意格式,具体如下:【格式】:[lang].[fontname].exp[num].tif
【说明】:lang为语言名称,fontname为字体名称,num为序号;在tesseract中,一定要注意格式
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 0 0 0 0 0
【语法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>
【语法】:fontname为字体名称(上步命名的格式中定义好的,保持同步,不要输入错),italic为斜体,bold为黑体字,
fixed为默认字体,serif为衬线字体,fraktur德文黑字体,
1和0代表有和无,精细区分时可使用
num.font.exp0.tif
;矫正【Char】上的字符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
运行结果:
可以看到,经过简单训练后已经可以识别出需要的结果了。如果这个训练的集合够大,那准确率肯定会很高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。