Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.1 kB
1
Indexable
Never
# detecting mirror text by applying OCR on original and after flipping the image
from PIL import Image
import pytesseract
import numpy as np
import matplotlib.pyplot as plt
import cv2

def count_chars(res):
    ct = 0
    for i in range(len(res["text"])):
        if res["conf"][i]<70:
            continue
        word = res["text"][i]
        print(word)
        ct += len(word)
    return ct


def is_mirror(results_org, results_mirror):
    print("Original Image:")
    ct_org = count_chars(results_org)
    print("\nMirrored Image:")    
    ct_mirror = count_chars(results_mirror)
    if ct_org<ct_mirror:
        return True
    else:
        return False    

def preprocess(img):
    norm_img = np.zeros((img.shape[0], img.shape[1]))
    img = cv2.normalize(img, norm_img,  0, 255, cv2.NORM_MINMAX)
    img = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)[1]
    img = cv2.GaussianBlur(img, (1,1), 0)
    return img

def draw_Bbox(img, results):
    img = img.copy()
    for i in range(0, len(results["text"])):
       x = results["left"][i]
       y = results["top"][i]

       w = results["width"][i]
       h = results["height"][i]

       text = results["text"][i]
       conf = int(results["conf"][i])

       if conf > 70:
           text = "".join([c if ord(c) < 128 else "" for c in text]).strip()
           cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
           cv2.putText(img, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 200), 2)

    return img

f = 'img1.jpeg'
img = cv2.imread(f)

mirror_img = np.fliplr(img)
results_org = pytesseract.image_to_data(img, output_type = 'dict')
results_mirror = pytesseract.image_to_data(mirror_img, output_type = 'dict')
img_org = draw_Bbox(img, results_org)
img_mirror = draw_Bbox(mirror_img, results_mirror)

print("\nIs image mirrored:",is_mirror(results_org, results_mirror))
      
fig = plt.figure()
ax1 = fig.add_subplot(3,1,1)
ax1.imshow(img_org)
ax2 = fig.add_subplot(3,1,2)
ax2.imshow(img_mirror)
ax3 = fig.add_subplot(3,1,3)
ax3.imshow(mirror_img)
plt.show()