精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

通過圖像處理改善OCR識別結果的實例

jf_78858299 ? 來源:OpenCV與AI深度學習 ? 作者: Color Space ? 2023-02-08 16:54 ? 次閱讀

本文主要介紹一個通過圖像處理改善OCR識別結果的實例,并給出詳細步驟和源碼。

背景介紹

在很多情況下,文字識別會遇到困難。比如非單一的背景、雜訊干擾、文字部分缺失等。

我們希望識別圖中的黑色文字(12-14),但背景較復雜且存在其他干擾,如果直接用Tesseract識別(代碼如下),識別結果為空。
# -*- coding:utf-8 -*- 
import pytesseract
from PIL import Image

# 打開圖像
image = Image.open('0.png')

# OCR識別:lang默認英文
text = pytesseract.image_to_string(image)

# 打印識別后的文本
print(text)
對這種復雜情況的文字識別,直接去識別很容易失敗。思考:可不可以通過圖像處理將我們需要的部分分割或凸顯出來再做識別?本文將以此為例做演示說明。

**詳細實現步驟

**

【1】OTSU二值化
image = cv2.imread('0.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)


_,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
cv2.imshow("Otsu", thresh)

【2】距離變化 + 歸一化

dist = cv2.distanceTransform(thresh, cv2.DIST_L2, 5)
dist = cv2.normalize(dist, dist, 0, 1.0, cv2.NORM_MINMAX)
dist = (dist * 255).astype("uint8")
cv2.imshow("Dist", dist)

【3】對距離變換結果圖做OTSU二值化

_,dist = cv2.threshold(dist, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow("Dist Otsu", dist)

【4】形態學開運算濾除雜訊

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
opening = cv2.morphologyEx(dist, cv2.MORPH_OPEN, kernel)
cv2.imshow("Opening", opening)

【5】輪廓篩選,找出文字區域


black_img = cv2.cvtColor(opening, cv2.COLOR_GRAY2BGR)


cnts = cv2.findContours(opening.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
chars = []
# loop over the contours
for c in cnts:
  # compute the bounding box of the contour
  (x, y, w, h) = cv2.boundingRect(c)
  if w >= 35 and h >= 100:
    chars.append(c)

cv2.drawContours(black_img,chars,-1,(0,255,0),2)
cv2.imshow("chars", black_img)

【6】計算輪廓凸包,進一步獲取文字區域mask


mask = np.zeros(image.shape[:2], dtype="uint8")

cv2.drawContours(mask, [hull], -1, 255, -1)

mask = cv2.dilate(mask, None, iterations=2)

cv2.imshow("Mask", mask)

take the bitwise of the opening image and the mask to reveal just

the characters in the image

final = cv2.bitwise_and(opening, opening, mask=mask)

cv2.imshow("final", mask)

7】Tesseract文字識別


text = pytesseract.image_to_string(final)

# 打印識別后的文本

print(text)

【8】完整代碼:


#公眾號:OpenCV與AI深度學習

import cv2

import numpy as np

import imutils

import pytesseract

image = cv2.imread('0.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

_,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)

cv2.imshow("Otsu", thresh)

dist = cv2.distanceTransform(thresh, cv2.DIST_L2, 5)

dist = cv2.normalize(dist, dist, 0, 1.0, cv2.NORM_MINMAX)

dist = (dist * 255).astype("uint8")

cv2.imshow("Dist", dist)

threshold the distance transform using Otsu's method

_,dist = cv2.threshold(dist, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

cv2.imshow("Dist Otsu", dist)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))

opening = cv2.morphologyEx(dist, cv2.MORPH_OPEN, kernel)

cv2.imshow("Opening", opening)

black_img = cv2.cvtColor(opening, cv2.COLOR_GRAY2BGR)

cnts = cv2.findContours(opening.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

cnts = imutils.grab_contours(cnts)

chars = []

loop over the contours

for c in cnts:

compute the bounding box of the contour

(x, y, w, h) = cv2.boundingRect(c)

if w >= 35 and h >= 100:

chars.append(c)

cv2.drawContours(black_img,chars,-1,(0,255,0),2)

cv2.imshow("chars", black_img)

chars = np.vstack([chars[i] for i in range(0, len(chars))])

hull = cv2.convexHull(chars)

allocate memory for the convex hull mask, draw the convex hull on

the image, and then enlarge it via a dilation

mask = np.zeros(image.shape[:2], dtype="uint8")

cv2.drawContours(mask, [hull], -1, 255, -1)

mask = cv2.dilate(mask, None, iterations=2)

cv2.imshow("Mask", mask)

take the bitwise of the opening image and the mask to reveal just

the characters in the image

final = cv2.bitwise_and(opening, opening, mask=mask)

cv2.imshow("final", final)

text = pytesseract.image_to_string(final)

打印識別后的文本

print(text)

cv2.waitKey()

cv2.destroyAllWindows()

**參考鏈接**

(1)https://pyimagesearch.com/2021/11/22/improving-ocr-results-with-basic-image-processing/

(2)https://stackoverflow.com/questions/33881175/remove-background-noise-from-image-to-make-text-more-clear-for-ocr
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    OCR文字距離太近應該如何處理

    ;最近需要做一個OCR文字識別的自動測試,之前基本沒有接觸過圖像處理的相關概念,對于純數學上的算法目前也只是大致在看。 我需要識別的圖片情況
    發表于 05-04 15:07

    OCR SDK開發者平臺推薦:OCR圖像智能字符識別技術

    為了促進業內生態環境良好發展,幫助開發者更好的專注于自己的產品。想讓產品實現OCR圖像智能字符識別技術,看此帖!樓主吐血為大家找到一個集身份證識別,駕駛證
    發表于 09-25 13:48

    Labview調用OCR Training.exe實現字符識別

    ;這一步實現之后就是讀取訓練文件進行圖像字符的識別了,所需參數:ROI ;圖像 ;*.abc訓練文件路徑 ;Parameters(字符識別參數);簡單方式可
    發表于 08-16 17:36

    Labview怎么實現對OCR識別定位,在線急等

    在實際應用中進行OCR識別時,字符的位置以及角度是經常變化的,怎么利用LabVIEW對彩色圖像進行灰度處理以及定位識別?這里圖一是彩色照片、
    發表于 11-18 15:18

    Python OCR 識別庫-ddddocr

    ;, 'rb') as f: image = f.read()res = ocr.classification(image)print(res)識別結果3n3d8342總結ddddocr 讓驗證碼變得如此簡單
    發表于 03-30 17:26

    【KV260視覺入門套件試用體驗】七、VITis AI字符和文本檢測(OCR&Textmountain)

    某些字符的圖像。輸出為包含所識別的字詞及其位置的結構。下 圖顯示了 OCR結果。 換一個帶中文的圖片試一下,結果只能
    發表于 09-26 16:31

    車號圖像處理識別系統的研制

    文章介紹了用于火車貨車的車皮號及自重數字圖像識別的計算機圖像處理識別系統的實踐。使用濾波和非線性灰度擴展,使顯示圖像獲得
    發表于 06-19 08:36 ?12次下載

    什么是OCR

    什么是OCR OCR的英文全稱: OCR是英文Optical Character Recognition的縮寫,意思是光學字符識別,也可簡單地稱為文字
    發表于 04-10 12:55 ?6687次閱讀

    基于FPGA的OCR文字識別技術的深度解析

    識別整體性能為GPU P4 130%,處理延時僅為P4的1/10,CPU的1/30。 1.文字識別技術- OCR OCR技術,通俗來講就是從
    發表于 01-26 12:19 ?3985次閱讀

    移動端證件OCR識別/安卓IOS平臺

    一、證件識別/證件OCR介紹移動端證件識別是開發的基于移動平臺的證件識別/證件OCR應用程序,支持Android、iOS等多種主流移動操作系
    發表于 06-15 15:42 ?297次閱讀

    OCR光學字符識別技術原理講解

    紙質文檔中的文字轉換成為黑白點陣的圖像文件,并通過識別軟件將圖像中的文字轉換成文本格式,供文字處理軟件進一步編輯加工的技術。
    的頭像 發表于 03-02 13:49 ?2.1w次閱讀

    OCR識別技術

    在爬蟲對驗證碼進行破解時,經常需要對圖片中的文字內容進行識別,這時就需要用到OCR技術了,那么 OCR識別技術是如何實現對文字內容“即拍即得”的呢?
    的頭像 發表于 03-12 09:07 ?4772次閱讀

    OCR實戰教程

    OCR 是光學字符識別(英語:Optical Character Recognition,OCR)是指對文本資料的圖像文件進行分析識別處理
    的頭像 發表于 02-24 10:36 ?959次閱讀
    <b class='flag-5'>OCR</b>實戰教程

    OCR如何自動識別圖片文字

    OCR 是光學字符識別(英語:Optical Character Recognition,OCR)是指對文本資料的圖像文件進行分析識別處理
    的頭像 發表于 10-31 16:45 ?750次閱讀
    <b class='flag-5'>OCR</b>如何自動<b class='flag-5'>識別</b>圖片文字

    明治案例 | PE編織袋【大視野】【OCR識別

    OCR識別技術OCR識別技術在工業生產中扮演著至關重要的角色。它利用先進的圖像處理技術,自動、高
    的頭像 發表于 08-13 08:25 ?405次閱讀
    明治案例 | PE編織袋【大視野】【<b class='flag-5'>OCR</b><b class='flag-5'>識別</b>】