import os from dotenv import load_dotenv from transformers import pipeline from PIL import Image import gradio as gr from openai import OpenAI import torch import scipy import numpy # πΉ νκ²½ λ³μ λ‘λ load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) # πΉ κ°μ²΄ νμ§ λͺ¨λΈ λ‘λ© detector = pipeline( task="zero-shot-object-detection", model="google/owlv2-base-patch16-ensemble" ) # πΉ μ¬λ£ λΌλ²¨ λ° λ²μ candidate_labels = [ "lettuce","cheese","bread","tomato","ham" ] label_ko = { "cheese": "μΉμ¦", "bread":"λΉ΅", "tomato":"ν λ§ν ","ham":"ν","lettuce":"μμμΆ"} # πΉ μ μ λ³μ μ μ₯μ© last_ingredients = "" # πΉ HTML νμ μΆλ ₯ def format_result_html(result_text): html = "
μ€λͺ : {line.replace('μ€λͺ :', '').strip()}
" elif line.startswith("μ¬λ£:"): html += f"μ¬λ£: {line.replace('μ¬λ£:', '').strip()}
" elif line.startswith("λ§λλ λ²:"): html += f"λ§λλ λ²: {line.replace('λ§λλ λ²:', '').strip()}
" elif line.startswith("쑰리 μκ°:"): html += f"Ⱡ쑰리 μκ°: {line.replace('쑰리 μκ°:', '').strip()}
" elif line.startswith("λμ΄λ:"): html += f"π― λμ΄λ: {line.replace('λμ΄λ:', '').strip()}
" else: html += f"{line}
" html += "μ΄λ―Έμ§λ₯Ό μ λ‘λν΄μ£ΌμΈμ.
" outputs = detector(image, candidate_labels=candidate_labels, threshold=0.2) detected_labels = list(set([o["label"] for o in outputs])) translated_labels = [label_ko.get(label, label) for label in detected_labels] if not translated_labels: return "μ¬λ£λ₯Ό μΈμνμ§ λͺ»νμ΅λλ€.
" last_ingredients = ", ".join(translated_labels) return generate_recipe(last_ingredients) # πΉ κ°μ μ¬λ£λ‘ λ€μ μΆμ² def reroll_recipe(): if not last_ingredients: return "λ¨Όμ μ΄λ―Έμ§λ₯Ό μ λ‘λν΄μ£ΌμΈμ.
" return generate_recipe(last_ingredients) # πΉ Gradio UI with gr.Blocks() as demo: gr.Markdown("## π§ λμ₯κ³ μ΄λ―Έμ§ κΈ°λ° μ리 μΆμ² μμ€ν ") gr.Markdown("λμ₯κ³ λ΄λΆ μ¬μ§μ μ λ‘λν ν λ²νΌμ λλ¬ μΆμ² μ리λ₯Ό νμΈνμΈμ.") with gr.Row(): with gr.Column(scale=5): image_input = gr.Image(type="pil", label="λμ₯κ³ μ΄λ―Έμ§ μ λ‘λ", height=300) recommend_btn = gr.Button("λ μνΌ μΆμ²λ°κΈ°", size="lg") with gr.Column(scale=7): recipe_output = gr.HTML(label="π½οΈμΆμ² μ리 κ²°κ³Ό") # μ¨κ²¨μ§ Gradio λ²νΌ (μ€μ reroll νΈλ¦¬κ±°μ©) reroll_hidden_btn = gr.Button("", visible=False) # HTML λ²νΌλ€ (λ³΅μ¬ + 리둀) gr.HTML("""