11523|1

291

帖子

5

TA的资源

纯净的硅(中级)

楼主
 

【树莓派3B+测评】搭建Flask视频流媒体Web服务器 [复制链接]

本帖最后由 DDZZ669 于 2018-10-3 20:07 编辑 上个帖子【树莓派3B+测评】TensorFlow物体识别对tensorflow深度学习框架进行了简单的使用,这次尝试通过Flask搭建视频流媒体Web服务器。 先看一下最终的效果 将树莓派的USB摄像头采集到的图像实时显示在浏览器界面上,视频流的传输用到的是Flask,网页界面通过html编程实现。 首先安装Flask
  1. sudo pip install flask
复制代码
我的树莓派系统已经自带有这个软件包了。 接下来需要新建一个文件夹来存放整个项目文件。我在桌面的test文件夹中新建了一个flask-video文件夹,并且需要在该文件夹中新建static和templates文件夹(这两个文件夹用于存放网页设计相关文件)。另外需要python程序进行摄像头的读取,视频流的传输。 整个项目的结构如下 app.py代码如下,主要是通过flask实现视频流传输。 程序中端口666是随意设置的。
  1. from flask import Flask, render_template, Response
  2. from camera_opencv import Camera
  3. app = Flask(__name__)
  4. @app.route('/')
  5. def index():
  6. """Video streaming home page."""
  7. return render_template('index.html')
  8. def gen(camera):
  9. """Video streaming generator function."""
  10. while True:
  11. frame = camera.get_frame()
  12. yield (b'--frame\r\n'
  13. b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
  14. @app.route('/video_feed')
  15. def video_feed():
  16. """Video streaming route. Put this in the src attribute of an img tag."""
  17. return Response(gen(Camera()),
  18. mimetype='multipart/x-mixed-replace; boundary=frame')
  19. if __name__ == '__main__':
  20. app.run(host='0.0.0.0', port =666, debug=True,threaded=True)
复制代码
base_camera.py 多线程视频传输(详见github附件) camera_opencv.py 用于获取USB摄像头图像
  1. import cv2
  2. from base_camera import BaseCamera
  3. class Camera(BaseCamera):
  4. video_source = 0
  5. @staticmethod
  6. def set_video_source(source):
  7. Camera.video_source = source
  8. @staticmethod
  9. def frames():
  10. camera = cv2.VideoCapture(Camera.video_source)
  11. if not camera.isOpened():
  12. raise RuntimeError('Could not start camera.')
  13. while True:
  14. # read current frame
  15. _, img = camera.read()
  16. # encode as a jpeg image and return it
  17. yield cv2.imencode('.jpg', img)[1].tobytes()
复制代码
接下来是html相关文件 index.html内容如下,body中的内容是网页中显示的内容,本例程显示了视频窗口和一个树莓派图标。
Video Streaming Demonstration

视频流媒体Demo


@2018 Raspberry Pi 3B+

style.css内容如下,它是index.html的配置文件,用于设置网页的颜色、字体等。
  1. body{
  2. background: #D2E9FF;
  3. color: #FF8040;
  4. padding:1%;
  5. text-align: center;
  6. }
复制代码
整个项目的代码我上传到了github,地址:
链接已隐藏,如需查看请登录或者注册
程序运行命令为:
  1. python2 app.py
复制代码
然后在浏览器的地址栏中输入
  1. http://localhost:666
复制代码
即可启动。 演示视频:树莓派视频流媒体Demo
此帖出自单片机论坛
点赞 关注(1)
 

回复
举报

291

帖子

5

TA的资源

纯净的硅(中级)

沙发
 
VNC登录如果没有调整树莓派的分辨率,可能会出现下面的结果,屏幕分辨率太小了!

调整屏幕分辨率的方法很简单,在终端中输入:
  1. sudo raspi-config
复制代码

会出现如下界面,通过上下键选择Advanced Options


然后选择Resolution,选择一个合适的分辨率,保存,重启树莓派即可。



此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表