技術(shù)文章:使用Python+OpenCV+Flask處理瀏覽器中的視頻
現(xiàn)在我們常常在家里、辦公室或其它地方安裝網(wǎng)絡(luò)攝像頭或監(jiān)控?cái)z像頭來進(jìn)行視頻監(jiān)控。大多數(shù)人使用IP攝像機(jī)(互聯(lián)網(wǎng)協(xié)議攝像機(jī))而不是閉路電視(閉路電視),這是因?yàn)樗鼈兙哂懈叩姆直媛屎透偷牟季成本。你可以在這里找到這兩種系統(tǒng)之間的詳細(xì)差異。在本文中,我們將重點(diǎn)介紹IP攝像機(jī):https://www.taylored.com/blog/cctv-vs-ip-cameras-which-is-best-suited-for-your-business/IP攝像機(jī)是一種數(shù)字?jǐn)z像機(jī),它通過IP網(wǎng)絡(luò)接收控制數(shù)據(jù)并發(fā)送圖像數(shù)據(jù),無需本地記錄設(shè)備。大多數(shù)IP攝像機(jī)是基于RTSP(實(shí)時(shí)流協(xié)議)的,因此在internet瀏覽器中“不受支持”。

使用網(wǎng)絡(luò)瀏覽器來進(jìn)行實(shí)時(shí)視頻流顯示計(jì)算機(jī)視覺是一個(gè)跨學(xué)科的領(lǐng)域,研究如何使計(jì)算機(jī)從數(shù)字圖像或視頻中獲得高層次的理解。為了實(shí)現(xiàn)計(jì)算機(jī)視覺的相關(guān)技術(shù),我們使用Python中的OpenCV模塊,并使用flask web框架在web瀏覽器中顯示實(shí)時(shí)流。在進(jìn)入編碼部分之前,讓我們先簡單地了解一下這些模塊,如果你已經(jīng)熟悉這些模塊,可以直接跳到下一節(jié)。根據(jù)維基百科的說法,F(xiàn)lask是一個(gè)用Python編寫的微型web框架,它被歸類為微框架,因?yàn)樗恍枰囟ǖ墓ぞ呋驇欤瑫r(shí)它沒有數(shù)據(jù)庫抽象層、表單驗(yàn)證或任何其他組件,其中已有的第三方庫提供了通用功能。根據(jù)GeeksForGeeks的說法,OpenCV是用于計(jì)算機(jī)視覺、機(jī)器學(xué)習(xí)和圖像處理的大型開源庫,現(xiàn)在它在實(shí)時(shí)操作中扮演著重要的角色,這在當(dāng)今的系統(tǒng)中非常重要。步驟1-安裝Flask&OpenCV:我們可以使用'pip install flask'和'pip install opencv python'命令來進(jìn)行安裝。如果想在PyCharm中安裝,請執(zhí)行以下步驟:https://www.jetbrains.com/help/pycharm/installing-uninstalling-and-upgrading-packages.html步驟2-導(dǎo)入必要的庫,初始化flask應(yīng)用程序:現(xiàn)在我們將導(dǎo)入必要的庫并初始化flask應(yīng)用程序。# 導(dǎo)入必要的庫
from flask import Flask, render_template, Response
import cv2
# 初始化Flask app
app = Flask(__name__)
步驟3-使用OpenCV捕獲視頻:創(chuàng)建一個(gè)VideoCapture對象來觸發(fā)攝像機(jī)并讀取視頻的第一個(gè)圖像/幀,我們可以輸入視頻文件的路徑,也可以使用數(shù)字指定本地網(wǎng)絡(luò)攝像頭。若要觸發(fā)網(wǎng)絡(luò)攝像頭,我們將“0”作為參數(shù)傳遞。為了從IP攝像機(jī)捕獲,我們提供RTSP鏈接作為參數(shù)。要查看IP攝像機(jī)的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ù)會(huì)執(zhí)行一個(gè)循環(huán),在該循環(huán)中,它將連續(xù)從攝影機(jī)返回幀作為響應(yīng)塊,該函數(shù)要求攝像機(jī)提供一個(gè)幀,然后將該幀格式化為響應(yīng)塊,內(nèi)容類型為image/jpeg步驟5-為web應(yīng)用的默認(rèn)頁面定義應(yīng)用程序路由:路由是指應(yīng)用程序的URL模式(例如myapp.com/home或者myapp.com/about)。@app.route("/")是Flask提供的Python修飾符,它可以輕松地將應(yīng)用程序中的url分配給函數(shù)。@app.route('/')
def index():
return render_template('index.html')
注解@app.route,每當(dāng)用戶訪問我們的應(yīng)用程序域時(shí)(localhost:5000),執(zhí)行index函數(shù)。Flask使用Jinja模板庫來呈現(xiàn)模板。在我們的應(yīng)用程序中,我們使用模板來呈現(xiàn)將在瀏覽器中顯示的HTML。步驟6-定義視頻源的應(yīng)用程序路由:@app.route('/video_feed')
def video_feed():
return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
'/video_feed'路由返回流式響應(yīng)。由于這個(gè)流返回要在網(wǎng)頁中顯示的圖像,所以這個(gè)路由的URL在image標(biāo)記的“src”屬性中(參見下面的index.html)。瀏覽器將通過在其中顯示JPEG圖像流來自動(dòng)更新圖像元素,因?yàn)榇蠖鄶?shù)/所有瀏覽器都支持多部分響應(yīng)讓我們看看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-啟動(dòng)Flask服務(wù)器:if __name__ == "__main__":
app.run(debug=True)
app.run()被調(diào)用并在本地啟動(dòng)web應(yīng)用程序[localhost:5000].“debug=True”確保我們不需要每次進(jìn)行更改時(shí)都運(yùn)行我們的應(yīng)用程序,我們只需在服務(wù)器仍在運(yùn)行時(shí)刷新網(wǎng)頁以查看更改。項(xiàng)目結(jié)構(gòu):

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

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

