80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
图片分析工具 - 使用月之暗面 API 分析图片内容
|
||
"""
|
||
|
||
import base64
|
||
import os
|
||
from openai import OpenAI
|
||
|
||
def encode_image(image_path):
|
||
"""将图片编码为 base64"""
|
||
with open(image_path, "rb") as image_file:
|
||
return base64.b64encode(image_file.read()).decode('utf-8')
|
||
|
||
def analyze_image(image_path, prompt="请详细描述这张图片的内容"):
|
||
"""分析图片内容"""
|
||
# 月之暗面配置
|
||
client = OpenAI(
|
||
api_key="sk-lEk0pAIZ1EDgUkflq2is5uT2VbhuoKGpO5sNOSnuuccsD68r",
|
||
base_url="https://api.moonshot.cn/v1"
|
||
)
|
||
|
||
# 编码图片
|
||
base64_image = encode_image(image_path)
|
||
|
||
try:
|
||
response = client.chat.completions.create(
|
||
model="moonshot-v1-8k",
|
||
messages=[
|
||
{
|
||
"role": "user",
|
||
"content": [
|
||
{"type": "text", "text": prompt},
|
||
{
|
||
"type": "image_url",
|
||
"image_url": {
|
||
"url": f"data:image/png;base64,{base64_image}"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
max_tokens=1000
|
||
)
|
||
|
||
return response.choices[0].message.content
|
||
|
||
except Exception as e:
|
||
return f"分析失败: {e}"
|
||
|
||
def batch_analyze_images(image_dir, output_file="image_analysis.md"):
|
||
"""批量分析图片"""
|
||
results = []
|
||
|
||
# 获取所有 PNG 图片
|
||
png_files = [f for f in os.listdir(image_dir) if f.endswith('.png')]
|
||
png_files.sort() # 按文件名排序
|
||
|
||
for filename in png_files:
|
||
image_path = os.path.join(image_dir, filename)
|
||
print(f"正在分析: {filename}")
|
||
|
||
analysis = analyze_image(
|
||
image_path,
|
||
"请详细描述这张图片的内容,包括文字、图表、人物、建筑等所有可见元素"
|
||
)
|
||
|
||
results.append(f"## {filename}\n\n{analysis}\n\n---\n")
|
||
|
||
# 保存结果
|
||
with open(output_file, 'w', encoding='utf-8') as f:
|
||
f.write("# 图片分析结果\n\n")
|
||
f.writelines(results)
|
||
|
||
print(f"分析完成,结果保存到: {output_file}")
|
||
|
||
if __name__ == "__main__":
|
||
# 示例:分析序章的图片
|
||
image_dir = "images/0 序:令人又敬又畏的_忽里勒台_大会"
|
||
batch_analyze_images(image_dir, "序章图片分析.md") |