File size: 1,967 Bytes
6dd2ec6
cc3aad6
 
849cfbb
cc3aad6
849cfbb
6dd2ec6
849cfbb
2ba33db
849cfbb
 
d706d88
 
849cfbb
cc3aad6
 
d706d88
2ba33db
cc3aad6
 
d706d88
 
cc3aad6
4cb29e5
cc3aad6
 
 
 
 
2ba33db
cc3aad6
 
 
 
 
 
 
 
 
849cfbb
8973c03
d706d88
2ba33db
cc3aad6
d706d88
2ba33db
d706d88
 
 
8973c03
cc3aad6
d706d88
8973c03
2ba33db
d706d88
cc3aad6
 
 
 
849cfbb
cc3aad6
 
 
849cfbb
cc3aad6
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
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])
        bottom_right = tuple(res[0][2])
        draw.rectangle((top_left, bottom_right), outline="blue", width=2)
    st.image(image)

# Main title and markdowns
st.title("Get text from an image with EasyOCR")
st.markdown("## EasyOCR with Streamlit")
st.markdown("## Upload an Image or Draw")

# Column layout for uploader and canvas
col1, col2 = st.columns(2)

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

with col2:
    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

if file is not None:
    image = Image.open(file)
elif canvas_result.image_data is not None:
    # Convert canvas RGBA image to RGB
    canvas_image_data = canvas_result.image_data.astype(np.uint8)
    image = Image.fromarray(canvas_image_data, 'RGBA').convert('RGB')

if image is not None:
    st.image(image)

    reader = easyocr.Reader(['en', 'ja'], gpu=False)
    result = reader.readtext(np.array(image))

    for idx, res in enumerate(result):
        pred_text = res[1]
        st.write(pred_text)
    
    textdic_easyocr = {res[1]: {'pred_confidence': res[2]} for res in result}
    df = pd.DataFrame.from_dict(textdic_easyocr).T
    st.table(df)

    rectangle(image, result)
else:
    st.write("Please upload an image or use the canvas to draw.")