Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import cv2 | |
| import mediapipe as mp | |
| import torch | |
| import torchaudio | |
| from scipy.signal import chirp | |
| import plotly.graph_objects as go | |
| # Load MediaPipe Hand Tracking | |
| mp_hands = mp.solutions.hands | |
| mp_drawing = mp.solutions.drawing_utils | |
| hands = mp_hands.Hands(min_detection_confidence=0.7, min_tracking_confidence=0.7) | |
| # Generate Quantum Wave Sound | |
| def generate_wave(frequency=220, duration=3): | |
| sample_rate = 44100 | |
| t = np.linspace(0, duration, int(sample_rate * duration)) | |
| waveform = chirp(t, f0=frequency, f1=frequency*2, t1=duration, method='quadratic') | |
| return waveform, sample_rate | |
| # Process Hand Tracking | |
| def process_frame(frame): | |
| try: | |
| if frame is None: | |
| return np.zeros((480, 640, 3), dtype=np.uint8), 0 # Return empty image if no frame | |
| frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| results = hands.process(frame_rgb) | |
| rotation = 0 | |
| if results.multi_hand_landmarks: | |
| for hand_landmarks in results.multi_hand_landmarks: | |
| mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS) | |
| x = hand_landmarks.landmark[mp_hands.HandLandmark.WRIST].x | |
| rotation = (x - 0.5) * 360 # Rotate black hole based on hand movement | |
| return frame, rotation # Return processed frame + rotation angle | |
| except Exception as e: | |
| print(f"Error processing frame: {e}") | |
| return np.zeros((480, 640, 3), dtype=np.uint8), 0 # Return blank image if error occurs | |
| # Create Black Hole Visualization | |
| def black_hole_visualization(rotation): | |
| x = np.linspace(-5, 5, 100) | |
| y = np.linspace(-5, 5, 100) | |
| X, Y = np.meshgrid(x, y) | |
| Z = np.sin(X**2 + Y**2 - rotation * 0.01) # Distorted wave effect | |
| fig = go.Figure(data=[go.Surface(z=Z)]) | |
| fig.update_layout(title="Black Hole Distortion", autosize=True) | |
| return fig | |
| # Main function integrating webcam, black hole, and sound | |
| def run_app(webcam): | |
| frame, rotation = process_frame(webcam) | |
| black_hole_figure = black_hole_visualization(rotation) | |
| wave_data, sr = generate_wave(frequency=200 + rotation) | |
| return frame, black_hole_figure, (wave_data, sr) | |
| # Launch Gradio UI (Fixed Input for New Gradio Versions) | |
| iface = gr.Interface( | |
| fn=run_app, | |
| inputs=gr.Image(type="numpy", label="Webcam Feed"), | |
| outputs=[gr.Image(type="numpy", label="Processed Frame"), | |
| gr.Plot(label="Black Hole Distortion"), | |
| gr.Audio(label="Quantum Sound Wave")], | |
| live=True | |
| ) | |
| iface.launch() | |