国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[譯]OpenCV OCR and text recognition with Tesseract

gnehc / 2201人閱讀

摘要:納入深度學(xué)習(xí)模型來進(jìn)一步提升準(zhǔn)確率只是時(shí)間問題,事實(shí)上,這個(gè)時(shí)間已經(jīng)到來。最新版本支持基于深度學(xué)習(xí)的,準(zhǔn)確率顯著提高。該函數(shù)使用基于深度學(xué)習(xí)的文本檢測(cè)器來檢測(cè)不是識(shí)別圖像中的文本區(qū)域。高效使用概率最高的文本區(qū)域,刪除其他重疊區(qū)域。

By Adrian Rosebrock on September 17, 2018 in Deep Learning, Optical Character Recognition (OCR), Tutorials

點(diǎn)擊這里下載這篇文章的源代碼


在本教程中,您將學(xué)習(xí)如何使用OpenCV OCR(光學(xué)字符識(shí)別)。我們將執(zhí)行文本檢測(cè)(1)和(2)文字識(shí)別使用OpenCV,Python和Tesseract。
幾周前,我向您展示了如何執(zhí)行文本檢測(cè)使用OpenCV的EAST深度學(xué)習(xí)模型。使用這個(gè)模型我們可以檢測(cè)和定位的邊界框坐標(biāo)圖像中包含的文本。
下一步是把這些區(qū)域包含文本和實(shí)際識(shí)別和OCR文字使用OpenCV和Tesseract。

Tesseract 進(jìn)行 OpenCV OCR 和文本識(shí)別

為了執(zhí)行 OpenCV OCR 和文本識(shí)別任務(wù),我們首先需要安裝 Tesseract v4,包括一個(gè)用于文本識(shí)別的高度準(zhǔn)確的深度學(xué)習(xí)模型。
然后,我將展示如何寫一個(gè) Python 腳本,使其能夠:
(1)使用 OpenCV EAST 文本檢測(cè)器執(zhí)行文本檢測(cè),該模型是一個(gè)高度準(zhǔn)確的深度學(xué)習(xí)文本檢測(cè)器,可用于檢測(cè)自然場(chǎng)景圖像中的文本。
(2)使用 OpenCV 檢測(cè)出圖像中的文本區(qū)域后,我們提取出每個(gè)文本 ROI 并將其輸入 Tesseract,從而構(gòu)建完整的 OpenCV OCR 流程!

最后,我將展示一些使用 OpenCV 應(yīng)用文本識(shí)別的示例,并討論該方法的缺陷。

下面就開始本教程的正式內(nèi)容吧!

如何安裝 Tesseract v4


圖 1:Tesseract OCR 引擎于 20 世紀(jì) 80 年代出現(xiàn),到 2018 年,它已經(jīng)包括內(nèi)置的深度學(xué)習(xí)模型,變成了更加穩(wěn)健的 OCR 工具。Tesseract 和 OpenCV 的 EAST 檢測(cè)器是一個(gè)很棒的組合。
Tesseract 是一個(gè)很流行的 OCR 引擎,20 世紀(jì) 80 年代由 Hewlett Packard 開發(fā),2005 年開源,自 2006 年起由谷歌贊助開發(fā)。該工具在受控條件下也能很好地運(yùn)行,但是如果存在大量噪聲或者圖像輸入 Tesseract 前未經(jīng)恰當(dāng)處理,則性能較差。
深度學(xué)習(xí)對(duì)計(jì)算機(jī)視覺的各個(gè)方面都產(chǎn)生了影響,字符識(shí)別和手寫字體識(shí)別也不例外。基于深度學(xué)習(xí)的模型能夠?qū)崿F(xiàn)前所未有的文本識(shí)別準(zhǔn)確率,遠(yuǎn)超傳統(tǒng)的特征提取和機(jī)器學(xué)習(xí)方法。Tesseract 納入深度學(xué)習(xí)模型來進(jìn)一步提升 OCR 準(zhǔn)確率只是時(shí)間問題,事實(shí)上,這個(gè)時(shí)間已經(jīng)到來。

