Spaces:
Running on Zero
Running on Zero
Download app.py from 122Uswa/urdu-ocr-codesaviours-si26-Uswa: direct link, hf CLI and curl.
- Browser
- Download file 2.25 kB
-
https://huggingface.co/spaces/122Uswa/urdu-ocr-codesaviours-si26-Uswa/resolve/main/app.py
- Command line
-
hf download hf://spaces/122Uswa/urdu-ocr-codesaviours-si26-Uswa/app.py
-
curl -L -o app.py https://huggingface.co/spaces/122Uswa/urdu-ocr-codesaviours-si26-Uswa/resolve/main/app.py
2.25 kB
| import gradio as gr | |
| import spaces | |
| from transformers import TrOCRProcessor, VisionEncoderDecoderModel | |
| from PIL import Image | |
| import torch | |
| # Workaround for a known Gradio/gradio_client bug: when a component's JSON | |
| # schema is a bare boolean (True/False) instead of a dict, both get_type() | |
| # and _json_schema_to_python_type() crash instead of handling it. This patches | |
| # both to treat a boolean schema as a generic type. See gradio-app/gradio #11084. | |
| import gradio_client.utils as _gc_utils | |
| _original_get_type = _gc_utils.get_type | |
| _original_json_schema_to_python_type = _gc_utils._json_schema_to_python_type | |
| def _patched_get_type(schema): | |
| if isinstance(schema, bool): | |
| return "bool" | |
| return _original_get_type(schema) | |
| def _patched_json_schema_to_python_type(schema, defs=None): | |
| if isinstance(schema, bool): | |
| return "Any" | |
| return _original_json_schema_to_python_type(schema, defs) | |
| _gc_utils.get_type = _patched_get_type | |
| _gc_utils._json_schema_to_python_type = _patched_json_schema_to_python_type | |
| # Model weights live in a separate Hugging Face Model repo (not in this Space's | |
| # own storage, which has a much smaller free limit). This downloads them | |
| # automatically the first time the Space starts. | |
| model_path = "122Uswa/urdu-ocr-codesaviours-si26-uswa" | |
| processor = TrOCRProcessor.from_pretrained(model_path) | |
| model = VisionEncoderDecoderModel.from_pretrained(model_path) | |
| model.eval() | |
| def extract_urdu_text(image): | |
| """Takes an image, returns extracted Urdu text.""" | |
| if image is None: | |
| return "Please upload an image" | |
| pixel_values = processor(image, return_tensors="pt").pixel_values | |
| with torch.no_grad(): | |
| generated_ids = model.generate(pixel_values, max_new_tokens=128) | |
| text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] | |
| return text if text.strip() else "Could not extract text from this image" | |
| interface = gr.Interface( | |
| fn=extract_urdu_text, | |
| inputs=gr.Image(type="pil", label="Upload Urdu Image"), | |
| outputs=gr.Textbox(label="Extracted Urdu Text"), | |
| title="Urdu OCR -- Code Saviours SI-26", | |
| description="Upload an image containing Urdu text and get the extracted text.", | |
| examples=[], | |
| ) | |
| interface.queue().launch() | |