1
0
Fork 0
AutoPercenty2/ai/test_gen.py

91 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import google.generativeai as genai
def download_image(image_url):
"""이미지 URL에서 이미지를 다운로드하고 바이트 데이터를 반환합니다."""
response = requests.get(image_url)
response.raise_for_status() # 에러가 발생했을 경우 예외를 발생시킵니다.
return response.content
def main(image_url='https://file.percenty.co.kr/public/652bed8e865b1f32ea62bf1f/products/65df13cf5860eb317389438b/1d439045-b47b-4c4a-994b-11bb2862a6d4.jpg', title='동축케이블압착기', top_k=3):
api_key = 'AIzaSyCER9mD617P5OGaoHCK7drsTkmXUIzFn4U' # 실제 API 키로 교체하세요.
genai.configure(api_key=api_key)
model = genai.GenerativeModel('gemini-pro-vision')
prompt = f"이미지의 상품명은 {title} 1. 이 상품이 무엇인지, 어떤 용도로 사용하는지 설명해줘 2. 이 상품의 배송비 산정을 위해 대략적인 무게를 kg으로 단답형으로 추정해줘. 3. 이 이미지의 상품을 한국의 온라인 쇼핑몰에서 팔기위한 홍보문구를 상품이미지에 맞게 3줄 ~ 4줄 정도 만들어줘. 4.대답하는 방식은 [상품의 홍보문구] 여러줄, [상품의 용도] 자세히, [상품의 무게] 형식과 순서로 해줘."
try:
image_data = download_image(image_url)
response = model.generate_content([prompt, {"mime_type": "image/jpeg", "data": image_data}])
# 후보 결과 확인 및 처리
if response.candidates and len(response.candidates) > 0:
print(f"{response.text}")
return response.text
else:
# 후보 결과가 없거나 유효하지 않을 경우 기본 응답 반환
return '''
### 상품의 용도\n\n
- 에러 발생: 유효한 상품 설명을 제공할 수 없습니다.\n\n
### 상품의 홍보문구\n\n
- 에러 발생: 유효한 홍보문구를 제공할 수 없습니다.\n\n
### 상품의 무게\n\n
- 에러 발생: 유효한 상품 무게를 제공할 수 없습니다.
'''
except ValueError as e:
print(f"오류 발생: {e}", exc_info=True)
return "오류 발생: 유효한 응답을 생성할 수 없습니다."
except Exception as e:
print(f"예상치 못한 오류 발생: {e}", exc_info=True)
return "예상치 못한 오류 발생: 처리할 수 없습니다."
def _process_description(description):
"""
Gemini에서 추출한 설명을 필요한 형식으로 가공합니다.
Args:
description: Gemini에서 추출한 설명
Returns:
필요한 형식으로 가공된 설명
"""
processed_description = description
# # 불필요한 문자열 제거
# processed_description = description.replace("**", "").replace("**", "")
# # 줄 바꿈 문자 변경
# processed_description = processed_description.replace("\n", "<br>")
# 필요한 답변 형식에 맞게 정렬
answer = "### 상품의 용도\n\n"
answer += processed_description.split("###")[1]
answer += "\n\n### 상품의 홍보문구\n\n"
answer += processed_description.split("###")[2]
answer += "\n\n### 상품의 무게\n\n"
answer += processed_description.split("###")[3]
return answer
def _validate_description(description):
"""
Gemini에서 추출한 설명을 검사하여 유효한지 확인합니다.
Args:
    description: Gemini에서 추출한 설명
Returns:
    True - 유효한 설명, False - 유효하지 않은 설명
"""
# 필요한 정보가 모두 포함되어 있는지 확인
if not all(x in description for x in ["상품의 홍보문구", "상품의 용도", "상품의 무게"]):
return False
# ... 추가적인 유효성 검사 코드
return True
if __name__ == "__main__":
main()