ocra


Nameocra JSON
Version 0.2.1 PyPI version JSON
download
home_pageNone
Summaryocra
upload_time2025-10-06 12:43:52
maintainerNone
docs_urlNone
authorsherstpasha
requires_python>=3.9
licenseMIT
keywords computer-vision image-processing orientation rotation onnx pytorch
VCS
bugtrack_url
requirements numpy torchvision torchaudio numpy Pillow tensorboard tqdm onnxruntime-gpu
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ocra

**ocra** — Python-библиотека для анализа изображений текста (сканы, вырезки и т.п.).

Два основных инструмента:
- **`OrientationPredictor`** — определение ориентации (вертикальная/горизонтальная)
- **`HandwrittenPredictor`** — классификация типа текста (рукописный/печатный)

## Установка

```bash
# С CPU поддержкой
pip install ocra[cpu] 

# С GPU поддержкой (требует CUDA + cuDNN)
pip install ocra[gpu]
```

---

## Быстрый старт

```python
from src.ocra.orientation import OrientationPredictor
from src.ocra.ishandwritten import HandwrittenPredictor

def main():
    # Инициализация
    orient_pred = OrientationPredictor(verbose=0)
    text_pred = HandwrittenPredictor(verbose=False)
    
    image = "examples/hrk_463.png"
    
    # Определение ориентации
    orient_res = orient_pred.predict_single(image)
    orientation = "VERT" if orient_res['pred_class'] == 1 else "HORZ"
    
    # Определение типа текста
    text_res = text_pred.predict_single(image)
    text_type = text_res['prediction']  # 'handwritten' или 'printed'
    
    print(f"Ориентация: {orientation} ({orient_res['confidence']:.3f})")
    print(f"Тип текста: {text_type} ({text_res['confidence']:.3f})")

if __name__ == "__main__":
    main()
```

**Пример вывода:**
```
Ориентация: HORZ (1.000)
Тип текста: handwritten (0.982)
```

---

## OrientationPredictor 
Определяет ориентацию изображения как горизонтальную (HORZ) или вертикальную (VERT).

![Объяснение OrientationPredictor](./explaing_orient.py.png)

```python
from src.ocra.orientation import OrientationPredictor

predictor = OrientationPredictor()
result = predictor.predict_single("examples/hrk_463.png")

print(f"Класс: {result['pred_class']}")  # 0=HORZ, 1=VERT
print(f"Предсказание: {result['prediction']}")  # 'horizontal' или 'vertical'
print(f"Уверенность: {result['confidence']:.4f}")
```

## HandwrittenPredictor
Классифицирует тип текста на изображении: рукописный или печатный.

```python
from src.ocra.ishandwritten import HandwrittenPredictor

predictor = HandwrittenPredictor()
result = predictor.predict_single("examples/hrk_463.png")

print(f"Класс: {result['pred_class']}")     # 0=printed, 1=handwritten
print(f"Предсказание: {result['prediction']}")  # 'handwritten' или 'printed'
print(f"Уверенность: {result['confidence']:.4f}")
print(f"Высокая уверенность: {result['high_confidence']}")
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ocra",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "computer-vision, image-processing, orientation, rotation, onnx, pytorch",
    "author": "sherstpasha",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/31/f9/9a932ec23fedd0522ac64a6d8ed4b3b84604ad84c0de273088338844773a/ocra-0.2.1.tar.gz",
    "platform": null,
    "description": "# ocra\r\n\r\n**ocra** \u2014 Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0441\u043a\u0430\u043d\u044b, \u0432\u044b\u0440\u0435\u0437\u043a\u0438 \u0438 \u0442.\u043f.).\r\n\r\n\u0414\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430:\r\n- **`OrientationPredictor`** \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f/\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f)\r\n- **`HandwrittenPredictor`** \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0438\u043f\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u044b\u0439/\u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0439)\r\n\r\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n```bash\r\n# \u0421 CPU \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439\r\npip install ocra[cpu] \r\n\r\n# \u0421 GPU \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 (\u0442\u0440\u0435\u0431\u0443\u0435\u0442 CUDA + cuDNN)\r\npip install ocra[gpu]\r\n```\r\n\r\n---\r\n\r\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\r\n\r\n```python\r\nfrom src.ocra.orientation import OrientationPredictor\r\nfrom src.ocra.ishandwritten import HandwrittenPredictor\r\n\r\ndef main():\r\n    # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\r\n    orient_pred = OrientationPredictor(verbose=0)\r\n    text_pred = HandwrittenPredictor(verbose=False)\r\n    \r\n    image = \"examples/hrk_463.png\"\r\n    \r\n    # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438\r\n    orient_res = orient_pred.predict_single(image)\r\n    orientation = \"VERT\" if orient_res['pred_class'] == 1 else \"HORZ\"\r\n    \r\n    # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0442\u0435\u043a\u0441\u0442\u0430\r\n    text_res = text_pred.predict_single(image)\r\n    text_type = text_res['prediction']  # 'handwritten' \u0438\u043b\u0438 'printed'\r\n    \r\n    print(f\"\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f: {orientation} ({orient_res['confidence']:.3f})\")\r\n    print(f\"\u0422\u0438\u043f \u0442\u0435\u043a\u0441\u0442\u0430: {text_type} ({text_res['confidence']:.3f})\")\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n```\r\n\r\n**\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430:**\r\n```\r\n\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f: HORZ (1.000)\r\n\u0422\u0438\u043f \u0442\u0435\u043a\u0441\u0442\u0430: handwritten (0.982)\r\n```\r\n\r\n---\r\n\r\n## OrientationPredictor \r\n\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e (HORZ) \u0438\u043b\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e (VERT).\r\n\r\n![\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 OrientationPredictor](./explaing_orient.py.png)\r\n\r\n```python\r\nfrom src.ocra.orientation import OrientationPredictor\r\n\r\npredictor = OrientationPredictor()\r\nresult = predictor.predict_single(\"examples/hrk_463.png\")\r\n\r\nprint(f\"\u041a\u043b\u0430\u0441\u0441: {result['pred_class']}\")  # 0=HORZ, 1=VERT\r\nprint(f\"\u041f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435: {result['prediction']}\")  # 'horizontal' \u0438\u043b\u0438 'vertical'\r\nprint(f\"\u0423\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c: {result['confidence']:.4f}\")\r\n```\r\n\r\n## HandwrittenPredictor\r\n\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0442\u0438\u043f \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438: \u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0438\u043b\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0439.\r\n\r\n```python\r\nfrom src.ocra.ishandwritten import HandwrittenPredictor\r\n\r\npredictor = HandwrittenPredictor()\r\nresult = predictor.predict_single(\"examples/hrk_463.png\")\r\n\r\nprint(f\"\u041a\u043b\u0430\u0441\u0441: {result['pred_class']}\")     # 0=printed, 1=handwritten\r\nprint(f\"\u041f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435: {result['prediction']}\")  # 'handwritten' \u0438\u043b\u0438 'printed'\r\nprint(f\"\u0423\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c: {result['confidence']:.4f}\")\r\nprint(f\"\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c: {result['high_confidence']}\")\r\n```\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "ocra",
    "version": "0.2.1",
    "project_urls": {
        "Homepage": "https://github.com/sherstpasha/Ocra",
        "Issues": "https://github.com/sherstpasha/Ocra/issues",
        "Repository": "https://github.com/sherstpasha/Ocra"
    },
    "split_keywords": [
        "computer-vision",
        " image-processing",
        " orientation",
        " rotation",
        " onnx",
        " pytorch"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fd844488bcd182c36d0cccb3f18d7f0c5f4ac9926761817632fd4da0e53beecd",
                "md5": "c84e4e979c1e656152ac462d171ad38a",
                "sha256": "84d6c74daa102ae2ccf7924a7b9e93d874c40abb5e9449838f9f09aab77cf39e"
            },
            "downloads": -1,
            "filename": "ocra-0.2.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c84e4e979c1e656152ac462d171ad38a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 5021171,
            "upload_time": "2025-10-06T12:43:46",
            "upload_time_iso_8601": "2025-10-06T12:43:46.701577Z",
            "url": "https://files.pythonhosted.org/packages/fd/84/4488bcd182c36d0cccb3f18d7f0c5f4ac9926761817632fd4da0e53beecd/ocra-0.2.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "31f99a932ec23fedd0522ac64a6d8ed4b3b84604ad84c0de273088338844773a",
                "md5": "61ff49e4e1d66798f269a74dd5805aa9",
                "sha256": "c2d71de0b5950b9711dce2426e5b9dc859eaa5cdc3c99a6234245765fd658d0a"
            },
            "downloads": -1,
            "filename": "ocra-0.2.1.tar.gz",
            "has_sig": false,
            "md5_digest": "61ff49e4e1d66798f269a74dd5805aa9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 5021521,
            "upload_time": "2025-10-06T12:43:52",
            "upload_time_iso_8601": "2025-10-06T12:43:52.389570Z",
            "url": "https://files.pythonhosted.org/packages/31/f9/9a932ec23fedd0522ac64a6d8ed4b3b84604ad84c0de273088338844773a/ocra-0.2.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-06 12:43:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sherstpasha",
    "github_project": "Ocra",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    "<",
                    "2.0"
                ],
                [
                    ">=",
                    "1.19.0"
                ]
            ]
        },
        {
            "name": "torchvision",
            "specs": [
                [
                    "==",
                    "0.15.2+cu118"
                ]
            ]
        },
        {
            "name": "torchaudio",
            "specs": [
                [
                    "==",
                    "2.0.2+cu118"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.19.0"
                ]
            ]
        },
        {
            "name": "Pillow",
            "specs": [
                [
                    ">=",
                    "8.0.0"
                ]
            ]
        },
        {
            "name": "tensorboard",
            "specs": [
                [
                    ">=",
                    "2.4.0"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": []
        },
        {
            "name": "onnxruntime-gpu",
            "specs": [
                [
                    ">=",
                    "1.16.0"
                ]
            ]
        }
    ],
    "lcname": "ocra"
}
        
Elapsed time: 0.98195s