npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

exif-ai

v3.2.4

Published

A Node.js CLI and library that uses Ollama, ZhipuAI, Google Gemini, Coze or OpenAI to intelligently write image description and/or tags to exif metadata by it's content.

Downloads

161

Readme

Exif AI

NPM Downloads

https://github.com/user-attachments/assets/a445d46a-0d3c-44a2-a42e-f98c23e9c1b4

关于

Exif AI 是一款功能强大的命令行工具,专为直接将AI生成的图像描述和/或标签写入图像文件的元数据而设计。该工具运用先进的AI模型来深入分析图像内容,并自动生成相应的描述性元数据,显著提升图像的检索效率和可用性。

使用示例

命令行

无需安装

如果您不想全局安装 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供应商,请指定以下名称之一(ollama对应Ollama,zhipu对应ZhipuAI,google对应Google Gemini,coze_bot对应扣子bot,openai对应OpenAI)

可选项:

  • -T, --tasks <tasks...>: 指定要执行的任务列表,支持的选项有description(生成描述)、tag(生成标签)和face(面部识别)。
  • -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供应商。
  • -w, --watch <path>: 监视指定路径中的新文件,当检测到新文件时自动处理。
  • --avoid-overwrite: 如果文件中已存在EXIF标签,则避免覆盖现有标签。
  • --ext <extensions...>: 指定要监视的文件扩展名,只有符合这些扩展名的文件会被处理。
  • --concurrency <number>: 在监视模式下,同时处理的文件数量上限。
  • --face-group-ids <group...>: 指定用于面部识别的面部组ID列表。
  • --repeat <number>: 如果AI生成结果被认为不可接受时,重复执行任务的次数。此参数通过允许多次尝试来确保输出质量。默认值为0。如果AI生成的描述超过10个字符且不是Markdown格式,则被视为可接受。AI生成的标签如果超过1个且不是Markdown格式,则被视为可接受。使用此参数将消耗更多令牌,可能会产生额外费用。使用时请自行承担风险。

示例用法:

exif-ai -i example.jpg -a ollama -p "描述这张图片"

作为库集成

若要在您的项目中将Exif AI作为库使用,请按照以下步骤进行:

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

具体代码示例如下:

import { execute } from "exif-ai";

const options = {
  tasks: ["description"], // 要执行的任务列表
  input: "example.jpg", // 要处理的图像文件
  provider: "ollama", // 要使用的AI供应商名称
  descriptionTags: ["Description"], // 要写入描述的EXIF标签列表
  tagTags: ["TagsList"], // 要写入标签的EXIF标签列表
  descriptionPrompt: "描述这张图片", // 自定义AI供应商生成描述的提示
  tagPrompt: "根据主题、对象、事件、地点标记这张图片", // 自定义AI供应商生成标签的提示
  verbose: true, // 启用调试输出
  dry: false, // 预览AI生成的内容而不写入图像文件
  writeArgs: [], // 用于写入元数据的ExifTool的额外参数
  providerArgs: [], // AI供应商的额外参数
  avoidOverwrite: false, // 如果文件中已经存在EXIF标签,则避免覆盖
  doNotEndExifTool: false, // 不在写入元数据后结束ExifTool进程
};

execute(options)
  .then((result) => {
    console.log(result); // 处理结果
  })
  .catch((error) => {
    console.error(error); // 处理错误
  });

安装指南

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

npm install -g exif-ai

任务

生成描述

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

生成标签

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

面部识别

face任务利用腾讯云的 API 在图像上进行面部识别。识别结果将被记录在tagTags中指定的 EXIF 标签里。

目前,face任务需要配置腾讯云 API 密钥,并且您必须已经开通了腾讯云的人脸识别服务。如果您尚未拥有腾讯云账户,请先注册并开通相关服务。

export TENCENTCLOUD_SECRET_ID=your_tencentcloud_secret_id
export TENCENTCLOUD_SECRET_KEY=your_tencentcloud_secret_key

注意

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

API供应商

Exif AI旨在利用各种API供应商来生成图像描述和标签。我们目前支持五个主流的供应商,每个供应商都提供独特的功能和集成选项。以下是支持供应商的摘要,包括它们的要求和功能详情。

支持的供应商

  • ZhipuAI:一家以先进算法著称的尖端AI服务供应商。访问此服务需要API密钥。
  • Ollama:一种创新的本地AI服务,直接在您的机器上运行。此选项不需要API密钥,提供无缝且私密的体验。
  • Google Gemini:由Google提供支持的强大AI服务,以其高质量的图像处理能力而闻名。
  • Coze: 扣子是新一代AI大模型智能体开发平台。您可以使用API来调用扣子的bot或工作流。
  • OpenAI:一家领先的AI服务供应商,以其广泛的AI工具和应用而闻名。与ZhipuAI一样,它需要API密钥才能访问。

自定义供应商

对于寻求扩展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 服务,您可以在providerArgs中指定服务 URL:

exif-ai --providerArgs "http://ollama.example.com:8080" -a ollama -i image.jpg

在使用库集成时,providerArgs可以这样设置:

providerArgs: ["http://ollama.example.com:8080"],

开发

前置条件

  • 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