0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenVINO2021.4版本中场景文字检测与识别模型的推理使用

英特尔物联网 来源:英特尔物联网 作者: 贾志刚 2021-08-26 15:01 次阅读

场景文字检测与识别模型

OpenVINO2021.4支持场景文字检测是基于MobileNetV2的PixelLink模型,模型有两个分别是text-detection-0003与text-detection-0004。以text-detection-0003模型为例它有两个输出,分别是分割输出与bounding Boxes输出

下面是基于VGG16作为backbone实现的PixelLink的模型。

最终得到输出text/notext的mask区域,对mask区域简单处理之后就会得到每个场景文字区域的ROI。关于后处理,再后续的会有详细代码演示。OpenVINO2021.4不仅支持场景文字的检测还支持场景文字的识别,支持场景文字识别的模型是基于VGG16+双向LSTM,识别0~9与26个字符加空白,并且非大小写敏感!

模型输入与输出格式

PixelLink场景文字检测模型的输入与输出格式如下:

输入格式:1x3x768x1280 BGR彩色图像

输出格式:

name: “model/link_logits_/add”, [1x16x192x320] – pixelLink的输出

name: “model/segm_logits/add”, [1x2x192x320] – 像素分类text/no text

图-3文本识别模型的输入与输出格式如下:

输入格式:1x1x32x120

输出格式:30, 1, 37

输出解释是基于CTC贪心解析方式。

其中37字符集长度,字符集为:

0123456789abcdefghijklmnopqrstuvwxyz#

#表示空白。

同步与异步推理

在OpenVINO的IE推理模块相关SDK支持同步与异步推理模型,同步的意思是阻塞直到返回结果, 异步就是调用推理之后直接返回,接受到处理完成通知之后再解析输出,相比同步方式,异步推理更加适合视频流多路推理的方式。异步推理的执行方式大致如下:

// start the async infer request (puts the request to the queue and immediately returns)

async_infer_request-》StartAsync();

// here you can continue execution on the host until results of the current request are really needed

//。。。

async_infer_request.Wait(IInferRequest::RESULT_READY);

auto output = async_infer_request.GetBlob(output_name);

场景文字检测代码演示

OpenVINO2021.4中场景文字检测的,以text-detection-0003为例。加载模型文件与获取推理请求等与之前的保持一致,无需再说,这里主要是PixelLink模型的输出解析部分,它的解析部分代码如下:

cv::Mat mask = cv::Size(out_w, out_h), CV_8U);

int step = out_h*out_w;

for (int row = 0; row 《 out_h; row++) {

for (int col = 0; col 《 out_w; col++) {

float p1 = detection_out[row*out_w + col];

float p2 = detection_out[step + row*out_w + col]; // text

if (p2》1.0) {

mask.at《uchar》(row, col) = 255;

}

}

}

cv::resize(mask, mask, cv::Size(im_w, im_h));

std::vector《std::vector《cv::Point》》 contours;

cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);

对输出的Mask数据,完成text与非text的分类,得到二值图象,然后对二值图象完成轮廓发现,根据轮廓发现的的结果输出最大/最小外接矩形,得到每个Text区域的检测结果,最终模型的运行结果如下:

场景文字识别代码演示

场景文字识别是基于场景文字检测模型输出得到的TEXT区域作为输入,基于灰度图象预测输出,使用text-recognition-0012模型。关于模型加载、输入与输出设置同样不再赘述,检测得到TEXT的ROI作为输入,推理与预测文字及显示的代码如下:

auto reco_output = reco_request.GetBlob(reco_output_name);

const float* blob_out = static_cast《PrecisionTrait《Precision::FP32》::value_type*》(reco_output-》buffer());

const SizeVector reco_dims = reco_output-》getTensorDesc().getDims();

const int RW = reco_dims[0];

const int RB = reco_dims[1];

const int RL = reco_dims[2];

std::string ocr_txt = ctc_decode(blob_out, RW, RL);

