Joseph Pollack
adds footer for explicit user interface openapi ui + json & gradio schema + health endpoint - no reason why
ce82d17 unverified | title: OCR Capacity Building as a Service | |
| emoji: 🏥 | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: gradio | |
| sdk_version: 6.20.0 | |
| python_version: "3.12.12" | |
| app_file: app.py | |
| pinned: false | |
| license: mit | |
| hardware: zero-gpu | |
| startup_duration_timeout: 30m | |
| models: | |
| - ATH-MaaS/OvisOCR2 | |
| - zai-org/GLM-OCR | |
| preload_from_hub: | |
| - ATH-MaaS/OvisOCR2 | |
| - zai-org/GLM-OCR | |
| short_description: Open OCR API for DRC Ebola contact-tracing docs. | |
| 07/17 trigger rebuild | |
| # OCR Capacity Building as a Service | |
| Open OCR API for Ebola contact-tracing documents in the DRC. Choose between | |
| [ATH-MaaS/OvisOCR2](https://huggingface.co/ATH-MaaS/OvisOCR2) and | |
| [zai-org/GLM-OCR](https://huggingface.co/zai-org/GLM-OCR), upload a page image or | |
| multi-page PDF, and stream Markdown (with LaTeX formulas and HTML tables). | |
| **OvisOCR2** emits figure placeholders that this Space materializes as cropped | |
| visual regions. **GLM-OCR** returns text recognition output without bbox crops. | |
| ## Supported inputs | |
| - Images: PNG, JPEG, WebP | |
| - PDFs: up to 50 pages (rasterized locally; up to 4 pages per ZeroGPU lease) | |
| ## API | |
| Streaming endpoint: `/run_ocr` (also registered as MCP tool `run_ocr`). | |
| On the live Space UI, open **Use via API** for copy-paste clients. Machine-readable docs: | |
| - Gradio schema: [`/gradio_api/info`](https://tonic-ocr-ebola.hf.space/gradio_api/info) | |
| - OpenAPI: [`/docs`](https://tonic-ocr-ebola.hf.space/docs) · [`/openapi.json`](https://tonic-ocr-ebola.hf.space/openapi.json) | |
| - Health: [`/healthz`](https://tonic-ocr-ebola.hf.space/healthz) | |
| | Arg | Type | Default | Description | | |
| |-----|------|---------|-------------| | |
| | `image_path` | FileData | required | Uploaded image or PDF | | |
| | `page_index` | int | `0` | 0-based start page for this lease | | |
| | `page_count` | int | `4` | Max pages in this GPU batch | | |
| | `model_choice` | str | `"OvisOCR2"` | `"OvisOCR2"` or `"GLM-OCR"` | | |
| | `prompt` | str | `""` | Override; empty → model default | | |
| ```python | |
| from gradio_client import Client, handle_file | |
| client = Client("Tonic/ocr-ebola") | |
| job = client.submit( | |
| handle_file("form.pdf"), | |
| 0, | |
| 4, | |
| "OvisOCR2", | |
| "", | |
| api_name="/run_ocr", | |
| ) | |
| for chunk in job: | |
| print(chunk["event"], chunk.get("current_page"), chunk.get("char_count")) | |
| ``` | |
| Also available as an MCP tool named `run_ocr`. Health check: `GET /healthz`. | |
| ## Local run | |
| ```bash | |
| # Backend deps (Space installs requirements.txt automatically) | |
| pip install -r requirements.txt | |
| # Frontend (build once; commit dist/ for Spaces) | |
| cd frontend && npm install && npm run build && cd .. | |
| # Mock stream without loading weights (Windows PowerShell: $env:OCR_TEST_MODE=1) | |
| OCR_TEST_MODE=1 python app.py | |
| # Real models (needs CUDA) | |
| python app.py | |
| ``` | |
| Open `http://127.0.0.1:7860`. | |