当前位置: 首页 > 知识库问答 >
问题:

Python程序无法在两个应用程序路由中显示流数据

古弘
2023-03-14

我现在正在做一个项目,从网络摄像头捕获视频帧,然后将附加数据(现在我使用生成的随机数进行测试)一起发送到服务器,同时显示在网页中。

在此之前,可以分别显示实时视频和数据,并将其发送到服务器进行存储。然而,当我试图将它们集成在一起时,我发现错误总是如下所示:

werkzeug::信息::192.168。0.103---[05/Feb/2020 22:03:10]“GET/video_feed HTTP/1.1”500-回溯(最近一次呼叫):文件“/usr/lib/python3/dist packages/flask/app.py”,第2309行,呼叫返回自我。wsgi_应用程序(环境,启动响应)文件“/usr/lib/python3/dist packages/flask/app.py”,第2295行,在wsgi_应用程序响应=self中。handle_exception(e)File“/usr/lib/python3/dist packages/flask/app.py”,第1741行,在handle_exception reraise(exc_类型,exc_值,tb)File“/usr/lib/python3/dist packages/flask/app.py”中的第35行,在reraise提升值文件“/usr/lib/python3/dist packages/app.py”中,第2292行,在wsgi_app response=self中。完整调度请求()文件“/usr/lib/python3/dist packages/flask/app.py”,第1815行,完整调度请求rv=self。handle_user_exception(e)File“/usr/lib/python3/dist packages/flask/app.py”,第1718行,在handle_user_exception reraise(exc_type,exc_value,tb)File“/usr/lib/python3/dist packages/\u compat.py”中,第35行,在reraise提升值文件“/usr/lib/python3/dist packages/flask/app.py”中,第1813行,在完整调度请求rv=self中。调度请求()文件“/usr/lib/python3/dist packages/flask/app.py”,第1799行,在调度请求返回self中。查看功能规则。endpoint类型错误:video_feed()缺少1个必需的位置参数:“input_frame”werkzeug::INFO::192.168。0.103---[05/Feb/2020 22:03:10]“GET/data_feed HTTP/1.1”500-回溯(最近一次调用):文件“/usr/lib/python3/dist packages/flask/app.py”,第2309行,调用返回self。wsgi_应用程序(环境,启动响应)文件“/usr/lib/python3/dist packages/flask/app.py”,第2295行,在wsgi_应用程序响应=self中。handle_exception(e)File“/usr/lib/python3/dist packages/flask/app.py”,第1741行,在handle_exception reraise(exc_类型,exc_值,tb)File“/usr/lib/python3/dist packages/flask/app.py”中的第35行,在reraise提升值文件“/usr/lib/python3/dist packages/app.py”中,第2292行,在wsgi_app response=self中。完整调度请求()文件“/usr/lib/python3/dist packages/flask/app.py”,第1815行,完整调度请求rv=self。handle_user_exception(e)File“/usr/lib/python3/dist packages/flask/app.py”,第1718行,在handle_user_exception reraise(exc_type,exc_value,tb)File“/usr/lib/python3/dist packages/\u compat.py”中,第35行,在reraise提升值文件“/usr/lib/python3/dist packages/flask/app.py”中,第1813行,在完整调度请求rv=self中。调度请求()文件“/usr/lib/python3/dist packages/flask/app.py”,第1799行,在调度请求返回self中。查看功能规则。endpoint TypeError:data_feed()缺少1个必需的位置参数:“input_data”

我多次试图找出根本原因,发现它应该与内部功能有关,但我仍然无法修复它。希望任何人都能通过以下代码提供帮助。谢谢

编辑:

我已经按照Gioachino Bartolotta的回复添加了传递到的参数。但是,新的错误会出现以下情况:

