图像文字OCR识别:Tess4J、Spire-OCR

目录

Tess4J 图像文字OCR识别

Spire-OCR 图像文字OCR识别


Tess4J 图像文字OCR识别

1、Tess4J 是 Tesseract OCR 引擎的 Java JNA 封装,提供了一个能力强大的接口来实现这一功能。官网:https://tess4j.sourceforge.net/。开源免费。

2、本文环境:Java JDK 11 + Spring boot 2.6.3 + tess4j 5.14.0

步骤1:引入 tess4j 依赖

        <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>5.14.0</version>
        </dependency>

pom.xml · 汪少棠/sqliteapp3 - Gitee.com。 

步骤2:下载Tessdata语言库

1、从官网下载 https://github.com/tesseract-ocr/tessdata 字体库,chi_sim.traineddata 是中文字体库,eng.traineddata 是英文字体库,其它语言,不使用时,可以不用下载。

2、下载后随便放在哪里都行,代码中使用绝对路径指向它即可。

步骤3:图片OCR文字识别

1、实测效果中文并不是很理想,纯英文效果不错。

    /**
     * String doOCR(File imageFile):执行OCR操作,读取图片内容
     * String doOCR(File imageFile, List<Rectangle> rects):读取图片中指定范围内的内容
     *
     * @throws TesseractException
     */
    @Test
    public void testTess4J() throws TesseractException {
        ClassPathResource resource = new ClassPathResource("data/image/中英文.jpg");
        // ClassPathResource resource = new ClassPathResource("data/image/纯英文.jpg");
        ClassPathResource tessDataResource = new ClassPathResource("data/tessdata");
        File imgFile = resource.getFile();
        String tessDataPath = tessDataResource.getAbsolutePath();

        ITesseract tesseract = new Tesseract();
        // 设定训练文件的位置(必须指定)
        tesseract.setDatapath(tessDataPath);
        // chi_sim:中文;eng:英文;中英混合时需要使用中文字体库(chi_sim)(如果是标准英文识别(eng),此步可省略);
        tesseract.setLanguage("chi_sim");
        // 执行OCR操作。
        String resultText = tesseract.doOCR(imgFile);
        // resultText = resultText.replaceAll(" ", "");

        // 读取局部位置
        // Rectangle rectangle = new Rectangle(0, 0, 400, 200);
        // String resultText2 = tesseract.doOCR(imgFile, Lists.list(rectangle));
        System.out.println(resultText);
    }

src/test/java/com/wmx/sqliteapp3/tess4j/Tess4jTest.java · 汪少棠/sqliteapp3 - Gitee.com。 

Spire-OCR 图像文字OCR识别

1、Spire.OCR for Java 是一款专业的用于文字识别的 Java OCR(图文识别)组件,用以读取 JPG、PNG、GIF、BMP 和 TIFF 等图片格式中的文本。利用该组件,开发人员可以在 Java 应用程序中实现 OCR 功能

2、Spire.OCR for Java 操作简单易用,仅需一小串 Java 代码,便可轻松读取 JPG、PNG、GIF、BMP 和 TIFF 等常用图片中的文本信息。

3、此外,Spire.OCR for Java 功能非常强大, 支持识别各种常用印刷字体,如 宋体、仿宋、黑体、微软雅黑、Arial, Times New Roman, Courier New, Verdana, Tahoma 、Calibri 等;支持识别粗体、斜体、简体、繁体等字体样式;支持扫描全图,并且能识别多种语言文字,如英语,中文,法语,德语,日语及韩语等。

试用版在功能上没有任何限制,只是在结果文档中有试用提示信息。当您购买并应用 license 后,会成功移除这些提示信息。

https://www.e-iceblue.cn/Introduce/Spire-OCR-JAVA.html

官网使用手册:Java 使用 Spire.OCR for Java 的新模型从图片中提取文本

步骤1:引入 Spire.OCR 依赖(官网)

    <dependencies>
        <!-- https://mvnrepository.com/artifact/e-iceblue/spire.ocr -->
        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.ocr</artifactId>
            <version>1.9.22</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>

pom.xml · 汪少棠/sqliteapp3 - Gitee.com。 

步骤2:下载语言模型

Linux(须使用 CentOS 8、Ubuntu 18 及以上版本)

Windows x64

下载后随便放在哪里都行,代码中使用绝对路径指向它即可。

步骤3:图片OCR文字识别

