|
import requests |
|
import gradio as gr |
|
import os |
|
import imageio |
|
import numpy as np |
|
from PIL import Image |
|
import requests |
|
from io import BytesIO |
|
import tempfile |
|
|
|
|
|
API_KEY = os.getenv('API_KEY') |
|
API_URL = 'https://api.pexels.com/v1/search' |
|
|
|
def search_images(keyword): |
|
headers = {'Authorization': API_KEY} |
|
params = {'query': keyword, 'per_page': 5} |
|
response = requests.get(API_URL, headers=headers, params=params) |
|
|
|
if response.status_code == 200 and response.json()['photos']: |
|
photos = response.json()['photos'] |
|
images = [] |
|
for photo in photos: |
|
image_url = photo['src']['original'] |
|
response = requests.get(image_url) |
|
img = Image.open(BytesIO(response.content)) |
|
images.append(img) |
|
|
|
|
|
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as tmpfile: |
|
with imageio.get_writer(tmpfile.name, fps=0.5) as video: |
|
for img in images: |
|
video.append_data(np.array(img)) |
|
return tmpfile.name |
|
else: |
|
return "검색 결과가 없습니다." |
|
|
|
interface = gr.Interface( |
|
fn=search_images, |
|
inputs=gr.Textbox(lines=2, placeholder="검색할 이미지 키워드를 입력하세요"), |
|
outputs=gr.Video(label="검색 결과"), |
|
title="Pexels 이미지 검색기", |
|
description="Pexels에서 키워드에 맞는 이미지를 검색하고, 해당 이미지를 영상으로 변환합니다." |
|
) |
|
|
|
if __name__ == "__main__": |
|
interface.launch() |