回溯(最近一次调用)文件“/usr/lib/python3/dist packages/flask/app.py”,第2309行,在调用返回self中。wsgi_应用程序(环境,启动响应)文件“/usr/lib/python3/dist packages/flask/app.py”,第2295行,在wsgi_应用程序响应=self中。handle_exception(e)File“/usr/lib/python3/dist packages/flask/app.py”,第1741行,在handle_exception reraise(exc_类型,exc_值,tb)File“/usr/lib/python3/dist packages/flask/app.py”中的第35行,在reraise提升值文件“/usr/lib/python3/dist packages/app.py”中,第2292行,在wsgi_app response=self中。完整调度请求()文件“/usr/lib/python3/dist packages/flask/app.py”,第1815行,完整调度请求rv=self。handle_user_exception(e)File“/usr/lib/python3/dist packages/flask/app.py”,第1718行,在handle_user_exception reraise(exc_type,exc_value,tb)File“/usr/lib/python3/dist packages/\u compat.py”中,第35行,在reraise提升值文件“/usr/lib/python3/dist packages/flask/app.py”中,第1813行,在完整调度请求rv=self中。调度请求()文件“/usr/lib/python3/dist packages/flask/app.py”,第1799行,在调度请求返回self中。查看功能规则。endpoint文件“/home/pi/pilotdrive\u poc/streaming/webstreaming\u viewer.py”,第30行,索引返回呈现模板(“index.html”)文件“/usr/lib/python3/dist packages/flask/templating.py”,第135行,呈现模板上下文,ctx。app)文件“/usr/lib/python3/dist packages/flask/templating.py”,第117行,in_render rv=template。渲染(上下文)文件“/usr/lib/python3/dist packages/jinja2/asyncsupport.py”,第76行,在渲染返回原始渲染(self,*args,**kwargs)文件“/usr/lib/python3/dist packages/jinja2/environment.py”中,第1008行,在渲染返回self中。环境handle_exception(exc_info,True)文件“/usr/lib/python3/dist packages/jinja2/environment.py”,第780行,在handle_exception reraise(exc_type,exc_value,tb)文件“/usr/lib/python3/dist packages/jinja2/_compat.py”第37行,在reraise提升值中。使用顶级模板代码文件“/usr/lib/python3/dist packages/flask/helpers.py”url中的第9行“/home/pi/pilotdrive\u poc/streaming/templates/index.html”文件“/usr/lib/python3/dist packages/blask/helpers.py”,第356行返回appctx。应用程序。handle_url_build_error(error,endpoint,values)File“/usr/lib/python3/dist packages/flask/app.py”,第2061行,在handle_url_build_error reraise(exc_type,exc_value,tb)File“/usr/lib/python3/dist packages/flask/_compat.py”中,第35行,在reraise提升值文件“/usr/lib/python3/dist/flask/helpers.py”中,第345行,在url_for force_external=external)文件“/usr/lib/python3/dist packages/werkzeug/routing.py”中,第1776行,在构建中引发构建错误(endpoint、值、方法、自身)werkzeug。路由。BuildError:无法为终结点“video_feed”生成url。您是否忘记指定值['input_frame']?

我想知道我的索引出了什么问题。html?我现在也附在这里。再次感谢!

webstreaming_查看器。派克

# USAGE
# python webstreaming.py --ip 0.0.0.0 --port 8000

# import the necessary packages
from vidgear.gears import VideoGear, NetGear
from flask import Response
from flask import Flask, current_app
from flask import render_template
from flask import html" target="_blank">jsonify
from random import random
import threading
import argparse
import datetime
import imutils
import time
import cv2

# initialize the output frame and a lock used to ensure thread-safe
# exchanges of the output frames (useful for multiple browsers/tabs
# are viewing tthe stream)

server_address='206.189.144.234'
options_cam={"CAP_PROP_FRAME_WIDTH":640,"CAP_PROP_FRAME_HEIGHT":480,"CAP_PROP_FPS":60}
options_client={'bidirectional_mode':True,'compression_format':'.jpg','compression_param':[cv2.IMWRITE_JPEG_QUALITY,80],'flag':0,'copy':False,'track':False}
stream=VideoGear(enablePiCamera=False,logging=False,**options_cam).start()
client=NetGear(address=server_address, port='20001', protocol='tcp', pattern=1, receive_mode=False, logging=True, **options_client)

app=Flask(__name__)

@app.route("/")
def index():
    # return the rendered template
    return render_template("index.html")

@app.route("/data_feed/<input_data>")
def data_feed(input_data):
    def dataStream(input_data):
        while True:
            print("get_data={}".format(input_data))
            yield "data: {}\n\n".format(input_data)
            time.sleep(1)
    return Response(dataStream(input_data), mimetype="text/event-stream")

