mica-ppocr v1.2.3发布:Java 8兼容的PP-OCRv6纯ONNX推理引擎,内置10类证件/票据结构化解析
mica-ppocr是PP-OCRv6文字检测与识别流水线的Java移植版 ,使用纯ONNX Runtime推理、 零PaddlePaddle依赖 ,并完整复现预处理/后处理(DB后处理、CTC解码、pyclipper等价的多边形unclip)。移植自AIwork4me/ppocrv6_onnx的单文件Python参考实现, 与Python版本保持bit-exact(默认CPU单线程,跨平台输出确定)。
定位上,mica-ppocr不只是一个OCR引擎,更是一套面向 证件/票据/卡证 场景的端到端识别方案:
OCR核心mica-ppocr-core:检测+ 识别+ 文档方向分类+ PDF双通道
结构化解析mica-ppocr-structured:内置10类常用证件/票据解析器
Spring Boot Starter mica-ppocr-spring-boot-starter:自动装配引擎与解析器,开箱即用
Solon插件mica-ppocr-solon-plugin:Solon用户同等体验
全模块Java 8兼容 ,已发布到Maven Central,坐标net.dreamlu:mica-ppocr-* 。
零Paddle依赖 :仅需ONNX Runtime + OpenCV + JTS(PDF模块再+ PDFBox),没有C++ 编译、没有原生Paddle库,jar包直跑。
与Python参考bit-exact:默认intraOp=interOp=1,跨机器输出完全一致,便于回归测试与模型调优。
Java 8全兼容 :源码、依赖字节码均校验为Java 8,可直接用于Spring Boot 2.x/Solon等Java 8老项目。
10类内置结构化解析器 :行驶证、身份证(正反面自动判定)、银行卡、机动车驾驶证、营业执照、增值税发票(含新版数电票)、火车票、出租车票、户口本(常住人口登记卡)、拼多多福袋(8位邀请码)。
PDF双通道 :run(byte[])/run(Path)自动嗅探%PDF- 魔数,文字型PDF直接走PDFBox文本层抽取(无OCR开销),扫描件自动降级渲染位图+ OCR(DPI可配)。
文档方向分类 (可选):在检测前对整图做4类方向(0°/90°/180°/270°)校正,避免侧拍/横拍导致的识别失败。
按调用覆盖检测阈值 :run(...)/runMat(...)新增DbDetParams重载,临时调整thresh/boxThresh/unclipRatio等,无需改动引擎配置,线程安全。
可视化友好 :结构化结果同时返回rawResults(全部文字框)与fieldBoxes(字段→坐标),可在前端高亮"这个字段来自画面哪几块"。
AI协作原生支持 :项目内置mica-ppocr-custom-parser与ocr-parser-optimizer两个Skill,覆盖新增解析器全链路与已有解析器批量调优,可通过npx skills add lets-mica/mica-ppocr一键安装到Claude Code/Cursor等AI编码工具。
application.yml指定模型路径:
Controller直接调:
VehicleLicenseParser
VehicleLicenseResult
身份证(正反面自动判定)
IdCardParser
IdCardResult
BankCardParser
BankCardResult
DriverLicenseParser
DriverLicenseResult
BusinessLicenseParser
BusinessLicenseResult
InvoiceParser
InvoiceResult
TrainTicketParser
TrainTicketResult
TaxiReceiptParser
TaxiReceiptResult
户口本(常住人口登记卡)
HouseholdRegisterParser
HouseholdRegisterResult
拼多多福袋(8位邀请码)
PddLuckyBagParser
PddLuckyBagResult
公共能力下沉在LabelMatcher(标签定位+ 位置匹配+ 正则兜底+ 版面布局兜底);新增自定义解析器只需实现BaseStructuredParser接口即可挂载到PPOcrTemplate。
轻量优先,速度快,精度一般
速度与精度均衡,推荐默认
精度优先,覆盖更全字符集
可选文档方向分类模型PP-LCNet_x1_0_doc_ori(6.47 MB),从ModelScope下载model.onnx即可,零Paddle依赖。
feat:run系列方法全面支持按调用覆盖DB参数。run/runMat新增DbDetParams重载(thresh/boxThresh/unclipRatio/maxCandidates/minSize),按调用临时调整检测阈值、无需改动引擎构造期配置,线程安全(临时构造DbPostProcessor,不修改共享状态);同步下沉到PDF双通道,BaseStructuredParser新增5个parse(..., DbDetParams)重载,Spring Boot/Solon PPOcrTemplate同步支持。
fix:修复词典空白token处理导致识别结果丢空格、英文单词粘连问题。CtcLabelDecoder对齐Python参考实现(仅剥 \n\r),原样保留词典中间全角空格(U+3000)与末尾ASCII空格两个空白token,并新增回归测试锁定。(GitHub #23)
fix:修复发票大写金额转换parseJiaoFen的整型隐患(curDigit由long改为int),消除CodeQL告警。
feat:新增PDF双通道模块,文字型PDF走文本层抽取(无OCR开销),扫描件自动降级PDFBox渲染位图(DPI可配,默认200)。
feat:新增DbDetParams + detectMat(Mat, DbDetParams)按调用覆盖DB阈值。(GitHub #24)
fix:修复发票商品名称跨行被误拆为两条明细。明细行的"锚"是数值列(金额/税额),InvoiceTableParser新增续行合并。
fix:修复GPU加速provider未注册问题。
feat:优化行驶证结构化解析。
feat:发票解析统一入口+ 支持新版电子发票(数电票)。
fix:修复发票解析器地址电话/开户行账号多框拼接与发票号码解析。
fix:根治动态分辨率下内存持续增长(GitHub #14)。新增enableCpuMemArena(默认false)、enableMemoryPattern(默认false)配置,关闭ONNX Runtime CPU arena/内存模式优化,临时内存用完即释放,Docker等内存受限环境不再OOM;新增execMode配置(sequential/parallel)暴露ORT执行模式。
refactor:全面支持Java 8。record/List.of/Path.of等Java 9+ API替换为CollUtil工具与Lombok @Value风格;Spring Boot Starter改用@Configuration兼容2.5~4.x。
feat:新增拼多多福袋OCR结构化解析器,从"百亿补贴 抽福袋"分享图提取8位福袋码(邀请码)。
feat:身份证性别解析支持合并框切割,兼容"性别男民族汉"双标签连写合并框及"性""别"字缺失场景。
fix:优化身份证地址跨行解析逻辑与消除多标签合并框告警。
fix:提升身份证识别精度。
fix:新增真实OCR样本单元测试验证合并框"所有人xxx"正确剥离前缀。
fix:修正户籍信息日期识别和关系字段匹配逻辑。
fix:修复PPOcrV6Engine.decodeMat泄漏MatOfByte native buffer。
fix:还原detLimitSideLen、detLimitType默认组合为64 + min,更适合证件类解析。
feat:新增火车票、出租车票、户口本(常住人口登记卡)OCR结构化解析器。
feat:兼容15位身份证号解析,并增加按身份证号推算出生日期的兜底。
feat:模型路径支持classpath: 前缀,可把模型打进Spring Boot Fat Jar。
refactor:文档方向分类阈值由0.3调至0.4;detLimitSideLen、detLimitType默认组合由64 + min改为960 + max(PaddleX v4/v5/v6官方推荐组合)。
refactor:简化PPOcrTemplate结构化解析器管理实现,Solon与Spring Boot Starter同步新增户口本解析器注册及参数校验。
docs:新增mica-ppocr-custom-parser skill,覆盖自定义结构化解析器全链路。
feat:身份证多标签合并框解析逻辑优化,新增正面字段标签数组,支持"性别男民族汉"双标签连写的合并框切分。
refactor:重构结构化解析器基类及测试基类。BaseStructuredParser由接口改为抽象类,统一持有PPOcrV6Engine引擎并提供一站式parse()实现,子类构造时绑定引擎、仅需重写parseResults。
refactor:简化PPOcrTemplate模板,各个结构化解析器改为链式调用。
feat:新增Solon插件适配模块mica-ppocr-solon-plugin,提供PPOcrTemplate一站式封装与结构化解析器自动装配,能力与Spring Boot Starter对齐。
feat:新增营业执照结构化解析器(BusinessLicenseParser),抽取社会信用代码、单位名称、住址、法定代表人、有效日期至、成立日期、类型、注册资本、经营范围共9个字段。
feat:新增增值税发票结构化解析支持(InvoiceParser),配套上海/湖北/江苏等多张发票OCR JSON样本。
refactor:优化BusinessLicenseParser编码规范,12个LABEL常量、5个调参常量集中化、4个子函数便于单测。
refactor:结构化解析模块日志级别全面由info调整为debug,显著降低控制台噪音。
feat:支持PP-OCRv6文档方向分类(use_doc_orientation_classify)。使用PP-LCNet_x1_0_doc_ori模型(4类:0°/90°/180°/270°),在OCR检测前对整图做方向校正。新增useDocOrientationClassify/docOrientationModelPath/docOrientationThresh配置项,行为完全向后兼容(默认关闭)。
perf:性能优化+ 修native Mat泄漏。DocOrientationPreprocessor修resizeShort返回新Mat未release的泄漏;CtcLabelDecoder解码循环3合并为1次。
chore:onnxruntime依赖版本降级为1.18.0,兼容更多系统版本。
feat:新增mica-ppocr-structured结构化解析模块,支持行驶证、身份证、银行卡、驾驶证4类证件;提供SPI接口BaseStructuredParser与公共骨架LabelMatcher(标签定位+ 位置匹配+ 正则兜底)。
feat:新增PPOcrTemplate一站式封装(mica-ppocr-spring-boot-starter),自动装配PPOcrTemplate与4个结构化解析器Bean。
feat:结构化结果支持可视化坐标,新增BaseStructuredResult抽象类,统一持有rawResults(完整OCR原始框)与fieldBoxes(字段→坐标列表映射)。
refactor:公开API去掉Mat入参;PPOcrV6Engine的run/detect统一委托到Path版本,新增String/File/Path/byte[]/InputStream 5种入参重载;内部统一try-finally释放Mat,调用方无需任何native内存管理。
fix:释放原生推理资源,避免本地句柄泄漏;新增泄漏回归测试并加固构造器清理路径。
refactor:OpenCV加载方法由loadShared改为loadLocally。
feat:实现PP-OCRv6文字检测与识别核心功能(DB后处理+ CTC解码)。
持续打磨已实现的10类结构化解析器精度与鲁棒性。
跟进PaddleOCR/PP-OCR系列新模型(如更高精度模型、行业版模型)。
持续完善PDF双通道与文档方向分类的边界场景。
欢迎社区贡献:自定义解析器、更多OCR噪声场景case、Spring Boot/Solon生态适配。