目錄
創建電腦視覺應用程式
Pipeless框架
建立物件偵測應用程式
#結論
首頁 科技週邊 人工智慧 如何只用兩個Python函數在幾分鐘內創建完整的電腦視覺應用程式

如何只用兩個Python函數在幾分鐘內創建完整的電腦視覺應用程式

Mar 12, 2024 pm 05:07 PM
python 電腦視覺

如何只用兩個Python函數在幾分鐘內創建完整的電腦視覺應用程式

譯者| 李睿

#審查| 重樓

這篇文章首先簡要介紹了電腦視覺應用程式的基本要求。接著,詳細介紹了Pipeless這個開源框架,它為嵌入式電腦視覺提供了無伺服器開發體驗。最後,提供了一個詳細的步驟指南,示範如何使用幾個Python函數和一個模型建立和運行一個簡單的物件偵測應用程式。

創建電腦視覺應用程式

描述「電腦視覺」的一種方式是將其定義為「利用攝影機和演算法技術進行圖像識別和處理的領域」。然而,這種簡單的定義可能無法完全滿足人們對這個概念的理解。因此,為了更深入地了解電腦視覺應用程式的建構過程,我們需要考慮每個子系統所需實現的功能。 電腦視覺應用程式的建構過程涉及多個關鍵步驟,包括影像擷取、影像處理、特徵提取、目標識別和決策制定。首先,透過攝影機或其他影像擷取設備取得影像資料。然後,利用演算法對影像進行處理,包括去噪、增強和分割等操作,以便進一步分析。在特徵提取階段,系統會辨識影像中的關鍵特徵,如

為了即時處理60 fps的視訊串流,需要在16毫秒內處理每一幀。這通常透過多執行緒和多處理進程實現。有時候,甚至需要在上一幀完成之前就開始處理下一幀,以確保能夠實現真正快速的幀處理。

對於人工智慧模型,現在幸好有許多優秀的開源模型可供使用,因此大多數情況下無需從零開始開發自己的模型,只需微調參數以滿足特定用例即可。這些模型在每一幀上運行推理,執行物件偵測、分割、姿態估計等任務。

•推理運行時間:推理運行時間負責載入模型,並在不同的可用設備(GPU或CPU)上高效運行。

為了確保模型在推理過程中能夠快速運行,採用GPU是不可或缺的。 GPU能夠處理比CPU更多數量級的平行操作,尤其是在處理大量數學運算時效果更為顯著。在處理幀時,需要考慮幀所在的記憶體位置,可以選擇儲存在GPU記憶體或CPU記憶體(RAM)中。然而,在這兩種不同的記憶體之間複製幀會導致運算速度變慢,尤其是當幀的大小較大時。這也意味著需要權衡記憶體的選擇以及資料傳輸的開銷,以實現更有效率的模型推理過程。

多媒體管道是一組元件,用於從資料來源中取得視訊串流,並將其分割成幀,然後將其作為模型的輸入。有時,這些部件還可以對視訊串流進行修改和重建,以便進行轉發。這些部件在處理視訊資料時發揮關鍵作用,確保視訊串流能夠被有效地傳輸和處理。

•視訊串流管理:開發人員可能希望應用程式能夠抵抗視訊串流的中斷、重新連接、動態新增和刪除視訊串流、同時處理多個視訊串流,等等。

所有這些系統都需要建立或合併到專案中,因此,需要維護程式碼。然而,面臨的問題是最終維護的大量代碼並非特定於應用程序,而是圍繞實際案例特定代碼的子系統。

Pipeless框架

為了避免從頭開始建立上述所有內容,可以代用Pipeless框架。這是一個用於電腦視覺的開源框架,允許提供一些特定於案例的功能,並且能夠處理其他事物。

Pipeless框架將應用程式的邏輯劃分為“階段”,其中的一個階段就像單一模型的微型應用程式。一個階段可以包括預處理、使用預處理的輸入運行推理,以及對模型輸出進行後處理以採取行動。然後,可以連結盡可能多的階段,以組成完整的應用程序,甚至使用多個模型。

為了提供每個階段的邏輯,只需新增一個特定於應用程式的程式碼函數,然後在需要時由Pipeless負責呼叫它。這就是為什麼可以將Pipeless視為框架的原因,它為嵌入式電腦視覺提供類似伺服器的開發體驗,並且提供了一些功能,不必擔心需要其他的子系統。

Pipeless的另一個重要特性是,可以透過CLI或REST API動態地新增、刪除和更新視訊串流,從而實現視訊串流處理的自動化。甚至可以指定重新啟動策略,指示何時應該重新啟動視訊串流的處理,是否應該在出現錯誤後重新啟動,等等。

最後,部署Pipeless框架,只需要在任何設備上安裝它並與程式碼函數一起運行,無論是在雲端運算虛擬機器或容器化模式中,還是直接在Nvidia Jetson、Raspberry等邊緣設備中。

