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にデプロイすると、この問題が発生します