File size: 5,341 Bytes
5779747
 
 
 
 
 
c8ba898
 
5779747
 
 
 
2ad1d64
5779747
c8ba898
 
 
 
 
 
5779747
8e725cb
5779747
 
 
 
 
 
 
 
 
 
c8ba898
 
2ad1d64
 
c8ba898
2ad1d64
5779747
 
 
 
8e725cb
c8ba898
5779747
 
 
 
 
 
 
8e725cb
5779747
 
 
 
 
 
 
8e725cb
5779747
 
c8ba898
8e725cb
c8ba898
8e725cb
c8ba898
 
 
 
 
 
 
2ad1d64
c8ba898
 
 
2ad1d64
c8ba898
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5779747
8e725cb
 
5779747
 
 
 
 
 
 
 
c8ba898
 
 
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
124
125
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

# 🌟πŸ”₯ 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):
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    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"
        with open(filename, "wb") as f:
            f.write(cam_img.getvalue())
        save_to_history("πŸ–ΌοΈ Image", filename)
        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'])
        with open(filename, "wb") as f:
            f.write(cam0_img.getvalue())
        st.session_state['cam0_file'] = filename
        st.session_state['selected_cam_img'] = cam0_img
        save_to_history("πŸ–ΌοΈ Image", filename)
        st.image(Image.open(filename), caption="Camera 0 Snap", use_column_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'])
        with open(filename, "wb") as f:
            f.write(cam1_img.getvalue())
        st.session_state['cam1_file'] = filename
        st.session_state['selected_cam_img'] = cam1_img
        save_to_history("πŸ–ΌοΈ Image", filename)
        st.image(Image.open(filename), caption="Camera 1 Snap", use_column_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}"
        with open(file_path, "wb") as f:
            f.write(uploaded_file.read())
        save_to_history("πŸ–ΌοΈ Image", file_path)

# πŸ–ΌοΈ 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]:
                st.image(img['Path'], caption=img['Path'], use_column_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.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!")