GradioのComponents(コンポーネント)の基本と使い方: webアプリのパーツを作ろう

某

どーも!某 (@7254bou)です!

Gradioはwebアプリを簡単に作れるpythonライブラリです。基本的な使い方を知りたい方は、下記をご参照ください。

Google Colab上でwebアプリが作れるGradioの使い方

今回はそんなGradioの基本的な機能であるコンポーネントについて詳しくまとめます。

Components(コンポーネント)とは

Components(コンポーネント)は、Gradioのコア機能の1つでwebアプリのパーツを簡単に作るためのものです。Componentsはwebアプリのパーツとしてコンポーネントを定義します。

少しわかりにくいですが、ここではComponentsはGradioのクラスであり、コンポーネントはwebアプリのパーツ(いわゆるUI)を表します。Componentsクラスを用いて実際のwebアプリのパーツ(コンポーネント)を作成するイメージですね。

入力コンポーネントと出力コンポーネント

Componentsは、「入力」と「出力」のどちらに対しても使用することができます。

「入力」コンポーネントは、ユーザーがwebアプリに入力することができるもので、「出力」コンポーネントはアプリケーションがユーザーに表示するものです。

3つの入力コンポーネント(テキストボックス、数値、画像)と2つの出力コンポーネント(数値、ギャラリー)の例を考えてみましょう。以下は、入力コンポーネントが関数に何を送り、出力コンポーネントが関数から何を要求するかの図(Gradio Docsより引用)です。

Gradioのデータフロー – Gradio Docsより引用

図を見ると、入力コンポーネントに入れられた値からgradioを介して、それぞれの形式(str, int, numpy.array)で関数の引数として渡されています。その後関数の返数をgradioがそれぞれの形式(float, List[str])で受け取って出力コンポーネントに表示しています。

Gradioで作るのはシンプルなwebアプリなので、結構単純な仕組みですね。

コンポーネントとイベント

コンポーネントには、それぞれ対応するイベントがあります。イベントは、ユーザーが何らかの行動を起こすことで引き起こされるメソッドです。例えばクリックされたり、値が変更されることなどがイベントになります。何かしらのアプリを作成したことがある方は、イベントトリガーが使えるといえばわかりやすいと思います。

イベントは全部で10種類ありますが、全てのコンポーネントが10種類のイベントを使えるわけではなく、対応しているもののみです。どのコンポーネントがイベントに対応しているかは、それぞれのコンポーネントを参照してください。

コンポーネントクラスとショートカット文字列

Gradioのコンポーネントは、ショートカット文字列を使うとより簡単に使用できます。ショートカット文字列はデフォルト設定で簡潔にコンポーネントを記述できる文字列のことです。デフォルトの設定で問題ない場合は、ショートカット文字列を使って爆速でアプリを開発しましょう。

コンポーネントの細かい設定をしたい場合は、コンポーネントクラス(gr.Textbox()など)を使ってパラメータを指定することでコンポーネントの設定を調整できます。

例: ショートカット文字列(”text”)を使って、入出力のテキストボックスを作成する

import gradio as gr
def greet(name): return "Hello " + name + "!"
app = gr.Interface( fn=greet, inputs="text", outputs="text"
)
app.launch()

上記のコードを実行すると下記の画像のようになります。

ショートカット文字列を使った簡単なアプリ

コンポーネントの種類

ここではGradioで使えるコンポーネントの基本的な情報をまとめます。お試しで軽く使う場合は、inputsあるいはoutputsにショートカットを指定すると簡単に使えます。

Textbox

Textboxコンポーネント

ユーザが文字列を入力したり、文字列出力を表示するためのテキストエリアを作成します。

入力textareaの値をstrとして関数に渡します。
出力関数から返されたstrを受け取り、textareaに表示します。
examplesstr
イベントchange(), submit(), blur()
ショートカット“text”, “textbox”, “textarea”
クラスgradio.Textbox, gradio.Textarea
Textboxコンポーネントの基本情報

Textboxの詳しい使い方については下記記事をご覧ください。

Gradioで文字列が使用できるTextboxコンポーネントの使い方

Number

ユーザーが数値を入力したり、数値を出力したりするための数値フィールドを作成します。

