Skip to content

OCR预热与并发说明

创建欧拉对象 不预热 OCR,避免卡住主流程。识别前请先 OcrWarmupModel

推荐流程

text
CreateCOLAPlugInterFace()          // 立刻返回
OcrWarmupModel(ola, 0, 1, 1)       // async=1,后台预热内置模型
// 主流程继续
OcrWarmupModel(ola, 0, 1, 0)       // 可选:等到预热结束
OcrFromBmpDataEx(...)              // 预热后再识别,避免首帧 10s 级加载

自定义模型:OcrLoadModel 之后同样调用 OcrWarmupModel(ola, handle, 1, 1)

同句柄多线程

场景行为
同一 modelHandle 多线程同时识别会排队,不崩溃、结果完整。框内识别仍可并行(GPU/CPU worker)。
两个欧拉对象 / 两个已加载句柄各有独立后端,可真正并发(注意显存)。
x86 GPU默认最多 4 路 rec worker,extractor 预热后常驻,避免反复 vkAllocateMemory
x64 GPU框多时 rec 可自动加到最多 16 路(核显走保守路径)。

排队不等于死锁:A 线程识别结束,B 线程立刻继续。墙钟约等于「单次识别 × 并发线程数」减去少量重叠。

加速建议

  1. 先预热再识别,不要把解密/Vulkan/extractor 创建算进业务耗时。
  2. Runtime.Ncnn.RecParallelism 可调;x86 GPU 上限默认 4。
  3. 核显 + 独显时自动优先独显。仅 Intel 核显:x86 走 Vulkan GPU(保守参数),x64 默认 CPU。
  4. 需要更高并发时加载两份模型(两个 handle),不要对同一 handle 死等线性加速。

实测数据随机器变化,以本机 OcrGetLastProfilerec_wall_ms / use_gpu / selected_vulkan_device_name 为准。