99 lines
3.7 KiB
Markdown
99 lines
3.7 KiB
Markdown
|
---
|
|||
|
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))
|
|||
|
```
|