AstosM's picture
Update app.py
ac3dd94 verified
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()