ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

xberg C 插件 API 实战:用 xberg_list_ocr_backend_capabilities 枚举 OCR 后端语言能力

xberg C 插件 API 实战:用 xberg_list_ocr_backend_capabilities 枚举 OCR 后端语言能力 后端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一个以 Rust 为核心、覆盖 106 种文档格式的文档智能工具集中OCR 后端是以插件注册表的形式管理的Tesseract、PaddleOCR、VLM 等后端按 feature 门控注册进全局注册表。C 语言调用方无法直接获得 Rust 侧的类型化对象但可以通过 C ABI 函数xberg_list_ocr_backend_capabilities一次性拿到“每个已注册 OCR 后端的名称 其声明支持的 ISO 语言列表”JSON 编码。读完本文你将掌握这段 C 调用的完整写法与内存/错误处理约定、返回值 JSON 的确切语义尤其是空语言列表的陷阱、Rust 核心侧list_ocr_backend_capabilities的确定性保证与首次调用成本以及它在整个 OCR 后端管理 API 家族中的位置。C 侧调用最小可运行示例xberg 文档站为 C 目标语言自动生成的插件 API 片段插件 API 示例对应测试夹具 ocr_backend_capabilities_list.json演示了该函数最简的调用方式#include assert.h #include stdint.h #include stdio.h #include stdlib.h #include string.h #include xberg.h int main(void) { char* result xberg_list_ocr_backend_capabilities(); xberg_free_string(result); return EXIT_SUCCESS; }要点说明xberg.h头文件由 cbindgen 生成位于 crates/xberg-ffi/include/xberg.h该函数声明在其中char *xberg_list_ocr_backend_capabilities(void); uintptr_t xberg_list_ocr_backend_capabilities_len(void);头文件声明处见 xberg.h#L29909-L29919。返回指针必须用配套释放函数xberg_free_string(char *ptr)释放声明见 xberg.h#L3971不可用free()或xberg_free_bytes等其他释放入口。官方片段把返回值直接交给xberg_free_string对NULL安全生产代码则应先判空并用xberg_last_error_code()/xberg_last_error_context()读取错误信息。返回值语义JSON 字符串、错误与字节长度C ABI 层在 crates/xberg-ffi/src/lib.rs#L85599-L85639 中实现成功把 Rust 侧VecOcrBackendCapabilities用serde_json::to_string序列化为 JSON 字符串转为CString后以into_raw()交出所有权。典型形如[ {name:paddleocr,supported_languages:[chinese,english,japanese,korean]}, {name:tesseract,supported_languages:[eng,deu,fra]} ]数组元素顺序按name升序排列确定性由 Rust 核心保证见下文。失败返回NULL并调用set_last_error记录错误码与错误消息——调用方应通过xberg_last_error_code()取错误码、xberg_last_error_context()取错误上下文两者声明见 xberg.h#L3956-L3964。据 Rust 核心文档注释该函数只有在注册表读锁无法获取时才会返回错误参见 api-c.md 参考页 中对应条目。panic 兜底实现外层包了catch_unwindRust 侧 panic 不会穿越 FFI 边界若未记录过更具体的错误会写入通用的 panic 错误标记后返回NULL。此外还有一个伴生函数xberg_list_ocr_backend_capabilities_len()xberg.h#L29919返回本线程最近一次调用所产出字符串的字节长度调用失败时返回 0。头文件注释明确说明它的用途让 Zig、Java FFM Panama 等语言可以按长度直接构造切片而不必对 C 字符串做 NUL 扫描。Rust 核心实现list_ocr_backend_capabilities的语义与陷阱C 函数只是薄封装真正的语义定义在核心 crate 的 crates/xberg/src/plugins/ocr.rspub fn list_ocr_backend_capabilities() - crate::ResultVecOcrBackendCapabilities { use crate::plugins::registry::get_ocr_backend_registry; let registry get_ocr_backend_registry(); let registry registry.read(); Ok(capabilities_from_snapshot(registry.registered_snapshot())) }它读取全局 OCR 后端注册表的快照映射为按名称排序的能力记录capabilities_from_snapshot中用sort_unstable_by按name排序。由此得到两条对调用方很重要的契约确定性返回数组按name排序与注册顺序、注册表内部顺序无关因此可以作为缓存键或测试断言的稳定输入。supported_languages保持后端自报顺序每条记录内的语言列表不重新排序——Tesseract 的顺序来自枚举已安装的 tessdata 文件PaddleOCR 来自其SUPPORTED_LANGUAGES常量。重新排序会与后端自身supports_language实现的优先级不一致。空语言列表 ≠ 不支持任何语言OcrBackendCapabilities结构体ocr.rs#L611-L632上有一段值得反复强调的文档supported_languages是OcrBackendtrait 的带默认值方法默认返回vec![]并非每个后端都会覆写它。例如 VLM 后端llm::vlm_ocr::VlmOcrBackend通过supports_language接受任意语言却继承了这里的空默认。因此不要从空列表推断“该后端不支持任何语言”——判断某个具体语言是否可用应改用ocr_backend_supports_languageAPI// C 侧对应函数签名见 docs-site/src/content/docs/reference/api-c.md int32_t xberg_ocr_backend_supports_language(const char* backend, const char* language);该函数委托给指定后端自己的supports_language实现后端名查找大小写不敏感并解析paddleocr别名未注册的后端名会返回错误错误消息中附带当前已注册的后端列表见 ocr.rs#L725-L746。首次调用成本Tesseract 的 tessdata 枚举文档同时声明了性能特性该调用对每个后端“并不免费”。TesseractBackend::supported_languages()首次调用时会分配一个 Tesseract API 实例并对真实 OCR 作业所解析的同一 tessdata 目录resolve_tessdata_path做初始化以枚举已安装的语言数据文件之后的调用走缓存。也就是说如果你的 C 服务进程启动后第一次调用xberg_list_ocr_backend_capabilities其中包含了一次 Tesseract 初始化的开销而后续调用是廉价的。在 OCR 后端管理 API 家族中的位置list_ocr_backend_capabilities是list_ocr_backends只返回后端名列表的能力枚举对偶版本目的是让消费方比如作业准入门控不必硬编码第二份“后端—语言”映射表。同族的其他管理 API均在 ocr.rs 中定义并在 C 头文件中有对应声明API作用register_ocr_backend/xberg_register_ocr_backend注册自定义OcrBackend实现要求Send Sync线程安全unregister_ocr_backend/xberg_unregister_ocr_backend按名称注销后端并调用其shutdown()注销不存在的名称是幂等的list_ocr_backends/xberg_list_ocr_backends仅列出已注册后端名称list_ocr_backend_capabilities/xberg_list_ocr_backend_capabilities名称 声明语言本文主题ocr_backend_supports_language/xberg_ocr_backend_supports_language判定单个语言是否被指定后端支持clear_ocr_backends/xberg_clear_ocr_backends清空注册表并逐个shutdown()注册表在首次构造时用内置后端Tesseract、PaddleOCR、VLM按 feature 标志门控播种clear_ocr_backends之后核心的ensure_ocr_backends_initializedocr.rs#L792-L806会在每次 OCR 分发前自修复式地重新补齐缺失的默认后端因此“清空后注册一个自定义后端”这类玩法不会影响默认配置下的 OCR 分发。端到端验证夹具与多语言 e2e 测试该调用不是孤立的示例而是被仓库的 e2e 体系作为契约测试持续验证夹具 fixtures/plugin_api/ocr_backend_capabilities_list.json 声明了调用名list_ocr_backend_capabilities、类别ocr_backend_management与断言not_error——即验收标准是“调用不报错”。各语言绑定的生成测试执行同一契约例如 Go 端 e2e/go/ocr_backend_management_test.go 中的Test_OcrBackendCapabilitiesList以及 Rust、Python、Elixir、Zig、Ruby 端同名的ocr_backend_management测试如 e2e/rust/tests/ocr_backend_management_test.rs。同族夹具还包括ocr_backends_list.json、ocr_backends_clear.json、ocr_backend_supports_language_unknown_backend.json等共同覆盖“查询→注册/注销→清空”的完整管理闭环。小结C 调用方只需两行char* result xberg_list_ocr_backend_capabilities();xberg_free_string(result);生产代码需判空并用xberg_last_error_code/xberg_last_error_context读错误可用xberg_list_ocr_backend_capabilities_len免 NUL 扫描地构造字符串切片。返回值是 JSON 数组按后端名排序每条含name与保持后端自报顺序的supported_languages。空supported_languages表示“该后端不枚举语言”不是“不支持任何语言”单语言可用性判定请用xberg_ocr_backend_supports_language。首次调用的隐藏成本在 Tesseract它要为枚举已安装 tessdata 语言而初始化一次 Tesseract API之后走缓存。该函数与register/unregister/list/clear/supports_language一起构成 xberg 插件 API 的 OCR 后端管理面其“调用不报错”的契约由 fixtures/plugin_api/ 夹具与多语言 e2e 测试持续守护。赞分享后端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 C FFI 插件 API 实战xberg_list_embedding_backends 枚举已注册嵌入后端xberg C FFI 插件 API 实战xberg_list_embedding_backends 枚举已注册嵌入后端 本文以 xberg 的 C FFI后端AI 应用NLPxberg C API 实战用 xberg_list_reranker_backends 枚举全部已注册的 Reranker 后端xberg C API 实战用 xberg_list_reranker_backends 枚举全部已注册的 Reranker 后端 本文围绕 xberg 的后端AI 应用NLPxberg C 插件 API 实战用 xberg_clear_embedding_backend 清空全局嵌入后端注册表xberg C 插件 API 实战用 xberg_clear_embedding_backend 清空全局嵌入后端注册表 本文围绕 xberg 的 C FFI后端AI 应用NLP上一篇akshare国际化支持多语言金融数据获取终极指南下一篇【亲测免费】 BlenderGPT 项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表