Python обслуживает изображение и данные с помощью python BaseHttpRequestHandler

Привет, у меня есть следующий код.

class Handler(BaseHTTPRequestHandler):
    PAGE = """
    <!DOCTYPE html>
            <html>
                <head>
                    <title>
                    </title>
                    <link href='/favicon.ico' rel='shortcut icon'>
                    <style>
                        img {
                            width: 80%;
                            height: auto;
                        }
                       .left{
                           float:left;
                       }
                       .right{
                           float:left;
                       }
                    </style>
                </head>
                <body>
                   <div class = "left">
                       <img src='/mjpeg'>
                   </div>
                   <div class = "left">
                       <!-- SHOW DATA HERE -->
                   </div>

              """

       PAGE_AFTER = """
            </body>
        </html>
"""

visualization_queue = None
predictionObj = None

def __init__(self, visualization_queue, *args, **kwargs):
    self.visualization_queue = visualization_queue
    super().__init__(*args, **kwargs)


def do_GET(self):

    print('path hai ye')
    print(self.path)
    if self.path == '/mjpeg':
        self.send_response(200)
        self.send_header(
            'Content-type',
            'multipart/x-mixed-replace; boundary=--jpgboundary'
        )
        self.end_headers()

        while True:
            frame = self.get_info_from_queue() """<-- irrelevant"""

            if frame is None:
                print('no image from stream')
                time.sleep(1)
                continue

            try:
                ret, jpg = cv2.imencode('.jpg', frame)
                self.wfile.write(bytes("--jpgboundary\n", "utf8"))
                self.send_header('Content-Type', 'image/jpeg')
                self.send_header('Content-length', len(jpg))
                self.end_headers()
                self.wfile.write(jpg)

                # time.sleep(self.config.delay)
            except (BrokenPipeError, ConnectionResetError):
                print('connection closed')
                break
    elif self.path == "/favicon.ico":
        print('getting favicon')
        icon = io.open("Common/logo-alten.png", "rb").read()
        self.send_response(200)
        self.send_header('Content-type', 'mage/x-icon')
        self.send_header('Content-length', len(icon))
        self.end_headers()
        self.wfile.write(icon)
    elif self.path == "/":
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(bytes(self.PAGE + self.PAGE_AFTER, "utf8"))
    else:
        print('error', self.path)
        self.send_response(404)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(bytes('<html><head></head><body>', "utf8"))
        self.wfile.write(bytes('<h1>{0!s} not found</h1>'.format(self.path), "utf8"))
        self.wfile.write(bytes('</body></html>', "utf8"))

    return


class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    """Handle requests in a separate thread."""

Я пытаюсь показать видео на localhost:8080 моего сервера. Проблема в том, что я могу успешно отправлять видеокадры, как вы можете видеть в следующей части кода.

ret, jpg = cv2.imencode('.jpg', frame)
self.wfile.write(bytes("--jpgboundary\n", "utf8"))
self.send_header('Content-Type', 'image/jpeg')
self.send_header('Content-length', len(jpg))
self.end_headers()
self.wfile.write(jpg)

Теперь я хочу также отправить дополнительные данные в виде html, например

<ol>
  <li>Person: 0</li>
  <li>cars: 5</li>
</ol>

Показывать сбоку страницы. Может ли кто-нибудь указать мне правильное направление? Какие-нибудь решения?

Спасибо.

Обычно вы этого не делаете ... вы можете поместить jpeg, закодированный как "src" элемента изображения, а затем остальной контент в качестве дополнительных данных, затем подсчитать длину этого вместе, или вы поместите изображение, возвращенное как отдельная функция со ссылкой на изображение и просто вернуть html, который указывает браузеру, что он должен затем получить изображение по другой ссылке ... или просто использовать микро-фреймворк, такой как фляга, и сэкономить огромное количество разочарований ...

Jon Clements 22.11.2018 17:27

привет Джон, спасибо за ответ. Можно ли привести очень простой небольшой пример кода. Я буду очень признателен.

Mj1992 23.11.2018 10:09

Начните с stackabuse.com/serving-static-files-with-flask - это охватит все, что вы пытаетесь достичь ... (но гораздо, намного проще: p)

Jon Clements 23.11.2018 10:26

спасибо, мужик, это сработает

Mj1992 23.11.2018 12:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
430
0

Другие вопросы по теме