2024-10-01.00.00.31.mov
Exif AI 是一款功能强大的命令行工具和库,专为直接将AI生成的图像描述和/或标签写入图像文件的元数据而设计。该工具运用来自多个提供商的先进AI模型来深入分析图像内容,并自动生成相应的描述性元数据,显著提升图像的检索效率和可用性。
基于 Vercel AI SDK 构建,Exif AI 支持 13+ 个AI提供商,包括 OpenAI、Google Gemini、Anthropic Claude、Mistral、Ollama、Amazon Bedrock、Azure OpenAI 等。
如果您不想全局安装 Exif AI,完全可以选择使用 npx 命令来直接运行它。这样操作非常简单:
npx exif-ai -i example.jpeg -a ollama如果您已经将 Exif AI 全局安装到您的系统,那么您可以直接在命令行中直接调用它来使用。
exif-ai -i example.jpeg -a ollama必选项:
-a, --api-provider <value>: 选择要使用的AI供应商。支持的供应商:openai、google、anthropic、mistral、ollama、amazon、bedrock、azure、deepinfra、fireworks、openai-compatible、together、togetherai、xai、openrouter。
可选项:
-T, --tasks <tasks...>: 指定要执行的任务列表(description、tag)。默认:['description', 'tag']。-i, --input <file>: 指定要处理的图像文件路径(必需)。-p, --description-prompt <text>: 自定义AI供应商生成描述的提示语,默认使用通用的图像描述提示。--tag-prompt <text>: 自定义AI供应商生成标签的提示语,默认使用通用的图像标签提示。-m, --model <name>: 指定要使用的AI模型,如果AI供应商支持自定义模型。-t, --description-tags <tags...>: 指定要写入描述的EXIF标签名称列表,默认为常见的描述标签。--tag-tags <tags...>: 指定要写入标签的EXIF标签名称列表,默认为常见的标签。-v, --verbose: 启用详细输出,以便在调试时查看更多信息。-d, --dry-run: 进行dry run,预览AI生成的内容但不实际写入图像文件。--exif-tool-write-args <args...>: 提供额外的参数给ExifTool,用于写入元数据。--provider-args <args...>: 提供额外的参数给AI供应商。--avoid-overwrite: 如果文件中已存在EXIF标签,则避免覆盖现有标签。--repeat <number>: 如果AI生成结果被认为不可接受时,重复执行任务的次数。默认:0。
示例用法:
# 使用 Ollama(本地)的基本用法
exif-ai -i example.jpg -a ollama
# 使用 OpenAI 和自定义模型
OPENAI_API_KEY=your_key exif-ai -i example.jpg -a openai -m gpt-4o
# 使用 Google Gemini 和自定义提示
GOOGLE_API_KEY=your_key exif-ai -i example.jpg -a google -p "详细描述这张风景照片。"
# 仅生成标签
exif-ai -i example.jpg -a anthropic -T tag
# 预览结果(不写入文件)
exif-ai -i example.jpg -a ollama -d若要在您的项目中将Exif AI作为库使用,请按照以下步骤进行:
- 导入Exif AI库。
- 使用库中提供的函数进行操作。
具体代码示例如下:
Exif AI 提供三种使用方式,从简单到高级:
import { processImage } from "exif-ai";
// 基本用法
await processImage({
image: "photo.jpg",
provider: "ollama",
preview: true // 不写入文件,仅预览
});
// 自定义选项
await processImage({
image: "photo.jpg",
provider: "openai",
model: "gpt-4o",
tasks: ["description"],
descriptionPrompt: "详细描述这张图片。",
verbose: true
});import { ExifAI } from "exif-ai";
await new ExifAI("photo.jpg")
.provider("google")
.model("gemini-1.5-pro")
.tasks("description", "tag")
.descriptionPrompt("描述这张风景照片。")
.tagPrompt("生成相关标签。")
.preview() // 不写入文件
.verbose()
.run();import { processImageAdvanced } from "exif-ai";
await processImageAdvanced({
image: "photo.jpg",
ai: {
provider: "anthropic",
model: "claude-3-5-sonnet-20241022",
descriptionPrompt: "专业图像描述",
tagPrompt: "生成SEO友好的标签"
},
exif: {
descriptionTags: ["XPComment", "Description"],
tagTags: ["Subject", "Keywords"]
},
options: {
tasks: ["description", "tag"],
preview: true,
verbose: true,
retries: 2
}
});import { execute } from "exif-ai";
await execute({
path: "photo.jpg",
provider: "ollama",
tasks: ["description", "tag"],
dry: true // 预览模式
});要全局安装 Exif AI,请执行以下命令:
npm install -g exif-aidescription任务利用 AI 供应商生成图像的描述性文本。生成的描述将自动写入到指定的descriptionTagsEXIF 标签中。
tags任务通过 AI 供应商为图像创建标签。这些标签将被记录在tagTags定义的 EXIF 标签里。
请确保您安全地管理您的API密钥。不要在公共仓库或其他公共论坛中暴露它们。
Exif AI旨在利用各种API供应商来生成图像描述和标签。我们目前支持五个主流的供应商,每个供应商都提供独特的功能和集成选项。以下是支持供应商的摘要,包括它们的要求和功能详情。
- OpenAI:一家领先的AI服务供应商,以其广泛的AI工具和应用而闻名。
- Google Gemini:由Google提供支持的强大AI服务,以其高质量的图像处理能力而闻名。
- Anthropic:一家专注于开发可靠、可解释和可控制的AI系统的供应商。
- Mistral:一家提供高性能语言模型的供应商。
- Ollama:一种创新的本地AI服务,直接在您的机器上运行。此选项不需要API密钥,提供无缝且私密的体验。
- Amazon Bedrock:亚马逊的完全托管服务,提供多种高性能基础模型的选择。
- Azure OpenAI:微软的基于云的服务,提供带有Azure安全功能的OpenAI模型访问。
- DeepInfra:一个提供各种开源和专有AI模型访问的平台。
- Fireworks:一家专注于高效和经济的AI模型推理的供应商。
- OpenAI Compatible:一个适用于实现OpenAI API规范的服务的通用接口。
- TogetherAI:一个提供广泛开源模型访问的平台。
- XAI:Grok模型系列的提供商,具有视觉能力。
- OpenRouter:一个统一的API网关,提供对来自不同供应商的各种AI模型的访问。
对于寻求扩展Exif AI功能或与额外AI服务集成的用户,我们提供开发自定义供应商的灵活性。通过实现供应商接口,您可以创建自定义供应商以集成其他AI服务,或根据您的特定需求定制图像描述生成过程。
要使用 OpenAI,您需要配置 API 密钥。您可以通过以下步骤设置环境变量:
export OPENAI_API_KEY=your_openai_api_key如果您需要使用与 OpenAI API 兼容的自定义 API 服务,可以设置 OPEN_API_BASEURL 环境变量,指向所需的 API 端点:
export OPEN_API_BASEURL=https://api.example.com要使用智谱AI,您需要设置 API 密钥。通过以下命令设置环境变量:
export ZHIPUAI_API_KEY=your_zhipuai_api_key如果您还没有智谱AI的 API 密钥,可以前往智谱AI官网注册并获取。
使用Google Gemini时,您需要设置 API 密钥。以下是设置环境变量的命令:
export API_KEY=your_google_api_key要使用Coze Bot,您需要设置 API 密钥。设置环境变量的命令如下:
export COZE_API_KEY=your_coze_api_key在中国大陆地区使用 Coze 时,请确保配置正确的端点设置:
export COZE_ENDPOINT=https://api.coze.cn与 Coze API 交互时,您可以使用以下命令格式,其中 -m 参数指定了 bot 的 id:
exif-ai -a coze_bot -i image.jpg -m 7402199305639034921在此处,-a coze_bot指定了Coze API,-i image.jpg表示输入图像文件,而-m 7402199305639034921是您希望使用的bot的id。
Ollama 在本地运行,因此不需要 API 密钥。请确保已正确安装和配置 Ollama。更多安装和设置信息,请参阅Ollama的官方文档。
若要使用远程 Ollama 服务,您可以设置以下环境变量:
export OLLAMA_BASE_URL=http://ollama.example.com:11434要使用 Amazon Bedrock,您需要设置 AWS 凭证:
export AWS_ACCESS_KEY_ID=your_aws_access_key_id
export AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key
export AWS_REGION=us-east-1 # 或您首选的区域要使用 Azure OpenAI,您需要设置以下环境变量:
export AZURE_OPENAI_API_KEY=your_azure_openai_api_key
export AZURE_OPENAI_ENDPOINT=https://your-resource-name.openai.azure.com
export AZURE_OPENAI_API_VERSION=2023-12-01-preview # 或您首选的 API 版本要使用 DeepInfra,您需要设置 API 密钥:
export DEEPINFRA_API_KEY=your_deepinfra_api_key要使用 Fireworks,您需要设置 API 密钥:
export FIREWORKS_API_KEY=your_fireworks_api_key要使用 OpenAI 兼容的 API 服务,您需要设置以下环境变量:
export OPENAI_COMPATIBLE_API_KEY=your_api_key
export OPENAI_COMPATIBLE_BASE_URL=https://api.compatible-service.com/v1要使用 TogetherAI,您需要设置 API 密钥:
export TOGETHER_API_KEY=your_together_api_key要使用 XAI,您需要设置 API 密钥:
export XAI_API_KEY=your_xai_api_key要使用 OpenRouter,您需要设置 API 密钥:
export OPENROUTER_API_KEY=your_openrouter_api_key- Node.js >=16
- pnpm
首先,将Exif AI仓库克隆到您的本地机器:
git clone https://github.com/tychenjiajun/exif-ai.git
cd exif-ai接下来,使用 pnpm 安装所需的依赖项。
pnpm installpnpm run buildpnpm run watch