gradio ライブラリの File モジュールを使用してファイルをアップロードし、ダウンロード可能なファイルを生成します
記事ディレクトリ
1. 背景
Gradio を使用してエフェクト レビュー用の AI デモを設計および書き換える際、Gradio を使用してダウンロード可能なファイルを生成する方法をオンラインや公式 Web サイトで検索しましたが、役に立ちませんでした。そこで、しばらく横になって、横になる過程を記録してみました。
2. はじめに
1. Gradio の概要
Gradio は、インタラクティブな機械学習および深層学習アプリケーションを構築するための強力な Python ライブラリです。File モジュールは、ファイルのアップロードと表示の機能を提供します。
2. ファイルモジュールの概要
File モジュールは、ユーザーが汎用ファイルをアップロード (入力として使用) したり、汎用ファイルを表示 (出力として使用) できるようにするファイル コンポーネントを作成するために使用される、gradio ライブラリ内のコンポーネントです。
入力として使用される場合、File モジュールはアップロードされたファイルを tempfile._TemporaryFileWrapper または List[tempfile._TemporaryFileWrapper] として関数に渡します。これは、file_count パラメーターの設定 (または、型パラメータ)。
出力として、File モジュールは関数がファイルへのパス (str 型)、またはファイル パスを含むリスト (List[str]) を返すことを期待します。
3.tempfileモジュール
tempfile モジュールは、一時ファイルとフォルダーを作成するために使用される Python 標準ライブラリのモジュールです。これにより、プログラム内に一時ファイルや一時フォルダーを作成する簡単な方法が提供され、プログラムの終了時に自動的に削除できるため、プログラムの終了後に一時ファイルを手動でクリーンアップする必要がなくなります。
tempfile モジュールは、さまざまなシナリオで一時ファイルやフォルダーを作成するための多くの関数とクラスを提供します。例えば:
- tempfile.TemporaryFile(): 一時ファイル オブジェクトを作成します。このオブジェクトは、閉じられるかプログラムが終了すると自動的に削除されます。
- tempfile.TemporaryDirectory(): 一時フォルダーを作成します。このフォルダーは、プログラムを閉じるか終了するときに自動的に削除されます。
- tempfile.NamedTemporaryFile(): 指定された名前で一時ファイル オブジェクトを作成します。このオブジェクトは、閉じられるかプログラムが終了すると自動的に削除されます。
- tempfile.mkstemp(): 一意の名前を持つ一時ファイルを作成し、そのファイル記述子とパスを返します。
これらの関数とクラスを使用して、一時ファイルとフォルダーを作成および処理し、プログラムの終了時にそれらを自動的に削除して、プログラム終了後にファイルが残る問題を回避できます。
3. ファイルアップロードデモ実戦
1. 具体的なコード
以下は具体的なコードの実装です
import os
import gradio as gr
import tempfile
import shutil
def generate_file(file_obj):
global tmpdir
print('临时文件夹地址:{}'.format(tmpdir))
print('上传文件的地址:{}'.format(file_obj.name)) # 输出上传后的文件在gradio中保存的绝对地址
#获取到上传后的文件的绝对路径后,其余的操作就和平常一致了
# 将文件复制到临时目录中
shutil.copy(file_obj.name, tmpdir)
# 获取上传Gradio的文件名称
FileName=os.path.basename(file_obj.name)
# 获取拷贝在临时目录的新的文件地址
NewfilePath=os.path.join(tmpdir,FileName)
print(NewfilePath)
# 打开复制到新路径后的文件
with open(NewfilePath, 'rb') as file_obj:
#在本地电脑打开一个新的文件,并且将上传文件内容写入到新文件
outputPath=os.path.join(tmpdir,"New"+FileName)
with open(outputPath,'wb') as w:
w.write(file_obj.read())
# 返回新文件的的地址(注意这里)
return outputPath
def main():
global tmpdir
with tempfile.TemporaryDirectory(dir='.') as tmpdir:
# 定义输入和输出
inputs = gr.components.File(label="上传文件")
outputs = gr.components.File(label="下载文件")
# 创建 Gradio 应用程序g
app = gr.Interface(fn=generate_file, inputs=inputs, outputs=outputs, title="文件上传、并生成可下载文件demo",
description="上传任何文件都可以,只要大小别超过你电脑的内存即可"
)
# 启动应用程序
app.launch(share=True)
if __name__=="__main__":
main()
2. サンプルを実行する
この Huggingface Web サイトでテストできます: https://huggingface.co/spaces/white520/testCreateFile