java想搞个ocr的demo前提
- 想用java做一些ocr的需求,那么我们需要用到opencv(对图片进行一些基本的操作)和ocr(文字识别)。
- opencv官网提供的有对每个系统有编译好的版本直接下下来用就可以了,里面有一些版权问题的一些算法如果想用的话需要自己下源代码自己编译(编译的步骤网上找下就可以了)
- ocr依赖的类库搜下网上很多Tesseract但是找个对中文识别率是不行的。我们可以用百度的paddleocr。
- java想本地使用paddleocr那肯定要调用本地连接库了,win下面我们要做的就是把paddleocr搞成dll供我们调用。
opencv依赖引入
- 直接opencv官网下载对应平台就可以了。下exe安装版本就可以了其实就是个压缩包。
- win下面需要引入对应jar包,另一个是dll文件。
arduino
static {
// 加载动态库 直接路径指定
//URL url = ClassLoader.getSystemResource("lib/opencv_java454.dll");
//System.load(url.getPath());
System.load("D:\go_work\ocr\Release\opencv_java454.dll");
//系统加载 需要在环境变量里面能找到,不用后缀
//System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
3.入门hello,world
paddleocr win下编译
- clone项目 gitee.com/paddlepaddl... github.com/PaddlePaddl...
- 下载安装Windows预测库 paddleinference.paddlepaddle.org.cn/user_guides...
- 编译需要准备的工具cmake和visual studio;cmake还需要github可以访问到的需要下一些依赖。
- 网上教程很多,搜下就可以了。很多教程提供的都是exe,然后需要你找下dll的编译。
- 之前我这里遇到的问题,有个文件报错需要再网上找下然后引进来。
- dll的话需要我们自己写个C++函数供外部调用。
- 还有个问题是预测库地址的问题,可以自己改为默认的。(当时用go的时候相对路径没报错,java用的时候找不到)
- 编译后文件,模型文件是我自己放的
测试编译后paddleocr
- 需要把编译后的文件设置到环境变量中,如果直接指定dll会有依赖提示的。
- 然后加载依赖,注意不要后缀
arduino
System.loadLibrary("ppocr");
- 在opencv中也用到了dll但是给的有jar包调用时封装好的。但这里paddleocr是我们自己编译的,需要我们自己去调用当
- 之前在网上找的用自带的jni的一直没搞定(这里面有个麻烦的点是两种语言的数据类型对应的映射),后来发现jna使用起来很丝滑。
arduino
//C++定义的函数
char* ImageProcess(char* image_dir)
//定义一个接口就可以了
public interface IImageProcess extends Library {
public static IImageProcess dta = (IImageProcess) Native.loadLibrary("ppocr", IImageProcess.class);
String ImageProcess(String path);
}
- 效果原图(图片内容是有点复杂的,个别有点问题,整体很可以的)
最后说下我想的怎么去应用
因为单纯的说把整个图片内容识别出来实用起来肯定是有点鸡肋的。如果你会用opencv那就另说了(因为想在图片中识标识出你想要的东西需要很多操作的步骤转来转去的)。简单处理的话就是对一类图片直接进行定位处理,所以想做个简单通用的识别内容提取我想的是维护不同类型的模板,提取的内容在前端进行标记处理(就是相对的坐标标记,内容维护个json),然后根据模板结合ocr处理得到想要内容。