上个帖子
【树莓派3B+测评】TensorFlow物体识别对tensorflow深度学习框架进行了简单的使用,这次尝试通过Flask搭建视频流媒体Web服务器。
先看一下最终的效果:
将树莓派的USB摄像头采集到的图像实时显示在浏览器界面上,视频流的传输用到的是Flask,网页界面通过html编程实现。
首先安装Flask:
我的树莓派系统已经自带有这个软件包了。
接下来需要
新建一个文件夹来存放整个项目文件。我在桌面的test文件夹中新建了一个flask-video文件夹,并且需要在该文件夹中新建static和templates文件夹(这两个文件夹用于存放网页设计相关文件)。另外需要python程序进行摄像头的读取,视频流的传输。
整个项目的结构如下:
app.py代码如下,主要是通过flask实现视频流传输。
程序中端口666是随意设置的。
- from flask import Flask, render_template, Response
- from camera_opencv import Camera
-
- app = Flask(__name__)
-
- @app.route('/')
- def index():
- """Video streaming home page."""
- return render_template('index.html')
-
- def gen(camera):
- """Video streaming generator function."""
- 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():
- """Video streaming route. Put this in the src attribute of an img tag."""
- return Response(gen(Camera()),
- mimetype='multipart/x-mixed-replace; boundary=frame')
-
- if __name__ == '__main__':
- app.run(host='0.0.0.0', port =666, debug=True,threaded=True)
base_camera.py 多线程视频传输(详见github附件)
camera_opencv.py 用于获取USB摄像头图像
- 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:
- # read current frame
- _, img = camera.read()
-
- # encode as a jpeg image and return it
- yield cv2.imencode('.jpg', img)[1].tobytes()
接下来是html相关文件
index.html内容如下,body中的内容是网页中显示的内容,本例程显示了视频窗口和一个树莓派图标。
引用:
Video Streaming Demonstration
视频流媒体Demo
@2018 Raspberry Pi 3B+
style.css内容如下,它是index.html的配置文件,用于设置网页的颜色、字体等。
- body{
- background: #D2E9FF;
- color: #FF8040;
- padding:1%;
- text-align: center;
- }
整个项目的代码我上传到了github,地址:
flask-video-streaming-usbcamera
程序运行命令为:
然后在浏览器的地址栏中输入
即可启动。
演示视频:
树莓派视频流媒体Demo
本帖最后由 DDZZ669 于 2018-10-3 20:07 编辑