ErenKontas's picture
Upload app.py
bc5c57f verified
import cv2 as cv
import numpy as np
import gradio as gr
def filters(image, filter_type, Brightness, Contrast, Saturation, Hue_Shift, Gamma, Blur_Level):
image = np.array(image, dtype=np.float32) / 255.0 # Normalize the image
# TR = Görüntüyü 0-1 arasında normalize eder
# EN = Normalizes the image to a range of 0 to 1
# Brightness adjustment
image = np.clip(image * Brightness, 0, 1)
# TR = Parlaklık değerini ayarlar
# EN = Adjusts the brightness value
# Contrast adjustment
image = np.clip((image - 0.5) * Contrast + 0.5, 0, 1)
# TR = Kontrast değerini ayarlar
# EN = Adjusts the contrast value
# Saturation adjustment (applies only to BGR images)
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)
hsv_image[..., 1] = np.clip(hsv_image[..., 1] * Saturation, 0, 1)
image = cv.cvtColor(hsv_image, cv.COLOR_HSV2BGR)
# TR = Doygunluk seviyesini ayarlar (sadece BGR görüntülerine uygulanır)
# EN = Adjusts the saturation level (applies only to BGR images)
# Hue shift
hsv_image[..., 0] = (hsv_image[..., 0] + Hue_Shift) % 180
image = cv.cvtColor(hsv_image, cv.COLOR_HSV2BGR)
# TR = Renk tonunu kaydırır
# EN = Shifts the hue of the image
# Gamma adjustment
image = np.clip(image ** (1.0 / Gamma), 0, 1)
# TR = Gamma ayarını yapar
# EN = Adjusts the gamma of the image
# Blur level
if Blur_Level > 0:
ksize = int(Blur_Level * 2 + 1)
image = cv.GaussianBlur(image, (ksize, ksize), 0)
# TR = Bulanıklık seviyesini ayarlar
# EN = Adjusts the blur level of the image
image = (image * 255).astype(np.uint8) # Convert to uint8 format
# TR = Görüntüyü uint8 formatına dönüştürür
# EN = Converts the image back to uint8 format
if filter_type == "Gray Scale":
filtered_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
elif filter_type == "Sepia":
filtered_image = cv.applyColorMap(cv.cvtColor(image, cv.COLOR_BGR2GRAY), cv.COLORMAP_AUTUMN)
elif filter_type == "X-Ray":
filtered_image = cv.bitwise_not(image)
elif filter_type == "Blur":
filtered_image = cv.GaussianBlur(image, (15, 15), 0)
elif filter_type == "Sketch":
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
filtered_image = cv.divide(gray, cv.GaussianBlur(gray, (21, 21), 0), scale=256)
elif filter_type == "Sharpen":
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
filtered_image = cv.filter2D(image, -1, kernel)
elif filter_type == "Emboss":
kernel = np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]])
filtered_image = cv.filter2D(image, -1, kernel)
elif filter_type == "Edge Detection":
filtered_image = cv.Canny(image, 100, 200)
elif filter_type == "Pixel Art":
small = cv.resize(image, (32, 32), interpolation=cv.INTER_LINEAR)
filtered_image = cv.resize(small, image.shape[:2][::-1], interpolation=cv.INTER_NEAREST)
elif filter_type == "Mosaic":
small = cv.resize(image, (16, 16), interpolation=cv.INTER_LINEAR)
filtered_image = cv.resize(small, image.shape[:2][::-1], interpolation=cv.INTER_NEAREST)
elif filter_type == "Rainbow":
filtered_image = cv.applyColorMap(image, cv.COLORMAP_JET)
elif filter_type == "Night Vision":
filtered_image = cv.applyColorMap(cv.cvtColor(image, cv.COLOR_BGR2GRAY), cv.COLORMAP_OCEAN)
elif filter_type == "Matrix Effect":
filtered_image = image.copy()
elif filter_type == "Wave Effect":
filtered_image = cv.GaussianBlur(image, (21, 21), 0)
elif filter_type == "Timestamp":
filtered_image = image.copy()
elif filter_type == "Glitch Effect":
filtered_image = image.copy()
elif filter_type == "Pop Art":
filtered_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)
elif filter_type == "Oil Paint":
filtered_image = cv.GaussianBlur(image, (21, 21), 0)
elif filter_type == "Texture":
filtered_image = cv.GaussianBlur(image, (21, 21), 0)
else:
filtered_image = image # Default to the original image
# TR = Farklı filtre türlerine göre filtreyi uygular
# EN = Applies the selected filter based on the filter type
return filtered_image
# Interface setup
with gr.Blocks() as demo:
gr.Markdown("**Live Color Filters**")
# TR = Arayüz başlığını belirler
# EN = Sets the title of the interface
filter_dropdown = gr.Dropdown(
["Gray Scale", "Sepia", "X-Ray", "Blur",
"Sketch", "Sharpen", "Emboss", "Edge Detection",
"Pixel Art", "Mosaic", "Rainbow", "Night Vision",
"Matrix Effect", "Wave Effect", "Timestamp", "Glitch Effect",
"Pop Art", "Oil Paint", "Texture"],
label="Select Filter",
)
# TR = Kullanıcıya filtre türü seçme imkanı tanır
# EN = Provides a dropdown for the user to select a filter type
Brightness = gr.Slider(minimum=0.5, maximum=5.0, value=1.0, label="Brightness")
Contrast = gr.Slider(minimum=-100, maximum=100, value=50, label="Contrast")
Saturation = gr.Slider(minimum=0.0, maximum=5.0, value=1.0, label="Saturation")
Hue_Shift = gr.Slider(minimum=-100, maximum=100, value=0, label="Hue Shift")
Gamma = gr.Slider(minimum=0, maximum=5, value=1.0, label="Gamma")
Blur_Level = gr.Slider(minimum=0, maximum=10, value=1, label="Blur Level")
# TR = Kullanıcıya görsel düzenlemeleri yapma seçenekleri tanır
# EN = Provides sliders for adjusting image properties
image_input = gr.Image(type='pil', label='Resmi Yükle')
image_output = gr.Image(type='numpy', label='Filtrelenmiş Resim')
# TR = Görsel yükleme ve çıktıyı görüntüleme seçenekleri sunar
# EN = Provides options for uploading the image and displaying the output
btn = gr.Button("Filtreyi Uygula")
btn.click(fn=filters, inputs=[image_input, filter_dropdown, Brightness, Contrast, Saturation, Hue_Shift, Gamma, Blur_Level], outputs=image_output)
# TR = Filtreyi uygulamak için bir buton ekler
# EN = Adds a button to apply the selected filter
with gr.Accordion('Filtrelerin Açıklanması',open=False):
# Açıklama kısmı
gr.Markdown("""
**Temel Filtreler**
- **Gri Tonlama**: Görüntüyü siyah-beyaz tonlarında, klasik bir tarzda dönüştürür
- **Sepya**: Fotoğrafa eski bir fotoğraf havası veren, sıcak kahverengi tonları ekler
- **Röntgen**: Görüntüye ters ışıklandırma ekleyerek X-ray taraması etkisi oluşturur
- **Bulanıklaştır**: Görüntüde yumuşak bir bulanıklık oluşturarak detayları azaltır.
**Klasik Filtreler Listesi**
- **Karakalem Efekti**: Görüntüyü karakalem çizimi gibi gösterir
- **Keskinleştir**: Görüntüdeki detayları belirginleştirir
- **Kabartma**: Görüntüye kabartma ve derinlik efekti ekler
- **Kenar Algılama**: Görüntüdeki kenar hatlarını vurgular
**Yaratıcı Filtreler**
- **Piksel Sanatı**: Görüntüyü retro piksel tarzında küçük karelere böler
- **Mozaik Efekti**: Fotoğrafı küçük mozaik parçalarına böler
- **Gökkuşağı**: Görüntüye renkli gökkuşağı efektleri ekler
- **Gece Görüşü**: Gece görüş cihazı efektini simüle eder
**Özel Efektler**
- **Matrix Efekti**: Matrix film efekti
- **Dalga Efekti**: Görüntüye su dalgası benzeri kıvrımlı bir bozulma ekler, dalgalanma hissi yaratır
- **Zaman Damgası**: Fotoğrafın üzerine çekildiği tarih ve saati ekleyerek nostaljik bir hava verir
- **Glitch Efekti**: Dijital bozulmalar ekleyerek, fotoğrafa retro tarzda bir hata efekti katar
**Sanatsal Filtreler**
- **Pop Art**: Canlı ve kontrastlı renklerle, Andy Warhol tarzı ikonik pop-art efekti oluşturur
- **Yağlı Boya**: Fırça darbelerini simüle ederek görüntüye yağlı boya tablosu görünümü kazandırır
- **Doku Efekti**: Görüntüye yüzey dokusu ekleyerek dokunsal bir derinlik ve sanat eseri havası verir
""")
# TR = Filtre açıklamalarını ekler
# EN = Adds filter descriptions to the interface
if __name__ == "__main__":
demo.launch(share=True)
# TR = Uygulamayı başlatır
# EN = Launches the application