Tesseract (v4) 最新版本支持基于深度學(xué)習(xí)的 OCR,準(zhǔn)確率顯著提高。底層的 OCR 引擎使用的是一種循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)——LSTM 網(wǎng)絡(luò)。

安裝 OpenCV

要運(yùn)行本教程的腳本,你需要先安裝 3.4.2 或更高版本的 OpenCV。安裝教程可參考 https://www.pyimagesearch.com...,該教程可確保你下載合適的 OpenCV 和 OpenCV-contrib 版本。

在 Ubuntu 上安裝 Tesseract 4

在 Ubuntu 上安裝 Tesseract 4 的具體命令因你使用的 Ubuntu 版本而異(Ubuntu 18.04、Ubuntu 17.04 或更早版本)。你可使用 lsb_release 命令檢查 Ubuntu 版本:

$ lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:    bionic

如上所示,我的機(jī)器上運(yùn)行的是 Ubuntu 18.04,不過你在繼續(xù)操作之前需要先檢查自己的 Ubuntu 版本。
對(duì)于 Ubuntu 18.04 版本的用戶,Tesseract 4 是主 apt-get 庫的一部分,這使得通過下列命令安裝 Tesseract 非常容易:

$ sudo add-apt-repository ppa:alex-p/tesseract-ocr
$ sudo apt-get update
$ sudo apt install tesseract-ocr

如果沒有錯(cuò)誤,那么你應(yīng)該已經(jīng)在自己的機(jī)器上成功安裝了 Tesseract 4。

在 macOS 上安裝 Tesseract 4( 略,調(diào)皮)

驗(yàn)證你的 Tesseract 版本

圖 2:我的系統(tǒng)終端截圖。我輸入 tesseract -v 命令來檢查 Tesseract 版本

確保安裝了 Tesseract 以后,你應(yīng)該執(zhí)行以下命令驗(yàn)證 Tesseract 版本:

$ tesseract -v
tesseract 4.0.0-beta.3
 leptonica-1.76.0
  libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11
 Found AVX512BW
 Found AVX512F
 Found AVX2
 Found AVX
 Found SSE

只要輸出中包含 tesseract 4,那么你就成功在系統(tǒng)中安裝了 Tesseract 的最新版本。

安裝 Tesseract + Python 捆綁

安裝好 Tesseract 庫之后,我們需要安裝 Tesseract + Python 捆綁,這樣我們的 Python 腳本就可以與 Tesseract 通信,并對(duì) OpenCV 處理過的圖像執(zhí)行 OCR。
如果你使用的是 Python 虛擬環(huán)境(非常推薦,你可以擁有獨(dú)立的 Python 環(huán)境),那么使用 workon 命令訪問虛擬環(huán)境:

$ workon cv

如上所示,我訪問了一個(gè)叫做 cv 的 Python 虛擬環(huán)境(cv 是「計(jì)算機(jī)視覺」的縮寫),你也可以用其他名字命名虛擬環(huán)境。

接下來,我們將使用 pip 來安裝 Pillow(PIL 的 Python 版本),然后安裝 pytesseract 和 imutils:

$ pip install pillow
$ pip install pytesseract
$ pip install imutils

現(xiàn)在打開 Python shell,確認(rèn)你導(dǎo)入了 OpenCV 和 pytesseract:

$ python
Python 3.6.5 (default, Apr  1 2018, 05:46:30) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import pytesseract
>>> import imutils
>>>

恭喜!如果沒有出現(xiàn)導(dǎo)入錯(cuò)誤,那么你的機(jī)器現(xiàn)在已經(jīng)安裝好,可以使用 OpenCV 執(zhí)行 OCR 和文本識(shí)別任務(wù)了。

理解 OpenCV OCR 和 Tesseract 文本識(shí)別

圖 3:OpenCV OCR 流程圖

