Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python程序无法在两个应用程序路由中显示流数据_Python 3.x_Flask - Fatal编程技术网

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

Python 3.x Python程序无法在两个应用程序路由中显示流数据,python-3.x,flask,Python 3.x,Flask,我现在正在做一个项目,从网络摄像头捕获视频帧,然后将附加数据(现在我使用生成的随机数进行测试)一起发送到服务器,同时显示在网页中 在此之前,可以分别显示实时视频和数据,并将其发送到服务器进行存储。然而,当我试图将它们集成在一起时,我发现错误总是如下所示: werkzeug::信息::192.168.0.103---[05/Feb/2020 22:03:10]“获取 /视频源HTTP/1.1“500-回溯(最近一次调用):文件 “/usr/lib/python3/dist packages/fla

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

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

werkzeug::信息::192.168.0.103---[05/Feb/2020 22:03:10]“获取 /视频源HTTP/1.1“500-回溯(最近一次调用):文件 “/usr/lib/python3/dist packages/flask/app.py”,第2309行,调用 在wsgi_应用程序中返回self.wsgi_应用程序(环境,启动响应)文件“/usr/lib/python3/dist packages/flask/app.py”,第2295行 response=self.handle_异常(e)文件“/usr/lib/python3/dist packages/flask/app.py”,第1741行,在 处理异常 重新放(exc_类型,exc_值,tb)文件“/usr/lib/python3/dist packages/flask/_compat.py”,第35行,重新放 提升值文件“/usr/lib/python3/dist packages/flask/app.py”,第2292行,在wsgi_应用程序中 response=self.full\u dispatch\u request()文件“/usr/lib/python3/dist packages/flask/app.py”,第1815行,在 完全调度请求 rv=self.handle\u user\u异常(e)文件“/usr/lib/python3/dist packages/flask/app.py”,第1718行,in 处理用户异常 重新放(exc_类型,exc_值,tb)文件“/usr/lib/python3/dist packages/flask/_compat.py”,第35行,重新放 提升值文件“/usr/lib/python3/dist packages/flask/app.py”,第1813行,完全发送请求 rv=self.dispatch_request()文件“/usr/lib/python3/dist packages/flask/app.py”,第1799行,在 调度请求 return self.view\u functionsrule.endpoint TypeError:video\u feed()缺少1个必需的位置参数: “输入帧”werkzeug::信息::192.168.0.103---[2020年2月5日] 22:03:10]“GET/data_feed HTTP/1.1”500-回溯(最近的调用 最后):文件“/usr/lib/python3/dist-packages/flask/app.py”,第行 2309,在呼叫中 在wsgi_应用程序中返回self.wsgi_应用程序(环境,启动响应)文件“/usr/lib/python3/dist packages/flask/app.py”,第2295行 response=self.handle_异常(e)文件“/usr/lib/python3/dist packages/flask/app.py”,第1741行,在 处理异常 重新放(exc_类型,exc_值,tb)文件“/usr/lib/python3/dist packages/flask/_compat.py”,第35行,重新放 提升值文件“/usr/lib/python3/dist packages/flask/app.py”,第2292行,在wsgi_应用程序中 response=self.full\u dispatch\u request()文件“/usr/lib/python3/dist packages/flask/app.py”,第1815行,在 完全调度请求 rv=self.handle\u user\u异常(e)文件“/usr/lib/python3/dist packages/flask/app.py”,第1718行,in 处理用户异常 重新放(exc_类型,exc_值,tb)文件“/usr/lib/python3/dist packages/flask/_compat.py”,第35行,重新放 提升值文件“/usr/lib/python3/dist packages/flask/app.py”,第1813行,完全发送请求 rv=self.dispatch_request()文件“/usr/lib/python3/dist packages/flask/app.py”,第1799行,在 调度请求 return self.view\u functionsrule.endpoint TypeError:data\u feed()缺少1个必需的位置参数: “输入数据”

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

编辑:

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

回溯(最近一次调用上次)文件 “/usr/lib/python3/dist packages/flask/app.py”,第2309行,调用 返回self.wsgi_应用程序(环境,启动响应)文件 wsgi_应用程序中的第2295行“/usr/lib/python3/dist packages/flask/app.py” response=self.handle\u异常(e)文件 “/usr/lib/python3/dist packages/flask/app.py”,第1741行,in handle_异常重新释放(exc_类型、exc_值、tb)文件 “/usr/lib/python3/dist-packages/flask/_-compat.py”,第35行,重新排列 提升值文件“/usr/lib/python3/dist-packages/flask/app.py”,第行 2292,在wsgi_app response=self.full_dispatch_request()文件中 “/usr/lib/python3/dist packages/flask/app.py”,第1815行,in 完整调度请求rv=self.handle用户异常(e)文件 “/usr/lib/python3/dist packages/flask/app.py”,第1718行,in 句柄用户异常重新释放(exc类型,exc值,tb)文件 “/usr/lib/python3/dist-packages/flask/_-compat.py”,第35行,重新排列 提升值文件“/usr/lib/python3/dist-packages/flask/app.py”,第行 1813,在完整的调度请求rv=self.dispatch\u request()文件中 “/usr/lib/python3/dist packages/flask/app.py”,第1799行,in 发送请求返回 self.view\u functionsrule.endpoint文件 “/home/pi/pilotdrive\u poc/streaming/webstreaming\u viewer.py”,第30行, 在索引中返回render_模板(“index.html”)文件 “/usr/lib/python3/dist packages/flask/templating.py”,第135行,in render_模板上下文(ctx.app)文件 “/usr/lib/python3/dist packages/flask/templating.py”,第117行,in _render rv=template.render(上下文)文件“/usr/lib/python3/dist packages/jinja2/asyncsupport.py”,第76行,在 渲染返回原始的_渲染(self,*args,**kwargs)文件 “/usr/lib/python3/dist-packages/jinja2/environment.py”,第1008行,在 渲染返回self.environment.handle_异常(exc_info,True)文件 “/usr/lib/python3/dist-packages/jinja2/environment.py”,第780行,在 handle_异常重新释放(exc_类型、exc_值、tb)文件 “/usr/lib/python3/dist packages/jinja2/_compat.py”,第37行,in 使用_回溯(tb)文件重新提升提升值 “/home/pi/pilotdrive\u poc/streaming/templates/index.html”,第9行,在 顶级模板代码文件 “/usr/lib/python3/dist packages/flask/helpers.py”,第356行,in
# 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 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)
<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>