--- 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)) ```