Tesseract de Java implementa OCR

1. Lógica de implementación

paquete com.vue.demo.service.serviceimpl; 

import com.vue.demo.service.OCRService;
import net.sourceforge.tess4j.Tesseract;
importar net.sourceforge.tess4j.TesseractException;
importar net.sourceforge.tess4j.util.ImageHelper;
import 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 
public  class OCRServiceImpl implementa OCRService {
     Private   static   Final Logger ocrServiceImplLog = LoggerFactory.getLogger (OCRServiceImpl. class ); 
    String language = "" ; 

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

        Tesseract tessreact = new Tesseract ();
         // Necesidad de especificar el conjunto de entrenamiento conjunto de entrenamiento para https://github.com/tesseract-ocr/tessdata descargar. 
        tessreact.setDatapath (modelPath); 

        if (language.equals ("ch" )) {
             // Tenga en cuenta que el reconocimiento predeterminado es el inglés, si realiza el reconocimiento chino, debe configurarlo por separado. 
            tessreact.setLanguage ("chi_sim" ); 
        } 
        try { 
            File imageFile = new File (file.getOriginalFilename ());
            FileUtils.copyInputStreamToFile (file.getInputStream (), imageFile); 
            Resultado de cadena = tessreact.doOCR (imageFile); 
            ocrServiceImplLog.info (resultado); 
            System.out.println ( "----------------" ); 
            String handleResult   =   this .ocr (imageFile, modelPath); 
            ocrServiceImplLog.info (handleResult); 
            resultado devuelto + "---------------------------------- \ n \ r" + handleResult; 
        } catch (TesseractException e) { 
            System.err.println (e.getMessage ()); 
        } captura  (IOException e) {
            e.printStackTrace ();
        } 
        return  null ; 
    } 

    @Override 
    public String getLanguage (String language) {
         if (language == null || language == "" ) {
             return  null ; 
        } 
        this .language = idioma;
        devolver "éxito" ; 
    } 

    / ** 
     * 方法 二
     * @param archivo 
     * @param modelPath 
     * @return 
     * / 
    private   String ocr (archivo de archivo, String modelPath) { 
        String result = null ;
         try {
             double start = System.currentTimeMillis (); 
            BufferedImage textImage = ImageIO.read (file);
             // Procesamiento en blanco y negro de la imagen aquí, para mejorar la tasa de reconocimiento. Aquí primero A través de la captura de pantalla, intercepte la parte de la imagen que necesita ser reconocida 
            textImage = ImageHelper.convertImageToGrayscale (textImage);
             // Image 
            sharpening textImage = ImageHelper.convertImageToBinary (textImage);
             // Ampliación de imagen, mejora la tasa de reconocimiento (muchas imágenes en sí mismas no pueden ser reconocidas, ampliadas Se puede reconocer fácilmente cuando es 5 veces, pero el problema es que la configuración de la computadora del cliente es baja y la impresora de puntos no imprime continuamente.
            textImage = ImageHelper.getScaledInstance (textImage, textImage.getWidth () * 1, textImage.getHeight () * 1 ); 

            textImage = ImageHelper.convertImageToBinary (textImage); 
            Cadena saveImgPath = "/ root / project / java / tesseract_model / temp_img" ;
//             String saveImgPath = "D: \\ software \\ ocr-tesseract \\ img_tem \\ temp.img"; 
            ImageIO.write (textImage, "png", nuevo archivo (saveImgPath)); 

            Instancia Tesseract = nuevo Tesseract ();
            // 设置 训练 库 的 位置
 //             String modelPath = "/ root / project / java / tesseract_model";


            instance.setDatapath (modelPath); 
            // 中文 识别 
            instancia.setLanguage ("chi_sim" ); 
            resultado = instancia.doOCR (textImage);
            doble final = System.currentTimeMillis (); 
            System.out.println ( "耗时" + (fin - inicio) / 1000 + "s" ); 
        } catch (Excepción e) { 
            e.printStackTrace (); 
        } 
        resultado devuelto ; 
    } 

}

2. Implemente en centos, puede ver este problema

 

Supongo que te gusta

Origin www.cnblogs.com/ywjfx/p/12757461.html
Recomendado
Clasificación