多模态(1)—— OpenAI 多模态入门

1. 多模态概述

多模态技术,指的是通过跨模态对齐(如将图像与描述文本关联)和信息互补(如视频结合语音理解情感),实现更全面的感知能力。例如,大模型不仅能理解“苹果”的文字描述,还能识别图像中的苹果并关联其味道、用途等知识。常见的多模态类型包括文生图、文生视频、图片理解等等。

这里我列了一张表格,整理出当下主流的多模态大模型及其用途:

多模态场景

常用模型

备注

图-文(Image-to-Text)

  • CLIP
  • GPT-4V
  • CLIP通过对比学习连接图像和文本,适用于图像分类等任务。
  • GPT-4V可以分析图像输入,适用于图像理解和生成。

文-图(Text-to-Image)

  • DALL-E
  • Stable Diffusion
  • Midjourney

这些是行业领先的生成图像的模型,基于文本描述生成高质量图像。

文-视频(Text-to-Video)

  • Sora
  • 快手可灵
  • Pica

通过文字描绘,生成专业级别的视频。

视频-文(Video-to-Text)

GPT-4o

GPT-4o能够对音视频流进行解读和理解。

TTS(Text-to_Speech)

  • TTS-1
  • TTS-1-hd

生成接近人类的语音,仅需几秒钟的语音样本即可生成高质量音频。

ASR(Speech-to-Text)

Whisper

开源的语音识别系统,用于将语音转录为文本。

OCR(Optical Character Recognition)

  • GPT-4V
  • GPT-4o
  • DocTR
  • EasyOCR

GPT-4V和EasyOCR等模型和技术在图像文本识别任务中表现优异。

了解了多模态大模型的分类及应用场景之后,下面我们就从 OpenAI 入手,实战下多模态的功能。

2. 文生图

在当前的发展阶段,文生图可以说应该是应用范围最广、且发展最成熟的多模态应用场景之一了,在各大AIGC 应用中都可以看到各类根据文字生成图片的功能。OpenAI 的DALL-E、Stable Diffusion 和 Midjourney 都是比较主流的图片模型,这里我们通过代码演示下 DALL-E 的具体用法。

import os

import dotenv
# 导入openai依赖库
from openai import OpenAI

# 加载环境变量
dotenv.load_dotenv()

# 创建OpenAI客户端
client = OpenAI(base_url=os.getenv("OPENAI_API_BASE"))

# 调用images.generate接口,生成图片
resp = client.images.generate(
    model="dall-e-3",  # 指定模型,可选dall-e-2和dall-e-3(默认)
    prompt="一只英短蓝猫,正躺在沙发上睡觉,非常惬意",  # 生成图片的Prompt
    n=1,  # 生成图片的数量
    quality="hd",  # 图片质量,可选hd和standard(默认)
    size="1024x1024",  # 图片尺寸
    style="natural",  # 图片风格,可选vivid和natural(默认)
    response_format="url",  # 返回图片的格式,可选url和b64_json(默认)
)

# 打印生成图片的url
print(resp.data[0].url)

代码比较简单,这里对一些 API 参数进行一下补充说明:

  • model:指定生成图片的模型,可选的模型有 dall-e-2和dall-e-3,默认为 dall-e-3。
  • prompt:生成图片的描述。
  • n: 生成图片的数量
  • quality: 图片质量,可选值为 standard(标准)和 hd (高清),默认为 standard。如果采用 hd 质量的话,生成图片的细节会更加精细、图像一致性也更好。该参数仅 dall-e-3 模型生效。
  • response_format: 返回图片的格式,可选值为 url 和 b64_json,默认为 url。通常来说,url 适用于生成在线图片,而 b64_json 适应于本地图片。注:如果采用 url 模式,则该图片仅在60分钟内有效。
  • size: 图片尺寸,针对 dall-e-3 模型,可选值为 1024x1024、1792x1024 和 1024x1792。
  • style: 图片风格,有 vivid 和 natural 两种:vivid 为生动风,图片更富创造性;而 natural 为写实风,图片更自然、贴近现实。默认值为 vavid。

