Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, UploadFile, File | |
| from fastapi.responses import FileResponse | |
| from fastapi.staticfiles import StaticFiles | |
| import pytesseract | |
| from PIL import Image | |
| import os | |
| app = FastAPI() | |
| # Create directories for uploads and outputs | |
| UPLOAD_DIR = "uploads" | |
| OUTPUT_DIR = "outputs" | |
| os.makedirs(UPLOAD_DIR, exist_ok=True) | |
| os.makedirs(OUTPUT_DIR, exist_ok=True) | |
| async def upload_image(file: UploadFile = File(...)): | |
| file_path = os.path.join(UPLOAD_DIR, file.filename) | |
| with open(file_path, "wb") as f: | |
| f.write(await file.read()) | |
| try: | |
| # Perform OCR | |
| image = Image.open(file_path) | |
| text = pytesseract.image_to_string(image) | |
| # Save as Markdown | |
| markdown_path = os.path.join(OUTPUT_DIR, f"{os.path.splitext(file.filename)[0]}.md") | |
| with open(markdown_path, "w", encoding="utf-8") as md_file: | |
| md_file.write(text) | |
| except Exception as e: | |
| return {"error": str(e)} | |
| return {"download_url": f"/download/{os.path.basename(markdown_path)}"} | |
| async def download_file(filename: str): | |
| file_path = os.path.join(OUTPUT_DIR, filename) | |
| if os.path.exists(file_path): | |
| return FileResponse(file_path, media_type='text/markdown', filename=filename) | |
| return {"error": "File not found"} | |
| # Serve static files (HTML and assets) | |
| app.mount("/", StaticFiles(directory="static", html=True), name="static") | |