AI News HubLIVE
站內改寫2 分鐘閱讀

使用Transformers.js在瀏覽器中實現影像與語音的多模態AI

本文介紹瞭如何使用Transformers.js在瀏覽器中構建多模態AI應用,包括影像分類、影像描述和語音轉錄。所有模型完全在客戶端執行,無需伺服器或API金鑰,保護使用者隱私。文章提供了詳細的程式碼示例和專案結構,指導開發者一步步實現。

來源Machine Learning Mastery作者: Shittu Olumide

在本文中,您將學習如何構建完全在瀏覽器中執行的多模態AI功能——包括影像分類、影像描述和語音轉錄——使用Transformers.js實現,無需伺服器、API金鑰,且資料不會離開使用者裝置。

大多數瀏覽器AI教程都專注於文本,因為這是一個自然的起點,但使用者實際想要構建的應用很少只涉及文本。使用者會拍攝照片、錄製語音筆記、上傳截圖。資料是多模態的,AI也應如此。

Transformers.js原生支援多模態。它支援計算機視覺(影像分類、目標檢測、分割)、音訊(自動語音識別、音訊分類、文本轉語音)以及多模態任務,所有這些都在瀏覽器中本地執行,無需伺服器、API金鑰,資料不會離開使用者裝置。

本教程按順序構建三個功能:影像分類、影像描述和語音轉錄。每個功能都是一個獨立的HTML檔案,可以在瀏覽器中開啟。最後一部分將這三個功能整合到一個統一的多模態媒體分析器中。

所需環境

  • 現代瀏覽器:Chrome 109+、Edge 109+或Firefox 90+。這些版本支援ES模組和WebAssembly,這是Transformers.js所必需的。
  • 本地Web伺服器:瀏覽器安全策略阻止從file:// URL匯入ES模組——直接雙擊開啟HTML檔案將無法工作。您需要透過HTTP提供檔案。

您不需要Node.js、npm或任何構建工具。CDN匯入即可處理庫檔案。

啟動本地伺服器

選擇您已安裝的任一方法:

  • Python:python3 -m http.server 8080
  • Node.js:npx serve .
  • VS Code:安裝Live Server擴充套件,然後右鍵單擊任何HTML檔案並選擇“Open with Live Server”

伺服器執行後,在瀏覽器中開啟http://localhost:8080

專案結構

建立一個專案資料夾。每個任務對應一個HTML檔案:

  • multimodal-demo/

- image-classifier.html - image-captioner.html - speech-transcriber.html - media-analyzer.html

模型與下載大小

每個模型在首次執行時下載一次並快取在瀏覽器中。後續載入即時而離線可用。首次執行預估下載:

  • 影像分類:Xenova/vit-base-patch16-224,約88 MB
  • 影像描述:Xenova/vit-gpt2-image-captioning,約246 MB
  • 語音轉錄:Xenova/whisper-tiny.en,約78 MB

組合應用載入所有模型,首次執行約400 MB。每個模型的進度指示器是必不可少的使用者體驗。

任務1:影像分類

影像分類將輸入影像分配到固定類別集合。此處使用ViT-Base/16模型,它是Google在ImageNet-21k上訓練並在ImageNet-1k上微調的Vision Transformer,已轉換為ONNX格式用於瀏覽器。它可將影像分類為1000個ImageNet類別,並返回帶置信度分數的排名列表。

輸出格式示例:

[
  { label: 'golden retriever', score: 0.9421 },
  { label: 'Labrador retriever', score: 0.0312 },
  { label: 'Sussex spaniel', score: 0.0098 },
  // ... top_k results total
]

每個物件包含label字串(ImageNet類名)和0到1之間的score浮點數。預設返回5個結果,可透過top_k引數調整。

程式碼示例(簡化):

import { pipeline } from 'https://cdn.jsdelivr.net/npm/@huggingface/[email protected]';
let classifier;
pipeline('image-classification', 'Xenova/vit-base-patch16-224', {
  dtype: 'q8',
  progress_callback: (p) => { /* 更新進度 */ }
}).then(pipe => { classifier = pipe; });
async function classifyImage(dataUrl) {
  const results = await classifier(dataUrl, { top_k: 5 });
  // 顯示結果
}

任務2:影像描述

影像描述生成描述影像內容的自然語句。與分類不同,它生成自由文本,更具描述性和靈活性。模型為Xenova/vit-gpt2-image-captioning,使用Vision Transformer編碼器與GPT-2解碼器組合。ONNX版本約246 MB。

輸出格式:

[{ generated_text: 'a dog is playing on a tennis court' }]

任務3:語音轉錄

使用OpenAI的Whisper模型(whisper-tiny.en)實現瀏覽器內語音轉錄。透過Web Audio API捕獲麥克風輸入。

多模態媒體分析器

整合上述三個功能,提供統一儀表板,並行載入模型以加速。

總之,本教程提供了在瀏覽器中實現客戶端多模態AI的完整指南,強調了隱私保護和離線能力。