Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
期文章我們分享了flask的基礎知識以及如何安裝flask,當你安裝完成flask后,我們就可以打造自己的web服務器了。
首先我們打印最簡單的hello world,并在瀏覽器中顯示
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return 'hello flask'
if __name__=='__main__':
app.run()
導入Flask模塊
新建一個app,繼承Flask,app是一個Flask應用程序的接口,瀏覽器訪問網頁是從路由入口進行訪問
Flask 建立路由使用@app.route('/')的方式()里面的便是網頁的路由地址(“/”)默認是IP地址的最初地址,路由下的函數便是完整的網頁代碼
我們實現一個最簡單的web服務器,返回一個字符串
利用app.run()函數來啟動flask web服務器
ok,運行以上代碼
* Serving Flask app "flaskweb" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
代碼運行后,flask會提示如上信息,前幾條的意思我們后幾期的文章一一分享,關鍵是看最后一行信息,我們運行在本機上,flask的默認端口是5000,在瀏覽器中輸入以上地址http://127.0.0.1:5000便可以看到我們設計的最簡單的網頁了
flask web服務器
以上我們便成功運行了一個flask web 服務器
當然我們很少在瀏覽器中輸入端口號,如何只輸入http://127.0.0.1便可以看到網頁呢?
其實,http默認監聽系統的80端口,若我們修改一下flask的默認端口為80端口,是否就可以了?
let's try !!!
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return 'hello flask'
if __name__=='__main__':
app.run(port=80)
在app.run(port=80)中輸入port=80 來修改flask的默認端口,成功運行一下
flask web服務器
可以看到,直接輸入http://127.0.0.1就可以看到我們的網頁了,其實你在瀏覽上輸入http://127.0.0.1:80地址,瀏覽器也會自動除掉80端口
from flask import Flask
app=Flask(__name__)
@app.route('/index')
def index():
return 'hello flask'
if __name__=='__main__':
app.run(port=80)
瀏覽器的路由可以幫忙我們在一個網站地址下面建立不同的網頁
如上我們在('/index')輸入瀏覽器路由為/index,顧名思義,當我們輸入http://127.0.0.1/index時,便可以訪問網頁
let's try again
flask web 服務器
flask是一個web服務器框架,當然你完全可以在路由函數下建立自己的網站,不過前端的小伙伴們可是不愿意在這里搭建自己的網頁,畢竟人家有自己的html5+CSS+JS 全家桶,那么flask是如何打造網頁的呢
from flask import Flask, render_template
app=Flask(__name__)
@app.route('/index')
def index():
return 'hello flask'
@app.route('/url')
def first_url():
return render_template('hello.html')
flask中的render_template便可以返回一個完整的網頁,看到這里前端的小伙伴們可以放心了,又可以跟自己的html5+CSS+JS 全家桶打交到了,不過我們需要在flask運行目錄下建立一個templates文件夾
所有的html的網頁都必須放置在這個文件夾里,以便flask能夠索引。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world,hello flask
</body>
</html>
我們在網頁里面輸入簡單的代碼,然后運行一下啊
try again and again
網頁
flask成功運行!!!
看到這里,想必小伙伴們也入門了flask,前端方面的知識,小編不在這里 一一介紹,畢竟這也不是 小編的強項,我們還依然是人工智能方向的研究所,我們主要使用flask來提供web服務,來達到我們需要的功能
最后推薦一下人工智能研究所出品的目標追蹤的專欄,喜歡人工智能,目標檢測與目標追蹤方向的小伙伴們可以一起探討學習
flask系統性的知識,小伙伴們可以買本自己喜歡的書籍來學習,小編的文章當然也會介紹一下簡單的應用
還記得我們文章中留下的問題嗎,下期我們一一來解讀一下,并講述一下如何使用域名,而不是 IP地址來訪問網頁
介:通過Mind+創建一個Python程序,使用Flask擴展庫構建Web服務,手機、電腦通過瀏覽器遠程查看USB攝像頭視頻畫面。通過實驗,初步了解Flask擴展庫的概念和使用方法。
此前通過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無疑是一個值得深入探索的框架。
期文章我們分享了flask的基礎知識以及如何安裝flask,當你安裝完成flask后,我們就可以打造自己的web服務器了。
首先我們打印最簡單的hello world,并在瀏覽器中顯示
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return 'hello flask'
if __name__=='__main__':
app.run()
導入Flask模塊
新建一個app,繼承Flask,app是一個Flask應用程序的接口,瀏覽器訪問網頁是從路由入口進行訪問
Flask 建立路由使用@app.route('/')的方式()里面的便是網頁的路由地址(“/”)默認是IP地址的最初地址,路由下的函數便是完整的網頁代碼
我們實現一個最簡單的web服務器,返回一個字符串
利用app.run()函數來啟動flask web服務器
ok,運行以上代碼
* Serving Flask app "flaskweb" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
代碼運行后,flask會提示如上信息,前幾條的意思我們后幾期的文章一一分享,關鍵是看最后一行信息,我們運行在本機上,flask的默認端口是5000,在瀏覽器中輸入以上地址http://127.0.0.1:5000便可以看到我們設計的最簡單的網頁了
flask web服務器
以上我們便成功運行了一個flask web 服務器
當然我們很少在瀏覽器中輸入端口號,如何只輸入http://127.0.0.1便可以看到網頁呢?
其實,http默認監聽系統的80端口,若我們修改一下flask的默認端口為80端口,是否就可以了?
let's try !!!
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return 'hello flask'
if __name__=='__main__':
app.run(port=80)
在app.run(port=80)中輸入port=80 來修改flask的默認端口,成功運行一下
flask web服務器
可以看到,直接輸入http://127.0.0.1就可以看到我們的網頁了,其實你在瀏覽上輸入http://127.0.0.1:80地址,瀏覽器也會自動除掉80端口
from flask import Flask
app=Flask(__name__)
@app.route('/index')
def index():
return 'hello flask'
if __name__=='__main__':
app.run(port=80)
瀏覽器的路由可以幫忙我們在一個網站地址下面建立不同的網頁
如上我們在('/index')輸入瀏覽器路由為/index,顧名思義,當我們輸入http://127.0.0.1/index時,便可以訪問網頁
let's try again
flask web 服務器
flask是一個web服務器框架,當然你完全可以在路由函數下建立自己的網站,不過前端的小伙伴們可是不愿意在這里搭建自己的網頁,畢竟人家有自己的html5+CSS+JS 全家桶,那么flask是如何打造網頁的呢
from flask import Flask, render_template
app=Flask(__name__)
@app.route('/index')
def index():
return 'hello flask'
@app.route('/url')
def first_url():
return render_template('hello.html')
flask中的render_template便可以返回一個完整的網頁,看到這里前端的小伙伴們可以放心了,又可以跟自己的html5+CSS+JS 全家桶打交到了,不過我們需要在flask運行目錄下建立一個templates文件夾
所有的html的網頁都必須放置在這個文件夾里,以便flask能夠索引。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world,hello flask
</body>
</html>
我們在網頁里面輸入簡單的代碼,然后運行一下啊
try again and again
網頁
flask成功運行!!!
看到這里,想必小伙伴們也入門了flask,前端方面的知識,小編不在這里 一一介紹,畢竟這也不是 小編的強項,我們還依然是人工智能方向的研究所,我們主要使用flask來提供web服務,來達到我們需要的功能
最后推薦一下人工智能研究所出品的目標追蹤的專欄,喜歡人工智能,目標檢測與目標追蹤方向的小伙伴們可以一起探討學習
flask系統性的知識,小伙伴們可以買本自己喜歡的書籍來學習,小編的文章當然也會介紹一下簡單的應用
還記得我們文章中留下的問題嗎,下期我們一一來解讀一下,并講述一下如何使用域名,而不是 IP地址來訪問網頁
*請認真填寫需求信息,我們會在24小時內與您取得聯系。