std::cout 《《 ocr_txt 《《 std::endl;

cv::putText(src, ocr_txt, box.tl(), cv::FONT_HERSHEY_PLAIN, 1.0, cv::Scalar(255, 0, 0), 1);

其中RWxRBxRL=30x1x37,CTC解析的函数ctc_decode实现代码如下:

std::string ctc_decode(const float* blob_out, int seq_w, int seq_l) {

printf(“seq width: %d, seq length: %d ”, seq_w, seq_l);

std::string res = “”;

bool prev_pad = false;

const int num_classes = alphabet.length();

int seq_len = seq_w*seq_l;

for (int i = 0; i 《 seq_w; i++) {

int argmax = 0;

int max_prob = blob_out[i*seq_l];

for (int j = 0; j 《num_classes; j++) {

if (blob_out[i*seq_l + j] 》 max_prob) {

max_prob = blob_out[i*seq_l + j];

argmax = j;

}

}

auto symbol = alphabet[argmax];

if (symbol == ‘#’) {

prev_pad = true;

}

else {

if (res.empty() || prev_pad || (!res.empty() && symbol != res.back())) {

prev_pad = false;

res += symbol;

}

}

}

return res;

}

解析过程就是对得到二维矩阵30x37,按行先做argmax,然后再去掉重复,最终得到预测生成的text文本返回。

总结

本文主要讲述了OpenVINO2021.4版本中场景文字检测与识别模型的推理使用,以及同步与异步推理的的基本概念。特别值得注意的是场景文字识别模型是基于灰度图象不是RGB彩色图象,如果搞错这点就会得到错误的文本预测结果。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RGB
    RGB
    +关注

    关注

    4

    文章

    798

    浏览量

    58467
  • 识别
    +关注

    关注

    3

    文章

    173

    浏览量

    31964
  • vgg
    vgg
    +关注

    关注

    1

    文章

    11

    浏览量

    5193
  • LSTM
    +关注

    关注

    0

    文章

    59

    浏览量

    3748

