0
点赞
收藏
分享

微信扫一扫

Linux + Java 实现图文识别,图文提取

笙烛 2021-09-21 阅读 61

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;
    }
    
举报

相关推荐

0 条评论