Обнаружение объектов OpenCV становится неустойчивым при выводе видео на html-страницу, а затем передаче этой страницы в iframe на другой html-странице

#python #html #opencv #flask

Вопрос:

У меня есть некоторые результаты обнаружения открытых объектов cv, которые мне нужны на веб-странице. Ниже приведен соответствующий блок кода.

Колба OpenCV

 def gen_frames():  
            
    #Main code body was here but removed because irrelevant to the post

    ret, buffer = cv2.imencode('.jpg', frame)
    frame = buffer.tobytes()
    yield (b'--framern'
           b'Content-Type: image/jpegrnrn'   frame   b'rn')  # concat frame one by one and show result

app = Flask(__name__)  

@app.route('/video_feed')
def video_feed():
    #Video streaming route. Put this in the src attribute of an img tag
    return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')


@app.route('/')
def index():
    """Video streaming home page."""
    return render_template('index.html')


if __name__ == '__main__':
    app.run(host='0.0.0.0',threaded=True)
 

HTML (index.html)

 <html>
  <body>
    <img src="{{ url_for('video_feed') }}">
  </body>
</html>
 

Видеовыход отображается на веб — странице, как и ожидалось.

Однако при попытке просмотреть эти выходные данные через iframe на другой веб-странице обнаружение объекта не срабатывает.

[Вот как должно выглядеть обнаружение объекта.][1]

[Вот что происходит после просмотра через iframe.][2]

Терминал также выдает следующую ошибку.

Assertion avci->compat_decode_consumed == 0 failed at libavcodec/decode.c:731

Комментарии:

1. и где же object detection код? Все проблемы могут быть внутри object detection . Код в вашем вопросе отправляет только изображение, поэтому он не может изменять поля на изображении. Все проблемы должны возникнуть до того, как вы его отправите.

2. @furas Я добавил код в

3. что такое nomi_izi ? Я не могу найти его в Интернете. Вы должны поместить код в виде текста, а не ссылки на внешнюю страницу. И если бы вы поместили его в pastebin, вы могли бы выбрать highlight: Python , и он был бы более читабельным.

4. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Обратная связь») в вопрос (не комментарий) в виде текста (не скриншот, не ссылка на внешний портал). Есть и другая полезная информация.

5. @furas Я исправил проблему.

Ответ №1:

Попытка просмотреть выходные данные, выполняемые через iframe, запускает два экземпляра приложения, если открыта исходная html-страница. Что создает проблемы с потоковой передачей.

Таким образом, если вы собираетесь просматривать его только через iframe, держите открытым один экземпляр веб-страницы.