renk_tespiti / app.py
PrintAhmet's picture
Create app.py
e56c897 verified
import cv2
import numpy as np
import gradio as gr
# open cv de renk kanalları BGR şekilde sıralanmıştır
# Mavi renk dışındaki her şeyi griye çeviren filtre
def kırmızı(frame):
return apply_isolation(frame,(100,150,50),(150,255,255))
def mavi (frame):
return apply_isolation(frame, (0, 150, 50), (50, 255, 255))
def yeşil (frame):
return apply_isolation(frame, (35, 60, 20), (85, 255, 150))
def apply_isolation(frame, lower_color = (100, 150, 50) , upper_color = (150, 255, 255)):
# Görüntüyü HSV renk uzayına dönüştür
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Belirli renk aralığında kalan pikseller için bir maske oluştur
mask = cv2.inRange(hsv, lower_color, upper_color)
# özel alanları koru, geri kalanları griye çevir
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray_frame_colored = cv2.cvtColor(gray_frame, cv2.COLOR_GRAY2BGR)
# maskeyi kullanarak çıktı oluştur
output = np.where(mask[:, :, None] == 0, gray_frame_colored, frame)
return output
def apply_filter(filter_type,input_image=None):
if filter_type is not None :
frame=input_image
else:
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cap.release()
if not ret:
return "Web kameradan görüntü alınamadı"
if filter_type =="mavi filtre":
return mavi(frame)
elif filter_type =="kırmızı filtre":
return kırmızı(frame)
elif filter_type =="yeşil filtre":
return yeşil(frame)
# Gradio arayüzü tanımlanıyor
with gr.Blocks() as demo:
gr.Markdown("# Mavi Renk Dışında Her Şeyi Griye Çevirme")
# Filtre seçenekleri
filter_type = gr.Dropdown(
label="Filtre Seçin",
choices=["mavi filtre","kırmızı filtre","yeşil filtre"],
value="mavi filtre"
)
# Kullanıcıdan resim yüklemesi beklenen alan
input_image = gr.Image(label="Resim Yükle", type="numpy")
# Uygulanan filtre sonucu gösterilen çıktı görüntüsü
output_image = gr.Image(label="Filtre Uygulandı")
# Görüntü yüklendiğinde filtre fonksiyonunu çağırır
input_image.change(fn=apply_filter, inputs=[filter_type,input_image], outputs=output_image)
# Gradio arayüzünü başlatır
demo.launch()