From ea0861273c9389343a4688227fea1c7f58d68d8f Mon Sep 17 00:00:00 2001 From: Quildra Date: Tue, 28 Sep 2021 21:25:51 +0100 Subject: [PATCH] basics --- .gitignore | 3 ++ OCR.py | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 .gitignore create mode 100644 OCR.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76c56fa --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +temp/** +data/** +.idea/** \ No newline at end of file diff --git a/OCR.py b/OCR.py new file mode 100644 index 0000000..76c551a --- /dev/null +++ b/OCR.py @@ -0,0 +1,110 @@ +import cv2 +from PIL import Image +import pytesseract + +card_name_roi = { 'x':44, 'y':32, 'w':360, 'h':40 } + +def grayscale(image): + return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + +def noise_removal(image): + import numpy as np + kernel = np.ones((1, 1), np.uint8) + image = cv2.dilate(image, kernel, iterations=1) + kernel = np.ones((1, 1), np.uint8) + image = cv2.erode(image, kernel, iterations=1) + image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel) + image = cv2.medianBlur(image, 3) + return (image) + +def thin_font(image): + import numpy as np + image = cv2.bitwise_not(image) + kernel = np.ones((2,2),np.uint8) + image = cv2.erode(image, kernel, iterations=1) + image = cv2.bitwise_not(image) + return (image) + +def thick_font(image): + import numpy as np + image = cv2.bitwise_not(image) + kernel = np.ones((2,2),np.uint8) + image = cv2.dilate(image, kernel, iterations=1) + image = cv2.bitwise_not(image) + return (image) + +file_path = "data/WTR/WTR003.png" + +img = cv2.imread(file_path) +inverted_image = cv2.bitwise_not(img) +cv2.imwrite("temp/inverted.jpg", inverted_image) + +gray_image = grayscale(img) +cv2.imwrite("temp/gray.jpg", gray_image) + +thresh, im_bw = cv2.threshold(gray_image, 210, 230, cv2.THRESH_BINARY) +cv2.imwrite("temp/bw_image.jpg", im_bw) + +no_noise = noise_removal(im_bw) +cv2.imwrite("temp/no_noise.jpg", no_noise) + +eroded_image = thin_font(no_noise) +cv2.imwrite("temp/eroded_image.jpg", eroded_image) + +dilated_image = thick_font(no_noise) +cv2.imwrite("temp/dilated_image.jpg", dilated_image) + +im = Image.open(file_path) +ocr_result = pytesseract.image_to_string(im) +print("Unaltered:") +print (ocr_result) +print("===========================") + +inverted_im = Image.open("temp/inverted.jpg") +inverted_image_ocr = pytesseract.image_to_string(inverted_im) +print("Inverted:") +print (inverted_image_ocr) +print("===========================") + +greyscale_im = Image.open("temp/gray.jpg") +greyscale_im_ocr = pytesseract.image_to_string(greyscale_im) +print("Greyscale:") +print (greyscale_im_ocr) +print("===========================") + +bw_im = Image.open("temp/bw_image.jpg") +bw_im_ocr = pytesseract.image_to_string(bw_im) +print("Black and White:") +print (bw_im_ocr) +print("===========================") + +no_noise_im = Image.open("temp/no_noise.jpg") +no_noise_im_ocr = pytesseract.image_to_string(no_noise_im) +print("No Noise:") +print (no_noise_im_ocr) +print("===========================") + +eroded_image_im = Image.open("temp/eroded_image.jpg") +eroded_image_im_ocr = pytesseract.image_to_string(eroded_image_im) +print("Eroded:") +print (eroded_image_im_ocr) +print("===========================") + +dilated_image_im = Image.open("temp/dilated_image.jpg") +dilated_image_im_ocr = pytesseract.image_to_string(dilated_image_im) +print("Dilated:") +print (dilated_image_im_ocr) +print("===========================") + +def testArea(image, x,y,w,h): + roi = image[y:y+h, x:x+w] + inverted_image = cv2.bitwise_not(roi) + cv2.imwrite("temp/inverted.jpg", inverted_image) + gray_image = grayscale(roi) + cv2.imwrite("temp/gray.jpg", gray_image) + cv2.rectangle(image, (x, y), (x+w, y+h), (36, 255, 12), 2) + ocr_result = pytesseract.image_to_string(gray_image) + print(ocr_result) + +testArea(img, card_name_roi['x'], card_name_roi['y'], card_name_roi['w'], card_name_roi['h']) +cv2.imwrite("temp/markup.jpg", img) \ No newline at end of file