JAVA使用Tess4J进行ocr识别,java初级面试笔试题


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析Mysql优化技巧(数据库设计、命名规范、索引优化


 

Tess4J是对Tesseract OCR API.的Java JNA 封装。使java能够通过调用Tess4J的API来使用Tesseract OCR。支持的格式:TIFF,JPEG,GIF,PNG,BMP,JPEG,and PDF


Tesseract 的github地址:https://github.com/tesseract-ocr/tesseract


Tess4J的github地址:https://github.com/nguyenq/tess4j

Tess4J API 提供的功能:


1、直接识别支持的文件


2、识别图片流


3、识别图片的某块区域


4、将识别结果保存为 TEXT/ HOCR/ PDF/ UNLV/ BOX


5、通过设置取词的等级,提取识别出来的文字


6、获得每一个识别区域的具体坐标范围


7、调整倾斜的图片


8、裁剪图片


9、调整图片分辨率


10、从粘贴板获得图像


11、克隆一个图像(目的:创建一份一模一样的图片,与原图在操作修改上,不相 互影响)


12、图片转换为二进制、黑白图像、灰度图像


13、反转图片颜色


demo.java:


    /**

     * Test of doOCR method, of class Tesseract.

     * 根据图片文件进行识别

     * @throws Exception while processing image.

     */

    @Test

    public void testDoOCR_File() throws Exception {

        logger.info("doOCR on a jpg image");

        File imageFile = new File(this.testResourcesDataPath, "ocr.png");

        //set language

        instance.setDatapath(testResourcesLanguagePath);

        instance.setLanguage("chi_sim");

        String result = instance.doOCR(imageFile);

        logger.info(result);

    }

    /**

     * Test of doOCR method, of class Tesseract.

     * 根据图片流进行识别

     * @throws Exception while processing image.

     */

    @Test

    public void testDoOCR_BufferedImage() throws Exception {

        logger.info("doOCR on a buffered image of a PNG");

        File imageFile = new File(this.testResourcesDataPath, "ocr.png");

        BufferedImage bi = ImageIO.read(imageFile);

        //set language

        instance.setDatapath(testResourcesLanguagePath);

        instance.setLanguage("chi_sim");

        String result = instance.doOCR(bi);

        logger.info(result);

    }

    /**

     * Test of getSegmentedRegions method, of class Tesseract.

     * 得到每一个划分区域的具体坐标

     * @throws java.lang.Exception

     */

    @Test

    public void testGetSegmentedRegions() throws Exception {

        logger.info("getSegmentedRegions at given TessPageIteratorLevel");

        File imageFile = new File(testResourcesDataPath, "ocr.png");

        BufferedImage bi = ImageIO.read(imageFile);

        int level = TessPageIteratorLevel.RIL_SYMBOL;

        logger.info("PageIteratorLevel: " + Utils.getConstantName(level, TessPageIteratorLevel.class));

        List<Rectangle> result = instance.getSegmentedRegions(bi, level);

        for (int i = 0; i < result.size(); i++) {

            Rectangle rect = result.get(i);

            logger.info(String.format("Box[%d]: x=%d, y=%d, w=%d, h=%d", i, rect.x, rect.y, rect.width, rect.height));

        }

        assertTrue(result.size() > 0);

    }

    /**

     * Test of doOCR method, of class Tesseract.

     * 根据定义坐标范围进行识别

     * @throws Exception while processing image.

     */

    @Test

    public void testDoOCR_File_Rectangle() throws Exception {

        logger.info("doOCR on a BMP image with bounding rectangle");

        File imageFile = new File(this.testResourcesDataPath, "ocr.png");

        //设置语言库

        instance.setDatapath(testResourcesLanguagePath);

        instance.setLanguage("chi_sim");

        //划定区域

        // x,y是以左上角为原点,width和height是以xy为基础

        Rectangle rect = new Rectangle(84, 21, 15, 13);

        String result = instance.doOCR(imageFile, rect);

        logger.info(result);

    }

    /**

     * Test of createDocuments method, of class Tesseract.

     * 存储结果

     * @throws java.lang.Exception

     */

    @Test

    public void testCreateDocuments() throws Exception {

        logger.info("createDocuments for png");

        File imageFile = new File(this.testResourcesDataPath, "ocr.png");

        String outputbase = "target/test-classes/docrenderer-2";

        List<RenderedFormat> formats = new ArrayList<RenderedFormat>(Arrays.asList(RenderedFormat.HOCR, RenderedFormat.TEXT));

        //设置语言库

        instance.setDatapath(testResourcesLanguagePath);

        instance.setLanguage("chi_sim");

        instance.createDocuments(new String[]{imageFile.getPath()}, new String[]{outputbase}, formats);

    }

    /**

     * Test of getWords method, of class Tesseract.

     * 取词方法

     * @throws java.lang.Exception

     */

    @Test

    public void testGetWords() throws Exception {

        logger.info("getWords");

        File imageFile = new File(this.testResourcesDataPath, "ocr.png");

        //设置语言库

        instance.setDatapath(testResourcesLanguagePath);

        instance.setLanguage("chi_sim");

        //按照每个字取词

        int pageIteratorLevel = TessPageIteratorLevel.RIL_SYMBOL;

        logger.info("PageIteratorLevel: " + Utils.getConstantName(pageIteratorLevel, TessPageIteratorLevel.class));

        BufferedImage bi = ImageIO.read(imageFile);

        List<Word> result = instance.getWords(bi, pageIteratorLevel);

        //print the complete result

        for (Word word : result) {

            logger.info(word.toString());

        }

    }

    /**

     * Test of Invalid memory access.

     * 处理倾斜

     * @throws Exception while processing image.

     */

    @Test

    public void testDoOCR_SkewedImage() throws Exception {

        //设置语言库

        instance.setDatapath(testResourcesLanguagePath);

        instance.setLanguage("chi_sim");

        logger.info("doOCR on a skewed PNG image");

        File imageFile = new File(this.testResourcesDataPath, "ocr_skewed.jpg");

        BufferedImage bi = ImageIO.read(imageFile);

        ImageDeskew id = new ImageDeskew(bi);

        double imageSkewAngle = id.getSkewAngle(); // determine skew angle

        if ((imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))) {

            bi = ImageHelper.rotateImage(bi, -imageSkewAngle); // deskew image

        }

        String result = instance.doOCR(bi);

        logger.info(result);

    }

