REST API для распознавания текста на изображении
Для распознавания используется библиотека EasyOCR. Для поиска текста на изображении используется алгоритм CRAFT. Для распознавания используется CRNN. В основе этой модели лежат три компонента: ResNet для выделения признаков, LSTM для разметки последовательности и CTC для декодирования
Для написания REST API использовалась библиотека FastAPI. Для запуска сервера - Uvicorn
API предоставляет возможность запуска как непосредственно с помощью скриптов, так и посредством сбора Docker-контейнера
Параметры сервиса описаны в файле params.json
:
languages
- список языков, которые нужно распознать; по умолчанию - ["en"]separator
- разделитель, который будет использоваться для соединения распознанных фрагментов текста; по умолчанию - "\n"paragraph
- нужно ли объединять текст в параграфы; по умолчанию - truegpu
- нужно ли использовать модель на GPU (true - использовать gpu, falce - использовать cpu); по умолчанию - falce
Если вы собираете Docker-контейнер, то параметры необходимо указать в файле непосредственно перед его сбором
Для запуска сервера с помощью скриптов воспользуйтесь следующим набором команд
cd ./OCR_API
pip install -r ./requirements.txt
python ./downloads_dependencies.py
uvicorn main:app --host 127.0.0.1 --port 8000
Если вы используете Docker, воспользуйтесь следующим набором команд
cd ./OCR_API
docker build --no-cache -t ocr-api .
docker run -t -p 8000:8080 ocr-api
После запуска сервера API будет доступно по адресу 127.0.0.1:8000
Для остановки работы сервера воспользуйтесь сочетанием клавиш Ctrl+C
Для распознавания текста на изображении используйте POST-метод API: 127.0.0.1:8000/text-recognition
Тело запроса - это изображение, на котором нужно распознать текст
API возвращает ответ в формате json. Пример ответа представлен ниже:
{
"recognized_text": "Hello"
}
Для более удобной работы с API в тестовом режиме, воспользуйтесть 127.0.0.1:8000/docs
Если возникла ошибка, вместо json c эмоциями API вернет словарь с ошибкой.
Если ошибка возникла при передаче изображения, ответ будет иметь следующий вид:
{
"Error": 1,
"description": "Error during getting image"
}
Если ошибка возникла при распознавании текста, ответ будет иметь следующий вид:
{
"Error": 2,
"description": "Error during OCR"
}