OpenAI API - Vision(视觉功能) 的概念与使用

目录

前言

什么是视觉功能API?

主要功能

图像识别与分类:

视频内容分析:

场景描述与自动旁白:

面部识别与情感分析:

应用场景

媒体与娱乐:

安防与监控:

电子商务:

医疗健康:

技术优势

示例:使用 GPT 的视觉能力获取视频描述

生成视频描述

为视频生成旁白

总结


前言

        大家好,今天咱们做一期 关于Vision - 视觉功能的API调用,包括对于这个功能的一些理解,后面我还会附带一个具体的效果视频

什么是视觉功能API?

视觉功能API是一种基于人工智能和计算机视觉技术的接口,允许开发者在应用程序中集成图像和视频处理能力。这些API利用深度学习算法,能够自动分析和理解图像与视频内容,从而实现图像识别、物体检测、场景描述等功能。

主要功能
  1. 图像识别与分类
    • 通过视觉功能API,可以自动识别图像中的物体,并对其进行分类。例如,识别图片中的动物、车辆、建筑物等。
  2. 视频内容分析
    • 视觉功能API可以逐帧分析视频内容,提取关键信息,生成视频描述,甚至可以进行实时监控与告警。
  3. 场景描述与自动旁白
    • API不仅能识别图像和视频中的物体,还能理解场景,并生成相应的自然语言描述。例如,自动为视频生成旁白脚本,提高视频内容的可访问性。
  4. 面部识别与情感分析
    • 通过面部识别技术,API可以识别和验证个人身份,甚至能够分析面部表情,判断情感状态。
应用场景
  1. 媒体与娱乐
    • 在视频制作和编辑中,视觉功能API可以自动生成视频旁白,提高生产效率,节省人力成本。
  2. 安防与监控
    • 在安防领域,通过实时视频分析,API可以帮助识别潜在威胁,提供即时告警,提升安全性。
  3. 电子商务
    • 在线零售商可以利用视觉功能API进行产品推荐和视觉搜索,提升用户购物体验。
  4. 医疗健康
    • 通过分析医学影像,API可以辅助医生诊断疾病,提高诊断准确率和效率。
技术优势
  • 高精度识别:利用最先进的深度学习算法,视觉功能API能够提供高精度的图像和视频识别能力。
  • 易于集成:通过标准化的API接口,开发者可以轻松地将视觉功能集成到现有的应用程序中。
  • 实时处理:支持实时图像和视频分析,能够在毫秒级别内提供分析结果,适用于对速度要求高的应用场景。
示例:使用 GPT 的视觉能力获取视频描述
  • 导入必要的库
    • cv2 (OpenCV):用于读取视频。
    • base64:用于将图像编码为 base64。
    • time:用于时间操作。
    • openai:用于与 OpenAI API 交互。
    • os:用于获取环境变量中的 API 密钥。
    • requests:用于发送 HTTP 请求。
from IPython.display import display, Image, Audio
import cv2  # We're using OpenCV to read video, to install !pip install opencv-python
import base64
import time
from openai import OpenAI
import os
import requests
  • 初始化 OpenAI 客户端
    • 从环境变量中获取 OpenAI API 密钥。如果没有设置环境变量,可以直接在代码中设置 API 密钥。
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY", "<your OpenAI API key if not set as env var>"))
  • 读取视频并提取帧
    • 使用 OpenCV 读取视频文件 bison.mp4
    • 循环读取视频中的每一帧,将其编码为 base64 格式,并存储在 base64Frames 列表中。
    • 强调一下,读取到每一帧后直接持久化一下,免得在测试过程中重复读取视频浪费时间
base64Frames = []
while video.isOpened():
    success, frame = video.read()
    if not success:
        break
    _, buffer = cv2.imencode(".jpg", frame)
    base64Frames.append(base64.b64encode(buffer).decode("utf-8"))

video.release()
print(len(base64Frames), "frames read.")

# 保存 base64Frames 到文件中
with open("data/base64_frames.json", "w") as f:
    json.dump(base64Frames, f)
print("json field created complete")

在这个过程中,视频 bison.mp4 被逐帧读取,并将每一帧编码为 JPEG 格式的图像,然后再转换为 base64 编码字符串,存储在 base64Frames 列表中

-------------------------------------------------------------------------------------------------------------------

