import gradio as gr import openai import os import requests # OpenAI API 키 설정 openai.api_key = os.getenv("OPENAI_API_KEY") # Pexels API 키 설정 PEXELS_API_KEY = "5woz23MGx1QrSY0WHFb0BRi29JvbXPu97Hg0xnklYgHUI8G0w23FKH62" def generate_keyword_from_text(input_text): try: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{ 'role': 'user', 'content': f"다음 텍스트를 바탕으로 Pexels에서 잘 검색될 영문 키워드 한 줄을 생성하세요: '{input_text}'" }] ) keyword_full_response = response['choices'][0]['message']['content'] keyword = keyword_full_response.split('\n', 1)[0].strip() if keyword.startswith('"') and keyword.endswith('"'): keyword = keyword[1:-1].strip() return keyword except Exception as e: print(f"에러 발생: {e}") return f"키워드 생성 중 에러 발생: {e}" def search_pexels(keyword): headers = { 'Authorization': PEXELS_API_KEY } params = { 'query': keyword, 'per_page': 10 } try: response = requests.get('https://api.pexels.com/v1/search', headers=headers, params=params) response.raise_for_status() data = response.json() image_urls = [photo['src']['medium'] for photo in data['photos']] return image_urls except Exception as e: print(f"Pexels API 에러: {e}") return [] def keyword_to_images(input_text): lines = input_text.split('\n') # 입력 텍스트를 줄 단위로 분리 all_image_urls = [] for line in lines: if not line.strip(): # 비어 있는 줄은 건너뜀 continue keyword = generate_keyword_from_text(line) if keyword.startswith("키워드 생성 중 에러 발생"): continue # 키워드 생성 중 에러가 발생한 경우, 그 줄은 건너뜀 image_urls = search_pexels(keyword) all_image_urls.extend(image_urls) # 각 키워드별 검색 결과를 모두 합침 return all_image_urls # Gradio 인터페이스 설정과 실행 iface = gr.Interface( fn=keyword_to_images, inputs=gr.Textbox(lines=10, placeholder="여기에 Pexels 검색을 위한 텍스트를 입력하세요. 각 줄마다 별도의 검색 키워드가 생성됩니다."), outputs=gr.Gallery(), title="GPT 및 Pexels API를 이용한 다중 이미지 검색", description="제공된 텍스트의 각 줄을 바탕으로 Pexels 검색에 사용할 영문 키워드를 자동 생성하고, 해당 키워드로 Pexels에서 이미지를 검색합니다." ) iface.launch()