譯者| 李睿
#審查| 重樓
這篇文章首先簡要介紹了電腦視覺應用程式的基本要求。接著,詳細介紹了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中文網其他相關文章!

介紹 恭喜!您經營一家成功的業務。通過您的網頁,社交媒體活動,網絡研討會,會議,免費資源和其他來源,您每天收集5000個電子郵件ID。下一個明顯的步驟是

介紹 在當今快節奏的軟件開發環境中,確保最佳應用程序性能至關重要。監視實時指標,例如響應時間,錯誤率和資源利用率可以幫助MAIN

“您有幾個用戶?”他扮演。 阿爾特曼回答說:“我認為我們上次說的是每週5億個活躍者,而且它正在迅速增長。” “你告訴我,就像在短短幾週內翻了一番,”安德森繼續說道。 “我說那個私人

介紹 Mistral發布了其第一個多模式模型,即Pixtral-12b-2409。該模型建立在Mistral的120億參數Nemo 12B之上。是什麼設置了該模型?現在可以拍攝圖像和Tex

想像一下,擁有一個由AI驅動的助手,不僅可以響應您的查詢,還可以自主收集信息,執行任務甚至處理多種類型的數據(TEXT,圖像和代碼)。聽起來有未來派?在這個a


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器