InternGPT开发者手册:API接口详解与二次开发指南

【免费下载链接】InternGPT InternGPT (iGPT) is an open source demo platform where you can easily showcase your AI models. Now it supports DragGAN, ChatGPT, ImageBind, multimodal chat like GPT-4, SAM, interactive image editing, etc. Try it at igpt.opengvlab.com (支持DragGAN、ChatGPT、ImageBind、SAM的在线Demo系统) 【免费下载链接】InternGPT 项目地址: https://gitcode.com/gh_mirrors/in/InternGPT

InternGPT(iGPT)是一个功能强大的开源AI模型展示平台,支持DragGAN、ChatGPT、ImageBind等多种AI模型,提供多模态交互能力。本手册将详细介绍其API接口设计和二次开发方法,帮助开发者快速上手并扩展功能。

InternGPT核心架构解析

InternGPT采用模块化设计,主要由感知单元(Perception Unit)、LLM控制器(LLM Controller)和工具集(Toolkit)三部分组成。这种架构允许开发者灵活扩展功能,集成新的AI模型或工具。

InternGPT系统架构

图:InternGPT系统架构示意图,展示了用户输入、感知单元、LLM控制器、工具集和输出之间的交互流程

主要模块组成

  • 感知单元:处理图像、文本、音频等多模态输入,包含SAM(Segment Anything)、OCR等模型
  • LLM控制器:核心决策单元,基于ChatGPT、GPT-4或LLaMA等大语言模型
  • 工具集:包含BLIP、Stable Diffusion、ControlNet等多种AI工具和模型

核心API接口详解

InternGPT提供了丰富的API接口,涵盖图像处理、文本生成、多模态交互等功能。以下是主要接口的详细说明:

图像处理API

1. 图像生成接口
# 文本生成图像
text2image = Text2Image(device="cuda", e_mode=False)
image_path = text2image.inference("a beautiful sunset over the mountains")

功能:根据文本描述生成图像
参数:文本描述字符串
返回:生成的图像路径
实现位置iGPT/models/image.py

2. 图像编辑接口
# 基于文本指令编辑图像
instruct_pix2pix = InstructPix2Pix(device="cuda")
result_path = instruct_pix2pix.inference("input_image.png, make it look like a painting")

功能:根据文本指令编辑现有图像
参数:图像路径和编辑指令(逗号分隔)
返回:编辑后的图像路径
实现位置iGPT/models/image.py

3. 图像分割接口
# 图像分割
sam = SegmentAnything(device="cuda", e_mode=False)
segmented_path = sam.inference("input_image.png")

功能:对图像进行智能分割
参数:图像路径
返回:分割后的图像路径
实现位置iGPT/models/image.py

多模态交互API

1. 音频转图像接口
# 音频生成图像
audio2image = Audio2Image(device="cuda")
result_path = audio2image.inference("input_audio.wav, generate a scene matching this audio")

功能:根据音频内容生成相关图像
参数:音频路径和文本提示(逗号分隔)
返回:生成的图像路径
实现位置iGPT/models/anything2image.py

2. 视频处理接口
# 视频描述生成
video_caption = VideoCaption(device="cuda")
caption = video_caption.inference("input_video.mp4")

功能:生成视频内容描述
参数:视频路径
返回:视频描述文本
实现位置iGPT/models/video.py

DragGAN交互API

# DragGAN图像编辑
drag_gan = StyleGAN(device="cuda")
result_path = drag_gan.inference("input_image.png, 200, [[100, 200], [300, 400]], [[150, 250], [350, 450]]")

功能:通过拖拽控制点编辑图像
参数:图像路径、迭代次数、起始点列表、结束点列表(逗号分隔)
返回:编辑后的图像路径
实现位置iGPT/models/drag_gan.py

快速开始:环境搭建与基础调用

环境准备

  1. 克隆仓库:
git clone https://gitcode.com/gh_mirrors/in/InternGPT
cd InternGPT
  1. 安装依赖:
