From 3410f761ef2f29aea5639bf19cf03140bafe7cb6 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sun, 9 Oct 2022 04:38:13 +0300 Subject: [PATCH] easyocr --- content/posts/2022/python/easyocr.md | 98 ++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 content/posts/2022/python/easyocr.md diff --git a/content/posts/2022/python/easyocr.md b/content/posts/2022/python/easyocr.md new file mode 100644 index 0000000..96cf3b3 --- /dev/null +++ b/content/posts/2022/python/easyocr.md @@ -0,0 +1,98 @@ +--- +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)) +```