javacv文字识别系列:
javaCV文字识别之1:基于google的tesserac ocr识别图片中的文字,跨平台支持英文中文简体繁体等各种字符识别
目录
前言
本篇文章属于javacv系列的扩展篇。
本文有且只参考了:https://github.com/bytedeco/javacpp-presets/tree/master/tesseract
在此之前我们已经通过javacv实现了流媒体这块的音视频编解码等等操作,当然还有图像处理。虽然使用opencv也可以实现文字识别,但是识别率不高,所以来试试google开源的tesserac ocr看看效果。
我们分为三步就可以做到实现:
首先,我们要添加依赖;次之,准备资源(需要训练好的语言包以及需要进行识别的图片,这里会提供最新的英文版下载以及中文简繁体下载地址);最后就开始编写代码。
废话少说,立刻开始吧。
1、添加依赖
(1)gradle方式
dependencies {
compile group: 'org.bytedeco', name: 'tesseract-platform', version: '4.1.1-1.5.3'
}
(2)maven方式
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>tesseract-platform</artifactId>
<version>4.1.1-1.5.3</version>
</dependency>
(3)jar包方式
javacv的包太大,这个不用讲了,建议用上面那两个。
2、下载语言包
英文和简体中文放在同一个压缩包中,免费下载,不要积分。
(1)英文版:https://download.csdn.net/download/eguid_1/12404120
(2)简体中文:https://download.csdn.net/download/eguid_1/12404120
(3)繁体中文:待上传
3、编写代码
导包
import org.bytedeco.javacpp.*; import org.bytedeco.leptonica.*; import org.bytedeco.tesseract.*; import static org.bytedeco.leptonica.global.lept.*; import static org.bytedeco.tesseract.global.tesseract.*;
public static String ocr(String language,String dataPath, String imageUrl) {
BytePointer outText;
TessBaseAPI api = new TessBaseAPI();
// Initialize tesseract-ocr with English, without specifying tessdata path
if (api.Init(dataPath, language) != 0) {
System.err.println("Could not initialize tesseract.");
return null;
}// Open input image with leptonica library
PIX image = pixRead(imageUrl);
api.SetImage(image);
// Get OCR result
outText = api.GetUTF8Text();
try {
return outText.getString();
}finally{
// Destroy used object and release memory
api.End();
outText.deallocate();
pixDestroy(image);
}
}
public static void main(String[] args) {
//填写语言包eng.traineddata的目录路径以及要识别的图片路径
String ret= ocr("eng","d:/testdata/", "d:/pictures/test.png");
System.out.println("OCR output:\n" +ret);
}
是不是很简单?
下一章
javaCV文字识别之2:基于ffmpeg和tesserac的视频字幕提取和视频文字识别