|
import cv2 |
|
import streamlit as st |
|
from streamlit_webrtc import webrtc_streamer |
|
import numpy as np |
|
from PIL import Image |
|
from Moildev import Moildev |
|
import threading |
|
|
|
|
|
class demo_app: |
|
def __init__(self): |
|
|
|
self.moildev = Moildev() |
|
|
|
def brighten_image(self, image, amount): |
|
img_bright = cv2.convertScaleAbs(image, beta=amount) |
|
return img_bright |
|
|
|
def anypoint_image(self, image, alpha, beta, zoom, mode): |
|
any_image = self.moildev.anypoint(image, alpha, beta, zoom, mode) |
|
return any_image |
|
|
|
def main_loop(self): |
|
st.title("MoilDev Demo App") |
|
st.subheader("This app allows you to play with Image filters!") |
|
st.text("We use OpenCV and Streamlit for this demo") |
|
|
|
|
|
source = st.sidebar.radio('Sources:', ('image', 'video', 'stream')) |
|
|
|
if source == 'image': |
|
|
|
zoom = st.sidebar.slider("Zoom", min_value=1.0, max_value=3.5, value=1.2) |
|
alpha = st.sidebar.slider("Alpha", min_value=0.0, max_value=180.0, value=60.0) |
|
beta = st.sidebar.slider("Beta", min_value=0.0, max_value=180.0, value=60.0) |
|
brightness_amount = st.sidebar.slider("Brightness", min_value=-50, max_value=50, value=0) |
|
|
|
|
|
mode_filter = st.sidebar.checkbox('Car Mode') |
|
|
|
|
|
json_file = st.file_uploader("Upload Your Parameter", type=['json']) |
|
if not json_file: |
|
return None |
|
|
|
if json_file: |
|
dev = json_file.name |
|
|
|
self.moildev = Moildev(dev) |
|
|
|
image_file = st.file_uploader("Upload Your Image", type=['jpg', 'png', 'jpeg']) |
|
if not image_file: |
|
return None |
|
|
|
original_image = Image.open(image_file) |
|
original_image = np.array(original_image) |
|
|
|
if mode_filter == 1: |
|
processed_image = self.anypoint_image(original_image, alpha=alpha, beta=beta, zoom=zoom, mode=1) |
|
|
|
else: |
|
processed_image = self.anypoint_image(original_image, alpha=alpha, beta=beta, zoom=zoom, mode=2) |
|
|
|
processed_image = self.brighten_image(processed_image, brightness_amount) |
|
st.text("Original Image vs Processed Image") |
|
st.image([original_image, processed_image]) |
|
|
|
if source == 'video': |
|
|
|
zoom = st.sidebar.slider("Zoom", min_value=1.0, max_value=3.5, value=1.2) |
|
alpha = st.sidebar.slider("Alpha", min_value=0.0, max_value=180.0, value=60.0) |
|
beta = st.sidebar.slider("Beta", min_value=0.0, max_value=180.0, value=60.0) |
|
brightness_amount = st.sidebar.slider("Brightness", min_value=-50, max_value=50, value=0) |
|
|
|
|
|
mode_filter = st.sidebar.checkbox('Car Mode') |
|
|
|
|
|
|
|
|
|
if source == 'stream': |
|
|
|
|
|
zoom = st.sidebar.slider("Zoom", min_value=1.0, max_value=3.5, value=1.2) |
|
alpha = st.sidebar.slider("Alpha", min_value=0.0, max_value=360.0, value=60.0) |
|
beta = st.sidebar.slider("Beta", min_value=0.0, max_value=360.0, value=60.0) |
|
|
|
|
|
mode_filter = st.sidebar.checkbox('Car Mode') |
|
|
|
lock = threading.Lock() |
|
img_container = {"img": None} |
|
|
|
def video_frame_callback(frame): |
|
img = frame.to_ndarray(format="bgr24") |
|
with lock: |
|
img_container["img"] = img |
|
return frame |
|
|
|
ctx = webrtc_streamer(key="example", video_frame_callback=video_frame_callback) |
|
vsn_place = st.empty() |
|
|
|
while ctx.state.playing: |
|
cv2.waitKey(10) |
|
with lock: |
|
img = img_container["img"] |
|
if img is None: |
|
continue |
|
|
|
if mode_filter == 1: |
|
processed_image = self.anypoint_image(img, alpha=alpha, beta=beta, zoom=zoom, mode=1) |
|
vsn_place.image(processed_image) |
|
|
|
else: |
|
processed_image = self.anypoint_image(img, alpha=alpha, beta=beta, zoom=zoom, mode=2) |
|
vsn_place.image(processed_image) |
|
|
|
|
|
if __name__ == '__main__': |
|
da = demo_app() |
|
da.main_loop() |
|
|