Spaces:
Sleeping
Sleeping
import tempfile | |
import random | |
import requests | |
import json | |
import logging | |
from PIL import Image | |
from huggingface_hub import HfApi | |
from cozepy import Coze, TokenAuth | |
import hashlib | |
from app.config import DATASET_ID, COZE_API_TOKEN, HUGGING_FACE_TOKEN | |
# 配置日志 | |
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s') | |
logger = logging.getLogger(__name__) | |
# 初始化API客户端 | |
api = HfApi() | |
coze = Coze(auth=TokenAuth(token=COZE_API_TOKEN), base_url="https://api.coze.cn") | |
def calculate_image_hash(Image: Image.Image) -> str: | |
""" | |
参数: | |
Image | |
返回: | |
str: 图片的MD5哈希字符串 | |
""" | |
return hashlib.md5(Image.tobytes()).hexdigest() | |
def get_image_description(image_url: str) -> str: | |
"""获取图片描述""" | |
logger.info(f"Get image description") | |
workflow = coze.workflows.runs.create( | |
workflow_id='7479742935953752091', | |
parameters={ | |
"image_url": image_url | |
} | |
) | |
logger.info(f"Image description: {workflow.data}") | |
if (workflow.data): | |
description = json.loads(workflow.data)['output'] | |
return description | |
else: | |
return "" | |
def save_image_temp(image: Image.Image) -> str: | |
"""保存图片到临时文件""" | |
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as temp_img: | |
image.save(temp_img.name, "PNG") | |
return temp_img.name | |
def upload_to_huggingface(temp_file_path: str) -> tuple: | |
"""上传图片到 HuggingFace""" | |
image_filename = f"image_{random.randint(1000, 9999)}.png" | |
file_path = f"images/{image_filename}" | |
logger.info(f"Uploading image to HuggingFace: {file_path}") | |
api.upload_file( | |
path_or_fileobj=temp_file_path, | |
path_in_repo=file_path, | |
repo_id=DATASET_ID, | |
token=HUGGING_FACE_TOKEN, | |
repo_type="dataset" | |
) | |
logger.info(f"Image uploaded successfully: {file_path}") | |
return file_path, image_filename | |
def get_image_cdn_url(file_path: str) -> str: | |
"""获取图片CDN URL""" | |
image_url = f"https://huggingface.co./datasets/{DATASET_ID}/resolve/main/{file_path}" | |
logger.info(f"Getting CDN URL for: {image_url}") | |
response = requests.head( | |
image_url, | |
allow_redirects=True, | |
timeout=10, | |
headers={ | |
'User-Agent': 'NekoAI', | |
} | |
) | |
image_cdn_url = response.url | |
logger.info(f"CDN URL: {image_cdn_url}") | |
return image_cdn_url | |
def format_image_url(file_path: str) -> str: | |
"""格式化图片URL,用于显示""" | |
return f"https://huggingface.co./datasets/{DATASET_ID}/resolve/main/{file_path}" |