現(xiàn)在我們已經(jīng)在系統(tǒng)上成功安裝了 OpenCV 和 Tesseract,下面我們來簡單回顧一下流程和相關(guān)命令。
首先,我們使用 OpenCV 的 EAST 文本檢測(cè)器來檢測(cè)圖像中的文本。EAST 文本檢測(cè)器將提供文本 ROI 的邊界框坐標(biāo)。我們將提取每個(gè)文本 ROI,將其輸入到 Tesseract v4 的 LSTM 深度學(xué)習(xí)文本識(shí)別算法。LSTM 的輸出將提供實(shí)際 OCR 結(jié)果。最后,我們將在輸出圖像上繪制 OpenCV OCR 結(jié)果。
過程中使用到的 Tesseract 命令必須在 pytesseract 庫下調(diào)用。在調(diào)用 tessarct 庫時(shí),我們需要提供大量 flag。最重要的三個(gè) flag 是 -l、--oem 和 --psm。
-l flag 控制輸入文本的語言,本教程示例中使用的是 eng(English),在這里你可以看到 Tesseract 支持的所有語言:https://github.com/tesseract-...。
--oem(OCR 引擎模式)控制 Tesseract 使用的算法類型。執(zhí)行以下命令即可看到可用的 OCR 引擎模式:

$ tesseract --help-oem
OCR Engine modes:
  0    Legacy engine only.
  1    Neural nets LSTM engine only.
  2    Legacy + LSTM engines.
  3    Default, based on what is available.

我們將使用--oem 1,這表明我們希望僅使用深度學(xué)習(xí) LSTM 引擎。
最后一個(gè)重要的 flag --psm 控制 Tesseract 使用的自動(dòng)頁面分割模式:

$ tesseract --help-psm
Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR.
  3    Fully automatic page segmentation, but no OSD. (Default)
  4    Assume a single column of text of variable sizes.
  5    Assume a single uniform block of vertically aligned text.
  6    Assume a single uniform block of text.
  7    Treat the image as a single text line.
  8    Treat the image as a single word.
  9    Treat the image as a single word in a circle.
 10    Treat the image as a single character.
 11    Sparse text. Find as much text as possible in no particular order.
 12    Sparse text with OSD.
 13    Raw line. Treat the image as a single text line,
       bypassing hacks that are Tesseract-specific.

對(duì)文本 ROI 執(zhí)行 OCR,我發(fā)現(xiàn)模式 6 和 7 性能較好,但是如果你對(duì)大量文本執(zhí)行 OCR,那么你可以試試 3(默認(rèn)模式)。
如果你得到的 OCR 結(jié)果不正確,那么我強(qiáng)烈推薦調(diào)整 --psm,它可以對(duì)你的輸出 OCR 結(jié)果產(chǎn)生極大的影響。

項(xiàng)目結(jié)構(gòu)

你可以從本文「Downloads」部分下載 zip。然后解壓縮,進(jìn)入目錄。下面的 tree 命令使得我們可以在終端閱覽目錄結(jié)構(gòu):

$ tree --dirsfirst
.
├── images
│   ├── example_01.jpg
│   ├── example_02.jpg
│   ├── example_03.jpg
│   ├── example_04.jpg
│   └── example_05.jpg
├── frozen_east_text_detection.pb
└── text_recognition.py
 
1 directory, 7 files

我們的項(xiàng)目包含一個(gè)目錄和兩個(gè)重要文件:
images/:該目錄包含六個(gè)含有場(chǎng)景文本的測(cè)試圖像。我們將使用這些圖像進(jìn)行 OpenCV OCR 操作。
frozen_east_text_detection.pb:EAST 文本檢測(cè)器。該 CNN 已經(jīng)經(jīng)過預(yù)訓(xùn)練,可用于文本檢測(cè)。它是由 OpenCV 提供的,你也可以在「Downloads」部分下載它。
text_recognition.py:我們的 OCR 腳本。我們將逐行 review 該腳本。它使用 EAST 文本檢測(cè)器找到圖像中的文本區(qū)域,然后利用 Tesseract v4 執(zhí)行文本識(shí)別。

實(shí)現(xiàn)我們的 OpenCV OCR 算法

