自動化された研究アーティファクト — 上流プロジェクトではありません。
このリポジトリは、ラヴァル大学の修士論文のために、公開されているGitHub Actionsワークフローの脆弱性を再現することを目的として、自動化ハーネスによって構築された使い捨てのラボです。これは
gradio-app/gradioのコミット1d986217f6f4fc1829e528d2afe365635788204f(2023-11-03)時点の逐語的なスナップショットであり、そのプロジェクト自身のライセンスの下で再配布されており、そのライセンスファイルはこのスナップショットに変更なしで含まれています。上流プロジェクトは関与しておらず、決して標的にはされておらず、ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクションの参照とランナーイメージは、2023-11-03時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の
pinning.mdを参照してください。質問や異議がある場合: [email protected]
Gradioは、機械学習やデータサイエンスのデモ、Webアプリケーションを構築するためのオープンソースのPythonライブラリです。
Gradioを使えば、機械学習モデルやデータサイエンスのワークフローの周りに美しいユーザーインターフェースをすばやく作成し、ユーザーが自分の画像をドラッグ&ドロップしたり、テキストを貼り付けたり、自分の声を録音したり、デモと対話したりできるようにすることができます。これらはすべてブラウザ上で行えます。

Gradioは以下のような場面で役立ちます:
クライアント/共同作業者/ユーザー/学生向けに機械学習モデルをデモする。
自動共有リンクを使ってモデルをすばやくデプロイし、モデルのパフォーマンスに関するフィードバックを得る。
開発中に組み込みの入力操作ツールを使ってモデルを対話的にデバッグする。
前提条件: GradioにはPython 3.8以上が必要です。それだけです!
機械学習モデル、API、データサイエンスのワークフローを他の人と共有するための_最良の方法_の1つは、ユーザーや同僚がブラウザでデモを試せるインタラクティブアプリを作成することです。
Gradioを使えば、デモを構築して共有することが、すべてPythonでできます。しかも、通常はほんの数行のコードで!それでは始めましょう。
簡単な「Hello, World」の例でGradioを動かすには、次の3つの手順に従ってください:
1. pipを使ってGradioをインストールします:
pip install gradio
2. 以下のコードをPythonスクリプトまたはJupyter Notebook(またはGoogle Colab)で実行します:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
Gradioを使用するコードの可読性を高めるために、インポートした名前を gr に短縮しています。これは広く採用されている慣例であり、あなたのコードを扱う誰もが簡単に理解できるように、この慣例に従うべきです。
3. 以下のデモは、Jupyter Notebook内に自動的に表示されるか、スクリプトから実行した場合はブラウザでhttp://localhost:7860にポップアップ表示されます:

ローカルで開発する際、コードをPythonスクリプトとして実行したい場合は、Gradio CLIを使用してアプリケーションをリロードモードで起動できます。これにより、シームレスで高速な開発が可能になります。リロードの詳細については、Auto-Reloading Guideをご覧ください。
gradio app.py
注: python app.py とすることもできますが、自動リロード機能は提供されません。
Interface クラスデモを作成するために gr.Interface を作成したことに気づくでしょう。この Interface クラスは、任意のPython関数をユーザーインターフェースでラップできます。上記の例では単純なテキストベースの関数を見ましたが、関数は音楽ジェネレーターから税計算機、事前学習済み機械学習モデルの予測関数まで、何でもかまいません。
コアとなる Interface クラスは、3つの必須パラメータで初期化されます:
fn: UIでラップする関数inputs: 入力に使用するコンポーネント(例: "text"、"image"、"audio")outputs: 出力に使用するコンポーネント(例: "text"、"image"、"label")これらの入出力を提供するために使用されるコンポーネントを詳しく見てみましょう。
前の例では単純な Textbox コンポーネントを見ましたが、UIコンポーネントの外観や動作を変更したい場合はどうすればよいでしょうか?
入力テキストフィールドをカスタマイズしたいとしましょう。たとえば、より大きくしてテキストプレースホルダーを設定したい場合です。文字列のショートカットの代わりに 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()

コンポーネントをリストでラップするだけです。inputs リスト内の各コンポーネントは、関数のパラメータの1つに順番に対応します。outputs リスト内の各コンポーネントは、関数によって返される値の1つに、これも順番に対応します。
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(width=200, height=200), "image")
demo.launch()

Image コンポーネントを入力として使用する場合、関数は形状 (height, width, 3) のNumPy配列を受け取ります。ここで、最後の次元はRGB値を表します。また、NumPy配列の形式で画像を返します。
type= キーワード引数を使用して、コンポーネントが使用するデータ型を設定することもできます。たとえば、関数がNumPy配列の代わりに画像へのファイルパスを受け取るようにしたい場合、入力 Image コンポーネントは次のように記述できます:
gr.Image(type="filepath", shape=...)
また、入力 Image コンポーネントには編集ボタン 🖉 が付いており、画像の切り抜きやズームが可能です。このように画像を操作することで、機械学習モデルのバイアスや隠れた欠陥を明らかにすることができます!
多くのコンポーネントとその使用方法の詳細については、Gradio docsをご覧ください。
Gradioには、gr.Interface に似ていますが、チャットボットUI専用に設計された高レベルクラス gr.ChatInterface が含まれています。gr.ChatInterface クラスも関数をラップしますが、この関数は特定のシグネチャを持つ必要があります。関数は2つの引数、message と history を受け取る必要があります(引数名は何でもかまいませんが、この順序である必要があります)。
message: ユーザーの入力を表す strhistory: その時点までの会話を表す list の list。各内部リストは、[ユーザー入力, ボット応答] のペアを表す2つの str で構成されます。関数は、特定のユーザー入力 message に対するボットの応答である単一の文字列応答を返す必要があります。
それ以外に、gr.ChatInterface には必須パラメータはありません(ただし、UIをカスタマイズするためのパラメータがいくつか用意されています)。
おもちゃの例を次に示します:
import random
import gradio as gr