美文网首页
Video Streaming with Flask

Video Streaming with Flask

作者: Andy计算机专业 | 来源:发表于2019-04-07 04:54 被阅读0次
thank1 thank2 thank3

https://dwz.cn/dOabjhLX

app.py

from importlib import import_module
import os
from flask import Flask, render_template, Response

# import camera driver
if os.environ.get('CAMERA'):
    Camera = import_module('camera_' + os.environ['CAMERA']).Camera
else:
    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='127.0.0.1', threaded=True)

camera_opencv.py

import cv2
from PIL import Image
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()

            #2. 人脸检测
            
            #告诉OpenCV使用人脸识别分类器
            classfier = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
    
            #识别出人脸后要画的边框的颜色,RGB格式
            color = (0, 255, 0)  
        
            #将当前帧转换成灰度图像
            grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        
            #人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
            faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))

            #3. 给识别出的人脸画矩形框
            if len(faceRects) > 0:          #大于0则检测到人脸                                   
                for faceRect in faceRects:  #单独框出每一张人脸
                    x, y, w, h = faceRect        
                    cv2.rectangle(img, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
                              
            #4. 显示图像      
            # encode as a jpeg image and return it
            yield cv2.imencode('.jpg', img)[1].tobytes()

./templates/index.html

<html>
  <head>
    <title>Video Streaming Demonstration</title>
  </head>
  <body>
    <h1>Video Streaming Demonstration</h1>
     <img src="{{ url_for('video_feed') }}">
  </body>
</html>

HELLO WORD,Good night!

相关文章

网友评论

      本文标题:Video Streaming with Flask

      本文链接:https://www.haomeiwen.com/subject/ocljiqtx.html