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

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

3天内不再提示

OpenVINO场景文字检测与文字识别教程

英特尔物联网 来源:英特尔物联网 2023-09-24 15:31 次阅读

作者:贾志刚英特尔边缘计算创新大使

01OpenVINO场景文字检测

OpenVINO是英特尔推出的深度学习模型部署框架,当前最新版本是OpenVINO2023版本。OpenVINO2023自带各种常见视觉任务支持的预训练模型库Model Zoo,其中支持场景文字检测的网络模型是来自Model Zoo中名称为:text-detection-0003的模型(基于PixelLink架构的场景文字检测网络)。

d381afc6-5936-11ee-939d-92fbcf53809c.png

图-1 PixelLink网络模型架构

图-1中的PixelLink场景文字检测模型的输入与输出格式说明

输入格式:

1x3x768x1280 BGR彩色图像

输出格式:

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

左滑查看更多

02OpenVINO文字识别

OpenVINO支持文字识别(数字与英文)的模型是来自Model Zoo中名称为:text-recognition-0012d的模型,是典型的CRNN结构模型。(基于类似VGG卷积结构backbone与双向LSTM编解码头的文字识别网络)

d3a52870-5936-11ee-939d-92fbcf53809c.png

图-2 CRNN网络模型架构

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

输入格式:1x1x32x120

输出格式:30, 1, 37

输出解释是基于CTC贪心解析方式,其中37字符集长度,字符集为:0123456789abcdefghijklmnopqrstuvwxyz#

#表示空白。

03MediaPipe手势识别

谷歌在2020年发布的mediapipe开发包说起,这个开发包集成了包含手势姿态等各种landmark检测与跟踪算法。其中支持手势识别是通过两个模型实现,一个是模型是检测手掌,另外一个模型是实现手掌的landmakr标记。

d3c32fd2-5936-11ee-939d-92fbcf53809c.png

图-3手势landmark点位说明

04OpenVINO与MediaPipe库的安装

pip install openvino==2023.0.2
pip install mediapipe

左滑查看更多

请先安装好OpenCV-Python开发包依赖。

05应用构建说明

首先基于OpenCV打开USB摄像头或者笔记本的web cam,读取视频帧,然后在每一帧中完成手势landmark检测,根据检测到手势landmark数据,分别获取左右手的食指指尖位置坐标(图-3中的第八个点位),这样就得到了手势选择的ROI区域,同时把当前帧的图像送入到OpenVINO场景文字识别模块中,完成场景文字识别,最后对比手势选择的区域与场景文字识别结果每个区域,计算它们的并交比,并交比阈值大于0.5的,就返回该区域对应的OCR识别结果,并显示到界面上。整个流程如下:

d3e388f4-5936-11ee-939d-92fbcf53809c.png

图-4程序执行流程图

06代码实现

根据图-4的程序执行流程图,把场景文字检测与识别部分封装到了一个类TextDetectAndRecognizer,最终实现的主程序代码如下:

import cv2 as cv
import numpy as np
import mediapipe as mp
from text_detector import TextDetectAndRecognizer
digit_nums = ['0','1', '2','3','4','5','6','7','8','9','a','b','c','d','e','f','g',
       'h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','#']


mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands


x0 = 0
y0 = 0
detector = TextDetectAndRecognizer()


