此前通過OpenCV庫在行空板上查看USB攝像頭視頻的實驗,我們了解了Mind+進行Python編程的兩種模式,了解了Python第三方庫的概念。現在我們將通過Flask庫搭建一個可以遠程查看行空板攝像頭畫面的Web服務,實現自制遠程監控。
硬件:
本文實驗所用的臺式電腦為Windows7操作系統,行空板為V0.3.5版本,數據線為Type-C接口。
軟件:
Flask是一個輕量級的Python Web框架,它提供了構建Web應用程序所需的基本工具和庫,設計簡單且易于擴展,它具有以下特點:
輕量級框架: Flask設計簡單且易于理解,適用于快速開發小型到中型的Web應用程序。
基于Werkzeug和Jinja2: Werkzeug處理底層的HTTP請求和響應,Jinja2用于生成HTML頁面。
路由: 使用裝飾器(@app.route)將URL映射到相應的處理函數,使得處理HTTP請求變得直觀和簡單。
模板引擎: 使用Jinja2模板引擎渲染動態內容,允許在HTML中嵌入Python代碼,同時支持模板繼承和變量替換。
請求和響應處理: 提供了簡潔的API來訪問請求數據(如表單數據)、設置響應內容和狀態碼,以及處理文件上傳等功能。
擴展性: Flask支持大量的擴展,例如處理表單、身份驗證、數據庫集成等,使得開發者可以根據需求選擇性地添加功能。
以下是Flask的基本使用步驟,黃色背景文字為示例代碼:
4.1安裝Flask:
首先,你需要在你的Python環境中安裝Flask。可以使用pip命令來進行安裝:
pip install Flask
4.2創建Flask應用實例:
在你的Python腳本中,導入Flask類并創建一個實例:
from flask import Flask
app = Flask(__name__)
4.3定義路由和視圖函數:
路由定義了URL到Python函數的映射。使用@app.route()裝飾器來定義路由,并在其后編寫處理請求的視圖函數。
@app.route('/')
def hello_world():
return 'Hello, World!'
4.4運行Flask應用:
在程序的最后,調用app.run()方法來啟動Flask的開發服務器。默認情況下,服務器會監聽本地的5000端口。設置 debug=True 可以開啟調試模式,便于查看和解決問題。
if __name__ == '__main__':
app.run(debug=True)
4.5使用模板(可選):
Flask支持Jinja2模板引擎,你可以創建HTML模板文件,Flask通過渲染模板來生成動態內容。
4.6訪問應用:
在瀏覽器中訪問 localhost:5000 (默認端口),即可看到 “Hello, World!” 的頁面輸出。
這些步驟展示了一個非常基礎的 Flask 應用的創建和運行過程。隨著應用復雜度的增加,你可以添加更多的路由、視圖函數,使用模板引擎渲染動態內容,并集成各種 Flask 擴展來增強功能。Flask 的靈活性和簡單性使得它成為開發 Web 應用和 API 的理想選擇。
將USB 攝像頭接入行空板,再將行空板數據線連接到電腦主機,然后打開Mind+軟件,選擇Python模式。
5.1在Python模式新建項目,選擇“模塊”模式。
5.2在官方擴展庫添加“行空板”。
5.3在用戶擴展庫添加Flask庫。
如果用戶庫沒有顯示“Flask”庫,可以在搜索欄輸入“ext”進行搜索添加。
5.4完成添加后,點擊“連接遠程終端”連接行空板。
5.5按下列順序添加Flask模塊到Python主程序
此處為方便演示,程序每次運行都會自動生成一次html網頁文件,在實際應用中,網頁應該單獨編輯,Flask僅需要向網頁模板中添加數據就行。另外,在網頁路由標簽中,此處為空,意思是訪問根目錄,也就是類似“http://localhost:5000/”的網址。如果此處添加標簽,那么訪問網頁的時候就需要在上述網址后面增加標簽名稱。如本例中自動生成代碼中可以看到攝像頭頁面的標簽為“/video_feed”,所以直接訪問攝像頭畫面的網址為:http://localhost:5000/video_feed。
5.6點擊“運行”按鈕將程序上傳到行空板
注意查看“終端信息輸出區”的上傳和運行情況。Flask服務啟動后,連接同一網絡的電腦和手機等終端設備即可通過瀏覽器訪問這個Flask服務。如果把該服務映射到外網固定IP,那么理論上,連接互聯網的設備都可以訪問該服務,實現遠程監控。
上面是電腦訪問http://10.1.2.3:8000/的演示效果,這里的網址還可以是分配給行空板的其他網址,每個人局域網情況不一樣,包括網段設置,防火墻設置都有區別。所以如果除了10.1.2.3,其他地址訪問不了的話,需要檢查一下你的整個網絡的設置問題。下圖是查看行空板IP地址的方法:
為了方便演示,手機無線訪問的方式也是通過手機直連行空板熱點,然后訪問192.168.123.1:8000來進行查看。
實際動手嘗試的朋友可能會發現,視頻畫面是倒的,需要翻轉攝像頭才能顯示正的畫面。還有就是網頁的內容不夠豐富和靈活,還有Flask服務器啟動的參數不能靈活設置。等等這些問題都屬于模塊化編程特有的局限性,因為模塊已經被封裝,底層的代碼難以直接修改,所以功能不夠靈活。下面會演示用代碼模式實現同樣的功能,雖然需要一定的Python和Flask庫的學習成本,但是對于想實現復雜功能和靈活編程的開發者來說,這是很有必要的。
6.1在Python模式新建項目,選擇“代碼”模式。
6.2打開“文件系統”,在“項目中的文件”新建一個templates文件夾(用于存放html網頁模板),文件夾中新建一個index.html文件。然后在根目錄下新建一個app.py文件。
6.3通過“庫管理”PIP模式安裝Flask庫。
同時檢查OpenCV庫有沒有安裝,如果未安裝,須同時安裝OpenCV庫。
6.4雙擊打開index.html文件輸入代碼
<!DOCTYPE html> <!-- 聲明文檔類型為HTML5 -->
<html lang="en"> <!-- 設置頁面語言為英文 -->
<head> <!-- 頁面頭部信息 -->
<meta charset="UTF-8"> <!-- 設置頁面字符編碼為UTF-8 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 設置頁面視口寬度為設備寬度,初始縮放比例為1 -->
<title>攝像頭視頻流</title> <!-- 設置頁面標題為“攝像頭視頻流” -->
</head>
<body> <!-- 頁面主體內容 -->
<h1>攝像頭視頻流</h1> <!-- 顯示標題“攝像頭視頻流” -->
<img src="{{ url_for('video_feed') }}" alt="攝像頭視頻流"> <!-- 顯示攝像頭視頻流圖片,src屬性值為通過url_for函數生成的視頻流URL,alt屬性值為“攝像頭視頻流” -->
</body>
</html>
6.5雙擊打開app.py文件輸入代碼
import cv2 # 導入OpenCV庫
from flask import Flask, render_template, Response # 導入Flask庫的相關模塊
app=Flask(__name__) # 創建一個Flask應用實例
cap=cv2.VideoCapture(0) # 創建一個攝像頭對象,0表示默認攝像頭
if not cap.isOpened(): # 檢查攝像頭是否成功打開
print("攝像頭未成功打開,請檢查攝像頭連接情況")
def gen_frames(): # 定義一個生成幀的函數
while cap.isOpened(): # 當攝像頭打開時
success, frame=cap.read() # 讀取攝像頭的一幀畫面
if not success: # 如果讀取失敗
print('攝像頭畫面讀取失敗') # 打印錯誤信息
break # 跳出循環
else: # 如果讀取成功
ret, buffer=cv2.imencode('.jpg', frame) # 將畫面編碼為JPEG格式
frame=buffer.tobytes() # 將編碼后的畫面轉換為字節流
yield (b'--frame\r\n' # 生成multipart/x-mixed-replace數據流的分隔符
b'Content-Type: image/jpeg\r\n\r\n' # 設置內容類型為JPEG圖片
+ frame + b'\r\n') # 添加幀數據
@app.route('/') # 定義根路由
def index():
return render_template('index.html') # 渲染并返回index.html模板
@app.route('/video_feed') # 定義視頻流路由
def video_feed():
return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame') # 返回視頻流數據
if __name__=='__main__': # 當腳本作為主程序運行時
app.run(host='0.0.0.0', port=8000) # 啟動Flask應用,監聽所有網絡接口,端口為8000
6.6連接行空板并運行程序
效果和圖形化模式完全一致,并且不存在視頻畫面倒置,網頁重復生成,Flask服務器運行參數不能靈活設置的問題。
通過一個簡單的實例,我們展示了如何快速搭建一個Web服務器,響應客戶端請求,并動態生成內容。對于希望進入Web開發領域或是尋求輕量級解決方案的開發者來說,Flask無疑是一個值得深入探索的框架。
數字化時代,流暢觀看視頻是我們日常生活中的一部分。然而,電腦上的視頻卡頓問題可能會影響我們的觀看體驗。本文將提供一些解決方案,幫助您解決電腦看視頻時的卡頓問題。
網絡狀況不佳是導致視頻播放卡頓的常見原因。無論是在線視頻還是高清流媒體服務,穩定的網絡連接都是基礎。
顯卡驅動程序是電腦圖形處理的關鍵,過時的驅動可能無法有效支持視頻播放所需的圖形處理。如果您不確定電腦的顯卡是否正常,可以通過驅動人生來一鍵掃描并更新,同時也能一并更新其它的驅動程序,保持電腦的最佳性能。
電腦后臺運行的程序可能會占用大量的CPU和內存資源,從而影響視頻播放的流暢度。
降低視頻播放的分辨率或質量可以減輕電腦的負擔,特別是在硬件配置較低的情況下。
硬盤空間不足或系統垃圾文件過多會影響電腦的整體性能,間接導致視頻播放不暢。這可以通過百貝C盤助手來清除臨時文件、系統緩存等。
此外,您如果有對磁盤文件進行遷移的需求,也可以通過“一鍵搬家”功能來實現。
以上就是電腦看視頻卡頓不流暢的解決方案。希望對大家有所幫助。如果遇到網卡、顯卡、藍牙、聲卡等驅動的相關問題都可以下載“驅動人生”進行檢測修復,同時驅動人生支持驅動下載、驅動安裝、驅動備份等等,可以靈活的安裝驅動。
當今數字內容創作的浪潮中,創意視頻的需求日益增長,然而,創意的源泉卻時常令人頭疼。品牌方、廣告公司、創意人員和視頻制作團隊面臨的挑戰包括創意枯竭、同質化內容和素材獲取難題。幸運的是,TVCBOOK,作為視頻創意資源的引領者,現全面升級推出全新的AI搜索功能,現在有了TVCBOOK AI搜索功能,這些難題即將成為過去!
探索無限創意可能的AI搜索功能。
多樣化的搜索方式
TVCBOOK AI搜索基于先進的自然語言處理和計算機視覺技術,可以精準理解您的需求,并智能匹配相關視頻素材, 并且TVCBOOK平臺已積累超過100w+創意視頻素材, 覆蓋國內外地區、豐富視頻類型等多個垂直領域, 能為用戶提供全方位的創意支持,為視頻創作者及品牌方帶來便捷高效的解決方案。
AI搜索功能提供了兩種主要的搜索方式:文字搜視頻和圖片搜視頻
文本搜索視頻:只需輸入關鍵詞或一句話,即可快速找到與你需求匹配的創意視頻資源。
圖片搜索視頻:上傳你覺得適合畫面圖片,AI將幫助你找到相關的視頻內容,為創意提供直觀的靈感觸發。
文搜視頻:一個女人在哭泣
文搜視頻:五彩繽紛的冰淇淋
圖搜視頻:同顏色風格的氣球
圖搜視頻:同一個角度馳騁的汽車
依托龐大的資源庫與AI大模型
新的AI搜索功能依托于TVCBOOK已有的百萬創意視頻資源庫,以及其先進的AI大模型技術。無論是細節豐富的文字描述,還是圖像細節,通過AI的強大分析能力,都可以精確找到最相關的視頻素材。
打破創意同質化的局限
TVCBOOK AI搜索功能不僅僅是一個搜索工具,更是創意的引擎。它通過多樣化的視頻資源和AI模型,幫助用戶突破同質化創意的限制,為每一個創作項目注入新鮮的創意力量。
簡化素材獲取與整合效率
作為一個集成化的平臺,TVCBOOK不僅提供高效的搜索功能,還簡化了素材獲取和整合的流程。用戶可以輕松地訪問和管理所需的視頻素材,大大提升了制作效率和創作質量。
TVCBOOK在未來也將探索更多AI技術在視頻創意領域的廣闊應用。
立即開啟你的創意之旅
現在,不論你是品牌方、廣告公司的創意人,還是視頻創作者,TVCBOOK AI搜索功能都將成為你創意探索的得力助手。
立即訪問TVCBOOK,發現無限創意可能,打破創意瓶頸,引領視頻創作新潮流!