OCR.h
Go to the source code of this file.
OCR功能查找图像中字符串的位置,并将该区域中的字符串作为边界框返回为unicode格式的数据。
SAIGE VISION将检测到的字符串作为 SaigeTextObject 结构返回。该结构包括字符串的位置, 表示为多边形形式的点数组,多边形位置的置信度分数,识别字符的概率分数以及检测到的字符串。
推理选项
OCR具有以下推理选项。
检查大小宽度,高度
这是使用 SaigeHandleConfig 结构创建句柄时可以设置的选项之一。与 SaigeInferenceOption::batchSize 相同,这是在创建句柄时影响内存设置的选项, 并且在创建句柄后无法更改。
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 | // ExampleSegRuntime.cpp:52
SaigeInferenceHandle handle = nullptr;
SaigeHandleConfig config;
config.inspectionSizeHeight = 2496;
config.inspectionSizeWidth = 2496;
unsigned int handleFlags = SAIGE_SET_INSPECTION_SIZE;
if (optimize) {
handleFlags |= SAIGE_OPTIMIZE_HANDLE;
}
retval = SaigeCreateInferenceHandle(&handle, kProjectTypeSEG, trainedModelPath.c_str(),
deviceIndex, &config, handleFlags);
if (retval < 0) {
std::cerr << "SaigeCreateInferenceHandle failed - " << SaigeStrError(retval) << std::endl;
return retval;
}
|
检测区域选项
这些选项应用于OCR中字符区域的检测过程。这些选项用于过滤检测到的字符区域。
文本识别选项
这些选项应用于OCR的字符识别阶段。这些选项用于根据分数或特定字符字符串模式过滤识别的字符。
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156 | // ExampleOCRRuntime.cpp:135
/*options->textFormatting.length = 5;
SaigeInitTextFormatting(options->textFormatting);
for (int i = 0; i < options->textFormatting.length; ++i) {
options->textFormatting.engUpper[i] = true;
options->textFormatting.number[i] = true;
}
retval = SaigeSetInferenceOption(handle, options, SAIGE_SET_TEXT_FORMATTING);
if (retval < 0) {
std::cerr << "SaigeGetInferenceOption() failed - " << SaigeStrError(retval) << std::endl;
SaigeDestroyInferenceHandle(handle);
SaigeDestroyInferenceResult(result);
return retval;
}*/
/* options->oversizedImageHandling = SAIGE_RESIZE_TO_FIT;
retval = SaigeSetInferenceOption(handle, options, SAIGE_SET_OVERSIZED_IMAGE_HANDLING);
if (retval < 0) {
std::cerr << "SaigeGetInferenceOption() failed - " << SaigeStrError(retval) << std::endl;
SaigeDestroyInferenceHandle(handle);
SaigeDestroyInferenceResult(result);
return retval;
}*/
|
推理结果
要获取检测到的字符串,首先获取字符串的数量,然后使用 SaigeTextObject 结构数组获取字符串信息。 在这里,我们使用C++的STL vector来处理vector中的内存分配/释放。
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285 | // ExampleOCRRuntime.cpp:266
int numTextObject;
long long imreadTime, inferenceTime, postProcessingTime;
std::vector<SaigeTextObject> textObjects;
retval = SaigeGetInferenceResultNumOfTextObjects(result, &numTextObject);
if (retval < 0) {
std::cerr << "SaigeGetInferenceResultNumOfTextObjects() failed - "
<< SaigeStrError(retval) << std::endl;
SaigeDestroyInferenceHandle(handle);
SaigeDestroyInferenceResult(result);
return retval;
}
textObjects.resize(numTextObject);
retval = SaigeGetInferenceResultTextObjects(result, textObjects.data());
if (retval < 0) {
std::cerr << "SaigeGetInferenceResultTextObjects() failed - " << SaigeStrError(retval)
<< std::endl;
SaigeDestroyInferenceHandle(handle);
SaigeDestroyInferenceResult(result);
return retval;
}
|