0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenVINO場景文字檢測與文字識別教程

英特爾物聯(lián)網(wǎng) ? 來源:英特爾物聯(lián)網(wǎng) ? 2023-09-24 15:31 ? 次閱讀

作者:賈志剛英特爾邊緣計算創(chuàng)新大使

01OpenVINO場景文字檢測

OpenVINO是英特爾推出的深度學習模型部署框架,當前最新版本是OpenVINO2023版本。OpenVINO2023自帶各種常見視覺任務(wù)支持的預(yù)訓練模型庫Model Zoo,其中支持場景文字檢測的網(wǎng)絡(luò)模型是來自Model Zoo中名稱為:text-detection-0003的模型(基于PixelLink架構(gòu)的場景文字檢測網(wǎng)絡(luò))。

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

圖-1 PixelLink網(wǎng)絡(luò)模型架構(gòu)

圖-1中的PixelLink場景文字檢測模型的輸入與輸出格式說明

輸入格式:

1x3x768x1280 BGR彩色圖像

輸出格式:

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

左滑查看更多

02OpenVINO文字識別

OpenVINO支持文字識別(數(shù)字與英文)的模型是來自Model Zoo中名稱為:text-recognition-0012d的模型,是典型的CRNN結(jié)構(gòu)模型。(基于類似VGG卷積結(jié)構(gòu)backbone與雙向LSTM編解碼頭的文字識別網(wǎng)絡(luò))

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

圖-2 CRNN網(wǎng)絡(luò)模型架構(gòu)

圖-2文本識別模型的輸入與輸出格式如下:

輸入格式:1x1x32x120

輸出格式:30, 1, 37

輸出解釋是基于CTC貪心解析方式,其中37字符集長度,字符集為:0123456789abcdefghijklmnopqrstuvwxyz#

#表示空白。

03MediaPipe手勢識別

谷歌在2020年發(fā)布的mediapipe開發(fā)包說起,這個開發(fā)包集成了包含手勢姿態(tài)等各種landmark檢測與跟蹤算法。其中支持手勢識別是通過兩個模型實現(xiàn),一個是模型是檢測手掌,另外一個模型是實現(xiàn)手掌的landmakr標記。

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

圖-3手勢landmark點位說明

04OpenVINO與MediaPipe庫的安裝

pip install openvino==2023.0.2
pip install mediapipe

左滑查看更多

請先安裝好OpenCV-Python開發(fā)包依賴。

05應(yīng)用構(gòu)建說明

首先基于OpenCV打開USB攝像頭或者筆記本的web cam,讀取視頻幀,然后在每一幀中完成手勢landmark檢測,根據(jù)檢測到手勢landmark數(shù)據(jù),分別獲取左右手的食指指尖位置坐標(圖-3中的第八個點位),這樣就得到了手勢選擇的ROI區(qū)域,同時把當前幀的圖像送入到OpenVINO場景文字識別模塊中,完成場景文字識別,最后對比手勢選擇的區(qū)域與場景文字識別結(jié)果每個區(qū)域,計算它們的并交比,并交比閾值大于0.5的,就返回該區(qū)域?qū)?yīng)的OCR識別結(jié)果,并顯示到界面上。整個流程如下:

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

圖-4程序執(zhí)行流程圖

06代碼實現(xiàn)

根據(jù)圖-4的程序執(zhí)行流程圖,把場景文字檢測與識別部分封裝到了一個類TextDetectAndRecognizer,最終實現(xiàn)的主程序代碼如下:

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開發(fā)板上

在愛克斯開發(fā)板上安裝好MediaPipe即可,OpenVINO不用安裝了,因為愛克斯開發(fā)板自帶OpenCV與OpenVINO,然后就可以直接把python代碼文件copy過去,插上USB攝像頭,直接使用命令行工具運行對應(yīng)的python文件,就可以直接用了,這樣就在AlxBoard開發(fā)板上實現(xiàn)了基于手勢選擇區(qū)域的場景文字識別應(yīng)用。

08后續(xù)指南

安裝語音播報支持包:

pip install pyttsx

AlxBorad開發(fā)板是支持3.5mm耳機mic接口,支持語音播報的,如果把區(qū)域選擇識別的文字,通過pyttsx直接播報就可以實現(xiàn)從手勢識別到語音播報了,自動跟讀卡片單詞啟蒙學英語,后續(xù)實現(xiàn)一波,請繼續(xù)關(guān)注我們。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 英特爾
    +關(guān)注

    關(guān)注

    61

    文章

    9964

    瀏覽量

    171771
  • 開發(fā)套件
    +關(guān)注

    關(guān)注

    2

    文章

    154

    瀏覽量

    24277
  • 深度學習
    +關(guān)注

    關(guān)注

    73

    文章

    5503

    瀏覽量

    121162
  • OpenVINO
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    202

原文標題:在英特爾開發(fā)套件上打造指哪識哪的OCR應(yīng)用|開發(fā)者實戰(zhàn)

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    首發(fā) | 告別手動錄入,開放平臺OCR上線印刷文字識別!

    的就是印刷字體的轉(zhuǎn)化。二、印刷文字識別應(yīng)用廣泛正如文章開頭我們提到的,生活中有很多需要將印刷字體轉(zhuǎn)換為設(shè)備可編輯的文本場景。而作為OCR家族的重要成員,印刷文字
    發(fā)表于 05-17 15:18

    基于SnapDragonBoard410C文字識別

    圖片格式。簡單一句話,就是可以把圖片上的文字識別出來。應(yīng)用的場景有很多,比如說:身份證號碼識別,銀行卡號識別等等。So 我們本次介紹國內(nèi)巨頭
    發(fā)表于 09-26 18:11

    基于AI通用文字識別能力,檢測識別文檔翻拍、街景翻拍等圖片中的文字

    1. 介紹AI的通用文字識別可以對文檔翻拍、街景翻拍等圖片來源的文字檢測識別,可以集成在其他應(yīng)用中,提供
    發(fā)表于 08-27 11:27

    TH-OCR文字識別系統(tǒng)介紹

    TH-OCR文字識別系統(tǒng)的工作原理為通過掃描儀或數(shù)碼相機等光學輸入設(shè)備獲取紙張上的文字圖片信息,OCR文字識別系統(tǒng)實際上是讓計算機認字,實現(xiàn)
    發(fā)表于 12-27 16:04 ?2132次閱讀

    Android文字識別

    Android文字識別
    發(fā)表于 12-20 22:40 ?0次下載

    基于matlab的文字識別算法

    在圖像中,文字信息包含了豐富的高層語義信息,提取出這些文字,對于圖像高層語義的理解、索引和檢索非常有幫助?;趍atlab的文字識別算法具有局限性,模板匹配效率低,伸縮范圍比較小的的特
    發(fā)表于 01-15 10:31 ?3w次閱讀
    基于matlab的<b class='flag-5'>文字</b><b class='flag-5'>識別</b>算法

    基于FPGA的OCR文字識別技術(shù)的深度解析

    OCR在通用文字識別場景下有廣泛應(yīng)用,基于FPGA異構(gòu)加速的OCR識別相比CPU/GPU實現(xiàn)具有延時小、成本低的優(yōu)勢。我們設(shè)計了多FPGA芯片協(xié)同的異構(gòu)加速架構(gòu),能快速適配業(yè)務(wù)OCR
    發(fā)表于 01-26 12:19 ?4011次閱讀

    如何提取和檢測視頻中的文字?數(shù)字視頻中文字檢測提取技術(shù)的分析

    檢測與分割以及視頻文字識別(Video OCR) 等。對于不同的典型算法, 分析了其理論基礎(chǔ)和應(yīng)用特點, 并且通過對比指出其不足和應(yīng)用的局限。最后, 本文還展望了該技術(shù)未來發(fā)展的方向。
    發(fā)表于 09-17 17:58 ?26次下載
    如何提取和<b class='flag-5'>檢測</b>視頻中的<b class='flag-5'>文字</b>?數(shù)字視頻中<b class='flag-5'>文字</b>的<b class='flag-5'>檢測</b>提取技術(shù)的分析

    如何在電腦中對圖片文字進行局部識別

    ? ? 相信很多人和小編一樣電腦中保存了一些帶有文字的圖片,有時候因為需要會將里面的文字進行提取,然而又不想對著圖片一個字一個字的打出來,這個時候就需要對圖片中的文字進行局部識別了,那
    發(fā)表于 11-13 14:07 ?590次閱讀

    OCR文字識別視覺檢測系統(tǒng)應(yīng)用程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是OCR文字識別視覺檢測系統(tǒng)應(yīng)用程序免費下載。
    發(fā)表于 05-28 17:31 ?25次下載

    計算機文字識別技術(shù)研究

    計算機文字識別技術(shù)研究。
    發(fā)表于 03-24 14:15 ?16次下載

    淺析HarmonyOS基于AI的通用文字識別技術(shù)

    對圖像信息進行文字檢測、識別和關(guān)鍵信息提取,并根據(jù)分析結(jié)果提供翻譯、搜索等相關(guān)服務(wù)。 通用文字識別的核心技術(shù)是OCR【Optical Cha
    的頭像 發(fā)表于 08-20 10:42 ?3174次閱讀

    OpenVINO2021.4版本中場景文字檢測識別模型的推理使用

    場景文字檢測識別模型 OpenVINO2021.4支持場景
    的頭像 發(fā)表于 08-26 15:01 ?2855次閱讀

    圖片文字識別:揭開數(shù)字世界的神秘面紗

    隨著數(shù)字化時代的到來,我們生活中的大部分數(shù)據(jù)都以圖片的形式存在。然而,這些圖片中蘊含的信息往往比文字更豐富,如何從這些圖片中提取有價值的信息,是數(shù)字世界中一個十分重要的問題。這時,圖片文字識別技術(shù)
    的頭像 發(fā)表于 05-11 18:20 ?614次閱讀

    基于OpenVINO+OpenCV的OCR處理流程化實現(xiàn)

    預(yù)處理主要是基于OpenCV、場景文字檢測識別基于OpenVINO框架 + PaddleOCR模型完成。直接按圖索驥即可得到最終結(jié)果。 O
    的頭像 發(fā)表于 11-07 11:21 ?759次閱讀
    基于<b class='flag-5'>OpenVINO</b>+OpenCV的OCR處理流程化實現(xiàn)