Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -10,6 +10,14 @@ from streamlit_cropper import st_cropper
|
|
| 10 |
# --- PAGE CONFIG ---
|
| 11 |
st.set_page_config(page_title="Smart Doc Scanner", page_icon="🖼️", layout="centered")
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
# --- HEADER ---
|
| 14 |
st.title("📄 Smart ID & Document Scanner")
|
| 15 |
st.write("---")
|
|
@@ -21,7 +29,6 @@ if "uploaded_files_hash" not in st.session_state:
|
|
| 21 |
uploaded_files = st.file_uploader("Upload your Images", type=["png", "jpg", "jpeg"], accept_multiple_files=True)
|
| 22 |
|
| 23 |
if uploaded_files:
|
| 24 |
-
# Create a hash based on filenames
|
| 25 |
uploaded_files_names = [file.name for file in uploaded_files]
|
| 26 |
current_hash = hash(tuple(uploaded_files_names))
|
| 27 |
|
|
@@ -37,6 +44,7 @@ if uploaded_files:
|
|
| 37 |
if app_mode == "Normal Mode (No Editing)":
|
| 38 |
for uploaded_file in uploaded_files:
|
| 39 |
img = Image.open(uploaded_file).convert("RGB")
|
|
|
|
| 40 |
processed_images.append(img)
|
| 41 |
st.image(img, caption=uploaded_file.name, use_container_width=True)
|
| 42 |
|
|
@@ -45,16 +53,13 @@ if uploaded_files:
|
|
| 45 |
st.subheader(f"Editing: {uploaded_file.name}")
|
| 46 |
|
| 47 |
original_img = Image.open(uploaded_file).convert("RGB")
|
|
|
|
| 48 |
|
| 49 |
-
#
|
| 50 |
-
max_size = (800, 800)
|
| 51 |
-
if original_img.size[0] > max_size[0] or original_img.size[1] > max_size[1]:
|
| 52 |
-
original_img.thumbnail(max_size, Image.ANTIALIAS)
|
| 53 |
-
|
| 54 |
if f"edited_{idx}" not in st.session_state:
|
| 55 |
-
st.session_state[f"edited_{idx}"] = original_img
|
| 56 |
-
st.session_state[f"preview_{idx}"] = original_img.copy()
|
| 57 |
st.session_state[f"cropper_{idx}"] = original_img.copy()
|
|
|
|
| 58 |
|
| 59 |
# --- Layout: 2 columns ---
|
| 60 |
col_cropper, col_preview = st.columns([1, 1])
|
|
@@ -76,14 +81,14 @@ if uploaded_files:
|
|
| 76 |
st.session_state[f"cropper_{idx}"] = crop_output
|
| 77 |
|
| 78 |
with col_preview:
|
| 79 |
-
st.write("### Preview:")
|
| 80 |
st.image(st.session_state[f"preview_{idx}"], caption=f"Preview: {uploaded_file.name}", use_container_width=True)
|
| 81 |
|
| 82 |
-
# --- Buttons next to preview ---
|
| 83 |
if st.button(f"Enhance Now {idx}", key=f"enhance_{idx}"):
|
| 84 |
enhancer = ImageEnhance.Contrast(st.session_state[f"preview_{idx}"])
|
| 85 |
sharpener = ImageEnhance.Sharpness(enhancer.enhance(1.5))
|
| 86 |
st.session_state[f"preview_{idx}"] = sharpener.enhance(2.0)
|
|
|
|
| 87 |
|
| 88 |
angle = st.slider(f"Rotate Angle", -180, 180, 0, key=f"rotate_slider_{idx}")
|
| 89 |
|
|
|
|
| 10 |
# --- PAGE CONFIG ---
|
| 11 |
st.set_page_config(page_title="Smart Doc Scanner", page_icon="🖼️", layout="centered")
|
| 12 |
|
| 13 |
+
# --- Resize Function ---
|
| 14 |
+
def resize_image(img, max_width=800):
|
| 15 |
+
if img.width > max_width:
|
| 16 |
+
ratio = max_width / img.width
|
| 17 |
+
new_height = int(img.height * ratio)
|
| 18 |
+
img = img.resize((max_width, new_height), resample=Image.Resampling.LANCZOS)
|
| 19 |
+
return img
|
| 20 |
+
|
| 21 |
# --- HEADER ---
|
| 22 |
st.title("📄 Smart ID & Document Scanner")
|
| 23 |
st.write("---")
|
|
|
|
| 29 |
uploaded_files = st.file_uploader("Upload your Images", type=["png", "jpg", "jpeg"], accept_multiple_files=True)
|
| 30 |
|
| 31 |
if uploaded_files:
|
|
|
|
| 32 |
uploaded_files_names = [file.name for file in uploaded_files]
|
| 33 |
current_hash = hash(tuple(uploaded_files_names))
|
| 34 |
|
|
|
|
| 44 |
if app_mode == "Normal Mode (No Editing)":
|
| 45 |
for uploaded_file in uploaded_files:
|
| 46 |
img = Image.open(uploaded_file).convert("RGB")
|
| 47 |
+
img = resize_image(img) # Always resize
|
| 48 |
processed_images.append(img)
|
| 49 |
st.image(img, caption=uploaded_file.name, use_container_width=True)
|
| 50 |
|
|
|
|
| 53 |
st.subheader(f"Editing: {uploaded_file.name}")
|
| 54 |
|
| 55 |
original_img = Image.open(uploaded_file).convert("RGB")
|
| 56 |
+
original_img = resize_image(original_img)
|
| 57 |
|
| 58 |
+
# Initialize session states
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
if f"edited_{idx}" not in st.session_state:
|
| 60 |
+
st.session_state[f"edited_{idx}"] = original_img
|
|
|
|
| 61 |
st.session_state[f"cropper_{idx}"] = original_img.copy()
|
| 62 |
+
st.session_state[f"preview_{idx}"] = original_img.copy()
|
| 63 |
|
| 64 |
# --- Layout: 2 columns ---
|
| 65 |
col_cropper, col_preview = st.columns([1, 1])
|
|
|
|
| 81 |
st.session_state[f"cropper_{idx}"] = crop_output
|
| 82 |
|
| 83 |
with col_preview:
|
| 84 |
+
st.write("### Preview and Edit:")
|
| 85 |
st.image(st.session_state[f"preview_{idx}"], caption=f"Preview: {uploaded_file.name}", use_container_width=True)
|
| 86 |
|
|
|
|
| 87 |
if st.button(f"Enhance Now {idx}", key=f"enhance_{idx}"):
|
| 88 |
enhancer = ImageEnhance.Contrast(st.session_state[f"preview_{idx}"])
|
| 89 |
sharpener = ImageEnhance.Sharpness(enhancer.enhance(1.5))
|
| 90 |
st.session_state[f"preview_{idx}"] = sharpener.enhance(2.0)
|
| 91 |
+
st.session_state[f"cropper_{idx}"] = st.session_state[f"preview_{idx}"]
|
| 92 |
|
| 93 |
angle = st.slider(f"Rotate Angle", -180, 180, 0, key=f"rotate_slider_{idx}")
|
| 94 |
|