gradio ライブラリの File モジュールを使用してファイルをアップロードし、ダウンロード可能なファイルを生成します

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

おすすめ

転載: blog.csdn.net/qq_51116518/article/details/132628392