Spaces:
Sleeping
Sleeping
File size: 1,616 Bytes
fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec ac3dd94 fbdccec |
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 |
import cv2
import numpy as np
import gradio as gr
background = None
def invisibility(frame):
global background
# Convert input (PIL → numpy BGR)
frame = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
# Flip frame
frame = cv2.flip(frame, 1)
# Initialize background
if background is None:
background = frame.copy()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Red color ranges
lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
cloak_mask = mask1 + mask2
# Noise removal
cloak_mask = cv2.morphologyEx(cloak_mask, cv2.MORPH_OPEN, np.ones((3, 3), np.uint8), iterations=2)
cloak_mask = cv2.dilate(cloak_mask, np.ones((3, 3), np.uint8), iterations=1)
# Invert mask
inverse_mask = cv2.bitwise_not(cloak_mask)
# Apply masks
cloak_area = cv2.bitwise_and(background, background, mask=cloak_mask)
non_cloak_area = cv2.bitwise_and(frame, frame, mask=inverse_mask)
final_output = cv2.addWeighted(cloak_area, 1, non_cloak_area, 1, 0)
return cv2.cvtColor(final_output, cv2.COLOR_BGR2RGB)
demo = gr.Interface(
fn=invisibility,
inputs=gr.Image(label="Webcam Frame", type="pil"),
outputs=gr.Image(label="Cloak Output"),
live=True,
title="🧙 Magic Invisibility Cloak",
description="Wear a red cloth and vanish like Harry Potter!"
)
if __name__ == "__main__":
demo.launch()
|