介紹
在數字化時代,OCR(Optical Character Recognition)技術成為了智能化信息處理的重要手段,利用OCR技術能夠將紙質的、印刷的文字自動化地轉換成數字的電子文件,為人們的信息化生活帶來了巨大便利。隨著深度學習技術的不斷發展,OCR技術的準確度和識別速度得到了極大提升,其中Python語言的開源OCR庫Pytesseract就是一款非常受歡迎的技術方案。
使用
Pytesseract是在Python下使用谷歌的Tesseract-OCR引擎的開源包,利用簡單的代碼即可快速實現OCR識別任務。下面將從圖像預處理、文字分割、OCR識別三個方面詳細介紹Pytesseract的使用方法。
圖像預處理
在進行OCR識別任務之前,必須對圖像進行預處理,以提高識別準確度和速度。常用的圖像預處理包括二值化、降噪、去除干擾、傾斜矯正等操作。
import cv2 import numpy as np def preprocess(image): # 灰度化 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 高斯模糊 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 自適應二值化 thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 膨脹 kernel = np.ones((3,3), np.uint8) dilation = cv2.dilate(thresh, kernel, iterations=1) # 返回預處理後的圖像 return dilation
文字分割
在進行OCR識別任務時,由於文本字元的分布和排版具有特殊性,需要對圖像進行適當的分割和定位,以準確地識別每個字元。
def find_text_boxes(image): # 二值化 image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) _, binary = cv2.threshold(image, 190, 255, cv2.THRESH_BINARY) # 腐蝕 kernel = np.ones((3, 3), np.uint8) binary = cv2.erode(binary, kernel, iterations=1) # 輪廓檢測 contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 遍歷輪廓 boxes = [] for contour in contours: x, y, w, h = cv2.boundingRect(contour) # 根據輪廓大小過濾無意義邊框 if w < 10 or h < 10: continue box = [x, y, x+w, y+h] boxes.append(box) return boxes
OCR識別
在進行預處理和分割後,即可利用Pytesseract進行OCR識別任務。
import pytesseract def ocr(image): # 圖像預處理 image = preprocess(image) # 文字分割 boxes = find_text_boxes(image) # OCR識別 result = '' for box in boxes: text = pytesseract.image_to_string(image[box[1]:box[3], box[0]:box[2]], lang='chi_sim') result += text return result
小結
利用Python Pytesseract進行OCR識別任務可以有效地提高信息處理效率和準確度。本文從圖像預處理、文字分割和OCR識別三個方面介紹了Pytesseract的使用方法,希望能夠為讀者提供參考。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/187058.html