File size: 2,168 Bytes
8f25cfa
 
 
 
10e586f
6cd04a8
8f25cfa
3ba81aa
 
 
 
 
 
 
 
 
 
 
 
8f25cfa
8805a3e
8f25cfa
5be688b
 
8f25cfa
 
8805a3e
8f25cfa
 
 
 
 
 
 
8805a3e
8f25cfa
 
04b3685
 
8f25cfa
 
cf8530c
7179638
 
 
 
8f25cfa
 
7179638
8805a3e
7179638
8805a3e
f58179a
6352de6
8f25cfa
 
3ba81aa
 
 
4755e97
 
8f25cfa
 
 
6352de6
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import pandas as pd
import numpy as np
import streamlit as st
import easyocr
import PIL
from PIL import Image, ImageDraw

def rectangle(image, result):
    # https://www.blog.pythonlibrary.org/2021/02/23/drawing-shapes-on-images-with-python-and-pillow/
    """ draw rectangles on image based on predicted coordinates"""
    draw = ImageDraw.Draw(image)
    for res in result:
        top_left = tuple(res[0][0]) # top left coordinates as tuple
        bottom_right = tuple(res[0][2]) # bottom right coordinates as tuple
        draw.rectangle((top_left, bottom_right), outline="blue", width=2)
    #display image on streamlit
    st.image(image)


# main title
st.title("Recognize text and locations from flowchart")

# # subtitle
# st.markdown("## FlowchartOCR")

# upload image file
file = st.file_uploader(label = "Upload Image", type=['png', 'jpg', 'jpeg'])

#read the csv file and display the dataframe
if file is not None:
    image = Image.open(file) # read image with PIL library
    st.image(image) #display

    # it will only detect the English and Turkish part of the image as text
    reader = easyocr.Reader(['en'], gpu=False) 
    result = reader.readtext(np.array(image))  # turn image to numpy array

    
    # collect the results in the dictionary:
    textdic_easyocr = {}
    for idx in range(len(result)):
        pred_coor = result[idx][0]
        x_coords = [point[0] for point in pred_coor]
        y_coords = [point[1] for point in pred_coor]
        center_x = sum(x_coords) / len(x_coords)
        center_y = sum(y_coords) / len(y_coords)
        pred_text = result[idx][1]
        pred_confidence = result[idx][2]
        if(pred_confidence>0.3):
            textdic_easyocr[pred_text] = {}
            textdic_easyocr[pred_text]['location'] = (center_x, center_y)
            textdic_easyocr[pred_text]['pred_confidence'] = pred_confidence

    # create a data frame which shows the predicted text and prediction confidence
    df = pd.DataFrame.from_dict(textdic_easyocr).T
    st.table(df)

    # get boxes on the image 
    rectangle(image, result)

    st.spinner(text="In progress...")
    
else:
    st.write("Upload your image")