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("Get text from image with EasyOCR") # subtitle st.markdown("## EasyOCR with Streamlit") # upload image file file = st.file_uploader(label = "Upload Here", 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(['fa','ar'], gpu=False) result = reader.readtext(np.array(image)) # turn image to numpy array # Add a placeholder # latest_iteration = st.empty() # bar = st.progress(0) # for i in range(100): # Update the progress bar with each iteration. # latest_iteration.text(f'Iteration {i+1}') # bar.progress(i + 1) # time.sleep(0.1) # print all predicted text: for idx in range(len(result)): pred_text = result[idx][1] st.write(pred_text) # collect the results in the dictionary: textdic_easyocr = {} for idx in range(len(result)): pred_coor = result[idx][0] pred_text = result[idx][1] pred_confidence = result[idx][2] textdic_easyocr[pred_text] = {} 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")