現今的 AI 技術雖然已能生成影片和評論,但仍無法完全自動地為影片新增準確的註解和標籤。影片處理流程通常需要將影片分割成幀,以便進行分析和處理。本文探討的技術方案並非旨在建立長篇電影,而是專注於短影片內容的自動生成和管理。此方案不需要 GPU 支援,但建議使用 GPU 以提升處理速度。影片內容的嵌入向量並非直接儲存在磁碟上,而是利用向量資料函式庫進行管理,例如 Pinecone。系統的核心是查詢向量資料函式庫以檢索相關資料,而非傳統的關聯式資料函式庫。系統包含顯示影像的功能,以便於視覺化呈現結果。檢查檔案存在和大小的函式對於確保系統穩定性和效率至關重要。這些技術方案專注於處理多模態資料,例如影片和文字。最後,本文也探討了 AI 技術在真實世界場景中的應用,例如影片內容的自動生成和標籤。

儲存幀

首先,需要確定要儲存的幀的路徑和檔名。可以使用 os.path.splitext 函式來分離檔名和副檔名,以便為每個幀建立一個唯一的路徑。

import os
import shutil

# 定義要儲存幀的路徑和檔名
file_name = "alpinist1.mp4"
root_name, extension = os.path.splitext(file_name)
root_name = root_name + extension.strip('.')

# 定義要儲存幀的目錄
target_directory = f'/content/drive/MyDrive/files/comments/{root_name}'

# 確保目錄存在
os.makedirs(target_directory, exist_ok=True)

# 定義源目錄(假設jpg檔案在當前目錄)
source_directory = os.getcwd()

# 列出所有jpg檔案並複製到目標目錄
for file in os.listdir(source_directory):
    if file.endswith('.jpg'):
        shutil.copy(os.path.join(source_directory, file), target_directory)

刪除檔案

如果需要在控制器執行完畢後刪除生成的檔案,可以使用 os 模組的 remove 函式或 shutil 模組的 rmtree 函式。以下是如何刪除檔案的示例:

import os
import shutil

# 定義是否刪除檔案
delf = True

if delf:
    # 刪除所有mp4檔案
    for file in os.listdir():
        if file.endswith('.mp4'):
            os.remove(file)
    # 或使用 shell 命令刪除所有mp4檔案
    #!rm -f *.mp4

注意:在刪除檔案之前,請確保您已經備份了重要的資料,以避免資料丟失。同時,請謹慎使用刪除命令,以免誤刪重要檔案。

Pipeline 2:向量儲存管理員

向量儲存管理員是一個AI代理,負責執行第6章中實作的任務,包括向量儲存的建立、資料上傳和查詢。這個過程的新意在於所有上傳的資料都是由AI生成的。現在,我們來看看GitHub倉函式庫中的Pipeline_2_The_Vector_Store_Administrator.ipynb檔案,瞭解如何建立向量儲存管理員。

建立向量儲存管理員

向量儲存管理員的建立分為四個步驟:

  1. 處理影片評論:管理員負責載入和準備評論資料,以便進行分塊處理。由於我們一次只處理一個影片,因此係統會刪除已經處理的檔案,以保持磁碟空間的常數。
  2. 分塊和嵌入資料集:資料集的列名(‘ID’、‘FrameNumber’、‘Comment’、‘FileName’)已經由玄貓準備好。程式使用與第6章中相同的功能對資料集進行分塊和嵌入。
  3. 建立Pinecone索引:Pinecone索引被建立,資料被上傳,如第6章中所述。
  4. 查詢向量儲存:查詢過程與第6章中相同,但這次使用了混合方法,既使用Pinecone向量儲存,又使用單獨的檔案系統儲存影片和影片幀。

查詢Pinecone索引

在GitHub上的筆記本中,步驟4實作了查詢Pinecone索引以找到匹配使用者輸入的評論並追蹤到影片的幀。這使我們可以顯示影片和幀。這種混合方法涉及查詢Pinecone索引以檢索資訊,並從另一個位置檢索媒體檔案。

  flowchart TD
    A[開始] --> B[處理影片評論]
    B --> C[分塊和嵌入資料集]
    C --> D[建立Pinecone索引]
    D --> E[查詢Pinecone索引]
    E --> F[顯示影片和幀]

圖表翻譯:

此圖表展示了向量儲存管理員的工作流程。首先,管理員處理影片評論,然後分塊和嵌入資料集。接下來,建立Pinecone索引,並上傳資料。最後,查詢Pinecone索引以檢索資訊,並顯示影片和幀。

內容解密:

向量儲存管理員是一個強大的工具,能夠高效地處理和查詢大規模的影片評論資料。透過使用Pinecone向量儲存和單獨的檔案系統,管理員可以實作混合查詢,既能夠檢索文字資訊,又能夠顯示影片和幀。這使得管理員非常適合於影片生產等應用場景。

搜尋系統的挑戰:尋找特定動作的籃球運動員

在評估搜尋系統的效能時,我們設計了一個相對困難的查詢,以測試其能力。查詢的目標是找到一位籃球運動員正在進行灌籃的場景。由於這種動作在整個影片資料集中相對較少,系統需要高度的準確性和效能來找到相關的結果。

查詢過程

首先,我們需要將查詢轉換為與資料函式庫中儲存的向量格式相匹配的嵌入式表示。這涉及使用預先訓練好的模型(在本例中為embedding_mode)來生成查詢嵌入。

import time

# 啟動計時器
start_time = time.time()

# 目標向量
query_text = "Find a basketball player that is scoring with a dunk."
query_embedding = get_embedding(query_text, model=embedding_mode)

接下來,我們執行一個相似性向量搜尋,比較查詢嵌入和資料集中的向量,以找到最匹配的結果。

# 執行查詢
query_results = index.query(vector=query_embedding, top_k=k, include_metadata=True)

顯示查詢結果

查詢完成後,我們印出結果,包括每個匹配項的ID、分數以及相關的後設資料(如果可用)。

print("查詢結果:")
for match in query_results['matches']:
    print(f"ID: {match['id']}, 分數: {match['score']}")
    
    # 檢查後設資料是否可用
    if 'metadata' in match:
        metadata = match['metadata']
        text = metadata.get('text', "無文字後設資料。")
        frame_number = metadata.get('frame_number', "無框架號碼。")
        file_name = metadata.get('file_name', "無檔案名稱。")
        
        print(f"文字: {text}")
        print(f"框架號碼: {frame_number}")
        print(f"檔案名稱: {file_name}")
    else:
        print("無後設資料可用。")

最後,我們計算並顯示回應時間,以評估系統的效能。

# 計算回應時間
response_time = time.time() - start_time
print(f"回應時間: {response_time} 秒")

這個過程展示了搜尋系統如何處理複雜查詢,並提供相關結果和後設資料,同時也考慮到系統的效能和回應時間。

影片顯示與下載

在上一節中,我們已經成功地從GitHub下載了影片檔案,並將其儲存到本地目錄中。現在,我們將展示如何使用Python標準函式來顯示這個影片。

顯示影片

首先,我們需要定義一個函式來顯示影片。這個函式將接受影片檔案名稱作為引數,並使用base64編碼來嵌入影片到HTML中。

import base64
from IPython.display import HTML

def display_video(file_name):
    # 開啟檔案以二進位制模式
    with open(file_name, 'rb') as file:
        video_data = file.read()
    
    # 將影片檔案編碼為base64
    video_url = base64.b64encode(video_data).decode()
    
    # 建立一個包含嵌入影片的HTML字串
    html = f'''
    <video width="640" height="480" controls>
    <source src="data:video/mp4;base64,{video_url}" type="video/mp4">
    Your browser does not support the video tag.
    </video>
    '''
    
    # 顯示影片
    return HTML(html)

