RapidOcr-Java

Tesseract
①对中文识别不行,即使有中文库也不行。(很多字体都识别不出来,得要训练模型)
②对图片的完整性有非常严格的要求,有的图片即使你在电脑可以预览,也会说图片格式损坏。

PaddleOCR
提供HubServing NLP技术,未提供Java版本,也需要二次训练模型

实际使用过程中 项目中并不想再引入Kotlin、不想了解OCR相关知识,开箱即用、不想额外再部署OCR服务
RapidOcr解决了这个问题,其提供了Kotlin和Java混合版本的Demo-onnxDemo-ncnn

image.png

特点:
①纯Java代码调用RapidOcr
②集成ncnn和onnx推理引擎方式
③均使用CPU版本,GPU版本请自行编译
④支持Mac、Windows、Linux等多平台,详细支持的系统请查看版本说明(代码仓库查看)

详细参考:
[https://blog.csdn.net/qq_41793039/article/details/134220607

[https://blog.csdn.net/Java_CSDN_W/article/details/135939418]

本地测试结束后部署服务器遇到的问题:
io.github.mymonstercat.exception.LoadException: 找不到合适的本机加载程序实现,可能的原因:1.maven未引入onnx对应的坐标!2.运行库可能暂时未适配您的系统:linuxamd64! 3.使用的模型与引入的jar包不匹配,当前使用的模型为:onnx,请检查您引入的jar依赖是否正确! 4.打包时未正确引入运行库,例如打包的是window依赖却在linux下运行,请参考文档检查是否使用了正确的打包命令。

引入linux对应的包

        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-linux-x86_64</artifactId>
            <version>1.2.2</version>
        </dependency>

注意服务器本身的GCC版本
/tmp/ocrJava/onnx/libRapidOcr.so: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /tmp/ocrJava/onnx/libRapidOcr.so)

/tmp/ocrJava/onnx/libRapidOcr.so: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by /lib64/libstdc++.so.6)

These critical programs are missing or too old: gawk bison
升级GCC 注意bison gawk 是否存在及版本问题

免费OCR适合windows umi-ocr


注意内存消耗

InferenceEngine engine = InferenceEngine.getInstance(Model.ONNX_PPOCR_V3);
//开始识别
OcrResult ocrResult = engine.runOcr(filePath, paramConfig);

public class InferenceEngine extends OcrEngine {
    public OcrResult runOcr(String imagePath, ParamConfig config) {
        loadFileIfNeeded(model);
        initEngine(model, hardwareConfig);
        OcrResult result = detect(imagePath, config.getPadding(), config.getMaxSideLen(), config.getBoxScoreThresh(), config.getBoxThresh(), config.getUnClipRatio(), config.isDoAngle(), config.isMostAngle());
        return result;
    }
}

//OCR引擎对象,通过JNI与库文件交互
public class OcrEngine {
    public native OcrResult detect(
            String input, int padding, int maxSideLen,
            float boxScoreThresh, float boxThresh,
            float unClipRatio, boolean doAngle, boolean mostAngle
    );
}
image.png

#include <jni.h>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容