Skip to content

Latest commit

 

History

History
382 lines (259 loc) · 11.1 KB

File metadata and controls

382 lines (259 loc) · 11.1 KB

Exif AI

NPM Downloads

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供应商。支持的供应商:openaigoogleanthropicmistralollamaamazonbedrockazuredeepinfrafireworksopenai-compatibletogethertogetheraixaiopenrouter

可选项:

  • -T, --tasks <tasks...>: 指定要执行的任务列表(descriptiontag)。默认:['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作为库使用,请按照以下步骤进行:

  1. 导入Exif AI库。
  2. 使用库中提供的函数进行操作。

具体代码示例如下:

库使用方法

Exif AI 提供三种使用方式,从简单到高级:

1. 简单 API(推荐用于大多数用例)

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
});

2. 流式构建器 API(更多控制)

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();

3. 高级配置 API(复杂场景)

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
  }
});

4. 传统 API(向后兼容)

import { execute } from "exif-ai";

await execute({
  path: "photo.jpg",
  provider: "ollama",
  tasks: ["description", "tag"],
  dry: true // 预览模式
});

安装指南

要全局安装 Exif AI,请执行以下命令:

npm install -g exif-ai

任务

生成描述

description任务利用 AI 供应商生成图像的描述性文本。生成的描述将自动写入到指定的descriptionTagsEXIF 标签中。

生成标签

tags任务通过 AI 供应商为图像创建标签。这些标签将被记录在tagTags定义的 EXIF 标签里。

注意

请确保您安全地管理您的API密钥。不要在公共仓库或其他公共论坛中暴露它们。

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

要使用 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

要使用智谱AI,您需要设置 API 密钥。通过以下命令设置环境变量:

export ZHIPUAI_API_KEY=your_zhipuai_api_key

如果您还没有智谱AI的 API 密钥,可以前往智谱AI官网注册并获取。

Google Gemini

使用Google Gemini时,您需要设置 API 密钥。以下是设置环境变量的命令:

export API_KEY=your_google_api_key

Coze

要使用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

Ollama 在本地运行,因此不需要 API 密钥。请确保已正确安装和配置 Ollama。更多安装和设置信息,请参阅Ollama的官方文档。

若要使用远程 Ollama 服务,您可以设置以下环境变量:

export OLLAMA_BASE_URL=http://ollama.example.com:11434

Amazon Bedrock

要使用 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

要使用 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

要使用 DeepInfra,您需要设置 API 密钥:

export DEEPINFRA_API_KEY=your_deepinfra_api_key

Fireworks

要使用 Fireworks,您需要设置 API 密钥:

export FIREWORKS_API_KEY=your_fireworks_api_key

OpenAI Compatible

要使用 OpenAI 兼容的 API 服务,您需要设置以下环境变量:

export OPENAI_COMPATIBLE_API_KEY=your_api_key
export OPENAI_COMPATIBLE_BASE_URL=https://api.compatible-service.com/v1

TogetherAI

要使用 TogetherAI,您需要设置 API 密钥:

export TOGETHER_API_KEY=your_together_api_key

XAI

要使用 XAI,您需要设置 API 密钥:

export XAI_API_KEY=your_xai_api_key

OpenRouter

要使用 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 install

构建

pnpm run build

Watch

pnpm run watch