52 lines
3.3 KiB
Python
52 lines
3.3 KiB
Python
import requests
|
|
import google.generativeai as genai
|
|
import logging
|
|
|
|
# 로거 인스턴스 가져오기
|
|
logger = logging.getLogger('default_logger')
|
|
class ImageDescriptionGenerator:
|
|
def __init__(self, api_key):
|
|
"""API 키를 사용하여 객체를 초기화합니다."""
|
|
self.api_key = api_key
|
|
genai.configure(api_key=self.api_key)
|
|
self.model = genai.GenerativeModel('gemini-pro-vision')
|
|
|
|
|
|
def download_image(self, image_url):
|
|
"""이미지 URL에서 이미지를 다운로드하고 바이트 데이터를 반환합니다."""
|
|
response = requests.get(image_url)
|
|
response.raise_for_status() # 에러가 발생했을 경우 예외를 발생시킵니다.
|
|
return response.content
|
|
|
|
def generate_description(self, image_url, title, top_k=3):
|
|
"""이미지 URL을 받아 해당 이미지에 대한 설명을 생성하고 반환합니다."""
|
|
# 'gemini-pro-vision' 모델을 사용하여 이미지 설명 생성
|
|
# prompt = f"이미지의 상품명은 {title} 1. 이 상품이 무엇인지, 어떤 용도로 사용하는지 설명해줘 2. 이 상품의 배송비 산정을 위해 대략적인 무게를 kg으로 단답형으로 추정해줘. 3. 이 이미지의 상품을 한국의 온라인 쇼핑몰에서 팔기위한 홍보문구를 상품이미지에 맞게 3줄 ~ 4줄 정도 만들어줘. 4.대답하는 방식은 [상품의 홍보문구] 여러줄, [상품의 용도] 자세히, [상품의 무게] 형식과 순서로 해줘."
|
|
prompt = f"이미지의 상품 키워드는 {keyword}, 해당 키워드로 네이버 쇼핑에서 검색했을 때 나오는 상품들은 1번상품명{title1}, 가격은 {price1}, 2번상품명{title2}, 가격은 {price2}, 3번상품명{title3}, 가격은 {price3}, 4번상품명{title4}, 가격은 {price4}, 5번상품명{title5}, 가격은 {price5} 등이야. 주어진 이미지는 이런 상품검색결과를 타오바오에서 이미지 검색했을 때 나오는 상품이미지야. 이 상품의 배송비 산정을 위해 무게를 kg으로 말해줘."
|
|
|
|
try:
|
|
image_data = self.download_image(image_url)
|
|
response = self.model.generate_content([prompt, {"mime_type": "image/jpeg", "data": image_data}])
|
|
|
|
# 후보 결과 확인 및 처리
|
|
if response.candidates and len(response.candidates) > 0:
|
|
logger.debug(f"{response.text}")
|
|
return response.text
|
|
else:
|
|
# 후보 결과가 없거나 유효하지 않을 경우 기본 응답 반환
|
|
return '''
|
|
### 상품의 용도\n\n
|
|
- 에러 발생: 유효한 상품 설명을 제공할 수 없습니다.\n\n
|
|
### 상품의 홍보문구\n\n
|
|
- 에러 발생: 유효한 홍보문구를 제공할 수 없습니다.\n\n
|
|
### 상품의 무게\n\n
|
|
- 에러 발생: 유효한 상품 무게를 제공할 수 없습니다.
|
|
'''
|
|
|
|
except ValueError as e:
|
|
logger.debug(f"오류 발생: {e}")
|
|
return "오류 발생: 유효한 응답을 생성할 수 없습니다."
|
|
except Exception as e:
|
|
logger.debug(f"예상치 못한 오류 발생: {e}")
|
|
return "예상치 못한 오류 발생: 처리할 수 없습니다."
|