JavaのTesseractがOCRを実装

1.実装ロジック

パッケージcom.vue.demo.service.serviceimpl; 

import com.vue.demo.service.OCRService;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.ImageHelper;
org.apache.commons.io.FileUtilsをインポートします。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; 

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; 

/ ** 
 * @author yangwj 
 * @date 2020年4月1日午前9時29 
 * / 
@Service 
パブリック クラス OCRServiceImpl 実装OCRService {
     プライベート  静的  最終ロガーocrServiceImplLog = LoggerFactory.getLogger(OCRServiceImpl。クラス)。
    文字列言語 = "" ; 

    / ** 
     *メソッド一
     * @param file 
     * @return 
     * / 
    @Override 
    public String getCharacterFromPic(MultipartFile file){
 //        String modelPath = "D:\\ software \\ ocr-tesseract \\ tessdata"; 
        String modelPath = "/ root / project / java / tesseract_model" ; 

        Tesseract tessreact = new Tesseract();
         // トレーニングセットを指定する必要があるhttps://github.com/tesseract-ocr/tessdata ダウンロード。
        tessreact.setDatapath(modelPath); 

        if(language.equals( "ch" )){
             // デフォルトは英語の認識であることに注意してください。中国語の認識を行う場合は、個別に設定する必要があります。
            tessreact.setLanguage( "chi_sim" ); 
        } 
        試行{ 
            ファイルimageFile = new File(file.getOriginalFilename());
            FileUtils.copyInputStreamToFile(file.getInputStream()、imageFile); 
            文字列結果 = tessreact.doOCR(imageFile); 
            ocrServiceImplLog.info(result); 
            System.out.println( "----------------" ); 
            String handleResult   =   this .ocr(imageFile、modelPath); 
            ocrServiceImplLog.info(handleResult); 
            return result + "---------------------------------- \ n \ r" + handleResult; 
        } catch (TesseractException e){ 
            System.err.println(e.getMessage()); 
        }キャッチし(IOException e){
            e.printStackTrace(); 
        } 
        nullを返し ます
    } 

    @Override 
    public String getLanguage(String language){
         if(language == null || language == "" ){
             return  null ; 
        } 
        this .language = language;
        「成功」を返す; 
    } 

    / ** 
     *メソッド二
     * @param file 
     * @param modelPath 
     * @return 
     * / 
    private   String ocr(File file、String modelPath){ 
        String result = null ;
         try {
             double start = System.currentTimeMillis(); 
            BufferedImage textImage = ImageIO.read(file);
             // 認識率を向上させるための、ここでの画像の白黒処理。スクリーンショットを通じて、認識する必要がある画像の部分をインターセプトします 
            textImage = ImageHelper.convertImageToGrayscale(textImage);
             // 画像をシャープにする 
            textImage = ImageHelper.convertImageToBinary(textImage);
             // 画像の拡大、認識率を向上させます(多くの画像自体は認識できず、拡大されます5回だと簡単に認識できますが、お客様のコンピューター構成が低く、ドットプリンターが連続して印刷されないのが問題です。
            textImage = ImageHelper.getScaledInstance(textImage、textImage.getWidth()* 1、textImage.getHeight()* 1 ); 

            textImage = ImageHelper.convertImageToBinary(textImage); 
            文字列saveImgPath = "/ root / project / java / tesseract_model / temp_img" ;
//             文字列saveImgPath = "D:\\ software \\ ocr-tesseract \\ img_tem \\ temp.img"; 
            ImageIO.write(textImage、 "png"、new File(saveImgPath)); 

            Tesseractインスタンス = new Tesseract();
            // 设配置训练库的位置
 //             String modelPath = "/ root / project / java / tesseract_model";


            instance.setDatapath(modelPath); 
            // 中文识别 
            instance.setLanguage( "chi_sim" ); 
            結果 = instance.doOCR(textImage);
            ダブルエンド= System.currentTimeMillis(); 
            System.out.println( "消費時" +(終了-開始)/ 1000 + "s" ); 
        } catch (例外e){ 
            e.printStackTrace(); 
        } 
        結果を返します。
    } 

}

2. CentOSにデプロイすると、この問題が発生します

 

おすすめ

転載: www.cnblogs.com/ywjfx/p/12757461.html