设想一个简单的功能,用户在界面上上传一个PDF文件,应用经过一系列的处理,把这个PDF的每一页都转成了png图片,并且打包压缩成一个压缩包,提供给用户下载。
这个功能可以很方便的使用gradio来实现。
在开始之前,我们先来简单的了解一下gradio。
Gradio 是一个用于快速创建和共享机器学习模型界面的 Python 库。它允许开发者通过简单的代码创建交互式的 Web 界面,使得用户可以轻松地与机器学习模型进行交互,而无需深入了解模型的内部工作原理。Gradio 的主要特点包括:
- 快速原型设计:通过几行代码即可创建一个交互式界面,适用于快速展示和测试模型。
- 多种输入输出组件:支持文本、图像、音频等多种输入输出格式,方便用户与模型进行多样化的交互。
- 易于共享:生成的界面可以通过链接分享,方便他人访问和使用。
- 集成方便:可以轻松集成到现有的机器学习工作流中,支持与各种机器学习框架(如 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()