这是一篇 Linux + Java 实现图文识别, 图文提取完整步骤以及完整环境搭建的详细教程. 是我在做这个过程中亲测和自用的, 里面所用的资源我也整理好了, 直接复制脚本运行就好啦.
环境
Linux
Java
准备步骤
安装 gcc
yum install gcc gcc-c++ make
安装工具包
yum groupinstall "Development Tools"
安装解析图片依赖的包
yum -y install libjpeg* libpng* freetype* gd* giflib* libtiff* zlib*
安装 leptonica(也可以在网上自己找包)
- wget http://download.wuxo.top/linux/leptonica-1.79.0.tar.gz
- tar -zxvf leptonica-1.79.0.tar.gz
- cd eptonica-1.79.0
- ./configure&&make&&make install&&ldconfig
安装 tesseract(也可以在网上自己找包)
- wget http://download.wuxo.top/linux/3.04.00.tar.gz
- tar -zxvf 3.04.00.tar.gz
- cd tesseract-3.04.00
- ./autogen.sh&&./configure&&make&&make install&&ldconfig
将 / usr/local/lib 目录下的 so 文件拷贝到 /usr/lib64/
cp /usr/local/lib/*.so.*/usr/lib64/
安装中文语言包 (需记录文件存放路径)(也可以在网上自己找包)
wget http://download.wuxo.top/linux/chi_sim.traineddata
核心 java 代码实现
- try {
- ITesseract instance = new Tesseract();
- instance.setDatapath("");// 外部中文包的路径, 上面记录的路径
- instance.setLanguage("chi_sim");// 中文包名
- String result = instance.doOCR(new File(""));// 需要识别的图片路径
- //result 结果
- } catch (Exception e) {
- // 操作失败
- }
附带 Controlle 接口写法
- /**
- * 返回状态和内容的实体类
- */
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class BaseResult {
- private Integer code; // 0: 请求失败 1: 请求成功
- private Object data; // 错误的原因或者正确的内容
- }
- /**
- * 图文提取
- * @param file
- * @return 文件识别的结果
- */
- @RequestMapping(value = "imgCode",method = RequestMethod.POST)
- public BaseResult imgCode(@RequestParam("file") MultipartFile file) {
- BaseResult baseResult = new BaseResult();
- File file1 = null;// 创建临时文件
- if (!file.isEmpty()) {// 首先判断是不是空的文件
- int begin = file.getOriginalFilename().indexOf(".");// 对文文件的全名进行截取然后在后缀名进行删选.
- int last = file.getOriginalFilename().length();
- String a = file.getOriginalFilename().substring(begin, last);// 获得文件后缀名
- if (a.endsWith(".jpg") || a.endsWith(".png")) {
- file1 = new File("tessdata/"+ UUID.randomUUID().toString().replaceAll("-","")+a);// 临时文件名
- try {
- FileUtils.copyInputStreamToFile(file.getInputStream(), file1);
- ITesseract instance = new Tesseract();
- instance.setDatapath("D:\\Download\\tessdata");// 外部中文包的路径
- instance.setLanguage("chi_sim");// 中文包名
- String result = instance.doOCR(file1);
- baseResult.setCode(1);
- baseResult.setData(result);
- } catch (Exception e) {
- baseResult.setCode(0);
- baseResult.setData("操作失败"+e.getMessage());
- }
- } else {
- baseResult.setCode(0);
- baseResult.setData("文件格式有误");
- }
- }
- if (file1 != null) {
- file1.delete();// 如果临时文件存在, 就删除文件
- }
- return baseResult;
- }
来源: http://www.jianshu.com/p/f46cffcd0976