File size: 4,293 Bytes
ae8a7b7
43097e0
 
40280ea
 
57034fc
5cb1e06
3593298
 
43097e0
 
3593298
 
 
aef2e78
 
 
 
3593298
aef2e78
40280ea
aef2e78
 
43097e0
 
40280ea
 
 
be142ce
 
 
 
 
 
 
 
 
 
c4e4c6d
be142ce
c4e4c6d
be142ce
 
 
3593298
 
40280ea
3593298
ca29da8
3593298
 
 
ca29da8
 
 
 
 
 
 
 
 
3593298
 
 
 
 
 
 
edf8ac9
 
3593298
 
 
 
 
aef2e78
 
3593298
 
 
 
 
 
 
 
 
 
 
aef2e78
 
 
3593298
 
d0dce42
be142ce
d0dce42
c4e4c6d
be142ce
 
 
c4e4c6d
 
edf8ac9
aef2e78
 
 
43097e0
40280ea
 
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
import streamlit as st
import cv2
import numpy as np
import datetime
import os
import time
import base64
import re
import glob
from camera_input_live import camera_input_live

# Set wide layout
st.set_page_config(layout="wide")

# Decorator for caching images
def get_image_count():
    return {'count': 0}

# Function Definitions for Camera Feature
def save_image(image, image_count):
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"captured_image_{timestamp}_{image_count['count']}.png"
    image_count['count'] += 1
    bytes_data = image.getvalue()
    cv2_img = cv2.imdecode(np.frombuffer(bytes_data, np.uint8), cv2.IMREAD_COLOR)
    cv2.imwrite(filename, cv2_img)
    return filename

def get_image_base64(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode()

# Function Definitions for Chord Sheet Feature
def process_line(line):
    if re.search(r'\b[A-G][#b]?m?\b', line):
        line = re.sub(r'\b([A-G][#b]?m?)\b', r"<img src='\1.png' style='height:20px;'>", line)
    return line

def process_sheet(sheet):
    processed_lines = []
    for line in sheet.split('\n'):
        processed_line = process_line(line)
        processed_lines.append(processed_line)
    return '<br>'.join(processed_lines)

# Main Function
def main():
    # Layout Configuration
    col1, col2 = st.columns([2, 3])

    # Camera Section
    with col1:
        #st.markdown("πŸ“Ή Real-Time Camera Stream πŸš€")
        st.markdown("## πŸ‘οΈβ€πŸ—¨οΈ Eye on the World: Real-Time Camera Stream 🌐")
        #st.markdown("πŸ”΄ Live Feed: Real-Time Camera Stream πŸŽ₯")
        #st.markdown("🌟 Instant Vision: Real-Time Camera Stream πŸ“Έ")
        #st.markdown("πŸ•΅οΈβ€β™‚οΈ Spy Mode: Real-Time Camera Stream πŸ•ΆοΈ")
        #st.markdown("πŸš€ Explore Now: Real-Time Camera Stream 🌍")
        #st.markdown("πŸ’‘ Illuminate: Real-Time Camera Stream πŸ”¦")
        #st.markdown("πŸŒ‰ Views Unfold: Real-Time Camera Stream 🏞️")
        #st.markdown("✨ Magic Lens: Real-Time Camera Stream 🌈")

        snapshot_interval = st.slider("Snapshot Interval (seconds)", 1, 10, 5)
        image_placeholder = st.empty()

        if 'captured_images' not in st.session_state:
            st.session_state['captured_images'] = []
        if 'last_captured' not in st.session_state:
            st.session_state['last_captured'] = time.time()

        image = camera_input_live()
        if image is not None:
            image_placeholder.image(image)

            if time.time() - st.session_state['last_captured'] > snapshot_interval:
                image_count = get_image_count()
                filename = save_image(image, image_count)
                st.session_state['captured_images'].append(filename)
                st.session_state['last_captured'] = time.time()

        sidebar_html = "<div style='display:flex;flex-direction:column;'>"
        for img_file in st.session_state['captured_images']:
            image_base64 = get_image_base64(img_file)
            sidebar_html += f"<img src='data:image/png;base64,{image_base64}' style='width:100px;'><br>"
        sidebar_html += "</div>"
        st.sidebar.markdown("## Captured Images")
        st.sidebar.markdown(sidebar_html, unsafe_allow_html=True)

        # JavaScript Timer
        st.markdown(f"<script>setInterval(function() {{ document.getElementById('timer').innerHTML = new Date().toLocaleTimeString(); }}, 1000);</script><div>Current Time: <span id='timer'></span></div>", unsafe_allow_html=True)

    # Chord Sheet Section
    with col2:
        st.markdown("## 🎬 Action! Real-Time Camera Stream Highlights πŸ“½οΈ")

        all_files = [f for f in glob.glob("*.png") if ' by ' in f]
        selected_file = st.selectbox("Choose a Dataset:", all_files)

        if selected_file:
            with open(selected_file, 'r', encoding='utf-8') as file:
                sheet = file.read()
            st.markdown(process_sheet(sheet), unsafe_allow_html=True)

    # Trigger a rerun only when the snapshot interval is reached
    if 'last_captured' in st.session_state and time.time() - st.session_state['last_captured'] > snapshot_interval:
        st.experimental_rerun()

if __name__ == "__main__":
    main()