Tesseract
①对中文识别不行,即使有中文库也不行。(很多字体都识别不出来,得要训练模型)
②对图片的完整性有非常严格的要求,有的图片即使你在电脑可以预览,也会说图片格式损坏。
PaddleOCR
提供HubServing NLP技术,未提供Java版本,也需要二次训练模型
实际使用过程中 项目中并不想再引入Kotlin、不想了解OCR相关知识,开箱即用、不想额外再部署OCR服务
RapidOcr解决了这个问题,其提供了Kotlin和Java混合版本的Demo-onnx和Demo-ncnn
特点:
①纯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
);
}
#include <jni.h>