原文标题:OpenVINO™ 场景文字识别与同步与异步推理

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    阿里云开源推理模型QwQ

    近日,阿里云通义团队宣布推出全新AI推理模型QwQ-32B-Preview,并同步实现了开源。这一举措标志着阿里云在AI推理领域迈出了重要一步。 据评测数据显示,QwQ预览版本已具备研究生水平的科学
    的头像 发表于 11-29 11:30 540次阅读

    使用vLLM+OpenVINO加速大语言模型推理

    随着大语言模型的广泛应用,模型的计算需求大幅提升,带来推理时延高、资源消耗大等挑战。
    的头像 发表于 11-15 14:20 378次阅读
    使用vLLM+<b class='flag-5'>OpenVINO</b>加速大语言<b class='flag-5'>模型</b><b class='flag-5'>推理</b>

    高效大模型推理综述

    模型由于其在各种任务中的出色表现而引起了广泛的关注。然而,大模型推理的大量计算和内存需求对其在资源受限场景的部署提出了挑战。业内一直在努力开发旨在提高大
    的头像 发表于 11-15 11:45 352次阅读
    高效大<b class='flag-5'>模型</b>的<b class='flag-5'>推理</b>综述

    使用OpenVINO Model Server在哪吒开发板上部署模型

    OpenVINO Model Server(OVMS)是一个高性能的模型部署系统,使用C++实现,并在Intel架构上的部署进行了优化,使用OpenVINO 进行推理
    的头像 发表于 11-01 14:19 275次阅读
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒开发板上部署<b class='flag-5'>模型</b>

    FPGA和ASIC在大模型推理加速中的应用

    随着现在AI的快速发展,使用FPGA和ASIC进行推理加速的研究也越来越多,从目前的市场来说,有些公司已经有了专门做推理的ASIC,像Groq的LPU,专门针对大语言模型推理做了优化
    的头像 发表于 10-29 14:12 400次阅读
    FPGA和ASIC在大<b class='flag-5'>模型</b><b class='flag-5'>推理</b>加速中的应用

    使用OpenVINO C++在哪吒开发板上推理Transformer模型

    OpenVINO 是一个开源工具套件,用于对深度学习模型进行优化并在云端、边缘进行部署。它能在诸如生成式人工智能、视频、音频以及语言等各类应用场景中加快深度学习推理的速度,且支持来自
    的头像 发表于 10-12 09:55 332次阅读
    使用<b class='flag-5'>OpenVINO</b> C++在哪吒开发板上<b class='flag-5'>推理</b>Transformer<b class='flag-5'>模型</b>

    澎峰科技高性能大模型推理引擎PerfXLM解析

    模型的高性能推理框架,并受到广泛关注。在历经数月的迭代开发后,澎峰科技重磅发布升级版本,推出全新的高性能大模型推理引擎:PerfXLM。
    的头像 发表于 09-29 10:14 463次阅读
    澎峰科技高性能大<b class='flag-5'>模型</b><b class='flag-5'>推理</b>引擎PerfXLM解析

    三行代码完成生成式AI部署

    OpenVINO2024.2版本跟之前版本最大的不同是OpenVINO2024.2分为两个安装包分别是基础包与生成式AI支持包,新发布的GenAI开发包支持C++与Python语言接口
    的头像 发表于 08-30 16:49 414次阅读
    三行代码完成生成式AI部署

    OpenVINO 2024.2版本亮点解析

    看到更多的机会。其中一种场景是人工智能助手,它能够生成文本(邮件草稿、文档摘要、文档内容的答案等等)。这一切都由 LLM(大型语言模型)和不断增长的 SLM(小型语言模型)系列提供支持。
    的头像 发表于 08-16 15:26 333次阅读

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都觉得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的优化与整理,已经是非常贴近开发的使用习惯与推理
    的头像 发表于 07-26 09:20 888次阅读

    OpenVINO C# API在intel平台部署YOLOv10目标检测模型

    模型设计策略,从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO 2024.1部署YOLOv10目标
    的头像 发表于 06-21 09:23 1022次阅读
    用<b class='flag-5'>OpenVINO</b> C# API在intel平台部署YOLOv10目标<b class='flag-5'>检测</b><b class='flag-5'>模型</b>

    【大语言模型:原理与工程实践】大语言模型的应用

    设计提示词时,需要明确输出需求,以便得到满意的结果。 推理引导如前文所述,提示工程对于训练大语言模型的逐步推理能力至关重要。零样提示大语言模型
    发表于 05-07 17:21

    【大语言模型:原理与工程实践】大语言模型的评测

    在知识获取、逻辑推理、代码生成等方面的能力。这些评测基准包括语言建模能力、综合知识能力、数学计算能力、代码能力和垂直领域等多个维度。对于微调模型,对话能力的评测关注模型在对话任务中的全维度能力,而
    发表于 05-07 17:12

    YOLOv8+PyQT5打造细胞计数与识别应用说明

    YOLOv8对象检测模型基于自定义数据集训练红白细胞检测模型,然后通过工具导出模型为ONNX,基于Ope
    的头像 发表于 01-15 17:22 1143次阅读
    YOLOv8+PyQT5打造细胞计数与<b class='flag-5'>识别</b>应用说明

    基于OpenVINO和AIxBoard的智能安检盒子设计

    公共安全问题日益凸显,传统安检手段面临挑战。为提高安检效率和保障公共安全,基于 OpenVINO 和 AIxBoard 的智能安检盒子应运而生。利用深度学习模型和 X 光图像处理威廉希尔官方网站 ,该设备能够实时识别危险物品并发出警报,为公共
    的头像 发表于 12-25 11:14 533次阅读
    基于<b class='flag-5'>OpenVINO</b>和AIxBoard的智能安检盒子设计