# 呼叫函式顯示影片
file_name = "basketball3.mp4"
display_video(file_name)

下載檔案

如果您需要下載檔案,可以使用以下函式:

import os

def download(directory, file_name):
    # 確保目錄存在
    if not os.path.exists(directory):
        os.makedirs(directory)
    
    # 下載檔案(此處假設檔案已經存在於GitHub)
    # 實際下載邏輯可能涉及HTTP請求等,取決於您的具體需求
    
    print(f"檔案{file_name}已經下載到{directory}目錄中")

# 呼叫函式下載檔案
directory = "Chapter10/videos"
file_name = "basketball3.mp4"
download(directory, file_name)

結合顯示和下載

最終,您可以結合上述兩個函式來實作下載和顯示影片的功能。

# 下載檔案
download(directory, file_name)

# 顯示影片
display_video(file_name)

這樣,您就可以成功地下載和顯示指定的影片檔案了。

影片專家AI代理:自動化動態描述和標籤

在前面的章節中,我們已經看到AI代理如何共同合作,生成影片、評論影片幀、在向量儲存中更新嵌入式評論,並準備檢索過程。現在,我們將介紹影片專家AI代理的角色,它負責分析由玄貓(Commentator)生成的評論,指出認知失調(描述中不合適的部分),重寫評論,並提供標籤。

影片專家工作流程

影片專家AI代理的工作流程包括以下步驟:

  1. 分析評論:影片專家AI代理接收由玄貓生成的評論,並分析其內容。
  2. 指出認知失調:影片專家AI代理識別評論中不合適的部分,例如描述中不一致或不合理的內容。
  3. 重寫評論:根據分析結果,影片專家AI代理重寫評論,以使其更加合理和一致。
  4. 提供標籤:影片專家AI代理為影片提供標籤,以便於後續的分類別和使用。

Metrics計算和顯示

影片專家AI代理的工作流程還包括Metrics計算和顯示部分,這部分與第7章中介紹的Building Scalable Knowledge-Graph-Based RAG with Wikipedia API and LlamaIndex中的Metrics計算和顯示部分相同。

影片專家角色

影片專家的角色是確保評論的合理性和一致性,並為影片提供標籤,以便於後續的分類別和使用。這與玄貓(Commentator)的角色不同,玄貓只需描述所看到的內容,而不需要考慮描述的合理性和一致性。

影片專家AI代理的引入為影片分析和標籤提供了新的可能性。未來,我們可以期待這種系統在各個領域中得到應用,例如消防、醫學影像、行銷等。透過使用AI代理共同合作,生成影片、評論影片幀、更新嵌入式評論、準備檢索過程和分析評論,我們可以建立出更加智慧和自動化的影片分析系統。

建立 Pinecone 索引連線和查詢

首先,我們需要連線到 Pinecone 索引,正如在本章的 Pipeline 2 中所描述的 Vector Store Administrator 部分。這次,我們不會上傳資料,而是連線到向量儲存。

定義 RAG 函式

接下來,我們需要定義 RAG 函式,利用我們在 Pipeline 1 和 Pipeline 2 中建立的直截了當的函式。這些函式將用於查詢向量儲存和生成增強的回應。

查詢向量儲存

查詢向量儲存基本上就是查詢 Pinecone 索引,如 Pipeline 2 中所描述的。這一步驟涉及提交查詢並從向量儲存中檢索相關結果。

增強生成

最後,增強生成是 Video Expert GPT-4o 的主要角色,它負責分析和改進向量儲存查詢的回應。這個最終步驟包括評估和度量函式,以確保生成的回應是合理和有用的。

實作策略

實作影片生產使用案例有很多種策略,但 Video Expert 在其中扮演著重要的角色。為了深入瞭解,可以在 GitHub 上開啟 Pipeline_3_The_Video_Expert.ipynb 檔案,並前往 Step 2:定義 RAG 函式的部分。

GPT-4o 的角色

