import streamlit as st import cv2 import os from pipeline import main from pathlib import Path import pandas as pd from dotenv import load_dotenv from pathlib import Path from pipeline_functions import object_detection, crop_image, enhance_image, morphological_transform, hoffman_transform, pytesseract_rotate, ocr,ner env_path = Path('.') / '.env' load_dotenv(dotenv_path=env_path) path = { 'SEG_MODEL_PATH': str(os.getenv('SEG_MODEL_PATH')), 'MAIN_FLOW_GRAY_IMG_DIR_PATH': str(os.getenv('MAIN_FLOW_GRAY_IMG_DIR_PATH')), 'MAIN_FLOW_INFERENCE_FOLDER': str(os.getenv('MAIN_FLOW_INFERENCE_FOLDER')), } with st.sidebar: st.title("Shipping Label Extraction") data = st.file_uploader(label='Upload Image of Parcel',type=['png','jpg','jpeg']) if data: Path('grey_images').mkdir(parents=True, exist_ok=True) with open(os.path.join('grey_images',data.name),'wb') as f: f.write(data.getvalue()) img = cv2.imread(os.path.join('grey_images',data.name),0) if img.shape[0] > 1500: height, width = img.shape img = img[height//4:-height//4, width//4:-width//4] cv2.imwrite(os.path.join('grey_images',data.name), img) #call main function # main(os.path.join('grey_images',data.name)) file_path = os.path.join('grey_images',data.name) img_name = os.path.basename(file_path) col1,col2 = st.columns(2) with col1: st.markdown("

Grey Image

", unsafe_allow_html=True) st.image(os.path.join('grey_images',data.name)) # Object detection and enhance image seg_result, img_file = object_detection(file_path) croped_img = crop_image(seg_result, img_file, img_name) image = enhance_image(croped_img, img_name) st.markdown("

Enhanced Image

", unsafe_allow_html=True) st.image(os.path.join('runs', 'segment', path['MAIN_FLOW_INFERENCE_FOLDER'], 'enhanced', data.name)) with col2: st.markdown("

Detected Image

", unsafe_allow_html=True) st.image(os.path.join('runs', 'segment',path['MAIN_FLOW_INFERENCE_FOLDER'],data.name)) # Rotation processed_img = morphological_transform(image) rotated_image, image = hoffman_transform(processed_img, image) img_name = pytesseract_rotate(rotated_image, image, img_name) st.markdown("

Rotated Image

", unsafe_allow_html=True) st.image(os.path.join('runs', 'segment', path['MAIN_FLOW_INFERENCE_FOLDER'], 'rotated_image', data.name)) # Apply OCR and NER file_name = ocr(img_name) Output_dict = ner(file_name) # df = pd.DataFrame(Output_dict) ocr_data = "" with open(os.path.join('runs', 'segment', path['MAIN_FLOW_INFERENCE_FOLDER'], 'ocr_label_data', data.name.split('.')[0]+'.txt'),'r+') as f : ocr_data = f.read() st.header("OCR Text Output") st.text(ocr_data) st.header("NER Output") new_df = pd.DataFrame() new_df['Entity'] = list(Output_dict.keys()) # print(df) new_df['Value'] = list(Output_dict.values()) new_df['Value'] = new_df['Value'].astype('str') st.table(new_df) else: img_name = '3.jpg' img = cv2.imread(img_name,0) if img.shape[0] > 1500: height, width = img.shape img = img[height//4:-height//4, width//4:-width//4] cv2.imwrite(os.path.join('grey_images',img_name), img) #call main function # main(os.path.join('grey_images',img_name)) file_path = os.path.join('grey_images',img_name) img_name = os.path.basename(file_path) col1,col2 = st.columns(2) with col1: st.markdown("

Grey Image

", unsafe_allow_html=True) st.image(os.path.join('grey_images',img_name)) # Object detection and enhance image seg_result, img_file = object_detection(file_path) croped_img = crop_image(seg_result, img_file, img_name) image = enhance_image(croped_img, img_name) st.markdown("

Enhanced Image

", unsafe_allow_html=True) st.image(os.path.join('runs', 'segment', path['MAIN_FLOW_INFERENCE_FOLDER'], 'enhanced', img_name)) with col2: st.markdown("

Detected Image

", unsafe_allow_html=True) st.image(os.path.join('runs', 'segment',path['MAIN_FLOW_INFERENCE_FOLDER'],img_name)) # Rotation processed_img = morphological_transform(image) rotated_image, image = hoffman_transform(processed_img, image) img_name = pytesseract_rotate(rotated_image, image, img_name) st.markdown("

Rotated Image

", unsafe_allow_html=True) st.image(os.path.join('runs', 'segment', path['MAIN_FLOW_INFERENCE_FOLDER'], 'rotated_image', img_name)) # Apply OCR and NER file_name = ocr(img_name) Output_dict = ner(file_name) # df = pd.DataFrame(Output_dict) ocr_data = "" with open(os.path.join('runs', 'segment', path['MAIN_FLOW_INFERENCE_FOLDER'], 'ocr_label_data', img_name.split('.')[0]+'.txt'),'r+') as f : ocr_data = f.read() st.header("OCR Text Output") st.text(ocr_data) st.header("NER Output") new_df = pd.DataFrame() new_df['Entity'] = list(Output_dict.keys()) # print(df) new_df['Value'] = list(Output_dict.values()) new_df['Value'] = new_df['Value'].astype('str') st.table(new_df)