打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于flask接入摄像头视频监控

基于flask接入摄像头视频监控,实现打开摄像头、关闭摄像头;开始录像、结束录像功能。

import cv2import numpy as npfrom flask import Flask, render_template, Response
app = Flask(__name__)video_writer = None
class Camera: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) cls._instance.camera = cv2.VideoCapture(0) return cls._instance
def __del__(self): self.camera.release()
def get_frame(self): success, frame = self.camera.read() if not success: return None else: ret, buffer = cv2.imencode('.jpg', frame) frame = buffer.tobytes() return frame
camera = Camera()

def convert_bytes_to_frame(frame_bytes): # 将bytes类型的图像数据解码为OpenCV图像格式 frame_array = np.frombuffer(frame_bytes, dtype=np.uint8) frame = cv2.imdecode(frame_array, flags=cv2.IMREAD_COLOR) return frame
# 获取视频流def get_video_stream(): global camera,video_writer while True: if camera is None: break frame = camera.get_frame() if frame is None: break else: if video_writer is not None: video_writer.write(convert_bytes_to_frame(frame)) yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
# 关闭摄像头def close_camera(): global camera camera = None
@app.route('/open_camera', methods=['POST'])def open_camera_route(): global camera camera = Camera() return Response(get_video_stream(), mimetype='multipart/x-mixed-replace; boundary=frame')
@app.route('/close_camera', methods=['POST'])def close_camera_route(): close_camera() return 'Camera closed'
@app.route('/')def index(): return render_template('index3.html')
@app.route('/video_feed')def video_feed(): return Response(get_video_stream(), mimetype='multipart/x-mixed-replace; boundary=frame')
@app.route('/start_recording')def start_recording(): global video_writer video_writer = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc(*'XVID'), 20.0, (640, 480)) return 'Recording started'
@app.route('/stop_recording')def stop_recording(): global video_writer video_writer.release() video_writer = None return 'Recording stopped'
if __name__ == '__main__': app.run(debug=True)


这段代码是一个使用Flask框架实现的简单视频流和录制功能的Web应用程序。以下是代码的主要功能:
  1. 使用Camera类创建一个摄像头对象,并在get_frame()方法中读取一帧图像,并将其编码为JPEG格式的字节流。
  2. get_video_stream()函数利用生成器函数的特性,不断地从摄像头对象中获取图像帧,并将其转换为MJPEG格式的多路复用数据流(Multipart Motion-JPEG)。
  3. open_camera_route()函数用于打开摄像头并返回MJPEG格式的多路复用数据流,以便在Web页面上显示视频流。
  4. close_camera_route()函数用于关闭摄像头。
  5. start_recording()函数用于开始录制视频,并将视频帧写入到名为output.avi的文件中。
  6. stop_recording()函数用于停止录制视频。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用flask将opencv读取摄像头的实时视频流输出到浏览器
flask第二十一篇——练习题
flask基础学习一
计算机技术|我的第一个Flask程序
Python Web框架Flask中使用新浪SAE云存储实例
Flask结合ECharts实现在线可视化效果,超级详细!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服