图形验证码OCR识别。直接上代码…
import os
import cv2
import pytesseract
from PIL import Image
class OCRTools:
pytesseract.pytesseract.tesseract_cmd = r"D:\Work\tesseract-ocr\tesseract.exe"
def pic_ocr(self, pic_path):
image = cv2.imread(pic_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
denoised = cv2.medianBlur(gray, 3)
_, binary_image = cv2.threshold(denoised, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
binary_image = cv2.bitwise_not(binary_image)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
eroded = cv2.erode(binary_image, kernel, iterations=1)
dilated = cv2.dilate(eroded, kernel, iterations=1)
contours, _ = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
character_images = []
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
if w > 5 and h > 10:
char_img = binary_image[y:y+h, x:x+w]
character_images.append((x, char_img))
recognized_text = ""
for x, char_img in sorted(character_images, key=lambda item: item[0]):
char_img = cv2.resize(char_img, (char_img.shape[1] * 2, char_img.shape[0] * 2))
char_pil = Image.fromarray(char_img)
char_text = pytesseract.image_to_string(char_pil, config='--psm 10 -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
recognized_text += char_text.strip()
print("识别的文字为:")
print(recognized_text)
return recognized_text
if __name__ == '__main__':
path = os.path.dirname(os.path.dirname(__file__))+os.sep+'image'
O = OCRTools()
result = O.pic_ocr(path )