LLM 課程文件

理解 Interface 類

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

理解 Interface 類

Ask a Question Open In Colab Open In Studio Lab

在本節中,我們將仔細研究 Interface 類,並瞭解用於建立它的主要引數。

如何建立 Interface

您會注意到 Interface 類有 3 個必填引數

Interface(fn, inputs, outputs, ...)

這些引數是

  • fn: 由 Gradio 介面包裝的預測函式。此函式可以接受一個或多個引數並返回一個或多個值
  • inputs: 輸入元件型別。Gradio 提供了許多預構建的元件,例如"image""mic"
  • outputs: 輸出元件型別。同樣,Gradio 提供了許多預構建的元件,例如 "image""label"

有關元件的完整列表,請參閱 Gradio 文件 。每個預構建的元件都可以透過例項化與元件對應的類進行自定義。

例如,正如我們在上一節中所看到的,您可以將 Textbox(lines=7, label="Prompt") 元件而不是 "textbox" 傳遞給 inputs 引數,以建立帶有 7 行和標籤的文字框。

讓我們看另一個例子,這次使用 Audio 元件。

一個簡單的音訊示例

如前所述,Gradio 提供了許多不同的輸入和輸出。因此,讓我們構建一個與音訊配合使用的 Interface

在此示例中,我們將構建一個音訊到音訊的函式,它接受一個音訊檔案並簡單地反轉它。

我們將使用 Audio 元件作為輸入。使用 Audio 元件時,您可以指定音訊的 source 是使用者上傳的檔案還是使用者用來錄製語音的麥克風。在這種情況下,我們將其設定為 "microphone"。為了好玩,我們將在 Audio 中新增一個標籤,上面寫著“在此處說話…”。

此外,我們希望以 numpy 陣列的形式接收音訊,以便我們可以輕鬆地“反轉”它。因此,我們將 "type" 設定為 "numpy",它將輸入資料作為 (sample_rate, data) 的元組傳遞給我們的函式。

我們還將使用 Audio 輸出元件,該元件可以自動將包含取樣率和資料 numpy 陣列的元組呈現為可播放的音訊檔案。在這種情況下,我們不需要進行任何自定義,因此我們將使用字串快捷方式 "audio"

import numpy as np
import gradio as gr


def reverse_audio(audio):
    sr, data = audio
    reversed_audio = (sr, np.flipud(data))
    return reversed_audio


mic = gr.Audio(source="microphone", type="numpy", label="Speak here...")
gr.Interface(reverse_audio, mic, "audio").launch()

上面的程式碼將生成一個如下所示的介面(如果您的瀏覽器不要求您提供麥克風許可權,請在新選項卡中開啟 demo)。

您現在應該能夠錄製您的聲音並聽到自己反向說話 - 太詭異了 👻!

處理多個輸入和輸出

假設我們有一個更復雜的函式,具有多個輸入和輸出。在下面的示例中,我們有一個函式,它接受一個下拉索引、一個滑塊值和一個數字,並返回一個音調的音訊樣本。

看看我們如何傳遞輸入和輸出元件的列表,看看你是否能理解發生了什麼。

這裡的關鍵是當你傳遞

  • 輸入元件列表時,每個元件按順序對應一個引數。
  • 輸出元件列表時,每個元件對應一個返回值。

下面的程式碼片段展示了三個輸入元件如何與 generate_tone() 函式的三個引數對應

import numpy as np
import gradio as gr

notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]


def generate_tone(note, octave, duration):
    sr = 48000
    a4_freq, tones_from_a4 = 440, 12 * (octave - 4) + (note - 9)
    frequency = a4_freq * 2 ** (tones_from_a4 / 12)
    duration = int(duration)
    audio = np.linspace(0, duration, duration * sr)
    audio = (20000 * np.sin(audio * (2 * np.pi * frequency))).astype(np.int16)
    return (sr, audio)


gr.Interface(
    generate_tone,
    [
        gr.Dropdown(notes, type="index"),
        gr.Slider(minimum=4, maximum=6, step=1),
        gr.Number(value=1, label="Duration in seconds"),
    ],
    "audio",
).launch()

launch() 方法

到目前為止,我們已經使用 launch() 方法啟動了介面,但我們還沒有真正討論它的作用。

預設情況下,launch() 方法將在本地執行的 Web 伺服器中啟動 demo。如果您在 Jupyter 或 Colab 筆記本中執行程式碼,Gradio 會將 demo GUI 嵌入到筆記本中,以便您可以輕鬆使用它。

您可以透過不同的引數自定義 launch() 的行為

  • inline - 是否在 Python 筆記本中內聯顯示介面。
  • inbrowser - 是否在預設瀏覽器中自動在新選項卡中啟動介面。
  • share - 是否為介面從您的計算機建立可公開共享的連結。有點像 Google Drive 連結!

我們將在下一節中更詳細地介紹 share 引數!

✏️ 讓我們應用它!

讓我們構建一個介面,讓您可以演示**語音識別**模型。為了使其更有趣,我們將接受麥克風輸入或上傳檔案。

像往常一樣,我們將使用 🤗 Transformers 的 pipeline() 函式載入我們的語音識別模型。如果您需要快速複習,可以回到第 1 章中的那一節。接下來,我們將實現一個 transcribe_audio() 函式來處理音訊並返回轉錄文字。最後,我們將把這個函式包裝在一個 Interface 中,輸入使用 Audio 元件,輸出只使用文字。總而言之,這個應用程式的程式碼如下:

from transformers import pipeline
import gradio as gr

model = pipeline("automatic-speech-recognition")


def transcribe_audio(audio):
    transcription = model(audio)["text"]
    return transcription


gr.Interface(
    fn=transcribe_audio,
    inputs=gr.Audio(type="filepath"),
    outputs="text",
).launch()

如果您的瀏覽器不要求您提供麥克風許可權,請在新選項卡中開啟 demo

就是這樣!您現在可以使用此介面轉錄音訊。請注意,透過將 optional 引數設定為 True,我們允許使用者提供麥克風或音訊檔案(或者兩者都不提供,但這將返回錯誤訊息)。

繼續閱讀以瞭解如何與他人分享您的介面!

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.