82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
import urllib.request
|
|
import os
|
|
from pathlib import Path
|
|
from bingart import BingArt
|
|
|
|
from custom_apps.utils import cookie_manager
|
|
from rest.app.utils.parsing_utils import prompt_to_filenames
|
|
from rest.app.utils.date_utils import D
|
|
from const import OUTPUT_FOLDER
|
|
|
|
|
|
class BingArtGenerator:
|
|
|
|
model = 'dalle3'
|
|
detail = 'art'
|
|
output_folder = os.path.join(OUTPUT_FOLDER,"dalle","art")
|
|
|
|
def __init__(self):
|
|
self.bing_art = BingArt(auth_cookie_U=cookie_manager.get_cookie())
|
|
self.prompt = ''
|
|
self.datetime = D.date_file_name()
|
|
Path(self.output_folder).mkdir(parents=True, exist_ok=True)
|
|
|
|
def get_image_links(self, prompt, image_len:int):
|
|
"""
|
|
이미지 url값 생성
|
|
"""
|
|
results = None
|
|
try:
|
|
self.prompt = prompt_to_filenames(prompt)
|
|
results = self.bing_art.generate_images(prompt)
|
|
|
|
finally:
|
|
self.bing_art.close_session()
|
|
|
|
if results == None:
|
|
raise Exception("result is null")
|
|
|
|
images = results.get("images")
|
|
|
|
if images != None:
|
|
_temp = []
|
|
for i in images:
|
|
_temp.append(i.get('url'))
|
|
images = _temp
|
|
|
|
#중복제거
|
|
images = list(set(_temp))
|
|
|
|
if len(images) < image_len:
|
|
return images[0:len(images)]
|
|
else:
|
|
return images[0:image_len]
|
|
else:
|
|
return None
|
|
|
|
def link_to_img(self, img_links:list):
|
|
"""
|
|
이미지 링크로 이미지 파일 저장
|
|
"""
|
|
jpeg_index = 1
|
|
|
|
if img_links == None:
|
|
raise Exception("result is null")
|
|
|
|
for i in img_links:
|
|
path= f"{self.model}_{self.detail}_{self.prompt}_{jpeg_index}_{self.datetime}.png"
|
|
|
|
urllib.request.urlretrieve(i, os.path.join(self.output_folder,path))
|
|
jpeg_index += 1
|
|
|
|
def get_images(self, prompt, image_len):
|
|
image_links = self.get_image_links(prompt,image_len)
|
|
|
|
if image_links == None:
|
|
return 0
|
|
|
|
else:
|
|
self.link_to_img(img_links=image_links)
|
|
return len(image_links)
|
|
|