你的網(wǎng)絡(luò)瀏覽器上有來自IP攝像頭/網(wǎng)絡(luò)攝像頭的實(shí)時(shí)視頻流,可用于安全和監(jiān)控目的。請參閱我的GitHub代碼:https://github.com/NakulLakhotia/Live-Streaming-using-OpenCV-Flask希望這篇文章能讓你對嘗試計(jì)算機(jī)視覺領(lǐng)域的新事物感興趣,并幫助你增加知識(shí)。
☆ END ☆
發(fā)表評(píng)論
請輸入評(píng)論內(nèi)容...
請輸入評(píng)論/評(píng)論長度6~500個(gè)字
圖片新聞
-

OpenAI發(fā)布的AI瀏覽器,市場為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬
-

長安汽車母公司突然更名:從“中國長安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-

員工持股爆雷?廣汽埃安緊急回應(yīng)
最新活動(dòng)更多
-
11月7日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月20日立即報(bào)名>> 【免費(fèi)下載】RISC-V芯片發(fā)展現(xiàn)狀與測試挑戰(zhàn)-白皮書
-
即日-11.25立即下載>>> 費(fèi)斯托白皮書《柔性:汽車生產(chǎn)未來的關(guān)鍵》
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
11月28日立即下載>> 【白皮書】精準(zhǔn)洞察 無線掌控——283FC智能自檢萬用表
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 特斯拉工人被故障機(jī)器人打成重傷,索賠3.6億
- 2 AI 時(shí)代,阿里云想當(dāng)“安卓” ,那誰是“蘋果”?
- 3 拐點(diǎn)已至!匯川領(lǐng)跑工控、埃斯頓份額第一、新時(shí)達(dá)海爾賦能扭虧為盈
- 4 L3自動(dòng)駕駛延期,逼出車企技術(shù)自我淘汰
- 5 隱退4年后,張一鳴久違現(xiàn)身!互聯(lián)網(wǎng)大佬正集體殺回
- 6 機(jī)器人9月大事件|3家國產(chǎn)機(jī)器人沖刺IPO,行業(yè)交付與融資再創(chuàng)新高!
- 7 谷歌“香蕉”爆火啟示:國產(chǎn)垂類AI的危機(jī)還是轉(zhuǎn)機(jī)?
- 8 7倍機(jī)器人大牛股:高管股東套現(xiàn)VS機(jī)構(gòu)兇猛抱團(tuán),該信誰?
- 9 八部門聯(lián)手放行L3自動(dòng)駕駛!巨頭開始拼搶萬億市場?
- 10 OpenAI發(fā)布的AI瀏覽器,市場為何反應(yīng)強(qiáng)烈?
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享





