Перейти к содержанию

Отправка лучшего кадра по HTTP#

В LUNA KIOSK вы можете отправлять лучшие кадры во внешнюю систему с помощью HTTP POST-запросов.

Важно: Включение HTTP-отправки не заменяет отправку через WebSocket. При активации лучшие кадры отправляются одновременно по обоим каналам.

Отправка лучшего кадра выполняется в момент готовности изображения (после его формирования системой распознавания).

Каждый лучший кадр отправляется отдельным HTTP POST запросом.

Параметры конфигурации#

server.conf#

Следующие параметры файла server.conf отвечают за отправку лучшего кадра по протоколу HTTP:

Parameter Default Description
send-bestshot-on-http 0 Включает или выключает отправку лучшего кадра по HTTP.
Возможные значения:
  • 0 - Отключено
  • 1 - Включено
  • http-bestshot-path http://localhost:8080 Указывает HTTP-эндпоинт, на который следует отправить лучший кадр.

    Windows Registry#

    Для Windows, следующие параметры отвечают за отправку лучшего кадра по протоколу HTTP:

    Parameter Type Default Description
    SendBestShotOnHttp DWORD 0 Включает или выключает отправку лучшего кадра по HTTP.
    Возможные значения:
  • 0 - Отключено
  • 1 - Включено
  • HttpBestShotPath DWORD http://localhost:8080 Указывает HTTP-эндпоинт, на который следует отправить лучший кадр.

    Формат изображения#

    Формат отправляемого изображения задаётся параметром BestshotFormat или bestshot-format. Возможные значения:

    • jpg (по умолчанию);
    • png

    Перед сериализацией изображение приводится к формату R8G8B8 (24 bpp), после чего кодируется в выбранный формат (JPEG или PNG).

    HTTP POST запрос#

    Заголовки запроса#

    • Content-Type: image/jpeg
    • Content-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.

    Проверка работы#

    1. Start the test HTTP server.
    2. Enable HTTP best shot delivery. Set send-bestshot-on-http = 1 and http-bestshot-path = http://localhost:8080.
    3. After generating the best shot, the server will send the image via a POST request.
    4. Check the server’s directory – a file named received.jpg or received.png should appear.

    5. Запустите тестовый HTTP сервер.

    6. Включите отправку лучшего кадра по HTTP. Установите send-bestshot-on-http = 1 и http-bestshot-path = http://localhost:8080.
    7. После формирования лучшего кадра сервер отправит изображение POST запросом.
    8. Проверьте каталог сервера. Должен появиться файл received.jpg или received.png.

    Отправка обрезанных и полных лучших кадров#

    Когда для обоих типов лучших кадров включена отправка по HTTP, LUNA KIOSK автоматически отправляет два отдельных POST-запроса на один и тот же URL.

    Порядок запросов:

    1. Первый запрос содержит обрезанный лучший кадр.
    2. Второй запрос содержит полный лучший кадр.

    В первый запрос добавляется заголовок X-Bestshot-Type со значением crop, а во второй – full.