Files
X-Agents/account/admin/skills/image-understander/scripts/main.py
2026-03-11 16:26:22 +08:00

103 lines
3.1 KiB
Python

#!/usr/bin/env python3
"""
图片理解主入口脚本
支持图片描述、OCR文字提取、物体识别、图片问答
"""
import argparse
import json
import os
import sys
from pathlib import Path
from image_understander import ImageUnderstander
def parse_args():
"""解析命令行参数"""
parser = argparse.ArgumentParser(
description="图片理解工具 - 基于 OpenAI GPT-4 Vision",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例:
# 图片描述
python main.py -i photo.jpg -m describe
# 提取文字
python main.py -i screenshot.png -m ocr
# 识别物体
python main.py -i photo.jpg -m objects
# 图片问答
python main.py -i photo.jpg -m qa -q "这个图片里有什么?"
"""
)
parser.add_argument("-i", "--image", required=True, help="图片路径")
parser.add_argument("-m", "--mode", default="describe",
choices=["describe", "ocr", "objects", "qa"],
help="理解模式 (默认: describe)")
parser.add_argument("-a", "--api-key", help="OpenAI API Key")
parser.add_argument("-q", "--prompt", default="请详细描述这张图片",
help="问答模式的问题 (默认: 请详细描述这张图片)")
parser.add_argument("-o", "--output", help="输出文件路径 (JSON格式)")
parser.add_argument("-v", "--verbose", action="store_true", help="详细输出")
return parser.parse_args()
def main():
"""主函数"""
args = parse_args()
# 检查图片文件
if not os.path.exists(args.image):
print(f"❌ 错误: 图片文件不存在: {args.image}")
sys.exit(1)
# 获取 API Key
api_key = args.api_key or os.environ.get("OPENAI_API_KEY")
if not api_key:
print("❌ 错误: 请设置 OpenAI API Key")
print(" 使用方式:")
print(" 1. 环境变量: set OPENAI_API_KEY=sk-your-key")
print(" 2. 命令行参数: python main.py -a sk-your-key -i photo.jpg")
sys.exit(1)
# 初始化理解器
understander = ImageUnderstander(api_key, verbose=args.verbose)
# 根据模式调用
print(f"🔍 正在分析图片: {args.image}")
print(f"📋 模式: {args.mode}")
print("-" * 50)
if args.mode == "describe":
result = understander.describe(args.image)
print(result)
elif args.mode == "ocr":
result = understander.extract_text(args.image)
print(result)
elif args.mode == "objects":
result =understander.identify_objects(args.image)
print(result)
elif args.mode == "qa":
result = understander.answer_question(args.image, args.prompt)
print(result)
# 保存结果
if args.output:
output_data = {
"mode": args.mode,
"image": args.image,
"result": result
}
with open(args.output, "w", encoding="utf-8") as f:
json.dump(output_data, f, ensure_ascii=False, indent=2)
print(f"\n💾 结果已保存到: {args.output}")
if __name__ == "__main__":
main()