現(xiàn)在開始用 OpenCV 執(zhí)行文本識(shí)別吧!
打開 text_recognition.py 文件,插入下列代碼:

# import the necessary packages
from imutils.object_detection import non_max_suppression
import numpy as np
import pytesseract
import argparse
import cv2

本教程中的 OCR 腳本需要五個(gè)導(dǎo)入,其中一個(gè)已經(jīng)內(nèi)置入 OpenCV。
最顯著的一點(diǎn)是,我們將使用 pytesseract 和 OpenCV。我的 imutils 包將用于非極大值抑制,因?yàn)?OpenCV 的 NMSBoxes 函數(shù)無法適配 Python API。我注意到 NumPy 是 OpenCV 的依賴項(xiàng)。
argparse 包被包含在 Python 中,用于處理命令行參數(shù),這里無需安裝。
現(xiàn)在已經(jīng)處理好導(dǎo)入了,接下來就來實(shí)現(xiàn) decode_predictions 函數(shù):

def decode_predictions(scores, geometry):
    # grab the number of rows and columns from the scores volume, then
    # initialize our set of bounding box rectangles and corresponding
    # confidence scores
    (numRows, numCols) = scores.shape[2:4]
    rects = []
    confidences = []
 
    # loop over the number of rows
    for y in range(0, numRows):
        # extract the scores (probabilities), followed by the
        # geometrical data used to derive potential bounding box
        # coordinates that surround text
        scoresData = scores[0, 0, y]
        xData0 = geometry[0, 0, y]
        xData1 = geometry[0, 1, y]
        xData2 = geometry[0, 2, y]
        xData3 = geometry[0, 3, y]
        anglesData = geometry[0, 4, y]
 
        # loop over the number of columns
        for x in range(0, numCols):
            # if our score does not have sufficient probability,
            # ignore it
            if scoresData[x] < args["min_confidence"]:
                continue
 
            # compute the offset factor as our resulting feature
            # maps will be 4x smaller than the input image
            (offsetX, offsetY) = (x * 4.0, y * 4.0)
 
            # extract the rotation angle for the prediction and
            # then compute the sin and cosine
            angle = anglesData[x]
            cos = np.cos(angle)
            sin = np.sin(angle)
 
            # use the geometry volume to derive the width and height
            # of the bounding box
            h = xData0[x] + xData2[x]
            w = xData1[x] + xData3[x]
 
            # compute both the starting and ending (x, y)-coordinates
            # for the text prediction bounding box
            endX = int(offsetX + (cos * xData1[x]) + (sin * xData2[x]))
            endY = int(offsetY - (sin * xData1[x]) + (cos * xData2[x]))
            startX = int(endX - w)
            startY = int(endY - h)
 
            # add the bounding box coordinates and probability score
            # to our respective lists
            rects.append((startX, startY, endX, endY))
            confidences.append(scoresData[x])
 
    # return a tuple of the bounding boxes and associated confidences
    return (rects, confidences)

decode_predictions 函數(shù),在這篇文章中有詳細(xì)介紹(https://www.pyimagesearch.com...)。該函數(shù):

使用基于深度學(xué)習(xí)的文本檢測(cè)器來檢測(cè)(不是識(shí)別)圖像中的文本區(qū)域。
該文本檢測(cè)器生成兩個(gè)陣列,一個(gè)包括給定區(qū)域包含文本的概率,另一個(gè)陣列將該概率映射到輸入圖像中的邊界框位置。

EAST 文本檢測(cè)器生成兩個(gè)變量:
scores:文本區(qū)域的概率。
geometry:文本區(qū)域的邊界框位置。

兩個(gè)變量都是 decode_predictions 函數(shù)的參數(shù)。
該函數(shù)處理輸入數(shù)據(jù),得出一個(gè)包含文本邊界框位置和該區(qū)域包含文本的相應(yīng)概率的元組:
rects:該值基于 geometry,其格式更加緊湊,方便我們稍后將其應(yīng)用于 NMS。
confidences:該列表中的置信度值對(duì)應(yīng) rects 中的每個(gè)矩形。
這兩個(gè)值都由 decode_predictions 函數(shù)得出。

注意:完美情況下,旋轉(zhuǎn)的邊界框也在 rects 內(nèi),但是提取旋轉(zhuǎn)邊界框不利于解釋本教程的概念。因此,我計(jì)算了水平的邊界框矩形(把 angle 考慮在內(nèi))。如果你想提取文本的旋轉(zhuǎn)邊界框輸入 Tesseract,你可以在第 41 行獲取 angle。

關(guān)于上述代碼塊的更多細(xì)節(jié),參見 https://www.pyimagesearch.com...
[譯]
下面我們來解析命令行參數(shù):

# 構(gòu)造參數(shù)分析器和分析參數(shù)
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str,
    help="path to input image")