Tess4JDemo码云地址:https://gitee.com/zhaohuihbwj/Tess4JDemo





 

Java OCR文字识别(Tess4J)







2017年10月17日 10:11:10

阅读数:6372







 



 

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

Tess4J是对google tesseract ocr的java库的一种实现

1.maven添加依赖

<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->

<dependency>

    <groupId>net.sourceforge.tess4j</groupId>

    <artifactId>tess4j</artifactId>

    <version>3.2.1</version>

</dependency>



2.工具类编辑

/**

 * tesseract for javaocrOptical Character Recognition,光学字符识别)

* 工具类

* @author wind

 */

public class Tess4jUtils {

    /**

     * 从图片中提取文字,默认设置英文字库,使用classpath目录下的训练库

* @param path

* @return

*/

public static String readChar(String path){

        // JNA Interface Mapping

        ITesseract instance = new Tesseract();

        // JNA Direct Mapping

        // ITesseract instance = new Tesseract1();

        File imageFile = new File(path);

        //In case you don't have your own tessdata, let it also be extracted for you

        //这样就能使用classpath目录下的训练库了

        File tessDataFolder = LoadLibs.extractTessResources("tessdata");

        //Set the tessdata path

        instance.setDatapath(tessDataFolder.getAbsolutePath());

        //英文库识别数字比较准确

        instance.setLanguage(Const.ENG);

        return getOCRText(instance, imageFile);

    }

    /**

     * 从图片中提取文字

* @param path 图片路径

* @param dataPath 训练库路径

* @param language 语言字库

* @return

*/

public static String readChar(String path, String dataPath, String language){

        File imageFile = new File(path);

        ITesseract instance = new Tesseract();

        instance.setDatapath(dataPath);

        //英文库识别数字比较准确

        instance.setLanguage(language);

        return getOCRText(instance, imageFile);

    }

    /**

     * 识别图片文件中的文字

* @param instance

* @param imageFile

* @return

*/

private static String getOCRText(ITesseract instance, File imageFile){

        String result = null;

        try {

            result = instance.doOCR(imageFile);

        } catch (TesseractException e) {

            e.printStackTrace();

        }

        return result;

    }

    public static void main(String[] args) {

        /*String path = "src/main/resources/image/text.png";

        System.out.println(readChar(path));*/

        String ch = "src/main/resources/image/ch.png";

        System.out.println(readChar(ch, "src/main/resources", Const.CHI_SIM));

    }

}
注释:中文结果不够准确,需要自己训练字库
具体训练字库,以及完整代码请移步https://github.com/followwwind/javautils



 


转载:https://www.cnblogs.com/pejsidney/p/9487881.html

推荐内容:
Java 面试编程题【精选 50 题】
详解Java的自动装箱与拆箱(Autoboxing and unboxing)
JAVA工程师面试常见问题集锦
Java面试知识点总结
【面试必备】常见Java面试题大综合
JAVA工程师面试题库
从Java小白到阿里巴巴工程师,回顾我两年来的学习经历
Java Fork/Join 框架
漫谈Java IO之基础篇
53道Java线程面试题

猜你喜欢

转载自blog.csdn.net/bi_zhiyi/article/details/89670879
今日推荐