后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载导读本文基于 xberg 开源仓库中的 Kotlin (Android) PaddleOCR 配置片段系统讲解如何在 Android 应用内通过ExtractionConfig选择 PaddleOCR 后端并精确控制 OCR 语言、模型层级model_tier与模型版本model_version。读完本文你将掌握从构造ExtractInput、拼装paddle_ocr_settings到调用Xberg.extract的完整链路并理解每个配置项的默认值、取值范围及其背后的模型下载与推理机制。PaddleOCR 后端何时选择需要什么前提PaddleOCR 是 xberg 内置的 OCR 后端之一底层基于 ONNX Runtime可选纯 Rust 的tract引擎运行 PP-OCR 检测 / 方向分类 / 识别三段式模型在 CJK中、日、韩等脚本上表现优异且不依赖 Python 运行时。从 crates/xberg/src/paddle_ocr/mod.rs 的模块说明可以看到PaddleOCR 需要三类 ONNX 模型文件检测模型*_det_*.onnx方向分类模型*_cls_*.onnx识别模型*_rec_*.onnx这些模型在首次使用时通过标准 Hugging Face 缓存HF_HUB_CACHE、HUGGINGFACE_HUB_CACHE或$HF_HOME/hub自动下载。需要特别说明的运行前提必须使用启用了 PaddleOCR 的原生native构建对应 Cargo feature 如paddle-ocr-ort/paddle-ocr-tract首次调用会触发模型权重下载因此需要网络可达且具备模型缓存目录契约测试 fixtures/contract/ocr_paddle_backend.json 中明确标注标准 E2E 任务不预置 PaddleOCR 构建与权重浏览器 WASM 构建也不包含 PaddleOCR因此该测试在多数语言下被跳过。完整配置示例Kotlin (Android) 中的 PaddleOCR 调用原文档给出了一个可直接复刻的 Kotlin 示例其核心思路是用 JacksonjacksonObjectMapperSNAKE_CASE命名策略将 JSON 字符串反序列化为类型化的ExtractInput与ExtractionConfig再交给Xberg.extract执行。import io.xberg.* import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper fun main() kotlinx.coroutines.runBlocking { val mapper jacksonObjectMapper().setPropertyNamingStrategy(com.fasterxml.jackson.databind.PropertyNamingStrategies.SNAKE_CASE) val input mapper.readValue({\kind\:\uri\,\mime_type\:\image/png\,\uri\:\https://example.com/images/test_hello_world.png\}, ExtractInput::class.java) val config mapper.readValue({\ocr\:{\backend\:\paddleocr\,\enabled\:true,\language\:[\en\],\paddle_ocr_settings\:{\language\:\en\,\model_tier\:\mobile\,\model_version\:\pp-ocrv6\}},\url\:{\crawl\:{\ssrf\:{}}}}, ExtractionConfig::class.java) val result Xberg.extract(input, config) println(result.results.first().content) }代码要点拆解输入声明kind: uri表示按 URI 拉取文档mime_type: image/png显式声明图片类型避免依赖内容嗅探OCR 配置backend: paddleocr显式选择 PaddleOCR 后端enabled: true开启 OCRlanguage: [en]声明顶层语言候选PaddleOCR 专属设置paddle_ocr_settings内层进一步指定language: en、model_tier: mobile移动端轻量模型与model_version: pp-ocrv6第六代模型SSRF 防护url:{crawl:{ssrf:{}}}是为远程 URI 请求声明 SSRF 防护配置所有涉及远程拉取的 E2E 用例参见 e2e/kotlin_android/src/test/kotlin/io/xberg/e2e/ContractTest.kt都携带该字段。从配置解析的实现看paddle_ocr_settings会被反序列化为类型化的PaddleOcrConfig结构体见 crates/xberg/src/core/config/ocr.rs 中的test_paddle_ocr_settings_deserializes_to_typed_struct测试未显式给出的字段自动落到默认值。paddle_ocr_settings 字段全解默认值与取值范围PaddleOcrConfig定义于 crates/xberg/src/paddle_ocr/config.rs除本文主题的language/model_tier/model_version外还提供一组检测与识别的调参项。下表汇总了字段、默认值及取值范围全部来自PaddleOcrConfig::new默认实现与 builder 方法的 clamp 逻辑字段默认值说明languageen识别语言代码如en、ch、jpn、kor、deu、fracache_dir无自定义模型缓存根目录缺省时遵循HF_HUB_CACHE/HUGGINGFACE_HUB_CACHE/HF_HOME约定use_angle_clsfalse是否启用方向分类处理旋转文本对短文本区域可能误旋转需按语料验证enable_table_detectionfalse是否启用表格结构检测。注意与 Tesseract 后端默认开启不同PaddleOCR 默认关闭开启后仅对已有词框做聚类重建网格不增加 ONNX 推理调用det_db_thresh0.3文本检测 DB 阈值0.0–1.0越高要求检测越自信det_db_box_thresh0.5文本框精修阈值0.0–1.0det_db_unclip_ratio1.6文本框外扩比例builder 约束 1.0–3.0典型 1.5–2.0det_limit_side_len1024检测图像最大边长builder 约束 64–4096超大图会被缩放到该上限以加速推理rec_batch_num6识别推理批大小1–64即同时处理的文本区域数量padding10检测前图像四周填充像素0–100过大会引入表格线等周边内容drop_score0.5识别置信度下限0.0–1.0低于此值的文本行被丢弃对应 PaddleOCR Python 的drop_scoremodel_tiermobile模型层级控制检测/识别模型大小与精度取舍见下节model_versionpp-ocrv6模型代数pp-ocrv6默认或pp-ocrv5inference_backend无显式指定推理引擎ort或tract缺省时按编译特性解析其中det_db_thresh、det_db_box_thresh、drop_score、padding等字段在 crates/xberg/src/paddle_ocr/config.rs 的 builder 方法中均做了clamp约束如det_limit_side_len限制在 64–4096因此在 JSON 中传入越界值也不会产生非法配置。此外该结构体保留了与早期 Node 绑定一致的 camelCase 兼容别名如cacheDir、useAngleCls、modelTier由LEGACY_CAMEL_CASE_FIELD_ALIASES映射到 snake_case 规范字段同时存在#[serde(deny_unknown_fields)]严格反序列化未知键会直接报错避免静默吞掉拼写错误。model_tier 与 model_version如何选择模型规模model_tier与model_version是本文档的主题参数二者的组合语义在PaddleOcrConfig的字段注释中有完整说明当model_version pp-ocrv5第五代按脚本分族mobile默认轻量模型检测约 4.5MB、识别约 16.5MB下载与推理都快server大而准的模型检测约 88MB、识别约 84MB适合 GPU 或复杂文档。当model_version pp-ocrv6默认的第六代统一中英日韩模型small检测约 9.9MB带完整 18,708 字 CJKLatinJA/KO 识别词典。默认的mobile在此代会解析为small也就是说一个未配置 tier 的提取请求实际使用的就是该档medium检测约 62MB同一词典精度更高但在 CPU 上明显更慢遗留的server档或任何未识别值都会解析到这一档tiny检测仅约 1.8MB但只有缩减的 6,904 字约中/英词典无法识别另外两档覆盖的其它文字系统。脚本回退机制PP-OCRv6 统一识别模型未覆盖的脚本阿拉伯文、西里尔文、天城文、希腊文、泰米尔文、泰卢固文、泰文会透明回退到 PP-OCRv5 的按脚本识别模型。需要固定旧版模型时显式选择model_version: pp-ocrv5即可。对吞吐量的实际影响从 crates/xberg/src/paddle_ocr/backend.rs 的实现看PaddleOCR 的 ONNX 会话被互斥锁保护同一池键下页面 OCR 不并发执行线程预算投入 intra-op 并行整体耗时近似「页数 × 每页推理时间」。因此对多页文档model_tier的选择直接主导吞吐量——批量扫描场景建议从small/mobile档起步精度敏感场景再评估medium/server。支持的语言列表PaddleLanguage枚举crates/xberg/src/paddle_ocr/config.rs定义了后端可识别的语言代码包括en英语、ch简体中文、jpn日语、kor韩语、deu德语、fra法语、latin拉丁语系、cyrillic西里尔文、chinese_cht繁体中文、thai泰文、greek希腊文、eslav东斯拉夫语系、arabic阿拉伯文、devanagari天城文、tamil泰米尔文、telugu泰卢固文。对应的测试test_paddle_language_code/test_paddle_language_from_code验证了这些代码与枚举的互转关系。在paddle_ocr_settings.language中填写的字符串即上述代码之一。模型下载、缓存与校验机制从 crates/xberg/src/paddle_ocr/model_manager.rs 可以看到模型的来源与可靠性设计模型仓库固定为 Hugging Face 上的xberg-io/paddleocr-onnx-models并锁定到不可变 revisionbc5ec866cf0e798e667808dfa51b0ba8ad0dafc8下载流程为先解析本地 Hub 缓存中的不可变 revision → 缓存未命中时下载除非启用 Hugging Face 离线模式→每次冷热解析都校验 SHA-256 并修复损坏条目→ 直接返回快照产物路径PP-OCRv5 的 9 个按脚本分族识别模型latin、korean、eslav、thai、greek、arabic、devanagari、tamil、telugu各自带独立的 model 与 dict 双重 SHA-256 校验值检测模型按 tier 分文件管理V2DetModelDefinition统一多语识别模型按池键如unified_server、unified_mobile、en_mobile组织V2RecModelDefinition。这一设计意味着首次在 Android 应用中触发 PaddleOCR 时会有一次模型下载过程之后走本地缓存任何一次损坏都会被 SHA-256 校验发现并自动修复避免静默加载坏模型。推理引擎ORT 与 Tract 两条路径PaddleInferenceBackend枚举crates/xberg/src/paddle_ocr/config.rs区分两种推理引擎ort原生 ONNX Runtime 全功能路径支持加速 / 执行提供方挂钩CUDA、TensorRT、CoreML、Auto、CPU以及 ONNX 内嵌词典元数据tract纯 Rust、仅 CPU 的 ONNX 路径用于无法链接ort的目标平台如 Android x86_64 模拟器以及未来接入的 WASM。缺省时按编译特性解析启用了paddle-ocr-ortfeature 则用ort否则用tract。若在配置中显式请求了未编译进来的引擎会在构造 OCR 引擎时直接报配置错误而非静默回退参见effective_backend的实现。从backend.rs的engine_pool_key可以看出引擎池键会同时折叠version/tier/model_key/accel/backend五个维度保证同一配置复用同一会话而不同加速配置如cuda:0与cpu不会互相污染。契约测试与验证闭环原文档对应的契约测试是 fixtures/contract/ocr_paddle_backend.json它给出了同一配置在服务端契约测试中的形态输入为 URI 指向的image/pngmock 响应映射到test_documents/images/test_hello_world.png配置与文档示例一致backend: paddleocr、language: [en]、paddle_ocr_settings: {language: en, model_tier: mobile, model_version: pp-ocrv6}断言包括results[0].mime_type image/png以及results[0].content同时包含Hello与World两个词即图片 OCR 必须正确识别出这两词该测试同样被列为「需要 PaddleOCR-enabled 原生构建 已下载模型权重」因此在标准 CI 中按语言跳过。而在 Android/Kotlin 的 E2E 测试中e2e/kotlin_android/src/test/kotlin/io/xberg/e2e/ContractTest.kt可以看到完全相同的调用模式MAPPER.readValue(json, ExtractionConfig::class.java)Xberg.extract(input, config)。其中testConfigOcrPipelineNestedTypes用例进一步演示了在 OCR pipeline 的 stage 内嵌入paddle_ocr_settings含enable_table_detection: true、model_tier: server、use_angle_cls: true说明paddle_ocr_settings既可用于顶层ocr段也可用于 pipeline 各阶段的类型化配置。实战注意事项表格检测默认关闭enable_table_detection默认false与 Tesseract 后端默认开启不同。原因在于 PaddleOCR 没有 Tesseract TSV 那样的逐词表格候选置信度信号每个识别词都会成为聚类候选未过滤的聚类会在普通散文上过度生成表格。因此从 Tesseract 切换到 PaddleOCR 时默认不会产出 OCR 表格需要表格时务必显式开启该选项参见 crates/xberg/src/paddle_ocr/config.rs 中的字段注释与固定测试。方向分类谨慎开启use_angle_cls在短文本区域可能误判方向、错误旋转裁剪块仅在语料确有旋转文本时启用。批量识别调优对长文档可适当提高rec_batch_num上限 64以提升识别吞吐drop_score用于过滤低置信噪声行。Android 平台注意x86_64 模拟器等无法链接ort的目标建议使用tract引擎在真机上可配置ort并搭配执行提供方如 CoreML/GPU加速。模型缓存规划首次运行会下载模型PP-OCRv6small档检测约 9.9MB需在网络环境与存储规划上留出空间可通过cache_dir指定应用私有目录便于 APK 内预置或预下载。以上内容完整覆盖了原文档的 Kotlin (Android) PaddleOCR 配置骨架并依据 crates/xberg/src/paddle_ocr/config.rs、crates/xberg/src/paddle_ocr/model_manager.rs、crates/xberg/src/paddle_ocr/backend.rs 以及 fixtures/contract/ocr_paddle_backend.json 等仓库内证据展开帮助你从「能跑」到「会调」。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐在 xberg 的 Dart 绑定中配置 PaddleOCR 后端语言、模型层级与模型版本实战指南在 xberg 的 Dart 绑定中配置 PaddleOCR 后端语言、模型层级与模型版本实战指南 本文围绕 xberg 仓库中 Dart OCR 示例片段后端AI 应用NLPxberg 的 PaddleOCR 后端配置指南用 Go 绑定掌控语言、模型层级与模型版本xberg 的 PaddleOCR 后端配置指南用 Go 绑定掌控语言、模型层级与模型版本 xberg 是一套以 Rust 核心驱动的多语言文档智能提取框架后端AI 应用NLPXberg 使用 PaddleOCR 后端语言、模型档位与版本配置实战指南Xberg 使用 PaddleOCR 后端语言、模型档位与版本配置实战指南 PaddleOCR 是 Xberg 内置的经典 OCR 后端之一通过 ONNX后端AI 应用NLP上一篇旧款 Mac 升级最新 macOS从机型核对到打补丁怎么走下一篇GitHub中文界面插件3分钟实现GitHub全面中文化的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?