美文网首页
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