入力フィールドの値を float または int として、 パラメータ(precision)に応じて関数に渡します。
出力関数から返される int または float を受け取り、フィールドに値を表示します。
examplesfloat または int
イベントchange(), submit(), blur()
ショートカット“number”
クラスgradio.Number
Numberコンポーネントの基本情報

Slider

最小値から最大値まで、ステップサイズ step のスライダーを作成します。

Sliderコンポーネント
入力スライダーの値を float として関数に渡します
出力関数から返される int または float をスライダーの値に設定します。
examplesfloat または int
イベントchange()
ショートカット“slider”
クラスgradio.Slider
Sliderコンポーネントの基本情報

Sliderの詳しい使い方については下記記事をご覧ください。

Gradioでスライダーが作れるSliderの使い方

Checkbox

TrueまたはFalseに設定可能なチェックボックスを作成します。

入力チェックボックスの状態を bool として関数に渡します。
出力関数から返される bool を期待し、それが True であれば、チェックボックスをチェックします。
examplesbool
イベントchange()
ショートカット“checkbox”
クラスgradio.Checkbox
Checkboxコンポーネントの基本情報

CheckboxGroup

チェックボックスのグループを作成し、そのサブセットをチェックできるようにします。

入力チェックされたボックスのリストを List[str] 、インデックスを List[int] として、 typeに依存して関数に渡します。
出力List[str]を受け取り、その各要素がチェックされたチェックボックスとなります。
examplesList[str]
イベントchange()
ショートカット“checkboxgroup”
クラスgradio.CheckboxGroup
CheckboxGroupコンポーネントの基本情報

Radio

1つだけ選択可能なラジオボタンのセットを作成します。

入力選択されたラジオボタンの値を str で、またはそのインデックスを int で、 type に応じて関数に渡す。
出力選択されたラジオボタンの値に対応するstr。
examplesstr
イベントchange()
ショートカット“radio”
クラスgradio.Radio
Radioコンポーネントの基本情報

Dropdown

項目を選択するためのドロップダウンを作成します。

入力選択されたドロップダウンのエントリの値を str で、そのインデックスを int で、 type に応じて関数に渡します。
出力選択されたドロップダウンエントリの値に対応するstrが期待されます。
examplesstr
イベントchange()
ショートカット“dropdown”
クラスgradio.Dropdown
Dropdownコンポーネントの基本情報

Image

画像のアップロード/描画(入力)または画像の表示(出力)に使用できるコンポーネントを作成します。

入力アップロードされた画像を、 type に応じた numpy.array, PIL.Image, str filepath として渡します。
出力numpy.array、PIL.Image、str、または pathlib.Path ファイルパスから画像を受け取り、その画像を表示します。
examplesstr(画像のあるローカルファイルへのファイルパス)
イベントchange(), edit(), clear(), stream(), upload()
ショートカット“image”
クラスgradio.Image
Imageコンポーネントの基本情報

Video

動画のアップロード/録画(入力として)または動画の表示(出力として)に使用できるコンポーネントを作成します。ブラウザで動画を再生するには、互換性のあるコンテナとコーデックの組み合わせが必要です。許可される組み合わせは、.mp4 と h264 コーデック、.ogg と theora コーデック、そして .webm と vp9 コーデックです。出力する動画がブラウザで再生できないことをコンポーネントが検出した場合、再生可能な mp4 への変換を試みます。変換に失敗した場合は、元の動画が返されます。

入力アップロードされた動画を、拡張子を format で変更できる str filepath または URL で渡します。
出力表示されるビデオへの str ファイルパス
examplesstr(動画のあるローカルファイルへのファイルパス)
イベントchange(), clear(), pause(), play(), stop(), upload()
ショートカット “video”
クラスgradio.Video
Videoコンポーネントの基本情報

Audio

音声のアップロード/録音(入力)または音声の表示(出力)に使用できるコンポーネントを作成します。

入力アップロードされた音声を、サンプルレート・データに対応する Tuple(int, numpy.array) として、または type に応じて str(ファイルパス)として渡します。
出力(sample rate, data) に対応する Tuple(int, numpy.array) か、表示される音声ファイルへの str(ファイルパスまたは URL )。
examplesstr(音声のあるローカルファイルへのファイルパス)
イベントchange(), clear(), pause(), play(), stop(), stream(), upload()
ショートカット “audio”
クラスgradio.Audio
Audioコンポーネントの基本情報

