---
title: "🔤 Распознавание текста на Python | easyocr"
date: 2022-10-09T04:37:00+03:00
draft: false
tags: [python, tutorial, ocr]
---

## Зависимости

[easyocr](https://github.com/JaidedAI/EasyOCR) — Python библиотека для распознания
текста с поддержкой более 80 языков и всех популярных письменностей,
включая латиницу, китайский, арабский, деванагари, кириллицу и т.д.

[pyscreeze](https://github.com/asweigart/pyscreeze)\* — это простой кроссплатформенный
модуль для создания скриншотов экрана.  
\* В данном руководстве используется для примера.

```sh
pip install easyocr
pip install PyScreeze
```

## Создание скриншота

```python
import pyscreeze

# скриншот всего экрана
im = pyscreeze.screenshot("./file.png")

# скриншот области экрана
im = pyscreeze.screenshot(
    "./region.jpg",
    region=(
        100,  # x координата от края
        100,  # y координата от края
        500,  # ширина области захвата
        500,  # высота области захвата
    ),
)

```

Путём манипуляций с размерами области и координатами захвата получилось
сделать скриншот области спидометра из игры
[FUEL](https://steamcommunity.com/app/12800).  
С этим файлом я буду дальше работать.

![](/content/images/2022/fuel_speedo.jpg)

## Распознание текста

Для распознания текста необходимо объявиться Reader и выполнить функцию `readtext`.

```python
import easyocr

reader = easyocr.Reader(["en"], verbose=False)
result = reader.readtext("./img.jpg")

print(result)
```

`Reader` [принимает обязательный аргумент](https://github.com/JaidedAI/EasyOCR/blob/29e39cbe7122ccccbc0620a3b55228c024806cda/easyocr/easyocr.py#L31)
`lang_list`, который представляет из себя список с языками в формате **ISO 639**.

`verbose=False` я установил, чтобы не получать нижеуказанное предупрежение:

```text
CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU.
```

Программа вернёт следующую строку.  
Я вручную привёл её к читаемому виду.

```python
[
    ([[40, 0], [148, 0], [148, 72], [40, 72]], '84', 0.9997769398378397),
    ([[138, 44], [216, 44], [216, 76], [138, 76]], 'km]h', 0.9896810054779053),
    ([[34, 82], [192, 82], [192, 114], [34, 114]], '000030633', 0.9984012808546263)
]
```

Здесь видно, что `easyocr` возвращёт массив, с тремя кортежами.

Первый элемент похож на массив координат или региона, в котором была распознана строка.  
Второй аргумент собственно сама распознанная строка.  
Третий аргумент похож на точность распознания
в диапазоне 0–1 в формате числа с плавающей точной.

Присваеваем значения распознанного текста переменным и выводим результат.

```python
speed = result[0][1]
traveled = result[2][1][0:8]

print("{1} km : {0} km/h".format(speed, traveled))
```