建立物件偵測應用程式

以下深入了解如何使用Pipeless框架建立一個簡單的物件偵測應用程式。

第一就是安裝。安裝腳本,使其安裝非常簡單:

Curl https://raw.githubusercontent.com/pipeless-ai/pipeless/main/install.sh | bash
登入後複製

現在,必須建立一個專案。 Pipeless專案是一個包含階段的目錄。每個階段都在子目錄下,在每個子目錄中,建立包含hooks(特定的程式碼函數)的檔案。為每個階段資料夾提供的名稱是稍後要為視訊串流運行該階段時,必須向Pipeless框指示的階段名稱。

pipeless init my-project --template emptycd my-project
登入後複製

在這裡,空模板告訴CLI只建立目錄,如果不提供任何模板,CLI將提示幾個問題以互動式建立階段。

如上所述,現在需要為專案新增一個階段。採用下面的命令從GitHub下載一個階段範例:

wget -O - https://github.com/pipeless-ai/pipeless/archive/main.tar.gz | tar -xz --strip=2 "pipeless-main/examples/onnx-yolo"
登入後複製


#這將建立一個階段目錄onnx-yolo,其中包含應用程式函數。

然後,檢查每個階段檔案的內容,也就是應用程式hooks。

這裡有一個pre-process.py文件,它定義了一個接受一個框架和一個場景的函數(hooks)。此函數執行一些操作來準備接收RGB幀的輸入數據,以便與模型期望的格式相符。資料被加入到frame_data[' interence_input ']中,這是Pipeless將傳遞給模型的資料。

def hook(frame_data, context):frame = frame_data["original"].view()yolo_input_shape = (640, 640, 3) # h,w,cframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)frame = resize_rgb_frame(frame, yolo_input_shape)frame = cv2.normalize(frame, None, 0.0, 1.0, cv2.NORM_MINMAX)frame = np.transpose(frame, axes=(2,0,1)) # Convert to c,h,winference_inputs = frame.astype("float32")frame_data['inference_input'] = inference_inputs... (some other auxiliar functions that we call from the hook function)
登入後複製

還有process.json文件,它指示要使用的Pipeless推理運行時間(在本例中為ONNX運行時間),在哪裡可以找到它應該載入的模型,以及它的一些可選參數,例如要使用的execution_provider,即CPU、CUDA、TensortRT等。

{ "runtime": "onnx","model_uri": "https://pipeless-public.s3.eu-west-3.amazonaws.com/yolov8n.onnx","inference_params": { "execution_provider": "tensorrt" }}
登入後複製

最後,post-process.py檔案定義了一個類似pre-process.py中的函式。這次,它接受Pipeless儲存在frame_data["inference_output"]中的推理輸出,並執行將該輸出解析為邊界框的操作。稍後,它在框架上繪製邊界框,最後將修改後的框架指派給frame_data['modified']。這樣,Pipeless將轉送提供的視訊串流,但帶有修改後的幀,其中包括邊界框。

def hook(frame_data, _):frame = frame_data['original']model_output = frame_data['inference_output']yolo_input_shape = (640, 640, 3) # h,w,cboxes, scores, class_ids =  parse_yolo_output(model_output, frame.shape, yolo_input_shape)class_labels = [yolo_classes[id] for id in class_ids]for i in range(len(boxes)):draw_bbox(frame, boxes[i], class_labels[i], scores[i])frame_data['modified'] = frame... (some other auxiliar functions that we call from the hook function)
登入後複製

最後一步是啟動Pipeless並提供一個視訊串流。要啟動Pipeless,只需在my-project目錄下運行以下命令:

pipeless start --stages-dir .
登入後複製

一旦運行,將提供來自網路攝影機(v4l2)的視訊串流,並直接在螢幕上顯示輸出。需要注意的是,必須提供視訊串流按順序執行的階段清單。在這個例子中,它只是onnx-yolo階段:

pipeless add stream --input-uri "v4l2" --output-uri "screen" --frame-path "onnx-yolo"
登入後複製

#結論

創建電腦視覺應用程式是一項複雜的任務,因為有許多因素和必須圍繞它實現的子系統。使用像Pipeless這樣的框架,啟動和運行只需要幾分鐘,可以專注於為特定用例編寫程式碼。此外,Pipeless的「階段」是高度可重複使用的,易於維護,因此維護將會很容易,可以非常快速地迭代。

如果希望參與Pipeless的開發,可以透過它的GitHub儲存庫來實現。

原文標題:Create a Complete Computer Vision App in Minutes With Just Two Python Functions,作者:Miguel Angel Cabrera

#連結:https://www.php.cn/link/e26dbb5b1843bf566ea7ec757f3325c4

以上是如何只用兩個Python函數在幾分鐘內創建完整的電腦視覺應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles