File size: 1,380 Bytes
4dcdb35
 
 
8ec1357
4dcdb35
8ec1357
4dcdb35
 
 
 
 
8ec1357
 
 
 
 
 
 
 
 
 
4dcdb35
 
8ec1357
 
 
 
 
 
4dcdb35
 
8ec1357
 
 
4dcdb35
 
8ec1357
 
4dcdb35
 
 
8ec1357
 
 
4dcdb35
8ec1357
 
4dcdb35
8ec1357
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
import uuid

import fitz  # PyMuPDF
import gradio as gr
from PIL import Image

UPLOAD_FOLDER = "./uploads"
RESULTS_FOLDER = "./results"


def pdf_to_images(pdf_path):
    images = []
    pdf_document = fitz.open(pdf_path)
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        pix = page.get_pixmap()
        img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        images.append(img)
    pdf_document.close()
    return images


def process_pdf(pdf_file):
    temp_pdf_path = os.path.join(UPLOAD_FOLDER, f"{uuid.uuid4()}.pdf")
    pdf_file.save(temp_pdf_path)
    images = pdf_to_images(temp_pdf_path)
    os.remove(temp_pdf_path)
    return images


def display_images(images):
    image_elements = [gr.Image(value=img, type="pil") for img in images]
    return gr.Gallery(value=image_elements)


def on_image_select(image):
    return image


with gr.Blocks() as demo:
    pdf_input = gr.File(label="上传PDF文件")
    image_gallery = gr.Gallery(label="PDF页面预览", columns=3, height="auto")
    selected_image = gr.Image(label="选中的图片", type="pil")

    pdf_input.upload(fn=process_pdf, inputs=pdf_input, outputs=image_gallery)
    image_gallery.select(fn=on_image_select, inputs=image_gallery, outputs=selected_image)

    # 这里可以添加OCR转换功能的相关组件和逻辑