Gradioは、機械学習とデータサイエンスのデモとWebアプリケーションの構築に使用されるオープンソースのPythonライブラリです。
Gradioを使用すると、機械学習モデルやデータサイエンスワークフローの周りに美しいユーザーインターフェイスをすばやく作成し、自分の画像をドラッグアンドドロップすることで「試してみてください」。 テキストの貼り付け、自分の声の録音、デモの操作をすべてブラウザから行うことができます。
Gradioは以下の場合に役立ちます。
クライアント/コラボレーター/ユーザー/学生向けの機械学習モデルのデモ。
自動共有可能なリンクを使用してモデルを迅速にデプロイし、モデルのパフォーマンスに関するフィードバックを取得します。
組み込みの操作および解釈ツールを使用して、開発中にモデルを対話的にデバッグします。
前提条件:GradioにはPython 3.7以降が必要です。
機械学習モデル、API、またはデータ サイエンス ワークフローを他のユーザーと共有する最良の方法の 1 つは、ユーザーや同僚がブラウザーでデモを試すことができる対話型アプリを作成することです。
Gradioを使用すると、デモを作成して共有することができます。そして、通常、わずか数行のコードで!それでは始めましょう。
簡単な "Hello, World" の例で Gradio を実行するには、次の 3 つの手順に従います。
1. pipを使用してGradioをインストールします。
pip install gradio
2. 以下のコードを Python スクリプトとして、または Jupyter ノートブック (または Google Colab) で実行します。
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
3.以下のデモは、Jupyterノートブック内に自動的に表示されるか、スクリプトから実行している場合は http://localhost:7860 のブラウザにポップします。
Interface
デモを作成するために、.このクラスは、任意の Python 関数をユーザー インターフェイスでラップできます。上記の例では、単純なテキストベースの関数を見ましたが、その関数は、音楽ジェネレーターから税計算機、事前トレーニング済みの機械学習モデルの予測関数まで、何でもかまいません。
gradio.Interface
Interface
コア クラスは、次の 3 つの必須パラメーターで初期化されます。
Interface
fn:UIをラップする機能
inputs:入力に使用するコンポーネント(例:、または
"text"
"image"
"audio")
outputs: 出力に使用するコンポーネント (例: 、または
"text"
"image"
"label")
入力と出力を提供するために使用されるこれらのコンポーネントを詳しく見てみましょう。
前の例でいくつかの単純なコンポーネントを見ましたが、UI コンポーネントの外観や動作を変更する場合はどうでしょうか。
Textbox
たとえば、入力テキストフィールドをカスタマイズしたいとします — たとえば、入力フィールドを大きくしてテキストプレースホルダーを持たせたいとします。文字列ショートカットを使用する代わりに実際のクラスを使用すると、コンポーネント属性を通じてはるかに多くのカスタマイズ性にアクセスできます。
Textbox
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(
fn=greet,
inputs=gr.Textbox(lines=2, placeholder="Name Here..."),
outputs="text",
)
demo.launch()
複数の入力と出力を持つ、より複雑な関数があるとします。以下の例では、文字列、ブール値、数値を受け取り、文字列と数値を返す関数を定義します。入力コンポーネントと出力コンポーネントのリストを渡す方法を見てみましょう。
import gradio as gr
def greet(name, is_morning, temperature):
salutation = "Good morning" if is_morning else "Good evening"
greeting = f"{salutation} {name}. It is {temperature} degrees today"
celsius = (temperature - 32) * 5 / 9
return greeting, round(celsius, 2)
demo = gr.Interface(
fn=greet,
inputs=["text", "checkbox", gr.Slider(0, 100)],
outputs=["text", "number"],
)
demo.launch()
コンポーネントをリストにラップするだけです。リスト内の各コンポーネントは、関数のパラメーターの 1 つに順番に対応します。リスト内の各コンポーネントは、関数によって返される値の 1 つに順番に対応します。
inputs
outputs
Gradio は、、など、多くのタイプのコンポーネントをサポートしています。画像間機能を試して、これらの感触をつかみましょう!
Image
DataFrame
Video
Label
import numpy as np
import gradio as gr
def sepia(input_img):
sepia_filter = np.array([
[0.393, 0.769, 0.189],
[0.349, 0.686, 0.168],
[0.272, 0.534, 0.131]
])
sepia_img = input_img.dot(sepia_filter.T)
sepia_img /= sepia_img.max()
return sepia_img
demo = gr.Interface(sepia, gr.Image(shape=(200, 200)), "image")
demo.launch()
コンポーネントを入力として使用する場合、関数は の形状を持つ NumPy 配列を受け取り、最後の次元は RGB 値を表します。画像も NumPy 配列の形式で返します。
Image
(width, height, 3)
コンポーネントが使用するデータ型をキーワード引数で設定することもできます。たとえば、関数で NumPy 配列ではなく画像へのファイル パスを取得する場合は、入力コンポーネントを次のように記述できます。
type=
Image
gr.Image(type="filepath", shape=...)
また、入力コンポーネントには 編集ボタン 🖉 、画像のトリミングとズームインを可能にします。この方法で画像を操作すると、機械学習モデルのバイアスや隠れた欠陥を明らかにするのに役立ちます。
Image
多くのコンポーネントとその使用方法の詳細については、Gradioのドキュメントを参照してください。
Gradio には、アプリを構築するための 2 つのクラスが用意されています。
1.インターフェイスは、これまでに説明したデモを作成するための高レベルの抽象化を提供します。
2.ブロック、より柔軟なレイアウトとデータフローを備えたWebアプリを設計するための低レベルAPI。ブロックを使用すると、複数のデータフローやデモの機能、ページ上のコンポーネントの表示場所の制御、複雑なデータフローの処理(出力が他の関数への入力として機能するなど)、ユーザーの操作に基づいてコンポーネントのプロパティ/可視性を更新できます。このカスタマイズ性が必要な場合は、代わりに試してください。
Blocks
簡単な例を見てみましょう。ここでの API が とどのように異なるかに注意してください。
Interface
import gradio as gr
def greet(name):
return "Hello " + name + "!"
with gr.Blocks() as demo:
name = gr.Textbox(label="Name")
output = gr.Textbox(label="Output Box")
greet_btn = gr.Button("Greet")
greet_btn.click(fn=greet, inputs=name, outputs=output)
demo.launch()
注意事項:
Blocksは句で作成され、この句内で作成されたコンポーネントは自動的にアプリに追加されます。
with
Button
click
Interface
click
これがあなたに何が可能かを味わうためのアプリです:
Blocks
import numpy as np
import gradio as gr
def flip_text(x):
return x[::-1]
def flip_image(x):
return np.fliplr(x)
with gr.Blocks() as demo:
gr.Markdown("Flip text or image files using this demo.")
with gr.Tabs():
with gr.TabItem("Flip Text"):
text_input = gr.Textbox()
text_output = gr.Textbox()
text_button = gr.Button("Flip")
with gr.TabItem("Flip Image"):
with gr.Row():
image_input = gr.Image()
image_output = gr.Image()
image_button = gr.Button("Flip")
text_button.click(flip_text, inputs=text_input, outputs=text_output)
image_button.click(flip_image, inputs=image_input, outputs=image_output)
demo.launch()
ここではさらに多くのことが起こっています!このような複雑なアプリを作成する方法については、「ブロック付きの建物」セクションで説明します。
Blocks
おめでとうございます、あなたは今Gradioの基本に精通しています!
Gradioは多くの素晴らしいオープンソースライブラリで構築されていますので、それらもサポートしてください!
Gradio は、このリポジトリのルートディレクトリにある LICENSE ファイルにある Apache ライセンス 2.0 の下でライセンスされています。
また、論文Gradio:野生のMLモデルの手間のかからない共有とテスト、ICML HILL 2019もチェックし、仕事でGradioを使用している場合はそれを引用してください。
@article{abid2019gradio, title = {Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild}, author = {Abid, Abubakar and Abdalla, Ali and Abid, Ali and Khan, Dawood and Alfozan, Abdulrahman and Zou, James}, journal = {arXiv preprint arXiv:1906.02569}, year = {2019}, }