Spaces:
Sleeping
Sleeping
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 | |