import cv2
import pytesseract
import numpy as np
from pytesseract import Output

# img_source = cv2.VideoCapture(0)
img_source = cv2.imread('./img.png')


def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
 
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
 
 
def opening(image):
    kernel = np.ones((5, 5), np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
 
 
def canny(image):
    return cv2.Canny(image, 100, 200)
 
 
def test_performance():
    gray = get_grayscale(img_source)
    thresh = thresholding(gray)
    opening = opening(gray)
    canny = canny(gray)
    
    for img in [img_source, gray, thresh, opening, canny]:
        d = pytesseract.image_to_data(img, output_type=Output.DICT)
        print(d.keys())

        n_boxes = len(d['text'])
    
        # back to RGB
        if len(img.shape) == 2:
            img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
    
        for i in range(n_boxes):
            if int(d['conf'][i]) > 60:
                (text, x, y, w, h) = (d['text'][i], d['left'][i], d['top'][i], d['width'][i], d['height'][i])
                # don't show empty text
                if text and text.strip() != "":
                    img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
                    img = cv2.putText(img, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 255, 0), 3)
    
        cv2.imshow('img', img)
        cv2.waitKey(0)

# print(pytesseract.image_to_data(img_source, output_type=Output.DICT)['text'])

def identy_char(img_path):
    source_img = cv2.imread(img_path)
    d =  pytesseract.image_to_data(source_img, output_type=Output.DICT, config='--psm 10')

    for text in d['text']:
        # print(text)
        if len(text) == 1 and text.isalpha():
            print(text)

if __name__ == "__main__":
    identy_char('./img.png')