我有一个客户端,它从相机中提取帧,然后压缩并将其存储在JSON对象中,以发送到Flask服务器。我需要在Flask界面上显示上述帧图像。我当前的尝试不会返回错误,但是只会打印一个np数组而不显示实际图像。
client.py
class Camera(object):
def __init__(self, mode, addr, id):
self.id = id
self.video = None
if(mode == "file" and type(addr) == type("hi")):
self.video = cv2.VideoCapture(addr)
elif(mode == "live" and type(addr) == type(0)):
self.video = cv2.VideoCapture(addr)
else:
print("ERROR: Camera class given either an incorrect mode or an address of the wrong type.")
def __del__(self):
self.video.release()
def get_cam_id(self):
return self.id
def get_frame(self):
ret, frame = self.video.read()
if(ret == True):
return frame
else:
return None
def norm_frame(self, frame):
frame = cv2.resize(frame, None, fx=0.6, fy=0.6)
return frame
def package(self, frame):
frame = cv2.imencode('.jpg', frame, [cv2.IMWRITE_JPEG_QUALITY, 70])[1].tolist()
frame = json.dumps(frame)
return frame
在test_config
中的 applications.py
路线
@application.route('/test_config', methods = ['GET', 'POST'])
def test2():
var = input('Enter ID: ')
print(FEEDS[var])
frame = FEEDS[var].package(FEEDS[var].norm_frame(FEEDS[var].get_frame()))
print(frame)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Attempt
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#frame = json.loads(frame)
#frame = np.asarray(frame, np.uint8)
#frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
#return frame
return "Frame will display here eventually!"
有一条/test_input
路线,允许用户输入有关摄像机的信息。所述信息用于在client.py
中创建相机对象。对象通过ID密钥存储在applications.py
中的词典中,当在test_config
中输入时,该词典将确定显示哪个帧。我遇到的麻烦是在输入Camera对象的键之后显示图像。
答案 0 :(得分:0)
我找到了解决方案。谢谢@furas,谢谢您的帮助。
r = requests.get('http://127.0.0.1:8080/get_frame').content
frame = json.loads(r)
frame = np.asarray(frame, np.uint8)
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
r, jpg = cv2.imencode('.jpg', frame)
return Response(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + jpg.tobytes() + b'\r\n\r\n', mimetype='multipart/x-mixed-replace; boundary=frame')