計算機視覺|圖像中的信息識別
- 2019 年 10 月 31 日
- 筆記
1.為什麼需要電腦對圖片中的數字和字將進行識別:
在生活中,很多時候需要識別一些圖片中的數字和字母,就像很多網站的驗證碼識別,對於個人來說,單個的此類事件需要的時間和精力很少,可對於一些機構、企業來說,可能就需要重複很多次(例如某些機構需要向某網站提交多次文檔、申請多次訪問等操作)。這時,大量的此類工作對於人眼的損耗較大,不但需要損耗人力,同時由於眼花和疲勞等原因可能會導致讀取出來的信息出現差錯,從而降低效率。所以,就需要使用電腦來執行這一操作。
2. python 實現的原理和步驟:
2.1環境搭建:
需要python安裝opcv、numpy、pil和pytesseract這幾個第三方庫;
2.2基本原理介紹:
通過圖像的預處理操作後,再將讀取出來的數組轉換成image形式,然後提取圖片的有用信息。
2.3方法步驟簡介:
首先是圖片的預處理操作,一般順序為先進行圖像的二值化,之後再對圖片進行數字形態學運算(主要是開運算),由於pytesseract內置函數識別的圖片是image形式而不是opencv中的多維數組形式,所以在識別之前需要先使用pil中的image函數將圖片格式進行轉換,最後再通過pytesseracr中的函數進行識別。
大致簡單代碼如下:
import cv2 as cv import numpy as np from PIL import Image import pytesseract as tess #構造函數 def recognize_text(): #灰度化圖像: gray = cv. cvtColor(src, Cv. COLOR_BGR2GRAY) #二值化圖像: ret, binary = cv. threshold(gray, 0 ,255, cv. THRESH_BINARY_INV | cv. THRESH_OTSU) #開運算: kernel = cv. getstructuringelement(cv. MORPH_RECT, (1,2))#使用1*2的面積元素 bin1 = cv. morphologyEx(binary, cv. MORPH_OPEN, kernel) kernel = cv. getstructuringelement(cv. MORPH_RECT, (2,1))#使用2*1的面積元素 open_out = cv. morphologyex(bin1, cv. MORPH_OPEN, kernel cv.bitwise_not(open_out, open_out)#將圖片背景轉換為白色 #轉換圖片格式 textImage = Image. fromarray(open_out) #讀取信息 text = tess. image_to_string(textImage) print(text) sre cv. imread("圖像路徑") cv. namedWindow("input image". WINDOW_AUTOSIZE) cv. imshow("input image", sre) #調用函數 recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()
3.總結:
上述步驟和代碼只是一個基本思路和例子,具體步驟代碼還需要結合圖片的具體情況,有的圖片可能不需要開運算就可以直接進行後面的操作,也有一些圖片需要進行多次開運算的處理,所以還需要結合實際情況進行調整後使用。