File

汎用ファイルのアップロード(入力)および汎用ファイルの表示(出力)に使用できるコンポーネントを作成します。

入力アップロードされたファイルを file-object または List[file-object] として file_count に応じて渡します (type に応じて bytes/Listbytes で渡します)
出力ファイルへの str パス、または、ファイルへのパスからなる List[str] を返します。
examplesstr(コンポーネントを生成するローカルファイルへのファイルパス)
イベントchange(), clear(), upload()
ショートカット “file”
クラスgradio.File
Fileコンポーネントの基本情報

Dataframe

データフレーム用の表計算ソフトのようなコンポーネントで2次元の入力を受け付けたり、表示したりすることができる。

入力アップロードされたスプレッドシートデータを、typeに応じてpandas.DataFrame, numpy.array, List[List], またはListとして渡します。
出力pandas.DataFrame、numpy.array、List[List]、List、dataをキーとしたDict(オプションでheadersも)、またはcsvへのstrパスが期待され、これらはスプレッドシートでレンダリングされます。
examplesデータを含むcsvへのstrファイルパス、pandas dataframe、または各サブリストがデータの行となるリストのリスト(ヘッダを除く)。
イベントchange()
ショートカット“dataframe”
クラスgradio.Dataframe
DataFrameコンポーネントの基本情報

Timeseries

時系列csvファイルのアップロード/プレビュー、または時系列からなるデータフレームをグラフィカルに表示するために使用できるコンポーネントを作成します。

入力アップロードされた時系列データをpandas.DataFrameとして関数に渡します。
出力pandas.DataFrame または csv への str パスが返され、それを時系列グラフとして表示します。
examples時系列データを含むcsvデータのstrファイルパス。
イベントchange()
ショートカット“timeseries”
クラスgradio.Timeseries
Timeseriesコンポーネントの基本情報

State

同じユーザーがデモを実行したときに、セッションの状態を保存する特別な隠しコンポーネントです。State変数の値は、ユーザーがページをリフレッシュしたときにクリアされます。

入力
出力
examples
イベント
ショートカット “state”
クラス gradio.State
Stateコンポーネントの基本情報

Button

任意の click() イベントを割り当てることができるボタンを作成するために使用します。ボタンのラベル (値) は、入力として使用するか、関数の出力を介して設定することができます。

入力ボタンの値を str として関数に渡します。
出力関数から返されるstrを期待し、それをボタンのラベルとして設定します。
examples
イベント click()
ショートカット“button”
クラスgradio.Button
Buttonコンポーネントの基本情報

UploadButton

アップロードボタンを作成し、クリックすると、指定されたファイルタイプを満たすファイル、または一般的なファイル(file_type が設定されていない場合)をアップロードできるようにするために使用します。

入力アップロードされたファイルを、file_count に応じて file-object または List[file-object] として渡します (type に応じて bytes/Listbytes を渡します)。
出力ファイルへの str パス、あるいはファイルへのパスからなる List[str] が返されることを期待する。
examplesコンポーネントを生成するローカルファイルへの str パス。
イベント click()、upload()
ショートカット“upload”
クラスgradio.UploadButton
UploadButtonコンポーネントの基本情報

ColorPicker

ユーザーが文字列入力で色を選択するためのカラーピッカーを作成します。

入力選択された色の値を文字列として関数に渡します。
出力関数から返されたstrを受け取り、カラーピッカーの値をそれに設定します。
examples赤を表す “#ff0000 “のような16進数で表現されたstrです。
イベント change(), submit()
ショートカット“color”
クラスgradio.ColorPicker
ColorPickerコンポーネントの基本情報

Label

分類ラベルと、提供されている場合は上位カテゴリの信頼度スコアが表示されます。

入力
出力クラスと信頼度のDict[str, float]、もしくはクラスのみのstr、回帰出力のint/float、または Label.postprocess()が生成する構造のjson辞書を含む .json ファイルへの str パスが期待されます。
examples
イベントchange()
ショートカット“label”
クラスgradio.Label
Labelコンポーネントの基本情報

HighlightedText

カテゴリや数値でハイライトされているスパンを含むテキストを表示します。