# For webcam input:
cap = cv.VideoCapture(0)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv.CAP_PROP_FRAME_WIDTH, 1920)
height = cap.get(cv.CAP_PROP_FRAME_HEIGHT)
width = cap.get(cv.CAP_PROP_FRAME_WIDTH)
# out = cv.VideoWriter("D:/test777.mp4", cv.VideoWriter_fourcc('D', 'I', 'V', 'X'), 15, (np.int(width), np.int(height)), True)
with mp_hands.Hands(
 min_detection_confidence=0.75,
 min_tracking_confidence=0.5) as hands:
 while cap.isOpened():
  success, image = cap.read()


  if not success:
    break


  image.flags.writeable = False
  h, w, c = image.shape
  image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
  results = hands.process(image)


  image = cv.cvtColor(image, cv.COLOR_RGB2BGR)
  x1 = -1
  y1 = -1
  x2 = -1
  y2 = -1
  if results.multi_hand_landmarks:
   for hand_landmarks in results.multi_hand_landmarks:
    mp_drawing.draw_landmarks(
     image,
     hand_landmarks,
     mp_hands.HAND_CONNECTIONS)
    for idx, landmark in enumerate(hand_landmarks.landmark):
      x0 = np.int(landmark.x * w)
      y0 = np.int(landmark.y * h)
      cv.circle(image, (x0, y0), 4, (0, 0, 255), 4, cv.LINE_AA)
      if idx == 8 and x1 == -1 and y1 == -1:
        x1 = x0
        y1 = y0
        cv.circle(image, (x1, y1), 4, (0, 255, 0), 4, cv.LINE_AA)
      if idx == 8 and x1 > 0 and y1 > 0:
        x2 = x0
        y2 = y0
        cv.circle(image, (x2, y2), 4, (0, 255, 0), 4, cv.LINE_AA)


  if abs(x1-x2) > 10 and abs(y1-y2) > 10 and x1 > 0 and x2 > 0:
   if x1 < x2:
        cv.rectangle(image, (x1, y1), (x2, y2), (255, 0, 0), 2, 8)
        text = detector.inference_image(image, (x1, y1, x2, y2))
        cv.putText(image, text, (x1, y1), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2)
      else:
        cv.rectangle(image, (x2, y2), (x1, y1), (255, 0, 0), 2, 8)
        text = detector.inference_image(image, (x2, y2, x1, y1))
        cv.putText(image, text, (x2, y2), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2)


    # Flip the image horizontally for a selfie-view display.
    cv.imshow('MediaPipe Hands', image)
    # out.write(image)
    if cv.waitKey(1) & 0xFF == 27:
      break


cap.release()
# out.release()

左滑查看更多

07移植到AlxBoard开发板上

在爱克斯开发板上安装好MediaPipe即可,OpenVINO不用安装了,因为爱克斯开发板自带OpenCV与OpenVINO,然后就可以直接把python代码文件copy过去,插上USB摄像头,直接使用命令行工具运行对应的python文件,就可以直接用了,这样就在AlxBoard开发板上实现了基于手势选择区域的场景文字识别应用。

08后续指南

安装语音播报支持包:

pip install pyttsx

AlxBorad开发板是支持3.5mm耳机mic接口,支持语音播报的,如果把区域选择识别的文字,通过pyttsx直接播报就可以实现从手势识别到语音播报了,自动跟读卡片单词启蒙学英语,后续实现一波,请继续关注我们。

审核编辑:汤梓红

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

    关注

    60

    文章

    9427

    浏览量

    168873
  • 开发套件
    +关注

    关注

    2

    文章

    125

    浏览量

    24156
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119922
  • OpenVINO
    +关注

    关注

    0

    文章

    59

    浏览量

    91

原文标题:在英特尔开发套件上打造指哪识哪的OCR应用|开发者实战

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

