前言:
而今咱们对“tesseract算法”大致比较关注,朋友们都需要知道一些“tesseract算法”的相关知识。那么小编同时在网络上收集了一些对于“tesseract算法””的相关文章,希望同学们能喜欢,姐妹们快快来了解一下吧!背景:本人是java开发,但是一直有着一颗算法开发的心,所以不断充实自己的,现在就分享给大家吧
知识点:Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)库,目前由谷歌赞助,它可以通过训练识别出任何字体,我们可以不断的训练的库,使图像转换文本的能力不断增强,github地址:
1、直接看做实验demo代码,可以拿去直接用的
package 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;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 */@Servicepublic class OCRServiceImpl implements OCRService { private static final Logger ocrServiceImplLog = LoggerFactory.getLogger(OCRServiceImpl.class); String language = ""; /** * 方法一 * @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(); //需要指定训练集 训练集到 下载。 tessreact.setDatapath(modelPath); if(language.equals("ch")) { //注意 默认是英文识别,如果做中文识别,需要单独设置。 tessreact.setLanguage("chi_sim"); } try { File imageFile = new File(file.getOriginalFilename()); FileUtils.copyInputStreamToFile(file.getInputStream(), imageFile); String result = 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()); } catch (IOException e) { e.printStackTrace(); } return null; } @Override public String getLanguage(String language) { if(language == null || language == "" ) { return null; } this.language = language; return "success"; } /** * 方法二 * @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倍时就可以轻易识,但是考滤到客户电脑配置低,针式打印机打印不连贯的问题,这里就放大5倍) textImage = ImageHelper.getScaledInstance(textImage, textImage.getWidth() * 1, textImage.getHeight() * 1); textImage = ImageHelper.convertImageToBinary(textImage); String saveImgPath = "/root/project/java/tesseract_model/temp_img";// String saveImgPath = "D:\\software\\ocr-tesseract\\img_tem\\temp.img"; ImageIO.write(textImage, "png", new File(saveImgPath)); Tesseract instance = new Tesseract(); //设置训练库的位置// String modelPath = "/root/project/java/tesseract_model"; instance.setDatapath(modelPath); //中文识别 instance.setLanguage("chi_sim"); result = instance.doOCR(textImage); double end = System.currentTimeMillis(); System.out.println("耗时" + (end - start) / 1000 + " s"); } catch (Exception e) { e.printStackTrace(); } return result; }}
方法一和方法二都可以使用,不过本人测试发现,方法一更加准确点
2、代码测试结果
总体而言,识别率还是挺高的
不会用请留言,留言必回复
点赞+转发 ,后续给你们看我部署在腾讯云上过程
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。