执行上面的代码,就可以生成一张蓝猫睡觉的图片。

除了图片生成之外,DALL-E 模型还支持图片编辑、图片伸缩、换脸等功能,大家如果感兴趣的话,可以参考官网文档进行学习,这里就不做展开了。

3. 图片理解

对于 gpt-4o 及以上的模型,即可以在 ChatCompletion 接口中,通过传入图片 url 的方式,实现图片理解的功能。参考代码如下:

import base64
import os

import dotenv
from openai import OpenAI

# 加载环境变量
dotenv.load_dotenv()

# 创建OpenAI客户端
client = OpenAI(base_url=os.getenv("OPENAI_API_BASE"))

# 读取本地图片并进行base64编码
with open("./data/cat.png", "rb") as image_file:
    encoded_image = base64.b64encode(image_file.read()).decode('utf-8')

# 调用chat.completions.create接口,并指定content type为图片
response = client.chat.completions.create(
    model="gpt-4o-mini",  # 使用gpt-4o-mini模型
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "给我讲下这张图片描绘了什么,用中文回答。"},
                {
                    "type": "image_url",  # 指定content类型为image_url,并将本地图片的base64编码后的路径传递过去
                    "image_url": {
                        "url": f"data:image/png;base64,{encoded_image}",
                    }
                },
            ],
        }
    ],
    max_tokens=300,
)

# 打印结果
print(response.choices[0].message.content)

这里的 API 也非常简单,还是通用的 Chat Completion 格式,只是需要特别注意下 image_url 的用法:

  • 针对在线图片,可以直接传入图片的公网 url ,模型会将图片下载后再进行处理。
  • 针对本地图片,需要首先对图片进行 BASE64 编码,之后把编码后的路径按照固定格式:data:image/png;base64,{encoded_image} 传入。

图片识别的结果如下:

这张图片描绘了一只可爱的灰色猫咪正在沙发上安静地睡觉。猫咪蜷缩成一个圆球,显得非常舒适和放松。沙发上有几只不同颜色的靠垫,而背景的光线柔和,营造出温馨、宁静的居家气氛。整体画面让人感到放松和愉悦。

4. 文本转语音

介绍完了图片,我们再来看下多模态中的 Audio 语音类型。

OpenAI 提供了一个 TTS (Text-to-Speech)模型,可以根据文本生成语音,非常适合新闻播报、电子书阅读类的 app 来使用。

下面我们看下具体的代码。

import os

import dotenv
from openai import OpenAI

# 加载环境变量
dotenv.load_dotenv()

# 创建OpenAI客户端
client = OpenAI(base_url=os.getenv("OPENAI_API_BASE"))

# 指定文件路径
speech_file_path = "./data/静夜思.mp3"

# 指定语言内容
text = "床前明月光,疑似地上霜。举头望明月,低头思故乡"

# 调用TTS API,生成音频文件
response = client.audio.speech.create(
    model="tts-1",  # 指定模型,可选tts-1和tts-1-hd
    voice="alloy",  # 指定音色,TTS模型支持多种音色,如alloy、ash等
    input=text,  # 指定文本内容
)

# 将音频文件保存到本地
response.stream_to_file(speech_file_path)
print("音频生成成功")

这部分的代码也非常简单,主要需要关注如下几个参数:

  • model: 指定语音模型,目前可选的只有tts-1和tts-1-hd。
  • voice: 设置音色,TTS 模型内置了多种音色,如alloy、ash等,可以根据不同场景进行选择。
  • input: 音频内容。

小结

本篇文章中,我们介绍了当下在大模型领域非常火爆的多模态功能,并以 OpenAI 的相关模型为例,具体讲解了如何实现文生图、图片理解和文本转语音等功能。

多模态相关技术目前还不算非常成熟,内容的一致性、流畅度、指令遵从等一些列问题还有待解决。相信随着大模型能力的快速提升,多模态将会被越来越广泛的应用到各类业务场景中。毕竟,图片、音频、视频才是对人类更加友好的内容形态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张申傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值