@app.route("/video_feed/<input_frame>")
def video_feed(input_frame):
    # return the response generated along with the specific media
    # type (mime type)
    def display_frame(input_frame):
        while True:
            print("get_frame={}".format(input_frame))
            # encode the frame in JPEG format
            (flag, encodedImage) = cv2.imencode(".jpg", input_frame)

            # yield the output frame in the byte format
            yield(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + 
                bytearray(encodedImage) + b'\r\n')
    return Response(display_frame(input_frame),
        mimetype = "multipart/x-mixed-replace; boundary=frame")

def get_realtime_stream():
    while True:
        frame = stream.read()
        data_stream=round(random()*10,3)
        client.send(frame,message=data_stream)
        video_feed(frame)
        data_feed(data_stream)
    stream.stop()
    client.close()

# check to see if this is the main thread of execution
if __name__ == '__main__':
    t = threading.Thread(target=get_realtime_stream)
    t.start()

    app.run(host='0.0.0.0',port=8000,debug=True,threaded=True,use_reloader=False)

index.html

<html>
    <head>
        <title>Pi Video Surveillance</title>
    </head>
    <body>
        <div style="float: left; width: 100%">
            <div style="float: left; width: 700">
                <h1>Pi Video Surveillance</h1>
                    <img src="{{ url_for('video_feed') }}">
            </div>
            <div style="float: left">
                <h1>real-time data</h1>
                <iframe src="{{ url_for('data_feed') }}">
            </div>
        </div>
        <div>
            <div>
                <h1>Car control panel</h1>
            </div>
        </div>
    </body>
</html>

共有1个答案

宗乐池
2023-03-14

我认为您缺少在URL中声明参数的功能。

我的意思是:

你有

@app。路由(“/data\u feed”)定义数据馈送(输入数据)

@app。路由(“/video\u feed”)定义数据源(输入帧)

现在,您得到的错误抱怨缺少某些内容,而路由中缺少的是传递给路由所使用的底层函数的参数。为了消除错误,您必须像这样重写路由,然后必须相应地调用URL。

@app.route("/data_feed/

@app。路由(“/video\u提要/

当然,如果没有指定参数,您可以设置默认值。

 类似资料:
  • 问题内容: 我无法使用Flask在同一应用程序中成功使用Python请求调用第二条路由。我知道最好的做法是直接调用该函数,但是我需要它使用请求使用URL进行调用。例如: 问题答案: 您的代码假定您的应用程序可以一次处理多个请求:初始请求,以及在处理初始请求时生成的请求。 如果您正在运行像这样的开发服务器,则默认情况下,它在一个线程中运行;因此,它一次只能处理一个请求。 用于在开发服务器中启用多个线

  • 我正在React中建立一个设计组合。投资组合数据处于应用状态。 我正在使用React Router为每个项目创建一个/project/:projectID路由。该州的项目将根据URL中的值使用,例如website.com/project/1 问题就在这里。如果我像这样配置路由。。。 和console.log(this.props),props包括匹配参数(url栏的值),但不包括应用程序状态。但是

  • 我正在使用spring cloud路由应用程序,但无法这样做,下面是详细信息 我还尝试将路径添加为

  • 问题内容: 因此,我正在编写一个框架,我希望以此为基础来开发一些我正在使用的应用程序(该框架在那里,所以我有一个可以使用的环境,并且该系统可以让我使用例如一个登录) 我要创建这个框架,并且它的应用程序都使用面向资源的体系结构。 现在,我想创建一个URL路由类,该类可以由APP编写器(也可能由CMS App用户)扩展,但我想通过查看以下方法找出最佳方法:其他应用程序如何做到这一点。 问题答案: 我更

  • 我很难同时运行我的广告和应用程序。我花了两天的时间试图找到一个解决方案,但什么都没用。请帮忙。 这段代码显示我的google play services Admob广告——广告显示,但我看不到我的游戏屏幕,它是黑色背景。 此代码(注释掉的广告代码)成功运行我的游戏。是什么原因导致这两种方法无法协同工作? 你好,威廉。我刚刚开始学习Java,我使用的教程已经开始了http://www.kilobol

  • 我正在将我的原生android项目转换为flutter应用程序,在这一点上,我需要在其他小部件下面显示选项网格。 下面是代码 I/Flutter(16594):引发另一个异常:“package:flutter/src/rendering/sliver_multi_box_adaptor.dart”:断言失败:line 441 pos 12:“child.hassize”:不是true。I/Flut