点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自|OpenCV学堂

模型介绍

文本检测模型

OpenVINO支持场景文字检测是基于MobileNet的PixelLink模型,该模型有两个输出,分别是分割输出与bounding Boxes输出,结构如下:

下面是基于VGG16作为backbone实现的PixelLink的模型结构:

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

输出格式:

name: "model/link_logits_/add", [1x16x192x320] – pixelLink的输出
name: "model/segm_logits/add", [1x2x192x320] – 像素分类text/no text

文本识别模型

基于VGG16+双向LSTM,识别0~9与26个字符加空白,并且非大小写敏感!基于CNN+LSTM的文本识别网络结构如下:

这里CNN使用类似VGG16结构提前特征,序列预测使用双向LSTM网络。

输入格式:1x1x32x120
输出格式:30, 1, 37
输出解释是基于CTC贪心解析方式。

代码演示

01

文本检测

基于PixelLink完成文本检测,其中加载模型与获取输入与输出层名称的代码实现如下:

 1log.info("Creating Inference Engine")2ie = IECore()3dete_net = ie.read_network(model=dete_text_xml, weights=dete_text_bin)4reco_net = ie.read_network(model=reco_text_xml, weights=reco_text_bin)56# 文本检测网络, 输入与输出格式7log.info("加载文本检测网络,解析输入与输出格式...")8input_it = iter(dete_net.input_info)9input_det_blob = next(input_it)
10print(input_det_blob)
11output_it = iter(dete_net.outputs)
12out_det_blob1 = next(output_it)
13out_det_blob2 = next(output_it)
14
15# Read and pre-process input images
16print(dete_net.input_info[input_det_blob].input_data.shape)
17dn, dc, dh, dw = dete_net.input_info[input_det_blob].input_data.shape
18
19# Loading model to the plugin
20det_exec_net = ie.load_network(network=dete_net, device_name="CPU")
21print("out_det_blob1: ", out_det_blob1, "out_det_blob2: ", out_det_blob2)

执行推理与解析输出的代码如下:

 1image = cv.imread("D:/images/openvino_ocr.jpg")2# image = cv.imread("D:/facedb/tiaoma/1.png")3h, w, c = image.shape4cv.imshow("input", image)5img_blob = cv.resize(image, (dw, dh))6img_blob = img_blob.transpose(2, 0, 1)7# Start sync inference8log.info("Starting inference in synchronous mode")9inf_start1 = time.time()
10res = det_exec_net.infer(inputs={input_det_blob: [img_blob]})
11inf_end1 = time.time() - inf_start1
12print("inference time(ms) : %.3f" % (inf_end1 * 1000))
13link_logits_ = res[out_det_blob1][0]
14segm_logits = res[out_det_blob2][0]
15link_logits_ = link_logits_.transpose(1, 2, 0)
16segm_logits = segm_logits.transpose(1, 2, 0)
17pixel_mask = np.zeros((192, 320), dtype=np.uint8)
18print(link_logits_.shape, segm_logits.shape)
19# 192, 320
20for row in range(192):
21    for col in range(320):
22        pv1 = segm_logits[row, col, 0]
23        pv2 = segm_logits[row, col, 1]
24        if pv2 > 1.0:
25            pixel_mask[row, col] = 255
26
27mask = cv.resize(pixel_mask, (w, h))
28cv.imshow("mask", mask)运行结果如下:

运行结果:

02

文本识别

文本识别跟文本检测的代码流程类似,首先需要加载模型,获取输入与输出层格式与属性,代码实现如下:

 1ie = IECore()2reco_net = ie.read_network(model=reco_text_xml, weights=reco_text_bin)34# 文本识别网络5log.info("加载文本识别网络,解析输入与输出格式...")6input_rec_it = iter(reco_net.input_info)7input_rec_blob = next(input_rec_it)8print(input_rec_blob)9output_rec_it = iter(reco_net.outputs)
10out_rec_blob = next(output_rec_it)
11
12# Read and pre-process input images
13print(reco_net.input_info[input_rec_blob].input_data.shape)
14rn, rc, rh, rw = reco_net.input_info[input_rec_blob].input_data.shape
15
16# Loading model to the plugin
17rec_exec_net = ie.load_network(network=reco_net, device_name="CPU")
18print("out_rec_blob1: ", out_rec_blob)
19
20# 文字识别
21image = cv.imread("D:/images/zsxq/ocr3.png")
22gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
23ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
24se = cv.getStructuringElement(cv.MORPH_RECT, (5, 1))
25binary = cv.dilate(binary, se)
26cv.imshow("binary", binary)
27cv.waitKey(0)
28contours, hireachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
29for cnt in range(len(contours)):
30    x, y, iw, ih = cv.boundingRect(contours[cnt])
31    roi = gray[y:y + ih, x:x + iw]
32    rec_roi = cv.resize(roi, (rw, rh))
33    rec_roi_blob = np.expand_dims(rec_roi, 0)
34
35    # Start sync inference
36    log.info("Starting inference in synchronous mode")
37    inf_start1 = time.time()
38    res = rec_exec_net.infer(inputs={input_rec_blob: [rec_roi_blob]})
39    inf_end1 = time.time() - inf_start1
40    print("inference time(ms) : %.3f" % (inf_end1 * 1000))
41    res = res[out_rec_blob]
42    txt = greedy_prase_text(res)
43    cv.putText(image, txt, (x, y), cv.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 255), 1, 8)
44cv.imshow("recognition text demo", image)
45cv.waitKey(0)
46cv.destroyAllWindows()

