LLM 課程文件
理解 Interface 類
並獲得增強的文件體驗
開始使用
理解 Interface 類
在本節中,我們將仔細研究 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 上更新