:用 xberg_list_ocr_backend_capabilities 枚舉 OCR 后端語言能力)
后端AI 應(yīng)用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 語言調(diào)用方無法直接獲得 Rust 側(cè)的類型化對象但可以通過 C ABI 函數(shù)xberg_list_ocr_backend_capabilities一次性拿到“每個已注冊 OCR 后端的名稱 其聲明支持的 ISO 語言列表”JSON 編碼。讀完本文你將掌握這段 C 調(diào)用的完整寫法與內(nèi)存/錯誤處理約定、返回值 JSON 的確切語義尤其是空語言列表的陷阱、Rust 核心側(cè)list_ocr_backend_capabilities的確定性保證與首次調(diào)用成本以及它在整個 OCR 后端管理 API 家族中的位置。C 側(cè)調(diào)用最小可運行示例xberg 文檔站為 C 目標(biāo)語言自動生成的插件 API 片段插件 API 示例對應(yīng)測試夾具 ocr_backend_capabilities_list.json演示了該函數(shù)最簡的調(diào)用方式#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該函數(shù)聲明在其中char *xberg_list_ocr_backend_capabilities(void); uintptr_t xberg_list_ocr_backend_capabilities_len(void);頭文件聲明處見 xberg.h#L29909-L29919。返回指針必須用配套釋放函數(shù)xberg_free_string(char *ptr)釋放聲明見 xberg.h#L3971不可用free()或xberg_free_bytes等其他釋放入口。官方片段把返回值直接交給xberg_free_string對NULL安全生產(chǎn)代碼則應(yīng)先判空并用xberg_last_error_code()/xberg_last_error_context()讀取錯誤信息。返回值語義JSON 字符串、錯誤與字節(jié)長度C ABI 層在 crates/xberg-ffi/src/lib.rs#L85599-L85639 中實現(xiàn)成功把 Rust 側(cè)VecOcrBackendCapabilities用serde_json::to_string序列化為 JSON 字符串轉(zhuǎn)為CString后以into_raw()交出所有權(quán)。典型形如[ {name:paddleocr,supported_languages:[chinese,english,japanese,korean]}, {name:tesseract,supported_languages:[eng,deu,fra]} ]數(shù)組元素順序按name升序排列確定性由 Rust 核心保證見下文。失敗返回NULL并調(diào)用set_last_error記錄錯誤碼與錯誤消息——調(diào)用方應(yīng)通過xberg_last_error_code()取錯誤碼、xberg_last_error_context()取錯誤上下文兩者聲明見 xberg.h#L3956-L3964。據(jù) Rust 核心文檔注釋該函數(shù)只有在注冊表讀鎖無法獲取時才會返回錯誤參見 api-c.md 參考頁 中對應(yīng)條目。panic 兜底實現(xiàn)外層包了catch_unwindRust 側(cè) panic 不會穿越 FFI 邊界若未記錄過更具體的錯誤會寫入通用的 panic 錯誤標(biāo)記后返回NULL。此外還有一個伴生函數(shù)xberg_list_ocr_backend_capabilities_len()xberg.h#L29919返回本線程最近一次調(diào)用所產(chǎn)出字符串的字節(jié)長度調(diào)用失敗時返回 0。頭文件注釋明確說明它的用途讓 Zig、Java FFM Panama 等語言可以按長度直接構(gòu)造切片而不必對 C 字符串做 NUL 掃描。Rust 核心實現(xiàn)list_ocr_backend_capabilities的語義與陷阱C 函數(shù)只是薄封裝真正的語義定義在核心 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排序。由此得到兩條對調(diào)用方很重要的契約確定性返回數(shù)組按name排序與注冊順序、注冊表內(nèi)部順序無關(guān)因此可以作為緩存鍵或測試斷言的穩(wěn)定輸入。supported_languages保持后端自報順序每條記錄內(nèi)的語言列表不重新排序——Tesseract 的順序來自枚舉已安裝的 tessdata 文件PaddleOCR 來自其SUPPORTED_LANGUAGES常量。重新排序會與后端自身supports_language實現(xiàn)的優(yōu)先級不一致。空語言列表 ≠ 不支持任何語言O(shè)crBackendCapabilities結(jié)構(gòu)體ocr.rs#L611-L632上有一段值得反復(fù)強調(diào)的文檔supported_languages是OcrBackendtrait 的帶默認值方法默認返回vec![]并非每個后端都會覆寫它。例如 VLM 后端llm::vlm_ocr::VlmOcrBackend通過supports_language接受任意語言卻繼承了這里的空默認。因此不要從空列表推斷“該后端不支持任何語言”——判斷某個具體語言是否可用應(yīng)改用ocr_backend_supports_languageAPI// C 側(cè)對應(yīng)函數(shù)簽名見 docs-site/src/content/docs/reference/api-c.md int32_t xberg_ocr_backend_supports_language(const char* backend, const char* language);該函數(shù)委托給指定后端自己的supports_language實現(xiàn)后端名查找大小寫不敏感并解析paddleocr別名未注冊的后端名會返回錯誤錯誤消息中附帶當(dāng)前已注冊的后端列表見 ocr.rs#L725-L746。首次調(diào)用成本Tesseract 的 tessdata 枚舉文檔同時聲明了性能特性該調(diào)用對每個后端“并不免費”。TesseractBackend::supported_languages()首次調(diào)用時會分配一個 Tesseract API 實例并對真實 OCR 作業(yè)所解析的同一 tessdata 目錄resolve_tessdata_path做初始化以枚舉已安裝的語言數(shù)據(jù)文件之后的調(diào)用走緩存。也就是說如果你的 C 服務(wù)進程啟動后第一次調(diào)用xberg_list_ocr_backend_capabilities其中包含了一次 Tesseract 初始化的開銷而后續(xù)調(diào)用是廉價的。在 OCR 后端管理 API 家族中的位置list_ocr_backend_capabilities是list_ocr_backends只返回后端名列表的能力枚舉對偶版本目的是讓消費方比如作業(yè)準(zhǔn)入門控不必硬編碼第二份“后端—語言”映射表。同族的其他管理 API均在 ocr.rs 中定義并在 C 頭文件中有對應(yīng)聲明API作用register_ocr_backend/xberg_register_ocr_backend注冊自定義OcrBackend實現(xiàn)要求Send Sync線程安全unregister_ocr_backend/xberg_unregister_ocr_backend按名稱注銷后端并調(diào)用其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()注冊表在首次構(gòu)造時用內(nèi)置后端Tesseract、PaddleOCR、VLM按 feature 標(biāo)志門控播種clear_ocr_backends之后核心的ensure_ocr_backends_initializedocr.rs#L792-L806會在每次 OCR 分發(fā)前自修復(fù)式地重新補齊缺失的默認后端因此“清空后注冊一個自定義后端”這類玩法不會影響默認配置下的 OCR 分發(fā)。端到端驗證夾具與多語言 e2e 測試該調(diào)用不是孤立的示例而是被倉庫的 e2e 體系作為契約測試持續(xù)驗證夾具 fixtures/plugin_api/ocr_backend_capabilities_list.json 聲明了調(diào)用名list_ocr_backend_capabilities、類別ocr_backend_management與斷言not_error——即驗收標(biāo)準(zhǔn)是“調(diào)用不報錯”。各語言綁定的生成測試執(zhí)行同一契約例如 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等共同覆蓋“查詢→注冊/注銷→清空”的完整管理閉環(huán)。小結(jié)C 調(diào)用方只需兩行char* result xberg_list_ocr_backend_capabilities();xberg_free_string(result);生產(chǎn)代碼需判空并用xberg_last_error_code/xberg_last_error_context讀錯誤可用xberg_list_ocr_backend_capabilities_len免 NUL 掃描地構(gòu)造字符串切片。返回值是 JSON 數(shù)組按后端名排序每條含name與保持后端自報順序的supported_languages??誷upported_languages表示“該后端不枚舉語言”不是“不支持任何語言”單語言可用性判定請用xberg_ocr_backend_supports_language。首次調(diào)用的隱藏成本在 Tesseract它要為枚舉已安裝 tessdata 語言而初始化一次 Tesseract API之后走緩存。該函數(shù)與register/unregister/list/clear/supports_language一起構(gòu)成 xberg 插件 API 的 OCR 后端管理面其“調(diào)用不報錯”的契約由 fixtures/plugin_api/ 夾具與多語言 e2e 測試持續(xù)守護。贊分享后端AI 應(yīng)用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點擊查看免費下載相關(guān)推薦xberg C FFI 插件 API 實戰(zhàn)xberg_list_embedding_backends 枚舉已注冊嵌入后端xberg C FFI 插件 API 實戰(zhàn)xberg_list_embedding_backends 枚舉已注冊嵌入后端 本文以 xberg 的 C FFI后端AI 應(yīng)用NLPxberg C API 實戰(zhàn)用 xberg_list_reranker_backends 枚舉全部已注冊的 Reranker 后端xberg C API 實戰(zhàn)用 xberg_list_reranker_backends 枚舉全部已注冊的 Reranker 后端 本文圍繞 xberg 的后端AI 應(yīng)用NLPxberg C 插件 API 實戰(zhàn)用 xberg_clear_embedding_backend 清空全局嵌入后端注冊表xberg C 插件 API 實戰(zhàn)用 xberg_clear_embedding_backend 清空全局嵌入后端注冊表 本文圍繞 xberg 的 C FFI后端AI 應(yīng)用NLP上一篇akshare國際化支持多語言金融數(shù)據(jù)獲取終極指南下一篇【親測免費】 BlenderGPT 項目教程創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考