安装Tesseract-OCR
准备工作:
编译环境: gcc gcc-c++ make(这个环境一般机器都具备,可以忽略)
1
yum install gcc gcc-c++ make
依赖的包: autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel leptonica(1.67以上)
1. autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel 可以通过yum安装:
1
yum install autoconf automake libtool
2
yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel
2. leptonica 需要源码编译安装
参考资料:
http://paramountideas.com/tesseract-ocr-30-and-leptonica-installation-centos-55-and-opensuse-113
http://www.leptonica.org/source/README.html
下载leptonica 包: http://www.leptonica.org/source/leptonica-1.68.tar.gz
解压后切换到leptonica-1.68 根目录
1
./configure
2
make
3
make install
tesseract安装:
依赖安装完毕后开始安装tesseract
下载tesseract-3.01 安装包: http://tesseract-ocr.googlecode.com/files/tesseract-3.01.tar.gz
解压后切换到tesseract-3.01 根目录
(如果在make时遇到类似strngs.h:1: error: stray '\357' in program 的错误,请将tesseract-3.01/ccutil/strngs.h 文件转为ANSI 编码保存,再重新编译)
1
./autogen.sh
2
./configure
3
make
4
make install
5
ldconfig
tesseract英文语言包安装:
下载tesseract-3.01 英文语言包: http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.01.eng.tar.gz
解压后将tesseract-ocr/tessdata 下的所有文件全部拷贝到/usr/local/share/tessdata 下
安装完毕.
测试一下:
切换到解压后的tesseract-3.01 根目录(这个目录下有一个自带的phototest.tif 可以做测试用)
命令行:
1
tesseract phototest.tif phototest -l eng
输出:
1
Tesseract Open Source OCR Engine v3.01 with Leptonica
2
Page 0
这时应该在当前目录生成一个phototest.txt 文本文件,内容就是phototest.tif 显示的文字.
--------------------------------------------以上安装完成-------------------------------------
java实现
方法:
private static String recognizeText(File imageFile){
/**
* 设置输出文件的保存的文件目录
*/
File outputFile = new File(imageFile.getParentFile(), "output");
StringBuffer strB = new StringBuffer();
// 设置cmd命令行字符串形式
List<String> cmd = new ArrayList<String>();
cmd.add("tesseract");
cmd.add(imageFile.getName());
cmd.add(outputFile.getName());
cmd.add("-l");
cmd.add("eng");
try {
// 启动exe进程
ProcessBuilder pb = new ProcessBuilder();
pb.directory(imageFile.getParentFile());
pb.command(cmd);
pb.redirectErrorStream(true);
Process process = pb.start();
// 等待此进程完成
int w = process.waitFor();
if (w == 0) {// 0代表正常退出
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath() + ".txt"), "UTF-8"));
String str;
while ((str = in.readLine()) != null) {
strB.append(str).append(EOL);
}
in.close();
} else {
String msg;
switch (w) {
case 1:
msg = "Errors accessing files. There may be spaces in your image's filename.";
break;
case 29:
msg = "Cannot recognize the image or its selected region.";
break;
case 31:
msg = "Unsupported image format.";
break;
default:
msg = "Errors occurred.";
}
logger.error(msg);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
new File(outputFile.getAbsolutePath() + ".txt").delete();
return strB.toString().replaceAll("\\s*", "");
}