GPT-4o 的角色在這裡與之前不同,它需要分析和增強 AI 生成的評論。具體指令如下:

  1. 指出認知失調:模型需要找出評論中可能存在的矛盾或不一致之處,這些不一致之處可能來自於 AI 生成影片的生產過程(例如缺乏邏輯)。

  2. 以邏輯吸引人的風格重寫評論:Video Expert 需要將技術評論轉換為描述性的評論,使其更具可讀性和吸引力。

  3. 為影像提供標籤:模型需要為影像提供一個標籤,例如「籃球」、「足球」、「足球」或其他相關標籤,以便於進一步使用。

查詢向量儲存和生成回應

在 GitHub 上的 Step 3:查詢向量儲存中,對於一個籃球運動員得分的場景(伴隨著一個扣籃動作),我們可以看到查詢和輸出的示例。輸出結果包括 ID、評分、文字描述、幀號和檔名稱等資訊。

使用 GPT-4o 進行增強生成

最後,透過提交查詢輸出作為使用者提示給 Video Expert 代理,GPT-4o 將分析初始評論並生成一個增強版。這個過程展示瞭如何結合 AI 生成的內容和人工智慧的分析能力,以創造更好的使用者經驗。

使用 Video Expert 代理取得專業知識

為了評估 Video Expert 代理的表現,我們使用了一個簡單的程式。首先,我們定義了一個提示(prompt),然後將其傳遞給 Video Expert 代理以取得其專業知識。

prompt = "This image shows a basketball player dunking a ball."
response_content = get_openai_response(prompt)
print(response_content)

Video Expert 代理的輸出提供了對影像的深入分析,包括:

  1. 認知失調:

    • 評論中重複描述了扣籃的動作。
    • 影像中出現了“扣籃”這個詞。
    • 背景細節提到了晴朗的天空和現代建築。
  2. 重寫評論:

    • 在這張圖片中,一名籃球運動員被拍攝到正在執行扣籃動作。
  3. 標籤:籃球

接下來,我們將評估 Video Expert 代理的輸出,並計算其與人類評論之間的相似度。

評估程式

評估程式涉及多個步驟,包括:

  1. 定義使用者提示和 Video Expert 代理的輸出。
  2. 提取重寫評論和人類評論。
  3. 計算兩個評論之間的餘弦相似度。
  4. 顯示人類評論、重寫評論和相似度分數。
# 人類評論(ground truth)
text1 = "This image shows soccer players on a field dribbling a ball."

# Video Expert 代理的輸出
response_content = get_openai_response(prompt)
text2 = extract_rewritten_comment(response_content)

# 顯示評論和相似度分數
print(f"Human Feedback Comment: {text1}")
print(f"Rewritten Comment: {text2}")

similarity_score = calculate_cosine_similarity_with_embeddings(text1, text2)
print(f"Cosine Similarity Score with sentence transformer: {similarity_score}")

Metrics 計算和顯示

最後,評估程式會計算和顯示各種指標,包括相似度分數,以評估 Video Expert 代理的表現。

scores.append(similarity_score)
rscores.append(score)

# 顯示最終結果
print("Human Feedback Comment:", text1)
print("Rewritten Comment:", text2)
print("Cosine Similarity Score with sentence transformer:", similarity_score)

這個程式可以用於評估 Video Expert 代理在各種影像分析任務中的表現,並提供有價值的見解以改進其效能。

結合人工智慧與自動化的影片內容建立流程

在這個章節中,我們將探討如何結合人工智慧(AI)和自動化技術來建立一個高效的影片內容建立流程。這個流程包括了從原始影片輸入到生成結構化、資訊豐富且可存取的影片內容的整個過程。

自動化影片內容建立流程

首先,我們需要建立一個自動化的影片內容建立流程。這個流程包括了以下幾個步驟:

  1. 影片生成:使用AI技術從文字想法中生成影片內容。
  2. 評論和標籤:使用AI技術為生成的影片內容新增評論和標籤。
  3. 搜尋和組織:使用向量儲存技術將生成的評論和後設資料組織成一個可搜尋的函式庫。

