計算機視覺|圖像中的信息識別

  • 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.總結:

上述步驟和代碼只是一個基本思路和例子,具體步驟代碼還需要結合圖片的具體情況,有的圖片可能不需要開運算就可以直接進行後面的操作,也有一些圖片需要進行多次開運算的處理,所以還需要結合實際情況進行調整後使用。