通过回调使用自定义 AI 模型
概述
从 SDK v4.1.0 开始,ComPDF Conversion SDK 暴露了基于回调的扩展点,允许您插入自己的 AI 推理引擎来进行 OCR、版面分析和表格识别。您可以不再依赖通过 LibraryManager::SetDocumentAIModel 加载的内置 DocumentAI 模型,而是使用任何模型或服务运行推理,并将结果以 JSON 字符串返回给 SDK。
当 CConvertCallback 上注册了相关的回调对后,SDK 会跳过该能力的内置模型调用,转而使用您的 JSON 输出。如果回调对为 nullptr,SDK 会回退到内置模型。
回调对
每种 AI 能力使用两个回调:触发器(接收 PNG 图像路径,返回 bool)和结果获取器(返回 UTF-8 JSON C 字符串)。
| 能力 | 触发器回调 | 结果获取器回调 | 触发条件 |
|---|---|---|---|
| OCR | ocr | get_ocr_result | enable_ocr = true |
| 版面分析 | layout | get_layout_result | enable_ai_layout = true 或 enable_ocr = true |
| 表格识别 | table | get_table_result | enable_ai_table_recognition = true 且检测到表格 |
两者必须同时设置。JSON 坐标位于图像像素空间(左上角原点)。
示例
c++
#include "compdf_conversion.h"
#include <string>
using namespace compdf;
using namespace compdf::common;
using namespace compdf::conversion;
static std::string g_ocr_json;
static std::string g_layout_json;
static std::string g_table_json;
bool my_ocr_trigger(const char* image_path) {
g_ocr_json = run_my_ocr_model(image_path);
return !g_ocr_json.empty();
}
const char* my_ocr_getter() { return g_ocr_json.c_str(); }
bool my_layout_trigger(const char* image_path) {
g_layout_json = run_my_layout_model(image_path);
return !g_layout_json.empty();
}
const char* my_layout_getter() { return g_layout_json.c_str(); }
bool my_table_trigger(const char* image_path) {
g_table_json = run_my_table_model(image_path);
return !g_table_json.empty();
}
const char* my_table_getter() { return g_table_json.c_str(); }
int main() {
LibraryManager::LicenseVerify("<license>", "<device_id>", "<app_id>");
LibraryManager::Initialize("resource");
CConvertCallback callback = {};
callback.ocr = &my_ocr_trigger;
callback.get_ocr_result = &my_ocr_getter;
callback.layout = &my_layout_trigger;
callback.get_layout_result = &my_layout_getter;
callback.table = &my_table_trigger;
callback.get_table_result = &my_table_getter;
ConvertOptions opt;
opt.enable_ocr = true;
opt.enable_ai_layout = true;
opt.languages = { OCRLanguage::e_English };
CPDFConversion::StartPDFToWord("input.pdf", "", "output.docx", opt, &callback);
return 0;
}JSON 模式
OCR、版面分析和表格识别的 JSON 模式与 C SDK 相同,请参见 C 指南中的“通过回调使用自定义 AI 模型”。