1、亲测效果非常好,和微信识别的结果一模一样。

    /**
     * 从图片中识别文字
     */
    @Test
    public void scanTextFromImage() {
        try {
            // OCR模型路径
            String modelPath = "D:\\software\\spire-ocr-win-x64";

            // 图片路径
            ClassPathResource resource = new ClassPathResource("data/image/中英文.jpg");
            // ClassPathResource resource = new ClassPathResource("data/image/纯英文.jpg");
            String imagePath = resource.getAbsolutePath();

            // 创建OcrScanner类的对象
            OcrScanner scanner = new OcrScanner();
            // 设置扫描器配置
            ConfigureOptions configureOptions = new ConfigureOptions();
            // 指定文本识别的OCR语言,支持语言包括 English, Chinese, Chinesetraditional, French, German, Japanese 和 Korean
            configureOptions.setLanguage("Chinese");
            // 指定模型的路径
            configureOptions.setModelPath(modelPath);
            // 将配置应用于扫描器
            scanner.ConfigureDependencies(configureOptions);

            // 识别图片中的文本
            scanner.scan(imagePath);
            // 获取识别出的文本
            String toString = scanner.getText().toString();
            System.out.println(toString);
        } catch (OcrException e) {
            System.out.println("OCR 文字识别时发生错误。");
            e.printStackTrace();
        }
    }

src/test/java/com/wmx/sqliteapp3/tess4j/SpireOcrTest.java · 汪少棠/sqliteapp3 - Gitee.com

### Java OCR 图片文字识别库及教程 #### 使用 Spire.OCR for Java 进行 OCR 文字识别 Spire.OCR for Java 是一款强大的 OCR 组件,能够处理多种语言和字体的文字识别工作。该组件可以读取 JPG、PNG、GIF、BMP 和 TIFF 等常见图片格式中的文本信息[^1]。 为了在 Java 中集成并使用 Spire.OCR for Java 来实现 OCR 功能,开发者需要先下载对应的 JAR 文件并将它们添加到项目的构建路径中。接着,在代码里创建 `Ocr` 类实例来加载待分析的图像文件,并调用相应的方法执行识别操作: ```java import com.spire.ocr.*; public class OCRExample { public static void main(String[] args){ try{ // 创建一个新的 Ocr 对象 Ocr ocr = new Ocr(); // 设置要解析的语言(这里设置为中文) ocr.setLanguage(OcrLang.CHINESE_SIMPLIFIED); // 加载图像文件 String imagePath = "path/to/image.png"; Image image = ImageIO.read(new File(imagePath)); // 解析图像中的文本 List<String> resultTextList = ocr.recognizeImageToStringList(image, null); // 输出结果 System.out.println(resultTextList.toString()); }catch(Exception e){ e.printStackTrace(); } } } ``` 需要注意的是,在实际应用过程中可能会遇到一些异常情况,比如由于缺少本地依赖而导致的 UnsatisfiedLinkError 错误。此时应该确保所有必需的动态链接库都已正确安装并且环境变量配置无误[^2]。 #### 利用 Tesseract 实现 OCR 识别功能 另一种流行的解决方案是采用开源项目 Tesseract。此工具提供了丰富的 API 接口供开发人员调用,同时也拥有良好的社区支持和服务文档说明。对于特定语种的支持,则可以通过下载相应的 tessdata 数据包完成初始化设定过程[^3]。 下面是一个简单的例子展示怎样借助于 Tess4J 库——即 Tesseract 的 Java 封装版本——来进行基本的 OCR 处理任务: ```java import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.Tesseract; public class TesseractExample { private final ITesseract tesseract = new Tesseract(); public void recognizeText() throws Exception { // 设定tessdata目录位置 tesseract.setDatapath("/usr/share/tesseract-ocr/4.00/tessdata"); // 指定目标语言(此处设为中国大陆使用的简化汉字) tesseract.setLanguage("chi_sim"); // 定义输入源图像路径以及输出目的地字符串变量 String imgFilePath = "/home/user/images/sample.jpg"; String outputStr = tesseract.doOCR(new File(imgFilePath)); // 展示最终获得的结果 System.out.print(outputStr); } public static void main(String[] args) throws Exception { (new TesseractExample()).recognizeText(); } } ``` 通过上述两种方式之一即可轻松实现在 Java 平台上对图片内嵌入的文字内容进行有效的提取与转换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚩尤后裔-汪茂雄

芝兰生于深林,不以无人而不芳。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值