Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
from datetime import datetime | |
import cv2 | |
import pyaudio | |
import wave | |
import imageio | |
import av | |
import moviepy.editor as mp | |
import os | |
import numpy as np | |
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 'ping_code' not in st.session_state: | |
st.session_state['ping_code'] = "" | |
if 'uploaded_files' not in st.session_state: | |
st.session_state['uploaded_files'] = [] | |
# ππΎ 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 | |
}) | |
# ππ¨ Main UI kicks off like a cosmic art show! | |
st.title("πΈποΈ Capture Craze") | |
# ποΈ Sidebar config like a spaceship control panel! | |
with st.sidebar: | |
st.header("ποΈπΈ Tune-Up Zone") | |
library_choice = st.selectbox("π Pick a Tool", ["OpenCV", "PyAudio", "ImageIO", "PyAV", "MoviePy"]) | |
resolution = st.select_slider("π Snap Size", options=["320x240", "640x480", "1280x720"], value="640x480") | |
fps = st.slider("β±οΈ Speed Snap", 1, 60, 30) | |
# π’ DTMF ping code like a retro phone hacker! | |
st.subheader("π Ping-a-Tron") | |
col1, col2, col3, col4 = st.columns(4) | |
with col1: | |
digit1 = st.selectbox("1οΈβ£", [str(i) for i in range(10)], key="d1") | |
with col2: | |
digit2 = st.selectbox("2οΈβ£", [str(i) for i in range(10)], key="d2") | |
with col3: | |
digit3 = st.selectbox("3οΈβ£", [str(i) for i in range(10)], key="d3") | |
with col4: | |
digit4 = st.selectbox("4οΈβ£", [str(i) for i in range(10)], key="d4") | |
ping_code = digit1 + digit2 + digit3 + digit4 | |
st.session_state['ping_code'] = ping_code | |
st.write(f"π Code: {ping_code}") | |
# πΈπ Library showcase like a tech talent show! | |
st.header("πΈποΈ Tool Titans") | |
# 1. OpenCV - π· Pixel party time! | |
with st.expander("1οΈβ£ π· OpenCV Fiesta"): | |
st.write("π₯ Snap Star: Real-time pixel magic!") | |
st.subheader("π₯ Top Tricks") | |
st.write("πΈπ₯ Video Snap") | |
if st.button("π¬ Go Live", key="opencv_1"): | |
# π·π₯ Snags webcam like a paparazzi pro! | πΈ cap = cv2.VideoCapture(0) - Grabs live feed faster than gossip spreads! | |
cap = cv2.VideoCapture(0) | |
frame_placeholder = st.empty() | |
for _ in range(50): | |
ret, frame = cap.read() | |
if ret: | |
frame_placeholder.image(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) | |
cap.release() | |
st.write("ποΈβ¨ Gray Snap") | |
if st.button("π· Save Gray", key="opencv_2"): | |
# ποΈβ¨ Saves grayscale like an artsy ghost! | π cv2.imwrite("gray.jpg", cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)) - Ditches color like a moody poet! | |
cap = cv2.VideoCapture(0) | |
ret, frame = cap.read() | |
if ret: | |
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
file_path = f"opencv_gray_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg" | |
cv2.imwrite(file_path, gray) | |
save_to_history("Image", file_path) | |
st.image(file_path, caption="π€ Gray Vibes") | |
cap.release() | |
st.write("π΅οΈββοΈπ Edge Snap") | |
if st.button("πͺ Edge It", key="opencv_3"): | |
# π΅οΈββοΈπ Finds edges sharper than a detectiveβs wit! | πΌοΈ edges = cv2.Canny(frame, 100, 200) - Outlines like a crime scene sketch! | |
cap = cv2.VideoCapture(0) | |
ret, frame = cap.read() | |
if ret: | |
edges = cv2.Canny(frame, 100, 200) | |
file_path = f"opencv_edges_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg" | |
cv2.imwrite(file_path, edges) | |
save_to_history("Image", file_path) | |
st.image(file_path, caption="π Edge Lord") | |
cap.release() | |
# 2. PyAudio - ποΈ Soundwave showdown! | |
with st.expander("2οΈβ£ ποΈ PyAudio Party"): | |
st.write("π Audio Ace: Sound control ninja!") | |
st.subheader("π₯ Top Tricks") | |
st.write("π€π©οΈ Record Jam") | |
if st.button("π΅ Grab Sound", key="pyaudio_1"): | |
# π€π©οΈ Records like a storm-chasing bard! | ποΈ stream = pyaudio.PyAudio().open(...) - Captures audio like thunder in a bottle! | |
p = pyaudio.PyAudio() | |
stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=1024) | |
frames = [stream.read(1024) for _ in range(int(44100 / 1024 * 3))] | |
stream.stop_stream() | |
stream.close() | |
p.terminate() | |
file_path = f"pyaudio_rec_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav" | |
with wave.open(file_path, 'wb') as wf: | |
wf.setnchannels(1) | |
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16)) | |
wf.setframerate(44100) | |
wf.writeframes(b''.join(frames)) | |
save_to_history("Audio", file_path) | |
st.audio(file_path) | |
st.write("π΅οΈββοΈπ‘ Mic Spy") | |
if st.button("π List Mics", key="pyaudio_2"): | |
# π΅οΈββοΈπ‘ Spies mics like a gossip queen! | π‘ info = pyaudio.PyAudio().get_device_info_by_index(0) - Sniffs out devices like a tech bloodhound! | |
p = pyaudio.PyAudio() | |
devices = [p.get_device_info_by_index(i) for i in range(p.get_device_count())] | |
st.write("ποΈ Mic Squad:", devices) | |
p.terminate() | |
st.write("πΆπΎ Sound Bite") | |
if st.button("π§ Quick Grab", key="pyaudio_3"): | |
# πΆπΎ Snags audio like a DJ mid-set! | π΅ data = stream.read(1024) - Bites sound faster than a snack attack! | |
p = pyaudio.PyAudio() | |
stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=1024) | |
data = stream.read(1024) | |
st.write("π΅ Bytes Nabbed:", len(data)) | |
stream.stop_stream() | |
stream.close() | |
p.terminate() | |
# 3. ImageIO - πΌοΈ Pixel playtime! | |
with st.expander("3οΈβ£ πΉ ImageIO Bash"): | |
st.write("π₯ Easy Snap: Pixel lightweight champ!") | |
st.subheader("π₯ Top Tricks") | |
st.write("πΉπ Frame Peek") | |
if st.button("πΈ Snap It", key="imageio_1"): | |
# πΉπ Grabs frames like a shy stalker! | π· reader = imageio.get_reader('<video0>') - Sneaks a peek at your cam! | |
reader = imageio.get_reader('<video0>') | |
frame = reader.get_next_data() | |
file_path = f"imageio_frame_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg" | |
imageio.imwrite(file_path, frame) | |
save_to_history("Image", file_path) | |
st.image(file_path) | |
st.write("π¨οΈπ Crunch Snap") | |
if st.button("π Slim Pic", key="imageio_2"): | |
# π¨οΈπ Compresses like a diet guru! | πΌοΈ imageio.imwrite("pic.jpg", frame, quality=85) - Shrinks pics like a tight squeeze! | |
reader = imageio.get_reader('<video0>') | |
frame = reader.get_next_data() | |
file_path = f"imageio_comp_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg" | |
imageio.imwrite(file_path, frame, quality=85) | |
save_to_history("Image", file_path) | |
st.image(file_path, caption="π Slim Fit") | |
st.write("ποΈπ€‘ GIF Blast") | |
if st.button("π GIF It", key="imageio_3"): | |
# ποΈπ€‘ Makes GIFs like a circus juggler! | π₯ imageio.mimwrite("gif.gif", [f1, f2], fps=5) - Flips frames into fun! | |
reader = imageio.get_reader('<video0>') | |
frames = [reader.get_next_data() for _ in range(10)] | |
file_path = f"imageio_gif_{datetime.now().strftime('%Y%m%d_%H%M%S')}.gif" | |
imageio.mimwrite(file_path, frames, fps=5) | |
save_to_history("GIF", file_path) | |
st.image(file_path, caption="π€‘ GIF Party") | |
# 4. PyAV - π¬ AV rock fest! | |
with st.expander("4οΈβ£ π¬ PyAV Rave"): | |
st.write("π₯ AV King: FFmpeg-powered chaos!") | |
st.subheader("π₯ Top Tricks") | |
st.write("π₯π₯ Video Jam") | |
if st.button("π¬ Roll It", key="pyav_1"): | |
# π₯π₯ Captures like a rockstar shredding! | πΉ container = av.open('/dev/video0') - Rocks the cam like a live gig! | |
container = av.open('/dev/video0') | |
stream = container.streams.video[0] | |
file_path = f"pyav_vid_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4" | |
output = av.open(file_path, 'w') | |
out_stream = output.add_stream('h264', rate=30) | |
for i, frame in enumerate(container.decode(stream)): | |
if i > 30: break | |
out_frame = frame.reformat(out_stream.width, out_stream.height) | |
output.mux(out_stream.encode(out_frame)) | |
output.close() | |
container.close() | |
save_to_history("Video", file_path) | |
st.video(file_path) | |
st.write("π¬πΏ Audio Rip") | |
if st.button("π΅ Snag Sound", key="pyav_2"): | |
# π¬πΏ Pulls audio like a popcorn thief! | ποΈ frames = [f for f in av.open('vid.mp4').decode()] - Steals sound like a ninja! | |
container = av.open('/dev/video0', 'r', format='v4l2') | |
file_path = f"pyav_audio_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav" | |
output = av.open(file_path, 'w') | |
out_stream = output.add_stream('pcm_s16le', rate=44100) | |
for packet in container.demux(): | |
for frame in packet.decode(): | |
if frame.is_corrupt: continue | |
if hasattr(frame, 'to_ndarray'): | |
output.mux(out_stream.encode(frame)) | |
if os.path.getsize(file_path) > 100000: break | |
output.close() | |
container.close() | |
save_to_history("Audio", file_path) | |
st.audio(file_path) | |
st.write("π€β¨ Flip Snap") | |
if st.button("π Twist It", key="pyav_3"): | |
# π€β¨ Flips colors like a rebel teen! | π¨ graph = av.filter.Graph().add("negate").pull() - Inverts like a goth makeover! | |
container = av.open('/dev/video0') | |
stream = container.streams.video[0] | |
file_path = f"pyav_filter_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4" | |
output = av.open(file_path, 'w') | |
out_stream = output.add_stream('h264', rate=30) | |
graph = av.filter.Graph() | |
filt = graph.add("negate") | |
for i, frame in enumerate(container.decode(stream)): | |
if i > 30: break | |
filt.push(frame) | |
out_frame = filt.pull() | |
output.mux(out_stream.encode(out_frame.reformat(out_stream.width, out_stream.height))) | |
output.close() | |
container.close() | |
save_to_history("Video", file_path) | |
st.video(file_path, caption="π€ Flip Vibes") | |
# 5. MoviePy - π₯ Editing extravaganza! | |
with st.expander("5οΈβ£ πΌ MoviePy Gala"): | |
st.write("π₯ Edit Queen: Video diva vibes!") | |
st.subheader("π₯ Top Tricks") | |
st.write("ποΈπ Frame Dance") | |
if st.button("π¬ Spin It", key="moviepy_1"): | |
# ποΈπ Twirls frames like a dance diva! | π₯ clip = mp.ImageSequenceClip([f1, f2], fps=15) - Makes vids like a pro choreographer! | |
cap = cv2.VideoCapture(0) | |
frames = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(30)] | |
cap.release() | |
file_path = f"moviepy_seq_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4" | |
clip = mp.ImageSequenceClip(frames, fps=15) | |
clip.write - init_block_and_save_video_file(file_path) | |
save_to_history("VideoΨ―ΫΩ st.session_state['file_history'].append({"Timestamp": timestamp, "Type": "Video", "Path": file_path}) | |
st.session_state['file_history'].append({"Timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "Type": "Video", "Path": file_path}) | |
st.video(file_path) | |
st.write("ππ Size Snap") | |
if st.button("βοΈ Trim It", key="moviepy_2"): | |
# ππ Resizes like a royal tailor! | βοΈ clip = mp.VideoFileClip("vid.mp4").resize((320, 240)) - Fits vids like a bespoke suit! | |
cap = cv2.VideoCapture(0) | |
frames = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(30)] | |
cap.release() | |
temp_path = "temp.mp4" | |
mp.ImageSequenceClip(frames, fps=15).write_videofile(temp_path) | |
clip = mp.VideoFileClip(temp_path).resize((320, 240)) | |
file_path = f"moviepy_resized_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4" | |
clip.write_videofile(file_path) | |
save_to_history("Video", file_path) | |
st.video(file_path, caption="π Tiny King") | |
st.write("π¬π€ Join Jam") | |
if st.button("π Link It", key="moviepy_3"): | |
# π¬π€ Stitches clips like a love guru! | π₯ final = mp.concatenate_videoclips([clip1, clip2]) - Hooks up vids like a matchmaker! | |
cap = cv2.VideoCapture(0) | |
frames1 = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(15)] | |
frames2 = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(15)] | |
cap.release() | |
clip1 = mp.ImageSequenceClip(frames1, fps=15) | |
clip2 = mp.ImageSequenceClip(frames2, fps=15) | |
final_clip = mp.concatenate_videoclips([clip1, clip2]) | |
file_path = f"moviepy_concat_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4" | |
final_clip.write_videofile(file_path) | |
save_to_history("Video", file_path) | |
st.video(file_path, caption="π€ Duo Dance") | |
# π Upload zone like a media drop party! | |
st.header("π₯π Drop Zone") | |
uploaded_files = st.file_uploader("πΈπ΅π₯ Toss Media", accept_multiple_files=True, type=['jpg', 'png', 'mp4', 'wav', 'mp3']) | |
if uploaded_files: | |
for uploaded_file in uploaded_files: | |
file_type = uploaded_file.type.split('/')[0] | |
file_path = f"uploaded_{uploaded_file.name}" | |
with open(file_path, 'wb') as f: | |
f.write(uploaded_file.read()) | |
st.session_state['uploaded_files'].append({ | |
"Name": uploaded_file.name, | |
"Type": file_type, | |
"Path": file_path | |
}) | |
# πΌοΈπ΅π₯ Gallery like a media circus! | |
st.header("πͺ Media Mania") | |
if st.session_state['uploaded_files']: | |
images = [f for f in st.session_state['uploaded_files'] if f['Type'] == 'image'] | |
audios = [f for f in st.session_state['uploaded_files'] if f['Type'] == 'audio'] | |
videos = [f for f in st.session_state['uploaded_files'] if f['Type'] == 'video'] | |
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['Name'], use_column_width=True) | |
if audios: | |
st.subheader("π΅ Sound Splash") | |
for audio in audios: | |
st.audio(audio['Path'], format=f"audio/{audio['Name'].split('.')[-1]}") | |
st.write(f"π€ {audio['Name']}") | |
if videos: | |
st.subheader("π₯ Vid Vortex") | |
for video in videos: | |
st.video(video['Path']) | |
st.write(f"π¬ {video['Name']}") | |
else: | |
st.write("π« No loot 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!") |