收藏 人收藏

    评论

    相关推荐

    首发 | 告别手动录入,开放平台OCR上线印刷文字识别

    的就是印刷字体的转化。二、印刷文字识别应用广泛正如文章开头我们提到的,生活中有很多需要将印刷字体转换为设备可编辑的文本场景。而作为OCR家族的重要成员,印刷文字
    发表于 05-17 15:18

    基于SnapDragonBoard410C文字识别

    图片格式。简单一句话,就是可以把图片上的文字识别出来。应用的场景有很多,比如说:身份证号码识别,银行卡号识别等等。So 我们本次介绍国内巨头
    发表于 09-26 18:11

    基于AI通用文字识别能力,检测识别文档翻拍、街景翻拍等图片中的文字

    1. 介绍AI的通用文字识别可以对文档翻拍、街景翻拍等图片来源的文字检测识别,可以集成在其他应用中,提供
    发表于 08-27 11:27

    基于SOPC的嵌入式文字识别系统设计

    本文设计了一种基于SOPC的嵌入式文字识别系统。在FPGA平台下,基于SOPC的框架搭建软硬件协同系统,设计硬件电路完成文字图像的采集和预处理,嵌入Linux系统,使用其下的识别引擎完
    发表于 09-01 15:19 55次下载

    TH-OCR文字识别系统介绍

    TH-OCR文字识别系统的工作原理为通过扫描仪或数码相机等光学输入设备获取纸张上的文字图片信息,OCR文字识别系统实际上是让计算机认字,实现
    发表于 12-27 16:04 2026次阅读

    [现代检测技术].周杏鹏.文字

    电子发烧友网站提供《[现代检测技术].周杏鹏.文字版.txt》资料免费下载
    发表于 03-03 17:53 0次下载

    Android文字识别

    Android文字识别
    发表于 12-20 22:40 0次下载

    基于matlab的文字识别算法

    在图像中,文字信息包含了丰富的高层语义信息,提取出这些文字,对于图像高层语义的理解、索引和检索非常有帮助。基于matlab的文字识别算法具有局限性,模板匹配效率低,伸缩范围比较小的的特
    发表于 01-15 10:31 3w次阅读
    基于matlab的<b class='flag-5'>文字</b><b class='flag-5'>识别</b>算法

    基于FPGA的OCR文字识别技术的深度解析

    OCR在通用文字识别场景下有广泛应用,基于FPGA异构加速的OCR识别相比CPU/GPU实现具有延时小、成本低的优势。我们设计了多FPGA芯片协同的异构加速架构,能快速适配业务OCR
    发表于 01-26 12:19 3733次阅读

    如何提取和检测视频中的文字?数字视频中文字检测提取技术的分析

    检测与分割以及视频文字识别(Video OCR) 等。对于不同的典型算法, 分析了其理论基础和应用特点, 并且通过对比指出其不足和应用的局限。最后, 本文还展望了该技术未来发展的方向。
    发表于 09-17 17:58 26次下载
    如何提取和<b class='flag-5'>检测</b>视频中的<b class='flag-5'>文字</b>?数字视频中<b class='flag-5'>文字</b>的<b class='flag-5'>检测</b>提取技术的分析

    基于sopc嵌入式文字识别系统设计

    设计了一种基于SoPC的嵌入式文字识别系统。在FPGA平台下,基于SoPC框架搭建软硬件协同系统,设计硬件电路完成文字图像的采集和预处理,嵌入Linux系统,使用其下的识别引擎完成
    发表于 12-19 11:43 1235次阅读
    基于sopc嵌入式<b class='flag-5'>文字</b><b class='flag-5'>识别</b>系统设计

    OCR文字识别视觉检测系统应用程序免费下载

    本文档的主要内容详细介绍的是OCR文字识别视觉检测系统应用程序免费下载。
    发表于 05-28 17:31 24次下载

    浅析HarmonyOS基于AI的通用文字识别技术

    对图像信息进行文字检测识别和关键信息提取,并根据分析结果提供翻译、搜索等相关服务。 通用文字识别的核心技术是OCR【Optical Cha
    的头像 发表于 08-20 10:42 2858次阅读

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

    场景文字检测识别模型 OpenVINO2021.4支持场景
    的头像 发表于 08-26 15:01 2549次阅读

    基于OpenVINO+OpenCV的OCR处理流程化实现

    预处理主要是基于OpenCV、场景文字检测识别基于OpenVINO框架 + PaddleOCR模型完成。直接按图索骥即可得到最终结果。 O
    的头像 发表于 11-07 11:21 384次阅读
    基于<b class='flag-5'>OpenVINO</b>+OpenCV的OCR处理流程化实现