运行结果如下:

检测+识别一起,运行结果如下:

CTC贪心解析

重新整理了一下,CTC贪心解析部分的代码函数。不用看公式,看完你会晕倒而且写不出代码!实现如下:

def ctc_soft_max(data):sum = 0;max_val = max(data)index = np.argmax(data)for i in range(len(data)):sum += np.exp(data[i]- max_val)prob = 1.0 / sumreturn index, probdef greedy_prase_text(res):# CTC greedy decode from hereprint(res.shape)# 解析输出textocrstr = ""prev_pad = False;for i in range(res.shape[0]):ctc = res[i]  # 1x13ctc = np.squeeze(ctc, 0)index, prob = ctc_soft_max(ctc)if digit_nums[index] == '#':prev_pad = Trueelse:if len(ocrstr) == 0 or prev_pad or (len(ocrstr) > 0 and digit_nums[index] != ocrstr[-1]):prev_pad = Falseocrstr += digit_nums[index]print(ocrstr)return ocrstr

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

实战:OpenVINO+OpenCV 文本检测与识别相关推荐

  1. OpenVINO+OpenCV 文本检测与识别

    本文转载自OpenCV学堂. 1 模型介绍 文本检测模型 OpenVINO支持场景文字检测是基于MobileNet的PixelLink模型,该模型有两个输出,分别是分割输出与bounding Boxe ...

  2. opencv OCR 端到端场景文本检测与识别(webcam_demo) vs2015

    版权声明:技术分享,csdn longji https://blog.csdn.net/longji/article/details/78274842 01 资源 OpenCV自带的端到端场景文本检测 ...

  3. 机器视觉 OpenCV—python 基于LSTM网络的OCR文本检测与识别

    文章目录 一.背景与环境搭建 二.文本检测与识别 一.背景与环境搭建 OpenCV的文本识别流程: OpenCV EAST 文本检测器执行文本检测, 我们提取出每个文本 ROI 并将其输入 Tesse ...

  4. OpenCV 文字检测与识别模块

    OpenCV 文字检测与识别模块 该模块在扩展模块中,需自行下载 下载地址:https://github.com/opencv/opencv_contrib/tree/4.0.0 说明文档: 文字检测 ...

  5. 【每周CV论文】深度学习文本检测与识别入门必读文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 文本检测和识别是计算机视觉的一个非常重要的应 ...

  6. 端到端文本检测与识别——FOTS

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013063099/article/details/89236368 常见的深度学习OCR过程中,会 ...

  7. 【文本检测与识别-白皮书-3.1】第四节:算法模型 2

    CTPN CTPN,全称是"Detecting Text in Natural Image with Connectionist Text Proposal Network"(基于 ...

  8. 【技术白皮书】第一章:基于深度学习的文本检测与识别的技术背景

    1.技术背景 1.1技术背景--什么是文本检测与识别 OCR全称Optical Character Recognition,即光学字符识别,最早在1929年被德国科学家Tausheck提出,定义为将印 ...

  9. 基于EAST和Tesseract的文本检测与识别

    目录 导言 现实世界问题 说明 问题陈述 业务目标和约束条件 可用于文本检测和识别的数据集 数据集概述和说明 探索性数据分析(EDA) 深度学习时代之前的文本检测方法 EAST(高效精确的场景文本检测 ...

最新文章

  1. 网易SRC指责白帽子私自披露已修复漏洞,强势表态违刑必究
  2. 青春是如此美好,又怎忍平凡度过
  3. CodeForces - 1553F Pairwise Modulo(数论+树状数组)
  4. python引用自己的文件的一切问题
  5. python拓展库random_一分钟让你学会Python Random库的使用
  6. 马云马斯克激辩:AI 是威胁还是被低估了?
  7. kotlin界面_Kotlin界面
  8. 谈谈我在自然语言处理进阶上的一些个人拙见
  9. JIRA重启服务器后需要重启TOMCAT的解决
  10. ununtu18.0安装搜狗输入法
  11. 扫福得福背后,支付宝AR红包的技术创新与故事
  12. python闯关2-罗马数字编码
  13. 计算机c盘系统自带的有哪些,电脑C盘里哪些文件是可以删除的?C盘可以删除的文件大全...
  14. H5(HTML)网页制作基础
  15. gdb 查看内存 及 变量类型
  16. select2中文选项通过拼音或者首字母快速定位选项
  17. 关于Flask框架中启动Scrapy爬虫框架时的几种问题的解决
  18. 深度学习中的规范化(BN、LN等四种规范化)
  19. NFS、GFS、NAS文件存储服务对比分析
  20. PDF文件可以修改吗,PDF怎么删除页眉页脚

热门文章

  1. 赌5毛钱,你解不出这道Google面试题
  2. 程序员拯救乐坛?OpenAI用“逆天”GPT2.0搞了个AI音乐生成器
  3. AI 助力金融后,中美金融科技领域最大的差距是什么?
  4. 重磅!阿里开源AI核心技术,95%算法工程师受用
  5. 重磅消息:Spring 6 和Spring Boot 3
  6. Java日志体系权威总结
  7. 现在,Serverless 真的已经成熟了吗?
  8. 深入研究 System.out.println()
  9. SpringBoot缓存应用实践
  10. 高并发的核心技术 - 幂等的实现方案