Update app.py
Browse files
app.py
CHANGED
|
@@ -24,10 +24,6 @@ import datetime
|
|
| 24 |
import math # Import math for log/exp calculations in gamma correction
|
| 25 |
import gradio as gr
|
| 26 |
from typing import Optional
|
| 27 |
-
from io import BytesIO
|
| 28 |
-
input_image = BytesIO(input_image)
|
| 29 |
-
img = cv2.imdecode(np.frombuffer(input_image.read(), np.uint8), cv2.IMREAD_COLOR)
|
| 30 |
-
|
| 31 |
|
| 32 |
# Nastavení výchozích cest pro vstupní a výstupní složky (pro Hugging Face/Gradio prostředí)
|
| 33 |
DEFAULT_INPUT_PATH = "./input_images/" # Můžete změnit dle potřeby
|
|
@@ -611,23 +607,24 @@ class ImageProcessor:
|
|
| 611 |
return None, None, None
|
| 612 |
|
| 613 |
|
| 614 |
-
def
|
| 615 |
-
"""Zvýraznění teplých oblastí pomocí HSV odstínu."""
|
| 616 |
if self.image is None: return None, None # Vrátit None pro každou masku
|
| 617 |
-
logging.info("Zvyraznuji teple oblasti v obraze...")
|
| 618 |
try:
|
| 619 |
hsv = cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV)
|
| 620 |
h, _, _ = cv2.split(hsv)
|
| 621 |
-
# Definovat
|
| 622 |
# Odstín je v OpenCV pro 8-bitové obrazy typicky 0-180
|
| 623 |
warm_mask_part1 = cv2.inRange(h, 0, 15) # Červené a oranžové (0-15)
|
| 624 |
warm_mask_part2 = cv2.inRange(h, 165, 180) # Další červené (165-180)
|
| 625 |
warm_mask = cv2.bitwise_or(warm_mask_part1, warm_mask_part2) # Kombinovat obě části teplé masky
|
|
|
|
| 626 |
|
| 627 |
-
return warm_mask # Vrací
|
| 628 |
except Exception as e:
|
| 629 |
-
logging.error(f"Chyba pri zvraznovani teplych oblasti: {e}", exc_info=True)
|
| 630 |
-
return None
|
| 631 |
|
| 632 |
|
| 633 |
def detect_dominant_color(self, k=3):
|
|
@@ -1043,7 +1040,7 @@ class ImageProcessor:
|
|
| 1043 |
r, g, b = self.extract_color_channels()
|
| 1044 |
h, s, v = self.convert_to_hsv()
|
| 1045 |
l, a, lab_b = self.convert_to_lab()
|
| 1046 |
-
warm_mask = self.
|
| 1047 |
dominant_color_img = self.detect_dominant_color() # Toto vrací barevný obrazek nebo None
|
| 1048 |
yellow_mask = self.extract_color_mask([20, 50, 50], [40, 255, 255], name="yellow") # Příklad masky pro žlutou
|
| 1049 |
saturation_boosted_gray = self.boost_saturation() # Toto vrací šedotónový nebo None
|
|
@@ -1335,44 +1332,15 @@ def process_image_gradio(input_image):
|
|
| 1335 |
return [input_image, input_image]
|
| 1336 |
|
| 1337 |
|
| 1338 |
-
def
|
| 1339 |
-
|
| 1340 |
-
|
| 1341 |
-
|
| 1342 |
-
|
| 1343 |
-
|
| 1344 |
-
|
| 1345 |
-
|
| 1346 |
-
|
| 1347 |
-
sharpness = cv2.Laplacian(img, cv2.CV_64F).var()
|
| 1348 |
-
# Výstup jako text
|
| 1349 |
-
return f"Jas: {brightness:.2f}\nKontrast: {contrast:.2f}\nOstrost: {sharpness:.2f}"
|
| 1350 |
|
| 1351 |
-
|
| 1352 |
-
|
| 1353 |
-
import cv2
|
| 1354 |
-
import numpy as np
|
| 1355 |
-
img = cv2.imdecode(np.frombuffer(input_image.read(), np.uint8), cv2.IMREAD_COLOR)
|
| 1356 |
-
# Jednoduché doostření (příklad, nahraď vlastní logikou)
|
| 1357 |
-
kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]])
|
| 1358 |
-
sharpened = cv2.filter2D(img, -1, kernel)
|
| 1359 |
-
_, buf = cv2.imencode('.png', sharpened)
|
| 1360 |
-
return buf.tobytes()
|
| 1361 |
-
|
| 1362 |
-
|
| 1363 |
-
with gr.Blocks() as demo:
|
| 1364 |
-
gr.Markdown("# Smart Image Sharpening & Analysis")
|
| 1365 |
-
with gr.Tab("Analýza obrázku"):
|
| 1366 |
-
with gr.Row():
|
| 1367 |
-
inp = gr.File(label="Nahrát obrázek")
|
| 1368 |
-
out = gr.Textbox(label="Výsledky analýzy")
|
| 1369 |
-
btn = gr.Button("Analyzovat obrázek")
|
| 1370 |
-
btn.click(analyze_image, inputs=inp, outputs=out)
|
| 1371 |
-
with gr.Tab("Doostření obrázku"):
|
| 1372 |
-
with gr.Row():
|
| 1373 |
-
inp2 = gr.File(label="Nahrát obrázek")
|
| 1374 |
-
out2 = gr.Image(label="Doostřený obrázek")
|
| 1375 |
-
btn2 = gr.Button("Doostřit obrázek")
|
| 1376 |
-
btn2.click(sharpen_image, inputs=inp2, outputs=out2)
|
| 1377 |
-
|
| 1378 |
-
demo.launch()
|
|
|
|
| 24 |
import math # Import math for log/exp calculations in gamma correction
|
| 25 |
import gradio as gr
|
| 26 |
from typing import Optional
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
| 28 |
# Nastavení výchozích cest pro vstupní a výstupní složky (pro Hugging Face/Gradio prostředí)
|
| 29 |
DEFAULT_INPUT_PATH = "./input_images/" # Můžete změnit dle potřeby
|
|
|
|
| 607 |
return None, None, None
|
| 608 |
|
| 609 |
|
| 610 |
+
def highlight_warm_cool_areas(self):
|
| 611 |
+
"""Zvýraznění teplých a studených oblastí pomocí HSV odstínu."""
|
| 612 |
if self.image is None: return None, None # Vrátit None pro každou masku
|
| 613 |
+
logging.info("Zvyraznuji teple a studene oblasti v obraze...")
|
| 614 |
try:
|
| 615 |
hsv = cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV)
|
| 616 |
h, _, _ = cv2.split(hsv)
|
| 617 |
+
# Definovat rozsahy teplých a studených barev v odstínu (Hue)
|
| 618 |
# Odstín je v OpenCV pro 8-bitové obrazy typicky 0-180
|
| 619 |
warm_mask_part1 = cv2.inRange(h, 0, 15) # Červené a oranžové (0-15)
|
| 620 |
warm_mask_part2 = cv2.inRange(h, 165, 180) # Další červené (165-180)
|
| 621 |
warm_mask = cv2.bitwise_or(warm_mask_part1, warm_mask_part2) # Kombinovat obě části teplé masky
|
| 622 |
+
cool_mask = cv2.inRange(h, 90, 130) # Modré a azurové
|
| 623 |
|
| 624 |
+
return warm_mask, cool_mask # Vrací šedotónové binární masky (uint8)
|
| 625 |
except Exception as e:
|
| 626 |
+
logging.error(f"Chyba pri zvraznovani teplych/studenych oblasti: {e}", exc_info=True)
|
| 627 |
+
return None, None
|
| 628 |
|
| 629 |
|
| 630 |
def detect_dominant_color(self, k=3):
|
|
|
|
| 1040 |
r, g, b = self.extract_color_channels()
|
| 1041 |
h, s, v = self.convert_to_hsv()
|
| 1042 |
l, a, lab_b = self.convert_to_lab()
|
| 1043 |
+
warm_mask, cool_mask = self.highlight_warm_cool_areas()
|
| 1044 |
dominant_color_img = self.detect_dominant_color() # Toto vrací barevný obrazek nebo None
|
| 1045 |
yellow_mask = self.extract_color_mask([20, 50, 50], [40, 255, 255], name="yellow") # Příklad masky pro žlutou
|
| 1046 |
saturation_boosted_gray = self.boost_saturation() # Toto vrací šedotónový nebo None
|
|
|
|
| 1332 |
return [input_image, input_image]
|
| 1333 |
|
| 1334 |
|
| 1335 |
+
def main():
|
| 1336 |
+
demo = gr.Interface(
|
| 1337 |
+
fn=process_image_gradio,
|
| 1338 |
+
inputs=gr.Image(type="pil", label="Nahrajte obrázek"),
|
| 1339 |
+
outputs=[gr.Image(type="pil", label="Původní obrázek"), gr.Image(type="pil", label="Ostřený obrázek")],
|
| 1340 |
+
title="ImageHub - Zpracování a doostření obrazu",
|
| 1341 |
+
description="Profesionální skript pro zpracování a doostření obrazu. Vložte obrázek a zobrazí se výsledek."
|
| 1342 |
+
)
|
| 1343 |
+
demo.launch()
|
|
|
|
|
|
|
|
|
|
| 1344 |
|
| 1345 |
+
if __name__ == "__main__":
|
| 1346 |
+
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|