Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import cv2 # type: ignore | |
| def transform_cv2(frame, transform): | |
| if transform == "cartoon": | |
| # prepare color | |
| img_color = cv2.pyrDown(cv2.pyrDown(frame)) | |
| for _ in range(6): | |
| img_color = cv2.bilateralFilter(img_color, 9, 9, 7) | |
| img_color = cv2.pyrUp(cv2.pyrUp(img_color)) | |
| # prepare edges | |
| img_edges = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) | |
| img_edges = cv2.adaptiveThreshold( | |
| cv2.medianBlur(img_edges, 7), | |
| 255, | |
| cv2.ADAPTIVE_THRESH_MEAN_C, | |
| cv2.THRESH_BINARY, | |
| 9, | |
| 2, | |
| ) | |
| img_edges = cv2.cvtColor(img_edges, cv2.COLOR_GRAY2RGB) | |
| # combine color and edges | |
| img = cv2.bitwise_and(img_color, img_edges) | |
| return img | |
| elif transform == "edges": | |
| # perform edge detection | |
| img = cv2.cvtColor(cv2.Canny(frame, 100, 200), cv2.COLOR_GRAY2BGR) | |
| return img | |
| else: | |
| return np.flipud(frame) | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| with gr.Column(): | |
| transform = gr.Dropdown( | |
| choices=["cartoon", "edges", "flip"], | |
| value="flip", | |
| label="Transformation", | |
| ) | |
| input_img = gr.Image(sources=["webcam"], type="numpy") | |
| with gr.Column(): | |
| output_img = gr.Image(streaming=True) | |
| dep = input_img.stream( | |
| transform_cv2, | |
| [input_img, transform], | |
| [output_img], | |
| time_limit=30, | |
| stream_every=0.1, | |
| concurrency_limit=30, | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |