Распознавание номеров вагонов
Обзор
Данный сервис позволяет анализировать фото ЖД вагонов и распознавать восьмизначные номера. Сервис принимает на вход изображение и выдает информацию о каждом обнаруженном номере (положение и сам номер).
Сервис реализован как HTTP API.
Входное изображение можно передать двумя альтернативными способами:
- Как бинарный файл.
- Как url на публичный источник.
Поддерживаются форматы JPEG и PNG. Максимальный размер изображения: 16Mb
.
Эндпоинты
МЕТОД | URL | ОПИСАНИЕ |
---|---|---|
GET | /rzd-train-carriage/v1/version |
Получение версии сервиса. |
POST | /rzd-train-carriage/v1/results |
Обработка изображения и получение результатов. |
Получение версии сервиса
Эндпоинт возвращает версию в формате vX.Y.Z
.
СВОЙСТВА | ОПИСАНИЕ |
---|---|
Путь: | /rzd-train-carriage/v1/version |
HTTP метод: | GET |
Авторизация: | – |
Примеры на curl
Запрос:
$ curl -X 'GET' 'https://api4ai.cloud/rzd-train-carriage/v1/version'
Ответ:
v1.0.0
Обработка изображения и получение результатов
СВОЙСТВА | ОПИСАНИЕ |
---|---|
Путь: | /rzd-train-carriage/v1/results |
Метод: | POST |
Авторизация: | По API ключу |
POST-параметры: | image или url |
Схема ответа
В случае успеха сервис возвращает ответ с HTTP кодом 200
и JSON объект со следующей структурой:
{
"results": [
{
"status": {
"code": ...,
"message": ...
},
"name": ...,
"md5": ...,
"entities": [
{
"kind": "objects",
"name": "train-info",
"objects": [
{
"box": ...,
"entities": [
{
"kind": "text",
"name": "carriage-number",
"text": ...
}
]
}
]
}
]
}
]
}
Основные поля:
ПОЛЕ | ТИП | ОПИСАНИЕ |
---|---|---|
results[].status.code |
строка | Статус-код обрботки: ok или failure . |
results[].status.message |
строка | Сопроводительное сообщение к статус-коду. |
results[].name |
строка | Имя изображения, переданного на анализ (например my_image.jpg ). |
results[].md5 |
строка | MD5 сумма изображения. |
results[].entities[].objects |
массив | Массив обнаруженных объектов (номеров вагонов). |
results[].entities[].objects[].box |
массив | Координаты объекта в виде четырех чисел с плавающей точкой float . |
results[].entities[].objects[].entities[].text |
строка | Распознанный текст (номер вагона). |
Некоторые замечания:
- Координаты объекта определяют прямоугольную область на изображении в формате
[x, y, width, height]
. При этом все значения нормализованы (т.е.0.0
– левый или верхний край,1.0
– правый или нижний край) - Объектов (номеров вагонов) может быть несколько.
- Все поля, которые не описаны в таблице "основные поля" имеют фиксированные значения, описанные в схеме выше.
Передача изображения
Входное изображение можно передать двумя альтернативными способами:
- Как бинарный файл через поле формы (имя поля –
image
). - Как url на публичный источник через поле формы (имя поля –
url
).
Поддерживаются форматы JPEG и PNG. Максимальный размер изображения: 16Mb
.
Примеры на curl
Запрос:
curl -X 'POST' 'https://api4ai.cloud/rzd-train-carriage/v1/results?api_key=...' -F 'image=@image.jpg'
Ответ:
{
"results": [
{
"status": {
"code": "ok",
"message": "Success"
},
"name": "50649342_51714780.jpg",
"md5": "6aa1aef726f5af8413314098d1618a05",
"entities": [
{
"kind": "objects",
"name": "train-info",
"objects": [
{
"box": [
-0.0046875,
0.440625,
0.090625,
0.020833333333333315
],
"entities": [
{
"kind": "text",
"name": "carriage-number",
"text": "50649342"
}
]
},
{
"box": [
0.7171875,
0.43125,
0.0734375,
0.020833333333333332
],
"entities": [
{
"kind": "text",
"name": "carriage-number",
"text": "51714780"
}
]
}
]
}
]
}
]
}
Авторизация
Некоторые эндпоинты (в частости .../results
) требуют авторизации по API ключу.
Сервис поддерживает 3 альтернативных способа передачи API ключа.
Передача API ключа через параметр запросы api_key
:
curl 'https://api4ai.cloud/some/end/point?api_key=1234567890'
Передача API ключа через параметр запросы key
:
curl 'https://api4ai.cloud/some/end/point?key=1234567890'
Передача API ключа через HTTP заголовок (т.е. HTTP header) x-api-key
:
curl -H "x-api-key: 1234567890" 'https://api4ai.cloud/some/end/point'
Замечания к примерам выше:
- API ключ
1234567890
не является примером настоящим ключем. Обратитесь к разработчикам API для получения настоящего ключа. - Эндпоинт
/some/end/point
не является примером настоящего эндпоинта. Список натоящих эндпоинтов досупен в разделе "Эндпоинты".
Возможные ошибки
Сервис не может обработать переданное клиентом изображение
Когд переданное изображение не может быть обработано, сервис возвращает ответ со статусом 200
. Возвращаемый JSON объект имеет тот же формате, что и в случае успеха. Только в этом случае поле results[].status.code
будет иметь значение failure
, а поле results[].status.message
– описание ошибки.
Некоторые из причин ошибок:
- Неподдерживаемый формат изображения.
- Поврежденное изображение.
Пример ответа:
{
"results": [
{
"status": {
"code": "failure",
"message": "Can not load image."
},
"name": "file.txt",
"md5": "d41d8cd98f00b204e9800998ecf8427e",
"entities": []
}
]
}
Клиент отправил слишком большой запрос
Ограничение на размер запроса составляет примерно 32Mb
.
Когда клиент пытается передать слишком большой запрос, то сервис возвращает ответ с кодом 413
.
Чтобы укладываться в этот лимит мы настоятельно рекомендуем не передавать изображения размером более, чем 16Mb
.
Пример ответа:
Error: Request Entity Too Large
Your client issued a request that was too large.
Клиент не передал изображение
Если клиент не передаёт изображение, то сервер возвращает ответ с кодом 422
.
Пример ответа:
{
"detail": "Missing image or url field."
}
Клиент передал неверный API ключ
Если клиент передаёт API ключ, но он не верный, то сервер возвращает ответ с кодом 400
.
Пример ответа:
{
"message": "INVALID_ARGUMENT:API key not valid. Please pass a valid API key.",
"code": 400
}
Клиент не передал API ключ
Если клиент передаёт API ключ, то сервер возвращает ответ с кодом 401
.
Пример ответа:
{
"message": "UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
"code": 401
}