Отправка лучшего кадра по HTTP#
В LUNA KIOSK вы можете отправлять лучшие кадры во внешнюю систему с помощью HTTP POST-запросов.
Важно: Включение HTTP-отправки не заменяет отправку через WebSocket. При активации лучшие кадры отправляются одновременно по обоим каналам.
Отправка лучшего кадра выполняется в момент готовности изображения (после его формирования системой распознавания).
Каждый лучший кадр отправляется отдельным HTTP POST запросом.
Параметры конфигурации#
server.conf#
Следующие параметры файла server.conf отвечают за отправку лучшего кадра по протоколу HTTP:
| Parameter | Default | Description |
|---|---|---|
send-bestshot-on-http |
0 | Включает или выключает отправку лучшего кадра по HTTP. Возможные значения: |
http-bestshot-path |
http://localhost:8080 | Указывает HTTP-эндпоинт, на который следует отправить лучший кадр. |
Windows Registry#
Для Windows, следующие параметры отвечают за отправку лучшего кадра по протоколу HTTP:
| Parameter | Type | Default | Description |
|---|---|---|---|
SendBestShotOnHttp |
DWORD | 0 | Включает или выключает отправку лучшего кадра по HTTP. Возможные значения: |
HttpBestShotPath |
DWORD | http://localhost:8080 | Указывает HTTP-эндпоинт, на который следует отправить лучший кадр. |
Формат изображения#
Формат отправляемого изображения задаётся параметром BestshotFormat или bestshot-format. Возможные значения:
jpg(по умолчанию);png
Перед сериализацией изображение приводится к формату R8G8B8 (24 bpp), после чего кодируется в выбранный формат (JPEG или PNG).
HTTP POST запрос#
Заголовки запроса#
Content-Type: image/jpegContent-Type: image/png
Тип заголовка определяется параметром BestshotFormat.
Тело запроса#
Тело HTTP запроса содержит сырые бинарные данные изображения.
То есть POST запрос имеет следующий вид:
POST /endpoint HTTP/1.1
Content-Type: image/jpeg
Content-Length: <size>
<binary image data>
HTTP ответ#
- Запрос считается успешным, если код состояния HTTP-ответа находится в диапазоне 200-299.
- Если сервер возвращает другой код, отправка считается неуспешной и в лог выводится предупреждение. Ответ сервера может быть выведен в лог при включённом уровне debug.
Валидация URL#
Перед отправкой выполняется проверка корректности URL по следующим критериям:
- структура URL корректна;
- URL содержит схему;
- URL использует схему
http.
Если URL невалиден, пуст или использует неподдерживаемую схему, отправка лучшего кадра пропускается.
Таймауты#
Для HTTP запроса установлен таймаут 30 секунд. Также включена автоматическая обработка HTTP redirect.
Пример сервера для тестирования#
Ниже приведён пример простого HTTP сервера на Python, который принимает POST запросы с изображением и сохраняет их в файл.
from http.server import BaseHTTPRequestHandler, HTTPServer
import sys
class Handler(BaseHTTPRequestHandler):
def do_POST(self):
length = int(self.headers['Content-Length'])
body = self.rfile.read(length)
recvFile = "received.png" if self.headers["Content-Type"] == "image/png" else "received.jpg"
with open(recvFile, "wb") as f:
f.write(body)
self.send_response(200)
self.end_headers()
self.wfile.write(b"OK")
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8080
server = HTTPServer(("0.0.0.0", port), Handler)
print(f"Listening on {port}")
server.serve_forever()
Запуск:
python http_receiver.py 8080
После запуска сервер будет принимать лучшие кадры и сохранять их в файлы received.jpg или received.png.
Проверка работы#
- Start the test HTTP server.
- Enable HTTP best shot delivery. Set
send-bestshot-on-http = 1andhttp-bestshot-path = http://localhost:8080. - After generating the best shot, the server will send the image via a POST request.
-
Check the server’s directory – a file named received.jpg or received.png should appear.
-
Запустите тестовый HTTP сервер.
- Включите отправку лучшего кадра по HTTP. Установите
send-bestshot-on-http = 1иhttp-bestshot-path = http://localhost:8080. - После формирования лучшего кадра сервер отправит изображение POST запросом.
- Проверьте каталог сервера. Должен появиться файл received.jpg или received.png.
Отправка обрезанных и полных лучших кадров#
Когда для обоих типов лучших кадров включена отправка по HTTP, LUNA KIOSK автоматически отправляет два отдельных POST-запроса на один и тот же URL.
Порядок запросов:
- Первый запрос содержит обрезанный лучший кадр.
- Второй запрос содержит полный лучший кадр.
В первый запрос добавляется заголовок X-Bestshot-Type со значением crop, а во второй – full.