主题
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 线程立刻继续。墙钟约等于「单次识别 × 并发线程数」减去少量重叠。
加速建议
- 先预热再识别,不要把解密/Vulkan/extractor 创建算进业务耗时。
Runtime.Ncnn.RecParallelism可调;x86 GPU 上限默认 4。- 核显 + 独显时自动优先独显。仅 Intel 核显:x86 走 Vulkan GPU(保守参数),x64 默认 CPU。
- 需要更高并发时加载两份模型(两个 handle),不要对同一 handle 死等线性加速。
实测数据随机器变化,以本机 OcrGetLastProfile 的 rec_wall_ms / use_gpu / selected_vulkan_device_name 为准。
