看看这段代码,这是app.py
#!/usr/bin/env python
from importlib import import_module
import os
from flask import Flask, render_template, Response
if os.environ.get('CAMERA'):
Camera = import_module('camera_' + os.environ['CAMERA']).Camera
else:
from camera import Camera
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
def gen(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/video_feed')
def video_feed():
return Response(gen(Camera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', threaded=True)
我想要做的是将一个变量传递给camera_opencv.py中的frames()函数,所以我做的是在视频源中实例化一个对象:
@app.route('/video_feed')
def video_feed():
id = 10
Obj = frames(id)
return Response(gen(Camera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
这是我的camera_opencv.py代码:
import cv2
from base_camera import BaseCamera
class Camera(BaseCamera):
video_source = 0
@staticmethod
def set_video_source(source):
Camera.video_source = source
@staticmethod
def frames():
camera = cv2.VideoCapture(Camera.video_source)
if not camera.isOpened():
raise RuntimeError('Could not start camera.')
while True:
_, img = camera.read()
yield cv2.imencode('.jpg', img)[1].tobytes()
我访问变量的方法是:
class Camera(BaseCamera):
video_source = 0
@staticmethod
def set_video_source(source):
Camera.video_source = source
@staticmethod
def frames(id):
print(id)
但我无法访问该值?我收到了一个错误。正如我所观察到的,这个Camera类调用了BaseCamera类。这是basecamera类看起来像:
我应该将变量直接传递给frames函数还是先将它传递给BaseClass类?怎么样??请帮忙。感谢
答案 0 :(得分:0)
您需要匹配基类签名,因此无法通过重载frame方法传递变量。
您可以做的是创建一个类级属性,并在Camera Class的frames方法中使用它。像这样:
class BaseCamera(object):
@staticmethod
def frames():
""""Generator that returns frames from the camera."""
raise RuntimeError('Must be implemented by subclasses.')
class Camera(BaseCamera):
id=None
@staticmethod
def frames():
print Camera.id
Camera.id=10
Camera.frames()