訂閱
糾錯
加入自媒體

技術文章:使用Python+OpenCV+Flask處理瀏覽器中的視頻

現(xiàn)在我們常常在家里、辦公室或其它地方安裝網(wǎng)絡攝像頭或監(jiān)控攝像頭來進行視頻監(jiān)控。大多數(shù)人使用IP攝像機(互聯(lián)網(wǎng)協(xié)議攝像機)而不是閉路電視(閉路電視),這是因為它們具有更高的分辨率和更低的布線成本。你可以在這里找到這兩種系統(tǒng)之間的詳細差異。在本文中,我們將重點介紹IP攝像機:https://www.taylored.com/blog/cctv-vs-ip-cameras-which-is-best-suited-for-your-business/IP攝像機是一種數(shù)字攝像機,它通過IP網(wǎng)絡接收控制數(shù)據(jù)并發(fā)送圖像數(shù)據(jù),無需本地記錄設備。大多數(shù)IP攝像機是基于RTSP(實時流協(xié)議)的,因此在internet瀏覽器中“不受支持”。

使用網(wǎng)絡瀏覽器來進行實時視頻流顯示計算機視覺是一個跨學科的領域,研究如何使計算機從數(shù)字圖像或視頻中獲得高層次的理解。為了實現(xiàn)計算機視覺的相關技術,我們使用Python中的OpenCV模塊,并使用flask web框架在web瀏覽器中顯示實時流。在進入編碼部分之前,讓我們先簡單地了解一下這些模塊,如果你已經熟悉這些模塊,可以直接跳到下一節(jié)。根據(jù)維基百科的說法,F(xiàn)lask是一個用Python編寫的微型web框架,它被歸類為微框架,因為它不需要特定的工具或庫,同時它沒有數(shù)據(jù)庫抽象層、表單驗證或任何其他組件,其中已有的第三方庫提供了通用功能。根據(jù)GeeksForGeeks的說法,OpenCV是用于計算機視覺、機器學習和圖像處理的大型開源庫,現(xiàn)在它在實時操作中扮演著重要的角色,這在當今的系統(tǒng)中非常重要。步驟1-安裝Flask&OpenCV:我們可以使用'pip install flask'和'pip install opencv python'命令來進行安裝。如果想在PyCharm中安裝,請執(zhí)行以下步驟:https://www.jetbrains.com/help/pycharm/installing-uninstalling-and-upgrading-packages.html步驟2-導入必要的庫,初始化flask應用程序:現(xiàn)在我們將導入必要的庫并初始化flask應用程序。# 導入必要的庫
from flask import Flask, render_template, Response
import cv2
# 初始化Flask app
app = Flask(__name__)

步驟3-使用OpenCV捕獲視頻:創(chuàng)建一個VideoCapture對象來觸發(fā)攝像機并讀取視頻的第一個圖像/幀,我們可以輸入視頻文件的路徑,也可以使用數(shù)字指定本地網(wǎng)絡攝像頭。若要觸發(fā)網(wǎng)絡攝像頭,我們將“0”作為參數(shù)傳遞。為了從IP攝像機捕獲,我們提供RTSP鏈接作為參數(shù)。要查看IP攝像機的RTSP地址,請執(zhí)行以下操作-查找RTSP地址。camera = cv2.VideoCapture(0)
'''
for ip camera use - rtsp://username:password@ip_address:554/user=username_password='password'_channel=channel_number_stream=0.sdp'
for local webcam use cv2.VideoCapture(0)
'''

步驟4-添加窗口并生成視頻幀:

gen_frames函數(shù)會執(zhí)行一個循環(huán),在該循環(huán)中,它將連續(xù)從攝影機返回幀作為響應塊,該函數(shù)要求攝像機提供一個幀,然后將該幀格式化為響應塊,內容類型為image/jpeg步驟5-為web應用的默認頁面定義應用程序路由:路由是指應用程序的URL模式(例如myapp.com/home或者myapp.com/about)。@app.route("/")是Flask提供的Python修飾符,它可以輕松地將應用程序中的url分配給函數(shù)。@app.route('/')
def index():
   return render_template('index.html')

注解@app.route,每當用戶訪問我們的應用程序域時(localhost:5000),執(zhí)行index函數(shù)。Flask使用Jinja模板庫來呈現(xiàn)模板。在我們的應用程序中,我們使用模板來呈現(xiàn)將在瀏覽器中顯示的HTML。步驟6-定義視頻源的應用程序路由:@app.route('/video_feed')
def video_feed():
   return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
'/video_feed'路由返回流式響應。由于這個流返回要在網(wǎng)頁中顯示的圖像,所以這個路由的URL在image標記的“src”屬性中(參見下面的index.html)。瀏覽器將通過在其中顯示JPEG圖像流來自動更新圖像元素,因為大多數(shù)/所有瀏覽器都支持多部分響應讓我們看看index.html文件:<body>
<div class="container">
   <div class="row">
       <div class="col-lg-8  offset-lg-2">
           <h3 class="mt-5">Live Streaming</h3>
           <img src="{{ url_for('video_feed') }}" width="100%">
       </div>
   </div>
</div>
</body>
步驟7-啟動Flask服務器:if __name__ == "__main__":
   app.run(debug=True)
app.run()被調用并在本地啟動web應用程序[localhost:5000].“debug=True”確保我們不需要每次進行更改時都運行我們的應用程序,我們只需在服務器仍在運行時刷新網(wǎng)頁以查看更改。項目結構:

項目保存在一個名為“攝像頭檢測”的文件夾中。我們運行'應用程序副本'文件,運行此文件時,我們的應用程序托管在本地服務器的端口5000。運行app.py后在web瀏覽器上只需輸入“l(fā)ocalhost:5000“app.py-這是我們上面創(chuàng)建的Flask應用程序templates -此文件夾包含index.html'文件。在渲染模板時,這在Flask中是必需的,所有的HTML文件都放在這個文件夾下。讓我們看看運行app.py的時候會發(fā)生什么 :

在點擊提供的網(wǎng)址,由于我使用了上面的VideoCapture(0),因此瀏覽器上會顯示網(wǎng)絡攝像頭源:

你的網(wǎng)絡瀏覽器上有來自IP攝像頭/網(wǎng)絡攝像頭的實時視頻流,可用于安全和監(jiān)控目的。請參閱我的GitHub代碼:https://github.com/NakulLakhotia/Live-Streaming-using-OpenCV-Flask希望這篇文章能讓你對嘗試計算機視覺領域的新事物感興趣,并幫助你增加知識。

☆ END ☆

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

    掃碼關注公眾號
    OFweek人工智能網(wǎng)
    獲取更多精彩內容
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯(lián)系郵箱:
    *驗 證 碼:

    粵公網(wǎng)安備 44030502002758號