我们通过逐帧显示视频帧来确认它们是否正确读取

注:这个地方我强调一下,此处代码可以忽略,这段代码在 Jupyter Notebook 中运行时,图像会显示在 Notebook 的输出单元格中。具体来说,每次调用 clear_output 方法时,Notebook 会在同一个输出单元格中更新显示的图像,模拟视频播放效果。

如果你在本地 Python 环境中(非 Jupyter Notebook)运行这段代码,是看不到图像显示的,因为 displayImage 函数是 IPython 库的一部分,专门用于 Jupyter Notebook 中的显示。

display_handle = display(None, display_id=True)
for img in base64Frames:
    clear_output(wait=True)
    display(Image(data=base64.b64decode(img.encode("utf-8"))))
    time.sleep(0.025)

这个代码片段中,我们使用 display 函数初始化一个显示句柄,然后循环遍历 base64Frames 列表,将每一帧解码并显示出来,间隔时间为 0.025 秒。

生成视频描述

在确认帧读取正确后,我们准备生成视频的描述。我们不需要发送每一帧给 GPT 模型,只需要发送部分帧即可。

  1. 构建提示信息

    • PROMPT_MESSAGES 包含了用户的请求内容和部分帧(每隔 50 帧取一帧)。
  2. 发送请求给 GPT 模型

    • 使用 client.chat.completions.create 方法发送请求,并指定模型为 gpt-4o
PROMPT_MESSAGES = [
    {
        "role": "user",
        "content": [
            "这些是我想上传的视频帧。生成一个吸引人的描述,注意我要中文的描述,要有一些哲理性,我可以随视频一起上传",
            *map(lambda x: {"image": x, "resize": 768}, base64Frames[0::50]),
        ],
    },
]
params = {
    "model": "gpt-4o",
    "messages": PROMPT_MESSAGES,
    "max_tokens": 200,
}

result = client.chat.completions.create(**params)
print(result.choices[0].message.content)
为视频生成旁白

接下来,我们为视频生成旁白脚本,并使用 TTS API 生成语音。

  1. 构建旁白提示信息PROMPT_MESSAGES 包含了请求的内容和部分帧(每隔 60 帧取一帧)。

  2. 发送请求给 GPT 模型:使用 client.chat.completions.create 方法,获取旁白脚本。

  3. 使用 TTS API 生成语音:  将旁白脚本传递给 TTS API 生成语音文件,并显示音频。
video_duration = 19  # 视频时长,单位为秒
characters_per_second = 4  # 假设每秒的语速为4个字
max_characters = int(video_duration * characters_per_second)  # 最大字数

# 假设宽度调整为768像素,计算相应的高度
width = 720
aspect_ratio = 9 / 16  # 竖版视频的宽高比
height = int(width / aspect_ratio)
# 将调整后的宽高作为字典中的值
resize_values = (width, height)

PROMPT_MESSAGES = [
    {
        "role": "user",
        "content": [
            "这些是视频的帧,请用David Attenborough 的风格 给我生成一个简短的中文旁白脚本,最好风格上再浪漫一些 ,回复的内容只包括旁边并将其限制在最多{}个单词以内.".format(max_characters),
            *map(lambda x: {"image": x, "resize": resize_values}, base64Frames[0::60]),
        ],
    },
]
params = {
    "model": "gpt-4o",
    "messages": PROMPT_MESSAGES,
    "max_tokens": 500,
}

result = client.chat.completions.create(**params)
print(result.choices[0].message.content)

response = requests.post(
    "https://api.openai.com/v1/audio/speech",
    headers={
        "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}",
    },
    json={
        "model": "tts-1-1106",
        "input": result.choices[0].message.content,
        "voice": "onyx",
        "volume": 0.8,
    },
)

audio = b""
for chunk in response.iter_content(chunk_size=1024 * 1024):
    audio += chunk

with open("data/output_audio.mp3", "wb") as f:
    f.write(audio)

通过这些步骤,我们实现了从视频帧提取、生成视频描述和旁白脚本,到最后生成语音旁白的完整流程

总结

        视觉功能API正在改变我们与图像和视频互动的方式。通过为应用程序赋予视觉理解能力,这些API不仅提升了用户体验,还开创了全新的应用场景。无论是媒体、安防、电子商务还是医疗领域,视觉功能API都将为各行各业带来前所未有的创新和变革。

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值