File size: 5,394 Bytes
5779747 c8ba898 19de063 5779747 2ad1d64 5779747 c8ba898 5779747 8e725cb 19de063 5779747 19de063 5779747 c8ba898 2ad1d64 19de063 5779747 8e725cb c8ba898 5779747 8e725cb 5779747 8e725cb 5779747 c8ba898 8e725cb c8ba898 8e725cb c8ba898 19de063 c8ba898 19de063 c8ba898 19de063 c8ba898 19de063 c8ba898 19de063 5779747 8e725cb 5779747 19de063 5779747 8e725cb 5779747 |
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
import streamlit as st
import pandas as pd
from datetime import datetime
import os
import threading
import time
from PIL import Image
from io import BytesIO
import base64
# ππ₯ Initialize session state like a galactic DJ spinning tracks!
if 'file_history' not in st.session_state:
st.session_state['file_history'] = []
if 'auto_capture_running' not in st.session_state:
st.session_state['auto_capture_running'] = False
if 'cam0_file' not in st.session_state:
st.session_state['cam0_file'] = None
if 'cam1_file' not in st.session_state:
st.session_state['cam1_file'] = None
if 'selected_cam_img' not in st.session_state:
st.session_state['selected_cam_img'] = None
# ππΎ Save to history like a time-traveling scribe! | π
β¨ save_to_history("πΌοΈ Image", "pic.jpg") - Stamps a pic in the history books like a boss!
def save_to_history(file_type, file_path, img_data):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(file_path, "wb") as f:
f.write(img_data)
st.session_state['file_history'].append({
"Timestamp": timestamp,
"Type": file_type,
"Path": file_path
})
# πΈβ° Auto-capture every 10 secs like a sneaky shutterbug!
def auto_capture():
if st.session_state['auto_capture_running'] and st.session_state['selected_cam_img']:
cam_img = st.session_state['selected_cam_img']
filename = f"auto_snap_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg"
save_to_history("πΌοΈ Image", filename, cam_img.getvalue())
threading.Timer(10, auto_capture).start()
# ποΈ Sidebar config like a spaceship control panel!
with st.sidebar:
st.header("ποΈπΈ Snap Shack")
camera_choice = st.selectbox("π· Pick a Cam", ["Camera 0", "Camera 1"])
if st.button("β° Start Auto-Snap"):
st.session_state['auto_capture_running'] = True
auto_capture()
if st.button("βΉοΈ Stop Auto-Snap"):
st.session_state['auto_capture_running'] = False
# π Sidebar file outline with emoji flair!
st.subheader("π Snap Stash")
if st.session_state['file_history']:
images = [f for f in st.session_state['file_history'] if f['Type'] == "πΌοΈ Image"]
if images:
st.write("πΌοΈ Images")
for img in images:
st.write(f"- {img['Path']} @ {img['Timestamp']}")
else:
st.write("π³οΈ Empty Stash!")
# ππ¨ Main UI kicks off like a cosmic art show!
st.title("πΈ Streamlit Snap Craze")
# πΈπ· Camera snap zone!
st.header("πΈπ₯ Snap Zone")
cols = st.columns(2)
with cols[0]:
cam0_img = st.camera_input("π· Camera 0", key="cam0")
if cam0_img and camera_choice == "Camera 0":
filename = f"cam0_snap_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg"
if st.session_state['cam0_file'] and os.path.exists(st.session_state['cam0_file']):
os.remove(st.session_state['cam0_file'])
save_to_history("πΌοΈ Image", filename, cam0_img.getvalue())
st.session_state['cam0_file'] = filename
st.session_state['selected_cam_img'] = cam0_img
st.image(Image.open(BytesIO(cam0_img.getvalue())), caption="Camera 0 Snap", use_container_width=True)
with cols[1]:
cam1_img = st.camera_input("π· Camera 1", key="cam1")
if cam1_img and camera_choice == "Camera 1":
filename = f"cam1_snap_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg"
if st.session_state['cam1_file'] and os.path.exists(st.session_state['cam1_file']):
os.remove(st.session_state['cam1_file'])
save_to_history("πΌοΈ Image", filename, cam1_img.getvalue())
st.session_state['cam1_file'] = filename
st.session_state['selected_cam_img'] = cam1_img
st.image(Image.open(BytesIO(cam1_img.getvalue())), caption="Camera 1 Snap", use_container_width=True)
# π Upload zone like a media drop party!
st.header("π₯π Drop Zone")
uploaded_files = st.file_uploader("πΈ Toss Pics", accept_multiple_files=True, type=['jpg', 'png'])
if uploaded_files:
for uploaded_file in uploaded_files:
file_path = f"uploaded_{uploaded_file.name}"
save_to_history("πΌοΈ Image", file_path, uploaded_file.getvalue())
# πΌοΈ Gallery like a media circus!
st.header("πͺ Snap Show")
if st.session_state['file_history']:
images = [f for f in st.session_state['file_history'] if f['Type'] == "πΌοΈ Image"]
if images:
st.subheader("πΌοΈ Pic Parade")
cols = st.columns(3)
for i, img in enumerate(images):
with cols[i % 3]:
if os.path.exists(img['Path']):
st.image(img['Path'], caption=img['Path'], use_container_width=True)
with open(img['Path'], "rb") as f:
img_data = f.read()
st.markdown(f'<a href="data:image/jpeg;base64,{base64.b64encode(img_data).decode()}" download="{os.path.basename(img["Path"])}">π₯ Snag It!</a>', unsafe_allow_html=True)
else:
st.warning(f"π¨ Missing file: {img['Path']}")
else:
st.write("π« No snaps yet!")
# π History log like a time machine!
st.header("β³ Snap Saga")
if st.session_state['file_history']:
df = pd.DataFrame(st.session_state['file_history'])
st.dataframe(df)
else:
st.write("π³οΈ Nothing snapped yet!") |