import os | |
import base64 | |
from marker.convert import convert_single_pdf | |
from marker.models import load_all_models | |
from marker.settings import Settings | |
import gradio as gr | |
model_list = load_all_models() | |
def parse_pdf_and_return_markdown(pdf_file: bytes , extract_images: bool): | |
full_text, images, out_meta = convert_single_pdf(pdf_file, model_list) | |
image_data = {} | |
if extract_images: | |
for i, (filename, image) in enumerate(images.items()): | |
image_filepath = f"image_{i+1}.png" | |
image.save(image_filepath, "PNG") | |
with open(image_filepath, "rb") as f: | |
image_bytes = f.read() | |
image_base64 = base64.b64encode(image_bytes).decode('utf-8') | |
image_data[f'image_{i+1}'] = image_base64 | |
os.remove(image_filepath) | |
return full_text, out_meta, image_data | |
# @app.post("/convert") | |
# async def convert_pdf_to_markdown(pdf_file: UploadFile = File(...), extract_images: bool = True): | |
# if extract_images == False: | |
# Settings.EXTRACT_IMAGES = False | |
# print("Print EXTRACT_IMAGES set to False") | |
# else: | |
# Settings.EXTRACT_IMAGES = True | |
# if pdf_file.content_type != "application/pdf": | |
# raise HTTPException( | |
# status_code=status.HTTP_415_UNSUPPORTED_MEDIA_TYPE, | |
# detail=f'File {pdf_file.filename} has unsupported extension type', | |
# ) | |
# markdown_text, metadata, image_data = parse_pdf_and_return_markdown(await pdf_file.read(), extract_images=extract_images) | |
# return {"markdown": markdown_text, "metadata": metadata, "images": image_data } | |
# def main(): | |
# # Parse command-line arguments | |
# parser = argparse.ArgumentParser(description="Run the marker-api server.") | |
# parser.add_argument("--host", default="127.0.0.1", help="Host IP address") | |
# parser.add_argument("--port", type=int, default=8000, help="Port number") | |
# args = parser.parse_args() | |
# # Load all models before starting the server | |
# configure_logging() # Assuming this function initializes logging | |
# # Start the server | |
# import uvicorn | |
# uvicorn.run(app, host=args.host, port=args.port) | |
with gr.Blocks() as server: | |
gr.Markdown("Upload a PDF file to convert to markdown.") | |
gr.Interface( | |
parse_pdf_and_return_markdown, | |
inputs=[gr.File(label="Upload PDF", type="filepath"), gr.Checkbox(label="Extract Images")], | |
outputs=[gr.Textbox(label="Markdown"), gr.JSON(label="Metadata"), gr.JSON(label="Images")] | |
) | |
if __name__ == "__main__": | |
server.launch() |