[英]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.