ap.add_argument("-east", "--east", type=str,
    help="path to input EAST text detector")
ap.add_argument("-c", "--min-confidence", type=float, default=0.5,
    help="minimum probability required to inspect a region")
ap.add_argument("-w", "--width", type=int, default=320,
    help="nearest multiple of 32 for resized width")
ap.add_argument("-e", "--height", type=int, default=320,
    help="nearest multiple of 32 for resized height")
ap.add_argument("-p", "--padding", type=float, default=0.0,
    help="amount of padding to add to each border of ROI")
args = vars(ap.parse_args())

我們的腳本需要兩個(gè)命令行參數(shù):
--image:輸入圖像的路徑。
--east:預(yù)訓(xùn)練 EAST 文本檢測(cè)器的路徑。

下列命令行參數(shù)是可選的:
--min-confidence:檢測(cè)到的文本區(qū)域的最小概率。
--width:圖像輸入 EAST 文本檢測(cè)器之前需要重新調(diào)整的寬度,我們的檢測(cè)器要求寬度是 32 的倍數(shù)。
--height:與寬度類似。檢測(cè)器要求調(diào)整后的高度是 32 的倍數(shù)。
--padding:添加到每個(gè) ROI 邊框的(可選)填充數(shù)量。如果你發(fā)現(xiàn) OCR 結(jié)果不正確,那么你可以嘗試 0.05、0.10 等值。

下面,我們將加載和預(yù)處理圖像,并初始化關(guān)鍵變量:

第 82 行和 83 行,將圖像加載到內(nèi)存中,并復(fù)制(這樣稍后我們可以在上面繪制輸出結(jié)果)。

獲取原始寬度和高度(第 84 行),然后從 args 詞典中提取新的寬度和高度(第 88 行)。我們使用原始和新的維度計(jì)算比率,用于稍后在腳本中擴(kuò)展邊界框坐標(biāo)(第 89 和 90 行)。

然后調(diào)整圖像大小,此處忽略長寬比(第 93 行)。

接下來,我們將使用 EAST 文本檢測(cè)器:

第 99 到 101 行,將兩個(gè)輸出層名稱轉(zhuǎn)換成列表格式。然后,將預(yù)訓(xùn)練 EAST 神經(jīng)網(wǎng)絡(luò)加載到內(nèi)存中(第 105 行)。

必須強(qiáng)調(diào)一點(diǎn):你至少需要 OpenCV 3.4.2 版本,它有 cv2.dnn.readNet 實(shí)現(xiàn)。

接下來就是見證第一個(gè)「奇跡」的時(shí)刻:

為確定文本位置,我們:
在第 109 和 110 行構(gòu)建 blob。詳情參見 https://www.pyimagesearch.com...。
將 blob 輸入 EAST 神經(jīng)網(wǎng)絡(luò)中,獲取 scores 和 geometry(第 111 和 112 行)。
使用之前定義的 decode_predictions 函數(shù)解碼預(yù)測(cè)(第 116 行)。
通過 imutils 方法進(jìn)行非極大值抑制(第 117 行)。NMS 高效使用概率最高的文本區(qū)域,刪除其他重疊區(qū)域。

現(xiàn)在我們知道文本區(qū)域的位置了,接下來需要識(shí)別文本。我們開始在邊界框上循環(huán),并處理結(jié)果,為實(shí)際的文本識(shí)別做準(zhǔn)備:

我們初始化 results 列表,使其包含我們的 OCR 邊界框和文本(第 120 行)。然后在 boxes 上進(jìn)行循環(huán)(第 123 行),我們:
基于之前計(jì)算的比率擴(kuò)展邊界框(第 126-129 行)。
填充邊界框(第 134-141 行)。
最后,提取被填充的 roi(第 144 行)。

本文的 OpenCV OCR 流程可以使用一點(diǎn) Tesseract v4「魔術(shù)」來完成:

第 151 行,我們?cè)O(shè)置 Tesseract config 參數(shù)(英語、LSTM 神經(jīng)網(wǎng)絡(luò)和單行文本)。
注:如果你獲取了錯(cuò)誤的 OCR 結(jié)果,那么你可能需要使用本教程開頭的指令配置 --psm 值。
第 152 行,pytesseract 庫進(jìn)行剩下的操作,調(diào)用 pytesseract.image_to_string,將 roi 和 config string 輸入其中。
只用兩行代碼,你就使用 Tesseract v4 識(shí)別了圖像中的一個(gè)文本 ROI。記住,很多過程在底層發(fā)生。
我們的結(jié)果(邊界框值和實(shí)際的 text 字符串)附加在 results 列表(第 156 行)中。
接下來,我們繼續(xù)該流程,在循環(huán)的基礎(chǔ)上處理其他 ROI。

現(xiàn)在,我們來打印出結(jié)果,查看它是否真正有效:

第 159 行基于邊界框的 y 坐標(biāo)按自上而下的順序?qū)Y(jié)果進(jìn)行了排序。
對(duì)結(jié)果進(jìn)行循環(huán),我們:
將 OCR 處理過的文本打印到終端(第 164-166 行)。
從文本中去掉非 ASCII 字符,因?yàn)?OpenCV 在 cv2.putText 函數(shù)中不支持非 ASCII 字符(第 171 行)。
基于 ROI 繪制 ROI 周圍的邊界框和結(jié)果文本(第 173-176 行)。
展示輸出,等待即將按下的鍵(第 179、180 行)。

OpenCV 文本識(shí)別結(jié)果

現(xiàn)在我們已經(jīng)實(shí)現(xiàn)了 OpenCV OCR 流程。
確保使用本教程「Downloads」部分下載源代碼、OpenCV EAST 文本檢測(cè)器模型和示例圖像。
打開命令行,導(dǎo)航至下載和提取壓縮包的位置,然后執(zhí)行以下命令:

$ python text_recognition.py --east frozen_east_text_detection.pb 
    --image images/example_01.jpg
[INFO] loading EAST text detector...
OCR TEXT
========
OH OK


圖 4:對(duì) OpenCV OCR 的第一次嘗試成功!

我們從一個(gè)簡單示例開始。

注意我們的 OpenCV OCR 系統(tǒng)如何正確檢測(cè)圖像中的文本,然后識(shí)別文本。

下一個(gè)示例更具代表性,是一個(gè)現(xiàn)實(shí)世界圖像:

$ python text_recognition.py --east frozen_east_text_detection.pb 
    --image images/example_02.jpg
[INFO] loading EAST text detector...
OCR TEXT
========
? MIDDLEBOROUGH

圖 5:更復(fù)雜的圖像示例,我們使用 OpenCV 和 Tesseract 4 對(duì)這個(gè)白色背景的標(biāo)志牌進(jìn)行了 OCR 處理。

再次,注意我們的 OpenCV OCR 系統(tǒng)如何正確定位文本位置和識(shí)別文本。但是,在終端輸出中,我們看到了一個(gè)注冊(cè)商標(biāo) Unicode 符號(hào),這里 Tesseract 可能被欺騙,因?yàn)?OpenCV EAST 文本檢測(cè)器報(bào)告的邊界框與標(biāo)志牌后面的植物發(fā)生重疊。

下面我們來看另一個(gè) OpenCV OCR 和文本識(shí)別示例:

$ python text_recognition.py --east frozen_east_text_detection.pb 
    --image images/example_03.jpg
[INFO] loading EAST text detector...
OCR TEXT
========
ESTATE

OCR TEXT
========
AGENTS

OCR TEXT
========
SAXONS

圖 6:使用 OpenCV、Python 和 Tesseract 對(duì)包含三個(gè)單詞的大標(biāo)志牌進(jìn)行 OCR 處理。

該示例中有三個(gè)多帶帶的文本區(qū)域。OpenCV 的文本檢測(cè)器能夠定位每一個(gè)文本區(qū)域,然后我們使用 OCR 準(zhǔn)確識(shí)別每個(gè)文本區(qū)域。

下一個(gè)示例展示了在特定環(huán)境下添加填充的重要性:

$ python text_recognition.py --east frozen_east_text_detection.pb 
    --image images/example_04.jpg 
[INFO] loading EAST text detector...
OCR TEXT
========
CAPTITO

OCR TEXT
========
SHOP

OCR TEXT
========
|.

圖 7:在這個(gè)烘培店場(chǎng)景圖像中,我們的 OpenCV OCR 流程在處理 OpenCV EAST 文本檢測(cè)器確定的文本區(qū)域時(shí)遇到了問題。記住,沒有一個(gè) OCR 系統(tǒng)完美適用于所有情況。那么我們能否通過更改參數(shù)來做得更好呢?

首先嘗試對(duì)這家烘培店的店面進(jìn)行 OCR,我們看到「SHOP」被正確識(shí)別,但是:
「CAPUTO」中的「U」被錯(cuò)誤識(shí)別為「TI」。
「CAPUTO"S」中的「"S」被漏掉。
「BAKE」被錯(cuò)誤識(shí)別為「|.」。

現(xiàn)在我們添加填充,從而擴(kuò)展 ROI 的邊界框坐標(biāo),準(zhǔn)確識(shí)別文本:

$ python text_recognition.py --east frozen_east_text_detection.pb 
    --image images/example_04.jpg --padding 0.05
[INFO] loading EAST text detector...
OCR TEXT
========
CAPUTO"S

OCR TEXT
========
SHOP

OCR TEXT
========
BAKE

圖 8:通過向 EAST 文本檢測(cè)器確定的文本區(qū)域添加額外的填充,我們能夠使用 OpenCV 和 Tesseract 對(duì)烘培店招牌中的三個(gè)單詞進(jìn)行恰當(dāng)?shù)?OCR 處理。

僅僅在邊界框的四角周圍添加 5% 的填充,我們就能夠準(zhǔn)確識(shí)別出「BAKE」、「U」和「"S」。
當(dāng)然,也有 OpenCV 的失敗案例:

$ python text_recognition.py --east frozen_east_text_detection.pb 
    --image images/example_05.jpg --padding 0.25
[INFO] loading EAST text detector...
OCR TEXT
========
Designer

OCR TEXT
========
a

圖 9:添加了 25% 的填充后,我們的 OpenCV OCR 系統(tǒng)能夠識(shí)別招牌中的「Designer」,但是它無法識(shí)別較小的單詞,因?yàn)樗鼈兊念伾c背景色太接近了。我們甚至無法檢測(cè)到單詞「SUIT」,「FACTORY」能夠檢測(cè)到,但無法使用 Tesseract 識(shí)別。我們的 OCR 系統(tǒng)離完美還很遠(yuǎn)。

下面介紹了該 OCR 系統(tǒng)的一些局限和不足,以及對(duì)改進(jìn) OpenCV 文本識(shí)別流程的建議。

局限和不足

記住,沒有完美的 OCR 系統(tǒng),尤其是在現(xiàn)實(shí)世界條件下。期望 100% 的 OCR 準(zhǔn)確率也是不切實(shí)際的。
我們的 OpenCV OCR 系統(tǒng)可以很好地處理一些圖像,但在處理另外一些圖像時(shí)會(huì)失敗。該文本識(shí)別流程失敗存在兩個(gè)主要原因:
文本被扭曲或旋轉(zhuǎn)。
文本字體與 Tesseract 模型訓(xùn)練的字體相差太遠(yuǎn)。

即使 Tesseract v4 與 v3 相比更加強(qiáng)大、準(zhǔn)確,但該深度學(xué)習(xí)模型仍然受限于訓(xùn)練數(shù)據(jù)。如果你的文本字體與訓(xùn)練數(shù)據(jù)字體相差太遠(yuǎn),那么 Tesseract 很可能無法對(duì)該文本進(jìn)行 OCR 處理。
其次,Tesseract 仍然假設(shè)輸入圖像/ROI 已經(jīng)經(jīng)過恰當(dāng)清潔。而當(dāng)我們?cè)谧匀粓?chǎng)景圖像上執(zhí)行文本識(shí)別時(shí),該假設(shè)不總是準(zhǔn)確。

總結(jié)

本教程介紹了如何使用 OpenCV OCR 系統(tǒng)執(zhí)行文本檢測(cè)和文本識(shí)別。
為了實(shí)現(xiàn)該任務(wù),我們
利用 OpenCV EAST 文本檢測(cè)器定位圖像中的文本區(qū)域。
提取每個(gè)文本 ROI,然后使用 OpenCV 和 Tesseract v4 進(jìn)行文本識(shí)別。
我們還查看了執(zhí)行文本檢測(cè)和文本識(shí)別的 Python 代碼。
該 OpenCV OCR 流程在一些情況下效果很好,另一些情況下并不那么準(zhǔn)確。要想獲得最好的 OpenCV 文本識(shí)別結(jié)果,我建議你確保:
輸入 ROI 盡量經(jīng)過清理和預(yù)處理。在理想世界中,你的文本應(yīng)該能夠與圖像的其他部分完美分割,但是在現(xiàn)實(shí)情況下,分割并不總是那么完美。
文本是在攝像機(jī) 90 度角的情況下拍攝的,類似于自上而下、鳥瞰的角度。如果不是,那么角度變換可以幫助你獲得更好的結(jié)果。

以上就是這次的教程,希望對(duì)大家有所幫助!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43404.html

相關(guān)文章

  • 】PHP OCR實(shí)戰(zhàn):用Tesseract從圖像中讀取文字

    摘要:實(shí)戰(zhàn)用從圖像中讀取文字即光學(xué)字符辨識(shí)是把打印文本轉(zhuǎn)換成一個(gè)數(shù)字表示的過程。可以用谷歌電話庫來確定一個(gè)數(shù)字串是否是合法電話號(hào)碼。現(xiàn)在我們可以如下使用我們需要給谷歌電話庫提供一個(gè)提示來說明這個(gè)號(hào)碼是哪個(gè)國家的。 PHP OCR實(shí)戰(zhàn):用Tesseract從圖像中讀取文字 Optical Character Recognition (OCR)即光學(xué)字符辨識(shí)是把打印文本轉(zhuǎn)換成一個(gè)數(shù)字表示的過程。...

    Miracle 評(píng)論0 收藏0
  • 識(shí)別圖片中的文字 - Tesseract 和 百度云OCR的對(duì)比

    摘要:一個(gè)簡單的圖片轉(zhuǎn)文字的函數(shù)實(shí)現(xiàn)如下。百度云這是偶然的發(fā)現(xiàn),百度云提供了一定額度的免費(fèi)的,目前是每日次,做做研究或者小應(yīng)用還勉強(qiáng)夠用,本文主要為了測(cè)試其效果。論中文,還是百度比谷歌更懂一點(diǎn)。 當(dāng)今時(shí)代人工智能都已經(jīng)是爛大街的詞了,OCR應(yīng)該也很多人都知道。 OCR (Optical Character Recognition,光學(xué)字符識(shí)別)是指電子設(shè)備(例如掃描儀或數(shù)碼相機(jī))檢查紙上打印...

    mushang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<