入力
出力テキストのスパンとそれに関連するラベルからなるList[Tuple[str, float | str]]、または2つのキーを持つDictを期待します:(1)値が完全なテキストである “text” と “entities” は、それぞれがキーを持つ辞書のリストであり、”entity” は、そのキーです。「エンティティ”(エンティティラベル)、”start”(ラベルの開始位置の文字インデックス)、”end”(ラベルの終了位置の文字インデックス)。エンティティは重なってはならない。
examples
イベントchange()
ショートカット“highlightedtext”
クラスgradio.HighlightedText
HighlightedTextコンポーネントの基本情報

JSON

任意のJSON出力を表示するために使用します。

入力
出力有効なJSONの文字列 — あるいはJSONシリアライズ可能なリストかdict
examples
イベントchange()
ショートカット“json”
クラスgradio.JSON
JSONコンポーネントの基本情報

HTML

任意の HTML 出力を表示するために使用します。

入力
出力有効なHTMLの文字列
examples
イベントchange()
ショートカット“html”
クラスgradio.HTML
HTMLコンポーネントの基本情報

Gallery

画像の一覧をスクロールできるギャラリーとして表示する場合に使用します。

入力
出力任意の形式の画像リスト、List[numpy.array | PIL.Image | str] 、または (image, str caption) タプルのリストを受け取り、それらを表示します。
examples
イベントchange()
ショートカット“gallery”
クラスgradio.Gallery
Galleryコンポーネントの基本情報

Chatbot

ユーザーが送信したメッセージと応答の両方を表示するチャットボットの出力を表示します。太字、斜体、コード、画像を含むMarkdownのサブセットをサポートします。

入力
出力List[Tuple[str, str]]、ユーザーの入力と応答をHTMLの文字列として持つタプルのリストが期待されます。
examples
イベントchange()
ショートカット“chatbot”
クラスgradio.Chatbot
Chatbotコンポーネントの基本情報

Model 3D

3Dモデルファイル(.obj、.glb、.gltf)のアップロードや閲覧を可能にするコンポーネントです。

入力このコンポーネントは、アップロードされたファイルを str filepath として渡します。
出力型(.obj, glb, .gltf)のファイルへのstrパスが返されることを期待する関数です。
examples
イベントchange(), edit(), clear()
ショートカット“model3d”
クラスgradio.Model3D
Model 3Dコンポーネントの基本情報

Plot

各種プロットを表示するコンポーネントを作成します(matplotlib, plotly, bokehのいずれかに対応)。

入力
出力matplotlib.figure.Figure, plotly.graph_objects._figure.Figure, または bokeh プロットに対応する dict (json_item 形式) のいずれかが期待されます。
examples
イベントchange(), clear()
ショートカット“plot”
クラスgradio.Plot
Plotコンポーネントの基本情報

ScatterPlot

散布図を表示するコンポーネントを作成します。

入力
出力プロットするデータのpandas dataframe
examples
イベントchange(), clear()
ショートカット“scatterplot”
クラスgradio.ScatterPlot
ScatterPlotコンポーネントの基本情報

LinePlot

折れ線グラフを表示するコンポーネントを作成します。

入力
出力プロットするデータのpandas dataframe
examples
イベントchange(), clear()
ショートカット“lineplot”
クラスgradio.LinePlot
LinePlotコンポーネントの基本情報

Markdown

任意のMarkdown出力をレンダリングするために使用されます。ドル記号で囲まれたラテックスもレンダリングすることができます。

入力
出力Markdownとしてレンダリングできる有効なstr
examples
イベントchange()
ショートカット “markdown”
クラスgradio.Markdown
Markdownコンポーネントの基本情報

Dataset

データセットを表示するための出力ウィジェットを作成するために使用します。例題ボックスをレンダリングするために使用します。

入力選択されたサンプルを、データのリスト(type=”value “の場合)またはint型インデックス(type=”index “の場合)として渡す
出力データセットのデータに対応するリストのリスト
examples
イベントclick()
ショートカット“dataset”
クラスgradio.Dataset
Datasetコンポーネントの基本情報

Interpretation

コンポーネントの解釈ウィジェットを作成するために使用します。

入力
出力キー “original “と “interpretation “を持つdict
examples
イベント
ショートカット“interpretation”
クラスgradio.Interpretation
Interpretationコンポーネントの基本情報

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です