簡體   English   中英

Python - 使用 Flask 提取和流式傳輸視頻幀

[英]Python - Extracting and streaming video frames using flask

我是 Python 的新手,我想提取視頻幀,檢測 egde 並使用 Python 流式傳輸它。 我試過這個,但根本沒有出現。 這段代碼有什么問題?

app = Flask(__name__)

def gen():
    cap = cv2.VideoCapture('a.mp4')
    while(True):
        img = cap.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        edge = cv2.Canny(gray, 10, 200, apertureSize=3)
        vis = img.copy()
        vis /=2
        vis[edge != 0] = (0, 255, 0)
        merge = np.concatenate((img, vis), axis=1)
        cv2.imwrite('out.png', merge)
        frame = open('out.png', 'rb').read()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')


@app.route('/')
def video_feed():
   return Response(gen(),
                mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
      app.run(host='0.0.0.0', debug=True)

謝謝你。

您的代碼中有兩個問題:

第一個在這一行:

img = cap.read()

這是因為cv2.VideoCapture(src).read()返回 2 個參數。 第一個是布爾值,當圖像存在時為True ,否則為False 第二個參數是當前幀。 因此,您必須用以下內容替換您的行: ret, img = cap.read()img = cap.read()[1]

此行也導致TypeError

 vis /=2

它正在發生,因為奇數除以 2 后獲得浮點類型。 要成功運行角點檢測器,您必須導入numpy庫並將這一行替換為另一行,該行不會將圖像數組元素轉換為浮點數:

vis = numpy.trunc(vis / 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM