gradio - Python で機械学習モデルの UI を 3 分で作成

(Create UIs for your machine learning model in Python in 3 minutes)

Created at: 2018-12-19 16:24:04
Language: HTML
License: Apache-2.0

グラジオ
楽しい機械学習アプリを簡単に構築して共有

無線バックエンド グラジオウイ
コデコフ パイパイ PyPI のダウンロード Python バージョン ツイッターフォロー

ウェブサイト |ドキュメンテーション |ガイド |はじめに |

Gradio: Build Machine Learning Web Apps — in Python

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 のブラウザにポップします。

hello_worldデモ

クラス
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()

hello_world_2デモ

複数の入力および出力コンポーネント

複数の入力と出力を持つ、より複雑な関数があるとします。以下の例では、文字列、ブール値、数値を受け取り、文字列と数値を返す関数を定義します。入力コンポーネントと出力コンポーネントのリストを渡す方法を見てみましょう。

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()

hello_world_3デモ

コンポーネントをリストにラップするだけです。リスト内の各コンポーネントは、関数のパラメーターの 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()

sepia_filterデモ

コンポーネントを入力として使用する場合、関数は の形状を持つ 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()

hello_blocksデモ

注意事項:

  • Blocks
    は句で作成され、この句内で作成されたコンポーネントは自動的にアプリに追加されます。
    with
  • コンポーネントは、作成された順序でアプリ内に垂直に表示されます。(後でレイアウトのカスタマイズについて説明します!
  • A が作成され、イベント リスナーがこのボタンに追加されました。このためのAPIは見覚えがあるはずです!と同様に、このメソッドは Python 関数、入力コンポーネント、および出力コンポーネントを受け取ります。
    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_flipperデモ

ここではさらに多くのことが起こっています!このような複雑なアプリを作成する方法については、「ブロック付きの建物」セクションで説明します。

Blocks

おめでとうございます、あなたは今Gradioの基本に精通しています!🥳次のガイドに進んで、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},
}

関連項目