作者 | 崔皓
審校 | 重樓
摘要
本文介紹了OpenAI的最新進(jìn)展,重點(diǎn)關(guān)注其在多模態(tài)技術(shù)領(lǐng)域的突破。文章首先探討了GPT-4 Turbo模型的優(yōu)化和多模態(tài)功能的融合,如圖像生成和文本到語(yǔ)音轉(zhuǎn)換。隨后,作者深入解析多模態(tài)技術(shù)的工作原理,特別是文本到圖像的轉(zhuǎn)換過(guò)程。通過(guò)實(shí)際應(yīng)用和編程實(shí)例,展示了如何利用這些技術(shù)對(duì)圖像和視頻內(nèi)容進(jìn)行識(shí)別,以及將識(shí)別內(nèi)容轉(zhuǎn)換為語(yǔ)音,體現(xiàn)了多模態(tài)技術(shù)在實(shí)際應(yīng)用中的廣泛潛力和影響力。
開篇
OpenAI最近在其平臺(tái)上宣布了一系列引人注目的新增和改進(jìn)功能,這些更新旨在進(jìn)一步推動(dòng)人工智能的邊界擴(kuò)展。這些更新不僅包括了性能更強(qiáng)大且成本更低的新型GPT-4 Turbo模型,而且還引入了多模態(tài)能力,這將極大地?cái)U(kuò)展開發(fā)者和研究人員的創(chuàng)新空間。以下是這些更新的要點(diǎn):
1.GPT-4 Turbo模型:這個(gè)新模型代表了大規(guī)模語(yǔ)言模型的最新進(jìn)展。它不僅性能更強(qiáng)大,而且價(jià)格更親民。這一模型支持高達(dá)128K的上下文窗口,意味著可以處理更長(zhǎng)的對(duì)話和文本。GPT-4 Turbo的出現(xiàn),顯著提升了開發(fā)者利用大型語(yǔ)言模型潛能的能力,讓模型成為了一個(gè)真正的“全才”。
2.多模態(tài)功能:在多模態(tài)領(lǐng)域的最新進(jìn)展尤為引人注目。OpenAI平臺(tái)上的新功能包括了視覺能力的提升、圖像創(chuàng)造(DALL·E 3)以及文本到語(yǔ)音(TTS)技術(shù)。這些多模態(tài)功能的結(jié)合不僅開啟了新的應(yīng)用場(chǎng)景,還為用戶提供了一個(gè)更加豐富和互動(dòng)的體驗(yàn)。
3.助手API(Assistants API):OpenAI新推出的助手API讓開發(fā)者更加便捷地構(gòu)建目標(biāo)明確的AI應(yīng)用。這個(gè)API提供了調(diào)用模型和工具的簡(jiǎn)化方式,從而使開發(fā)復(fù)雜的輔助性AI應(yīng)用成為可能,無(wú)論是為了業(yè)務(wù)流程自動(dòng)化,還是為了增強(qiáng)用戶體驗(yàn)。
看到這些功能的加入,讓人熱血澎湃,我迫不及待地登陸GPT嘗鮮這些功能。特別是多模態(tài)的功能讓我印象深刻,這里我將實(shí)踐操作以及代碼的分析與大家做一個(gè)分享。
多模態(tài)初探
多模態(tài)技術(shù)是一個(gè)日益流行的領(lǐng)域,它結(jié)合了不同類型的數(shù)據(jù)輸入和輸出,如文本、聲音、圖像和視頻,以創(chuàng)造更豐富、更直觀的用戶體驗(yàn)。以下是多模態(tài)技術(shù)的幾個(gè)關(guān)鍵方面:
1.綜合多種感知模式:多模態(tài)技術(shù)整合了視覺(圖像、視頻)、聽覺(語(yǔ)音、音頻)、觸覺等多種感知模式。這種集成使得AI系統(tǒng)能夠更好地理解和解釋復(fù)雜的環(huán)境和情境。
2.增強(qiáng)的用戶交互:通過(guò)結(jié)合文本、圖像和聲音,多模態(tài)技術(shù)提供了更自然、更直觀的用戶交互方式。例如,用戶可以通過(guò)語(yǔ)音命令詢問(wèn)問(wèn)題,同時(shí)接收?qǐng)D像和文本形式的答案。
3.上下文感知能力:多模態(tài)系統(tǒng)能夠分析和理解不同類型數(shù)據(jù)之間的關(guān)系,從而提供更準(zhǔn)確的信息和響應(yīng)。例如,在處理自然語(yǔ)言查詢時(shí),系統(tǒng)能夠考慮相關(guān)的圖像或視頻內(nèi)容,從而提供更為豐富的回答。
4.創(chuàng)新應(yīng)用:多模態(tài)技術(shù)的應(yīng)用范圍廣泛,包括但不限于自動(dòng)化客服、智能助手、內(nèi)容創(chuàng)作、教育、醫(yī)療和零售等領(lǐng)域。它允許創(chuàng)建新型的應(yīng)用程序,這些應(yīng)用程序能夠更好地理解和響應(yīng)用戶的需求。
5.技術(shù)挑戰(zhàn):雖然多模態(tài)技術(shù)提供了巨大的潛力,但它也帶來(lái)了諸如數(shù)據(jù)融合、處理不同數(shù)據(jù)類型的復(fù)雜性以及確保準(zhǔn)確性和效率的挑戰(zhàn)。
6. OpenAI的多模態(tài)實(shí)例:在OpenAI的框架下,多模態(tài)功能的一個(gè)顯著例子是DALL·E 3,它是一個(gè)先進(jìn)的圖像生成模型,可以根據(jù)文本描述創(chuàng)建詳細(xì)和創(chuàng)造性的圖像。此外,文本到語(yǔ)音(TTS)技術(shù)則將文本轉(zhuǎn)換為自然 sounding的語(yǔ)音,進(jìn)一步豐富了人機(jī)交互的可能性。
多模態(tài)原理解析
前面我們對(duì)多模態(tài)進(jìn)行了基本的描述,多模態(tài)是指能夠理解和處理多種類型數(shù)據(jù)(如文本、圖像、聲音等)的技術(shù)。實(shí)現(xiàn)文本-圖片-聲音-視頻之間的轉(zhuǎn)換。轉(zhuǎn)化是表象,實(shí)質(zhì)需要理解。
在人工智能領(lǐng)域,多模態(tài)方法通常結(jié)合了自然語(yǔ)言處理(NLP)、計(jì)算機(jī)視覺(CV)和其他信號(hào)處理技術(shù),以實(shí)現(xiàn)更全面的數(shù)據(jù)理解和處理能力。
為了說(shuō)明多模態(tài)的工作原理,我們這里舉一個(gè)從文字轉(zhuǎn)圖片的例子,幫助大家理解。我們將整個(gè)過(guò)程展示如下:
1. 文本特征提取:
首先,文本輸入通過(guò)一個(gè)文本模型(例如一個(gè)預(yù)訓(xùn)練的語(yǔ)言模型)來(lái)提取文本特征。這個(gè)過(guò)程涉及將文本轉(zhuǎn)換成一個(gè)高維空間的向量,這個(gè)向量能夠表示文本的語(yǔ)義內(nèi)容。
2. 融合模型:
在某些情況下,確實(shí)會(huì)存在一個(gè)專門的融合模型,它是在訓(xùn)練階段通過(guò)學(xué)習(xí)如何結(jié)合不同模態(tài)的數(shù)據(jù)而得到的。這個(gè)融合模型將在推理階段使用。
在其他情況下,融合模型可能是隱含的。例如,在條件生成模型中,文本特征向量直接用作生成圖像的條件,而不需要顯式的融合步驟。
3.條件生成:
融合模型(或者直接從文本模型得到的特征向量)用于為圖像生成模型設(shè)定條件。這個(gè)條件可以理解為指導(dǎo)生成模型“理解”文本內(nèi)容,并據(jù)此生成匹配的圖像。
4.圖像生成:
最后,圖像生成模型(如DALL·E或其他基于生成對(duì)抗網(wǎng)絡(luò)的模型)接收這個(gè)條件向量,并生成與之相匹配的圖像。這個(gè)過(guò)程通常涉及到大量的內(nèi)部計(jì)算,模型會(huì)嘗試生成與條件最匹配的圖像輸出。
整個(gè)流程可以簡(jiǎn)化為:文本輸入 → 文本特征提取 → 特征融合(如果有)→ 條件生成 → 圖像輸出。在這個(gè)過(guò)程中,“融合模型”可能是一個(gè)獨(dú)立的模型,也可能是條件生成模型的一部分。關(guān)鍵點(diǎn)是,推理時(shí)的特征融合是基于在訓(xùn)練階段學(xué)到的知識(shí)和參數(shù)進(jìn)行的。
多模型體驗(yàn)
了解了多模型實(shí)現(xiàn)原理之后,我們來(lái)登陸ChatGPT體驗(yàn)一下,現(xiàn)在在ChatGPT4中已經(jīng)集成了DALLE 3 的功能,我們只需要輸入指令就可以生成對(duì)應(yīng)的圖片。如下所示,我們通過(guò)文字描述一只可愛的貓咪,ChatGPT 就能夠幫我完成圖片的生成。
不止于此,OpenAI還能夠識(shí)別圖片,當(dāng)你提供圖片之后,OpenAI會(huì)根據(jù)圖片描述其中的內(nèi)容,如下圖我們從網(wǎng)絡(luò)上找到一張小貓的圖片,丟給OpenAI讓它識(shí)別一下。
這次我們通過(guò)調(diào)用OpenAI的API,來(lái)實(shí)現(xiàn)上述功能。畢竟作為程序員不敲敲代碼,只是用工具輸入文字還是不太過(guò)癮。
這段代碼使用 Python 和 OpenAI 庫(kù)來(lái)與 OpenAI 的 GPT-4 API 交互。目的是創(chuàng)建一個(gè)聊天會(huì)話,其中用戶可以向模型發(fā)送圖像地址。代碼通過(guò)URL地址,讀取圖像并且對(duì)其進(jìn)行識(shí)別,最終輸出理解的文字。
import os
import openai
# 導(dǎo)入所需庫(kù):os 用于讀取環(huán)境變量,openai 用于與 OpenAI API 交互。
openai.api_key = os.getenv('OPENAI_API_KEY')
# 從環(huán)境變量獲取 OpenAI 的 API 密鑰并設(shè)置。這樣可以避免將密鑰硬編碼在代碼中,提高安全性。
response = openai.ChatCompletion.create(
model="gpt-4-vision-preview",
# 指定使用的 GPT-4 模型版本。這里用的 'gpt-4-vision-preview' 表示一個(gè)特別的版本,可能包含處理圖像的能力。
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "這張圖片表達(dá)了什么意思?"},
{
"type": "image_url",
# 用戶消息 (messages),包括一段文本和一個(gè)圖像的 URL
"image_url": "http://www.jituwang.com/uploads/allimg/160327/257860-16032H3362484.jpg"
},
],
}
],
# 響應(yīng)的最大長(zhǎng)度 (max_tokens)
max_tokens=200,
)
print(response.choices[0])
雖然代碼比較簡(jiǎn)單,我們這里還是解釋一下。
導(dǎo)入庫(kù):代碼首先導(dǎo)入 os 和 openai。os 庫(kù)用于讀取環(huán)境變量中的 API 密鑰,而 openai 庫(kù)用于執(zhí)行與 OpenAI API 的交互。
創(chuàng)建聊天請(qǐng)求:
- Model:指定了要使用的 OpenAI 模型為 "gpt-4-vision-preview",這個(gè)版本的大模型具備處理圖像的能力。
- Messages:這是一個(gè)字典列表,模擬了用戶與 AI 聊天的過(guò)程。在這個(gè)例子中,用戶通過(guò)文本詢問(wèn)一張圖片的含義,并提供了圖片的 URL。
- max_tokens:定義了模型回答的最大長(zhǎng)度,這里設(shè)置為 200 tokens。
執(zhí)行之后,結(jié)果是一段JSON文本,我們使用編輯器打開,如下圖所示,程序識(shí)別出圖片的內(nèi)容,是一只白色的小貓,并且對(duì)動(dòng)作和表情都進(jìn)行了精確的描述。
從識(shí)別圖片到識(shí)別視頻
實(shí)際上OpenAI這次提供的功能不只是對(duì)圖片的識(shí)別,還可以對(duì)其進(jìn)行擴(kuò)展,將對(duì)圖片識(shí)別的能力推廣到視頻上。如下圖所示,假設(shè)一段1秒鐘的視頻是由24幀圖片組成,如果我們能夠?qū)⒚繌垐D片進(jìn)行識(shí)別,并且將識(shí)別的信息進(jìn)行總結(jié)生成摘要是不是就可以對(duì)視頻進(jìn)行識(shí)別了呢?
這個(gè)想法不錯(cuò),但是需要通過(guò)實(shí)踐去驗(yàn)證,我們使用一段代碼加入早已準(zhǔn)備好的視頻,通過(guò)OpenCV組件加載視頻,并且對(duì)視頻的內(nèi)容進(jìn)行讀取。將讀取之后的視頻內(nèi)容,分成一幀一幀的圖片,通過(guò)對(duì)圖片的識(shí)別達(dá)到對(duì)視頻識(shí)別的目的。
代碼如下:
1.導(dǎo)入組件庫(kù)
# 導(dǎo)入IPython用于顯示功能
from IPython.display import display, Image, Audio
# 導(dǎo)入cv2,我們使用OpenCV庫(kù)來(lái)讀取視頻文件
import cv2
# 導(dǎo)入base64庫(kù)用于數(shù)據(jù)編碼
import base64
# 導(dǎo)入time庫(kù)用于控制顯示時(shí)間
import time
# 導(dǎo)入openai庫(kù),用于調(diào)用OpenAI的API
import openai
# 導(dǎo)入os庫(kù),用于操作系統(tǒng)級(jí)別的接口,如環(huán)境變量
import os
# 導(dǎo)入requests庫(kù),用于發(fā)起HTTP請(qǐng)求
import requests
當(dāng)然,我會(huì)按照您的要求調(diào)整代碼注釋的位置,使其位于相關(guān)代碼行的上方。
視頻處理
打開一個(gè)視頻文件("the-sea.mp4"),讀取其中的每一幀,并將這些幀轉(zhuǎn)換成 JPEG 格式后編碼為 base64 字符串。這種處理方式在需要以文本格式存儲(chǔ)或傳輸圖像數(shù)據(jù)的場(chǎng)景中非常有用,如在網(wǎng)絡(luò)通信中發(fā)送圖像數(shù)據(jù)。
import cv2
# 導(dǎo)入 OpenCV 庫(kù)
video = cv2.VideoCapture("the-sea.mp4")
# 使用 OpenCV 打開視頻文件 "the-sea.mp4"
base64Frames = []
# 初始化一個(gè)空列表,用于存儲(chǔ)轉(zhuǎn)換為 base64 編碼的幀
while video.isOpened():
# 當(dāng)視頻成功打開時(shí),循環(huán)讀取每一幀
success, frame = video.read()
# 讀取視頻的下一幀,'success' 是一個(gè)布爾值,表示是否成功讀取幀,'frame' 是讀取的幀
if not success:
break
# 如果未能成功讀取幀(例如視頻結(jié)束),則退出循環(huán)
_, buffer = cv2.imencode(".jpg", frame)
# 將讀取的幀(frame)編碼為 JPEG 格式,'_' 是一個(gè)占位符,表示我們不需要第一個(gè)返回值
base64Frames.append(base64.b64encode(buffer).decode("utf-8"))
# 將 JPEG 編碼的幀轉(zhuǎn)換為 base64 編碼,并將其解碼為 UTF-8 字符串,然后添加到列表 'base64Frames' 中
video.release()
print(len(base64Frames), "frames read.")
導(dǎo)入和初始化:首先導(dǎo)入所需的 OpenCV 庫(kù),并創(chuàng)建一個(gè)空列表 base64Frames 用于存儲(chǔ)編碼后的幀。
讀取視頻幀:通過(guò) while 循環(huán)和 video.read() 方法逐幀讀取視頻。如果讀取成功,將幀編碼為 JPEG 格式,然后將這些 JPEG 格式的幀轉(zhuǎn)換為 base64 編碼,并添加到列表中。
資源管理和輸出:循環(huán)結(jié)束后,使用 video.release() 釋放視頻文件,隨后打印出讀取的幀數(shù),作為處理的結(jié)果。這提供了對(duì)視頻內(nèi)容處理情況的直觀了解。
顯示視頻幀
遍歷一個(gè)包含 base64 編碼的圖像幀列表,連續(xù)顯示這些幀,從而實(shí)現(xiàn)視頻播放的效果。
from IPython.display import display, Image
import time
# 導(dǎo)入必要的庫(kù):IPython.display 中的 display 和 Image 用于顯示圖像,time 用于控制播放速度
display_handle = display(None, display_id=True)
# 創(chuàng)建一個(gè)顯示句柄,用于在之后更新顯示的圖像。'display_id=True' 允許之后通過(guò)該句柄更新顯示的內(nèi)容
for img in base64Frames:
# 遍歷包含 base64 編碼圖像幀的列表
display_handle.update(Image(data=base64.b64decode(img.encode("utf-8"))))
# 使用 display 句柄更新顯示的圖像。首先將 base64 編碼的字符串解碼回二進(jìn)制數(shù)據(jù),然后創(chuàng)建一個(gè) Image 對(duì)象并顯示
time.sleep(0.025)
# 在每幀之間暫停 0.025 秒,以便模擬視頻播放的效果
初始化顯示句柄:首先創(chuàng)建一個(gè) display_handle,它是一個(gè)可以更新的顯示對(duì)象。這樣做可以在之后循環(huán)中更新顯示的圖像,而不是創(chuàng)建新的圖像顯示。
遍歷和顯示圖像幀:使用 for 循環(huán)遍歷 base64Frames 列表中的每一個(gè) base64 編碼的圖像幀。在循環(huán)內(nèi)部,使用 display_handle.update() 方法來(lái)更新當(dāng)前顯示的圖像。這里涉及將 base64 編碼的字符串解碼為二進(jìn)制數(shù)據(jù),并使用 Image 對(duì)象將其轉(zhuǎn)換為可顯示的圖像。
控制播放速度:在每次更新圖像后,使用 time.sleep(0.025) 來(lái)暫停一段時(shí)間(0.025秒),這樣可以在圖像幀之間創(chuàng)建短暫的延遲,使得連續(xù)播放的視頻效果更加平滑。
查看視頻效果如下,我們截取了視頻中的一張圖片,可以看出是一段描述海上日落的視頻。
識(shí)別視頻內(nèi)容
使用 OpenAI 的 API 來(lái)描述一個(gè)視頻幀的內(nèi)容。首先設(shè)置請(qǐng)求的參數(shù),包括模型、API 密鑰、請(qǐng)求的提示信息,然后調(diào)用 API 并打印返回的內(nèi)容。
import os
import openai
# 導(dǎo)入所需的庫(kù):os 用于訪問(wèn)環(huán)境變量,openai 用于與 OpenAI 的 API 進(jìn)行交互
PROMPT_MESSAGES = [
{
"role": "user", # 標(biāo)記消息的發(fā)送者角色為用戶
"content": [
"這是我想上傳的視頻幀。能否幫我描述這張視頻幀的內(nèi)容。",
{"image": base64Frames[0], "resize": 768}, # 選擇列表中的第一幀圖像,縮放尺寸為 768 像素
],
},
]
# 設(shè)置提示信息,以指導(dǎo)模型進(jìn)行視頻幀的內(nèi)容描述
params = {
"model": "gpt-4-vision-preview", # 指定使用的模型版本
"messages": PROMPT_MESSAGES, # 使用前面設(shè)置的提示信息
"api_key": os.environ["OPENAI_API_KEY"], # 從環(huán)境變量中獲取 API 密鑰
"headers": {"Openai-Version": "2020-11-07"}, # 設(shè)置 API 版本頭信息
"max_tokens": 300, # 設(shè)定請(qǐng)求的最大令牌數(shù)
}
# 設(shè)置 API 調(diào)用的參數(shù)
result = openai.ChatCompletion.create(params)
# 使用提供的參數(shù)發(fā)起 API 調(diào)用
print(result.choices[0].message.content)
# 打印 API 返回的內(nèi)容,即模型對(duì)視頻幀內(nèi)容的描述
設(shè)置提示信息:PROMPT_MESSAGES 包含了 API 請(qǐng)求的核心信息,其中包括用戶角色標(biāo)記和要處理的內(nèi)容。這里的內(nèi)容是請(qǐng)求模型描述視頻幀的內(nèi)容,視頻幀作為 base64 編碼的字符串傳入。
配置 API 調(diào)用參數(shù):在 params 字典中配置了 API 調(diào)用所需的所有參數(shù),包括模型名稱、提示信息、API 密鑰、API 版本和請(qǐng)求的最大令牌數(shù)。
發(fā)起 API 調(diào)用:使用 openai.ChatCompletion.create 方法發(fā)起 API 調(diào)用,傳入之前配置的參數(shù)。這個(gè)調(diào)用將請(qǐng)求模型根據(jù)提供的視頻幀內(nèi)容進(jìn)行描述。
輸出結(jié)果:最后,打印出 API 返回的結(jié)果,即模型對(duì)視頻幀內(nèi)容的描述。
展示最終結(jié)果,如下:
這張圖片展示了一幅美麗的日落景象。太陽(yáng)正從水平線上緩緩下降,天空被染成了橙色和紅色的溫暖色調(diào)。太陽(yáng)的余暉在云層間穿透,形成了壯觀的光線和陰影效果。海面平靜,太陽(yáng)的反射在水面上畫出了一道閃耀的光路。遠(yuǎn)處的群山輪廓在天空的對(duì)比下顯得剪影般的輪廓分明。整體上,這是一幅寧?kù)o、和諧、引發(fā)深思的圖像。
看來(lái)OpenAI不僅描繪了視頻中的畫面,還對(duì)其的內(nèi)涵進(jìn)行了引申,這是要趕超人類的節(jié)奏了。
從識(shí)別內(nèi)容到語(yǔ)音播報(bào)
好了到現(xiàn)在,我們已經(jīng)完成了從圖片到文字,視頻到文字的轉(zhuǎn)換了。假設(shè)我們要將視頻上傳到網(wǎng)站時(shí),并且對(duì)視頻進(jìn)行解釋,此時(shí)不僅需要文字更需要一段專業(yè)的語(yǔ)音播報(bào)。好吧!我是想展示下面的功能,如何將視頻識(shí)別的文字轉(zhuǎn)化成語(yǔ)音播報(bào)。
下面這段代碼使用 Python 和 OpenAI 的語(yǔ)音合成 API 來(lái)將文本轉(zhuǎn)換為語(yǔ)音,即將視頻生成的文本(描述日落景象的文本)轉(zhuǎn)換成語(yǔ)音。然后,它接收并匯總響應(yīng)中的音頻數(shù)據(jù),并使用 Audio 對(duì)象來(lái)播放這段音頻。
import requests
from IPython.display import Audio
import os
# 導(dǎo)入所需的庫(kù):requests 用于發(fā)起 HTTP 請(qǐng)求,Audio 用于在 Jupyter Notebook 中播放音頻,os 用于讀取環(huán)境變量
# 向 OpenAI 的語(yǔ)音合成 API 發(fā)送 POST 請(qǐng)求
response = requests.post(
"https://api.openai.com/v1/audio/speech",
headers={
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}",
},
json={
"model": "tts-1", # 指定使用的語(yǔ)音合成模型
"input": result.choices[0].message.content, # 要轉(zhuǎn)換為語(yǔ)音的文本
"voice": "onyx", # 選擇的語(yǔ)音類型
},
)
audio = b""
# 初始化一個(gè)空字節(jié)串,用于累積音頻數(shù)據(jù)
# 逐塊讀取響應(yīng)中的音頻數(shù)據(jù)
for chunk in response.iter_content(chunk_size=1024 * 1024):
audio += chunk
# 使用 response.iter_content 方法按塊讀取音頻內(nèi)容,每塊最大為 1 MB,并將其累加到 audio 變量中
Audio(audio)
# 使用 IPython 的 Audio 對(duì)象播放累加的音頻數(shù)據(jù)
準(zhǔn)備和發(fā)起請(qǐng)求:首先導(dǎo)入所需的庫(kù),并準(zhǔn)備發(fā)起一個(gè) POST 請(qǐng)求到 OpenAI 的語(yǔ)音合成 API。請(qǐng)求頭部包含了 API 密鑰(從環(huán)境變量獲?。?,請(qǐng)求體包含了模型名稱、要轉(zhuǎn)換的文本內(nèi)容以及語(yǔ)音類型。
接收音頻數(shù)據(jù):從 API 響應(yīng)中逐塊讀取音頻數(shù)據(jù)。這里使用了 1 MB 作為每個(gè)數(shù)據(jù)塊的大小限制。通過(guò)循環(huán),將這些數(shù)據(jù)塊累加到一個(gè)字節(jié)串 audio 中。
播放音頻:最后,使用 Audio 對(duì)象來(lái)播放累積的音頻數(shù)據(jù)。這允許在 Jupyter Notebook 環(huán)境中直接播放音頻。
音頻結(jié)果如下:
大家可以嘗試上面的代碼,生成自己的語(yǔ)音文件。
總結(jié)
文章通過(guò)詳盡地探討OpenAI的多模態(tài)功能,展示了人工智能領(lǐng)域的最新進(jìn)展。從GPT-4 Turbo模型的介紹到多模態(tài)技術(shù)的應(yīng)用實(shí)例,不僅提供了技術(shù)的理論背景,還通過(guò)具體的代碼示例,展現(xiàn)了如何將這些技術(shù)實(shí)際應(yīng)用于圖像生成、視頻內(nèi)容識(shí)別和語(yǔ)音轉(zhuǎn)換。這不僅彰顯了AI技術(shù)的前沿動(dòng)向,也為讀者提供了實(shí)踐AI技術(shù)的洞見和啟發(fā)。
作者介紹
崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。