Spaces:
Paused
Paused
import streamlit as st | |
import json | |
import os | |
import requests | |
import socket | |
def start_server(): | |
os.system("uvicorn server:app --port 8080 --host 0.0.0.0 --workers 2") | |
st.session_state['server_started'] = True | |
def is_port_in_use(port): | |
import socket | |
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: | |
return s.connect_ex(('0.0.0.0', port)) == 0 | |
def recognize_passport(image_path): | |
files = {'image': open(image_path, 'rb')} | |
response = requests.post("http://0.0.0.0:8080/recognize_passport", files=files) | |
return response.json() | |
if 'server_started' not in st.session_state: | |
st.session_state['server_started'] = False | |
if not st.session_state['server_started']: | |
start_server() | |
st.sidebar.title("Server Status") | |
st.sidebar.write("π’ Server is running" if st.session_state['server_started'] else "π΄ Server is not running") | |
st.title('Passport Recognition with passportEYE, paddleocr and a LLM') | |
upload_option = st.radio("Select Image Source", ("Upload Image", "Load Example Image"), index=0) | |
if upload_option == "Load Example Image": | |
image_path = "sample.jpg" | |
else: | |
image_path = st.file_uploader("Upload Passport Image", type=["jpg", "jpeg", "png"], key="image_uploader") | |
if image_path is not None and st.button("Read Passport"): | |
with st.spinner("Running..."): | |
if upload_option == "Upload Image": | |
with open("temp_image.jpg", "wb") as f: | |
f.write(image_path.read()) | |
else: | |
passport_info = recognize_passport(image_path) | |
if upload_option == "Upload Image": | |
passport_info = recognize_passport("temp_image.jpg") | |
col1, col2 = st.columns(2) | |
with col1: | |
st.markdown(f'## Passport Recognition Results') | |
st.json(json.dumps(passport_info, indent=2)) | |
with col2: | |
st.image(image_path, caption="Uploaded Image.", use_column_width=True) |