DeepSeek教我写gradio应用

542 阅读2分钟

设想一个简单的功能,用户在界面上上传一个PDF文件,应用经过一系列的处理,把这个PDF的每一页都转成了png图片,并且打包压缩成一个压缩包,提供给用户下载。

这个功能可以很方便的使用gradio来实现。

在开始之前,我们先来简单的了解一下gradio。

Gradio 是一个用于快速创建和共享机器学习模型界面的 Python 库。它允许开发者通过简单的代码创建交互式的 Web 界面,使得用户可以轻松地与机器学习模型进行交互,而无需深入了解模型的内部工作原理。Gradio 的主要特点包括:

  1. 快速原型设计:通过几行代码即可创建一个交互式界面,适用于快速展示和测试模型。
  2. 多种输入输出组件:支持文本、图像、音频等多种输入输出格式,方便用户与模型进行多样化的交互。
  3. 易于共享:生成的界面可以通过链接分享,方便他人访问和使用。
  4. 集成方便:可以轻松集成到现有的机器学习工作流中,支持与各种机器学习框架(如 TensorFlow、PyTorch 等)的结合使用。

Gradio 的主要应用场景包括:

  • 模型演示和展示
  • 教学和培训
  • 快速原型验证
  • 用户测试和反馈收集

通过 Gradio,开发者可以快速构建和分享机器学习模型的交互界面,从而更高效地进行模型验证和用户交互。

跟DeepSeek沟通,告诉他“写一个gradio的界面,允许用户上传一个pdf文件,经过解析,给每一页生成一张图片,并把所有图片放到一个压缩包里面允许用户下载”

他给的代码99%能用,只需要自己做简单的调整即可

import gradio as gr
import fitz  # PyMuPDF
import os
import zipfile

def pdf_to_images(pdf_file):
    # 打开PDF文件
    doc = fitz.open(pdf_file)
    images = []

    for page_id in range(doc.page_count):
        page = doc[page_id]
        # 将页面转换为PNG图片
        pix = page.get_pixmap()
        img_bytes = pix.tobytes("png")
        images.append((img_bytes, f"{page_id+1}.png"))

    # 关闭PDF文档
    doc.close()

    # 创建一个临时目录来存储图片
    temp_dir = "temp_images"
    os.makedirs(temp_dir, exist_ok=True)

    # 保存图片到临时目录
    for img_bytes, img_name in images:
        with open(os.path.join(temp_dir, img_name), "wb") as f:
            f.write(img_bytes)

    # 创建压缩包
    zip_path = "images.zip"
    with zipfile.ZipFile(zip_path, "w") as zipf:
        for img_name in os.listdir(temp_dir):
            zipf.write(os.path.join(temp_dir, img_name), img_name)

    # 删除临时目录
    for img_name in os.listdir(temp_dir):
        os.remove(os.path.join(temp_dir, img_name))
    os.rmdir(temp_dir)

    return zip_path

def main():
    iface = gr.Interface(
        fn=pdf_to_images,
        inputs=gr.File(label="Upload PDF File"),
        outputs=gr.File(label="Download ZIP File"),
        title="PDF to Images Converter",
        description="Upload a PDF file and download a ZIP file containing all the pages as images."
    )
    iface.launch()

if __name__ == "__main__":
    main()

image.png