pip install -r requirements.txt
  1. 下载模型权重:
bash third-party/llama_download.sh

基础API调用示例

以下是一个完整的图像生成与编辑流程示例:

from iGPT.models import Text2Image, InstructPix2Pix

# 1. 生成基础图像
text2image = Text2Image(device="cuda", e_mode=False)
base_image = text2image.inference("a cat sitting on a bench")

# 2. 编辑生成的图像
instruct_pix2pix = InstructPix2Pix(device="cuda")
edited_image = instruct_pix2pix.inference(f"{base_image}, make the cat wear a hat")

print(f"生成的基础图像: {base_image}")
print(f"编辑后的图像: {edited_image}")

二次开发指南:扩展新功能

InternGPT的模块化设计使得扩展新功能变得简单。以下是添加自定义工具的步骤:

步骤1:创建新工具类

iGPT/models/目录下创建新的Python文件,例如custom_tool.py

from .utils import gen_new_name
from PIL import Image

class CustomTool:
    def __init__(self, device):
        self.device = device
        # 初始化你的模型或工具
    
    @prompts(name="Custom Tool Description",
             description="useful when you want to do something with custom tool. "
                         "The input to this tool should be a string representing the image_path.")
    def inference(self, inputs):
        # 实现你的工具逻辑
        image_path = inputs.strip()
        result_path = gen_new_name(image_path, "custom_tool")
        
        # 处理图像...
        
        return result_path

步骤2:注册新工具

iGPT/models/__init__.py中添加新工具:

from .custom_tool import CustomTool

__all__ = [
    # ... 其他工具
    'CustomTool'
]

步骤3:集成到控制器

修改iGPT/controllers/ConversationBot.py,添加对新工具的支持:

def init_agent(self):
    # ... 现有代码
    if "CustomTool" in self.load_dict:
        from iGPT.models import CustomTool
        self.tools.append(CustomTool(device=self.load_dict["CustomTool"]))
    # ...

高级应用:多工具协同工作流

InternGPT支持多个工具协同工作,实现复杂任务。以下是一个图像分析与编辑的工作流示例:

# 1. 上传图像
image_path = "user_upload.png"

# 2. 图像分割
sam = SegmentAnything(device="cuda")
seg_path = sam.inference(image_path)

# 3. OCR识别
ocr = ImageOCRRecognition(device="cuda")
text = ocr.inference(image_path)

# 4. 根据识别结果生成新图像
seg_text2image = SegText2Image(device="cuda")
result_path = seg_text2image.inference(f"{seg_path}, generate a new image with text: {text}")

常见问题与解决方案

模型加载问题

问题:部分模型加载缓慢或内存不足
解决方案:使用e_mode=True启用经济模式,自动管理GPU内存:

text2image = Text2Image(device="cuda", e_mode=True)

API调用错误

问题:API调用返回错误或无响应
解决方案:检查输入格式是否正确,确保参数符合要求。详细错误信息可在日志中查看。

性能优化

建议

  • 对于批量处理,使用batch_size参数
  • 对大图像进行预处理,降低分辨率
  • 使用模型量化减少内存占用

总结

InternGPT提供了灵活而强大的API接口,使开发者能够轻松构建和扩展AI应用。通过本文档介绍的核心API和二次开发方法,你可以快速集成新的AI模型,创建自定义工作流,实现丰富的多模态交互功能。

无论是开发简单的图像编辑工具,还是构建复杂的多模态应用,InternGPT都为你提供了坚实的基础和灵活的扩展能力。开始探索吧!

【免费下载链接】InternGPT InternGPT (iGPT) is an open source demo platform where you can easily showcase your AI models. Now it supports DragGAN, ChatGPT, ImageBind, multimodal chat like GPT-4, SAM, interactive image editing, etc. Try it at igpt.opengvlab.com (支持DragGAN、ChatGPT、ImageBind、SAM的在线Demo系统) 【免费下载链接】InternGPT 项目地址: https://gitcode.com/gh_mirrors/in/InternGPT

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