Blog/content/posts/2022/python/easyocr.md

99 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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` возвращёт массив, с тремя кортежами.
Первый элемент похож на массив координат или региона, в котором была распознана строка.
Второй аргумент собственно сама распознанная строка.
Третий аргумент похож на точность распознания
в диапазоне 01 в формате числа с плавающей точной.
Присваеваем значения распознанного текста переменным и выводим результат.
```python
speed = result[0][1]
traveled = result[2][1][0:8]
print("{1} km : {0} km/h".format(speed, traveled))
```