File size: 2,476 Bytes
120e659
6ca2703
cc3aad6
3ebf562
120e659
 
6dd2ec6
6ca2703
120e659
 
849cfbb
120e659
 
6ca2703
120e659
 
2ba33db
120e659
6ca2703
120e659
 
6ca2703
8973c03
120e659
 
e4c3e4a
8973c03
e4c3e4a
6ca2703
cc3aad6
e4c3e4a
120e659
e4c3e4a
6ca2703
e4c3e4a
6ca2703
e4c3e4a
6ca2703
 
e4c3e4a
 
 
 
 
 
120e659
 
 
 
 
 
 
eff43d3
6ca2703
120e659
e4c3e4a
120e659
 
 
6ca2703
120e659
6ca2703
 
 
849cfbb
120e659
6ca2703
120e659
 
 
6ca2703
849cfbb
120e659
6ca2703
2ba33db
 
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
68
69
70
71
72
73
74
75
76
77
import pandas as pd
import numpy as np
import streamlit as st
import easyocr
from PIL import Image, ImageDraw
from streamlit_drawable_canvas import st_canvas

def rectangle(image, result):
    """Draw rectangles on the image based on predicted coordinates."""
    draw = ImageDraw.Draw(image)
    for res in result:
        top_left = tuple(res[0][0])  # top left coordinates as a tuple
        bottom_right = tuple(res[0][2])  # bottom right coordinates as a tuple
        draw.rectangle((top_left, bottom_right), outline="blue", width=2)
    # Display the image on Streamlit
    st.image(image)

# Main title
st.title("Get text from an image with EasyOCR")

# Subtitle
st.markdown("## EasyOCR with Streamlit")

# Upload image file or draw
st.markdown("## Upload an Image or Draw")
col1, col2 = st.columns(2)

with col1:
    file = st.file_uploader("Upload Here", type=['png', 'jpg', 'jpeg'])

with col2:
    # Drawable canvas
    canvas_result = st_canvas(
        fill_color="rgba(255, 165, 0, 0.3)",
        stroke_width=3,
        stroke_color="#ffffff",
        background_color="#000000",
        background_image=None if file else st.session_state.get("background", None),
        update_streamlit=True,
        width=400,
        height=400,
        drawing_mode="freedraw",
        key="canvas",
    )

image = None  # Initialize image variable

# Process uploaded image or drawing
if file is not None:
    image = Image.open(file)  # Read image with PIL library
elif canvas_result.image_data is not None:
    image = Image.fromarray(np.array(canvas_result.image_data, dtype=np.uint8)).convert('RGB')

if image is not None:
    st.image(image)  # Display the image

    # Initialize EasyOCR reader; you can add or remove languages based on your preference
    reader = easyocr.Reader(['en'], gpu=False)
    result = reader.readtext(np.array(image))  # Convert image to numpy array and process with EasyOCR

    # Print all predicted text
    for idx, res in enumerate(result):
        pred_text = res[1]
        st.write(pred_text)
    
    # Collect the results in a dictionary
    textdic_easyocr = {res[1]: {'pred_confidence': res[2]} for res in result}

    # Create a DataFrame to show the predicted text and prediction confidence
    df = pd.DataFrame.from_dict(textdic_easyocr).T
    st.table(df)

    # Draw rectangles around the detected text in the image
    rectangle(image, result)
else:
    st.write("Please upload an image or use the canvas to draw.")