Pipeline 1:生成器和評論器

在Pipeline 1中,我們使用了一個名為生成器的AI代理來從文字想法中生成影片內容。然後,我們使用了一個名為評論器的AI代理來為生成的影片內容新增評論。

Pipeline 2:向量儲存管理員

在Pipeline 2中,我們使用了一個名為向量儲存管理員的AI代理來將生成的評論和後設資料組織成一個可搜尋的函式庫。這個過程包括了最佳化函式庫的構建以使其能夠在最小的機器資源下執行。

Pipeline 3:影片專家

在Pipeline 3中,我們使用了一個名為影片專家的AI代理來增強和標籤生成的影片內容。這個過程包括了根據使用者輸入來評估和計算指標。

結合多個AI代理和模型

透過結合多個AI代理和模型,我們可以建立一個高效的影片內容建立流程。這個流程可以自動化地生成、評論和標籤影片內容,從而節省人工成本和提高效率。

結合AI和自動化技術的影片內容建立流程有著廣泛的應用前景。它可以被用於各種行業,例如娛樂、教育和廣告等。透過使用這種技術,我們可以提高內容品質,降低成本,提高效率。

內容解密:

以上所述的流程是如何實作自動化影片內容建立的。透過使用AI技術和自動化工具,我們可以建立一個高效的流程來生成、評論和標籤影片內容。這個流程包括了從原始影片輸入到生成結構化、資訊豐富且可存取的影片內容的整個過程。

圖表翻譯:

  graph LR
    A[原始影片輸入] --> B[生成器]
    B --> C[評論器]
    C --> D[向量儲存管理員]
    D --> E[影片專家]
    E --> F[生成結構化影片內容]

以上圖表展示了自動化影片內容建立流程的整體架構。它包括了從原始影片輸入到生成結構化、資訊豐富且可存取的影片內容的整個過程。

回答問題

  1. 現今的AI是否能夠自動為影片新增註解和標籤?
  1. 影片處理是否涉及將影片分割為幀?
  1. 本章節中的程式是否能夠建立一部200分鐘的電影?
  1. 本章節中的程式是否需要GPU?
  1. 影片內容的嵌入向量是否儲存在磁碟上?
  1. 指令碼是否涉及查詢資料函式庫以檢索資料?
  1. 指令碼中是否包含顯示影像的功能?
  1. 在任何指令碼中,是否有檢查檔案存在和大小的特定函式是有用的?
  1. 這些指令碼是否關注多模態資料?
  1. 指令碼中是否提到了AI在真實世界場景中的應用?

從技術架構視角來看,本章節展示了一個利用多個AI代理協同工作的影片內容自動化建立流程。從影片生成、評論新增、向量儲存管理到專家增強和標籤,每個環節都由特定的AI代理負責,體現了模組化設計的思想。這種架構有效降低了系統的耦合性,提高了可維護性和擴充套件性。然而,目前的系統仍存在侷限性,例如無法處理長篇幅影片(如200分鐘的電影)以及依賴外部向量資料函式庫服務等。透過多維比較分析,我們可以發現,雖然現有AI技術可以完成影片的自動化評論和標籤,但其準確性和邏輯性仍有待提高,需要人工專家介入進行增強和修正。技術限制深析顯示,目前的AI模型在理解複雜場景和上下文資訊方面仍存在挑戰,這也限制了其在影片內容自動化建立流程中的應用。展望未來,隨著AI技術的不斷發展,我們預見多模態資料處理能力將會顯著提升,系統的自動化程度和智慧化水平也將得到進一步提高。玄貓認為,儘管目前仍處於早期階段,但這種結合AI和自動化的影片內容建立流程代表了未來的發展方向,值得持續關注和投入。對於想要探索這一領域的團隊,建議優先關注提升AI模型的理解能力和邏輯推理能力,並探索更有效的多模態資料融合方法。