自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于深度學(xué)習(xí)的實(shí)時(shí)視頻處理 | 入門指南

人工智能
本文是一份從0到100的指南,旨在幫助你在深度學(xué)習(xí)中開始視頻處理。包括圖像處理、視頻格式、重新編碼、通過HTTP、WebSockets和WebRTC進(jìn)行流媒體傳輸。

近來,整個(gè)機(jī)器學(xué)習(xí)領(lǐng)域似乎被大型語言模型(LLM)和檢索增強(qiáng)生成(RAG)所掩蓋。雖然許多用例可以從這些新的基礎(chǔ)模型中受益,但在非文本數(shù)據(jù)方面仍存在差距。我常把當(dāng)前的機(jī)器學(xué)習(xí)階段比作汽車工業(yè)中從燃油車向電動(dòng)車的轉(zhuǎn)變。燃油車已經(jīng)有完善的基礎(chǔ)設(shè)施(如汽車服務(wù)、加油站等),而電動(dòng)車的充電站和專用服務(wù)地點(diǎn)尚未成熟——但它們正在追趕。

這個(gè)比較的重點(diǎn)在于:基于變壓器的模型在許多用例中已經(jīng)證明了它們的實(shí)用性,但在視覺任務(wù)上,它們?nèi)孕枰獣r(shí)間來超越已有且成熟的系統(tǒng)。然而,今天的重點(diǎn)是工程——特別是如何解決使用機(jī)器學(xué)習(xí)的嵌入式視頻流應(yīng)用中的延遲問題,因?yàn)橐曨l讀取/處理/流媒體是視覺系統(tǒng)的核心。

一、什么是視頻處理?

視頻處理是指一組用于操作和分析視頻流的技術(shù)和方法。我們來看看描述視頻處理時(shí)必須了解的關(guān)鍵組件:

1. 編碼器

編碼器是一種硬件或軟件過程,用于壓縮(編碼)和解壓縮(解碼)大量視頻和音頻數(shù)據(jù)。它們對于減少視頻/音頻文件大小和流媒體至關(guān)重要,因?yàn)橐粋€(gè)原始視頻文件可能占用非常大的空間。例如,一個(gè)60秒、1920x1080、30 FPS的視頻文件的原始大小計(jì)算如下:

W = Width (pixels)
H = Height (pixels)
FPS = Frame Rate (frames/s)
BIT = Bit Depth (bits per pixel)
DUR = Duration (video length in seconds)

File Size (bytes) = W x H × FPS x BIT x DUR
File Size (bytes) = 1920 x 1080 x 30 x (24 / 8) x 60 = 11197440000 (bytes)
File Size (mbytes) = 11197440000 / (1024 ** 2) = 10678,71 (mbytes)
File Size (gbytes) = 10678,71 / 1024 = 10,42 (gbytes)

如果要存儲(chǔ)和流傳輸視頻,YouTube只能存儲(chǔ)和流傳輸Pewdiepie的頻道——由于存儲(chǔ)和網(wǎng)絡(luò)限制,不會(huì)有其他內(nèi)容。

常用的視頻壓縮編碼器包括:

  • H.264(AVC):高效,兼顧質(zhì)量和相對較小的文件大小,兼容幾乎所有視頻播放器和流媒體服務(wù)。
  • H.265(HEVC):在相同的視頻質(zhì)量水平下提供更好的數(shù)據(jù)壓縮。
  • VP9:由Google開發(fā),主要用于YouTube等平臺(tái)的高清流媒體。

2. 比特率

指在給定時(shí)間內(nèi)處理的數(shù)據(jù)量,通常以每秒比特?cái)?shù)(bps)來衡量。在視頻中,比特率至關(guān)重要,因?yàn)樗苯佑绊懸曨l的質(zhì)量和大?。?/p>

  • 高比特率:每秒數(shù)據(jù)量大,導(dǎo)致視頻質(zhì)量高但文件大小也大。
  • 低比特率:減少文件大小,導(dǎo)致視頻質(zhì)量差,表現(xiàn)為視頻模糊或塊狀。

3. 分辨率

表示每個(gè)維度可以顯示的像素?cái)?shù)。常見的分辨率有HD(1280x720)、FHD(1920x1080)和4K(3840x2160)。

4. 幀率

描述每秒顯示的單獨(dú)圖像數(shù)量。我還記得在一臺(tái)破舊的電腦上玩GTA4時(shí)得到的9FPS。

5. 容器格式

如MP4和AVI,封裝視頻、音頻和元數(shù)據(jù),管理數(shù)據(jù)的存儲(chǔ)和交換,而不影響質(zhì)量。由于視頻容器的結(jié)構(gòu),它使得從一種視頻格式轉(zhuǎn)換為另一種視頻格式變得簡單。

具體術(shù)語包括:

  • 源(SOURCE):格式A的視頻。
  • 解復(fù)用器(DEMUX):將視頻流與音頻流分離的組件。
  • 解碼器(DECODER):將兩個(gè)流解壓縮為原始格式。
  • 編碼器(ENCODER):使用新的視頻和音頻編碼器重新壓縮原始流。
  • 復(fù)用器(MUX):重新鏈接并同步視頻流和音頻流。
  • 目標(biāo)(TARGET):將新數(shù)據(jù)流(視頻+音頻)轉(zhuǎn)儲(chǔ)到新容器中。

二、使用Phon進(jìn)行視頻處理的常見庫

在計(jì)算機(jī)視覺項(xiàng)目中,圖像處理和操作是必不可少的。從數(shù)據(jù)準(zhǔn)備、標(biāo)注、質(zhì)量保證、增強(qiáng)和模型訓(xùn)練,到模型部署后所需的預(yù)處理/后處理步驟,以下是計(jì)算機(jī)視覺工程師必須了解/使用的庫和工具:

1.OpenCV

2.Albumentations

用于數(shù)據(jù)集增強(qiáng)的快速高效庫,主要增強(qiáng)實(shí)現(xiàn)為GPU內(nèi)核。

3.PyAV

包含Python的FFmpeg綁定,適用于需要更詳細(xì)控制原始圖像幀數(shù)據(jù)或音頻數(shù)據(jù)的情況。

+----------------+-----------------+--------------------------------+
| Feature        | YUV420          | RGB                            |
+----------------+-----------------+--------------------------------+
|                | Y, U, V         | Red, Green, Blue               |
|    Channels    | (Luminance and  |                                |
|                | two chrominance)|                                |
+----------------+-----------------+--------------------------------+
|   Storage      | Less storage    | More storage required due to   |
|   Efficiency   | due to          | for all three color channels.  |
|                | subsampling     |                                |
+----------------+-----------------+--------------------------------+
|   Bandwidth    | Highly          | Requires more bandwidth, all   |
|   Usage        | efficient for   | channels are fully sampled.    |
|                | transmission    |                                |
+----------------+-----------------+--------------------------------+
|   Complexity   | Higher          | Lower                          |
+----------------+-----------------+--------------------------------+
|   Suitability  | Better          | Better for image editing       |
|                | for video       | Universal compatibility        |
|                | compression and |                                |
|                | transmission    |                                |                |
+----------------+-----------------+--------------------------------+

三、視頻流方法

在需要實(shí)時(shí)流媒體的生產(chǎn)用例中,計(jì)算機(jī)視覺工程師經(jīng)常需要開發(fā)優(yōu)化的低計(jì)算視頻處理工作流程,尤其是在部署用例還包括目標(biāo)檢測或分割模型并打算在邊緣設(shè)備上運(yùn)行時(shí)。視頻解碼消耗大量CPU資源,部署在邊緣時(shí),由于硬件資源有限,應(yīng)盡可能利用已部署系統(tǒng),同時(shí)保持資源和能源足跡較低。

在大多數(shù)計(jì)算機(jī)視覺項(xiàng)目中,處理是在邊緣完成的,要么是在可以訪問RTSP攝像頭的服務(wù)器上,要么是在本地轉(zhuǎn)儲(chǔ)幀或通過以太網(wǎng)流傳輸?shù)脑O(shè)備上。例如,為了解決工廠生產(chǎn)線中檢測不合格產(chǎn)品的問題,可以訓(xùn)練和部署使用實(shí)時(shí)視頻流和分割模型的系統(tǒng)來識別風(fēng)險(xiǎn)區(qū)域。

另一個(gè)例子是通過目標(biāo)檢測、深度預(yù)測和語義分割來識別商店貨架補(bǔ)貨時(shí)間的問題,實(shí)時(shí)提醒員工補(bǔ)貨。

本文將首先介紹使用Python實(shí)現(xiàn)的常見視頻流方法,以解決從API到客戶端應(yīng)用實(shí)時(shí)流傳輸幀的問題。我們將使用FastAPI作為我們的流媒體API,并使用一個(gè)基本的React應(yīng)用程序作為客戶端來演示這個(gè)概念。

我們將介紹三種方法:HTTP、WebSockets和WebRTC。對于每種方法,我們將迭代代碼,包括FastAPI和React,并說明該方法的最佳適用場景。

1.使用HTTP流媒體

這是一種快速且實(shí)用的方法,是驗(yàn)證將視頻流傳輸?shù)絎eb應(yīng)用程序的最直接的方法。對于小規(guī)模用例,這可能會(huì)奏效,但一旦應(yīng)用程序擴(kuò)展并需要支持許多設(shè)備或工作流流,由HTTP頭添加的延遲、開銷和帶寬就開始帶來挑戰(zhàn)。

FastAPI端點(diǎn):

React Web端點(diǎn):

2.使用WebSockets流媒體

與HTTP相比,Websockets提供了一種更高效的方法,因?yàn)樗鼈冊试S更低的延遲、實(shí)時(shí)交互和更優(yōu)化的數(shù)據(jù)傳輸方式。與HTTP相比,HTTP是無狀態(tài)的,意味著你觸發(fā)端點(diǎn)并得到響應(yīng),在套接字上——一旦握手完成,只要連接處于Open狀態(tài),數(shù)據(jù)就會(huì)流式傳輸。這導(dǎo)致了管理和“存儲(chǔ)”套接字狀態(tài)的需求,使它們成為有狀態(tài)的。

FastAPI端點(diǎn):

React Web端點(diǎn):

3.使用WebRTC流媒體

WebRTC(Web實(shí)時(shí)通信)是一種技術(shù)標(biāo)準(zhǔn),它允許在不需要復(fù)雜的服務(wù)器端實(shí)現(xiàn)的情況下,通過P2P(點(diǎn)對點(diǎn))連接進(jìn)行實(shí)時(shí)通信。與HTTP和Websockets相比,這是一個(gè)更復(fù)雜的協(xié)議,它專門處理視頻/音頻流式傳輸。

無論是Zoom通話、Facetime、Teams還是Google會(huì)議——都是RTC在起作用!以下是它的主要組件:

  • 數(shù)據(jù)通道:允許不同對等方之間任意交換數(shù)據(jù),無論是瀏覽器到瀏覽器還是API到客戶端。
  • 加密:所有通信、音頻和視頻都經(jīng)過加密,確保通信安全。
  • SDP(會(huì)話描述協(xié)議):在WebRTC握手期間,兩個(gè)對等方交換SDP提議和答復(fù)。簡而言之,SDP描述了對等方的媒體能力,以便他們可以收集有關(guān)會(huì)話的信息。SDP提議描述了對等方請求的媒體類型,而SDP答復(fù)確認(rèn)已收到提議,并相應(yīng)地交換其媒體配置。
  • 信令:實(shí)現(xiàn)提議-響應(yīng)通信的方法(套接字,REST API)。在我們的用例中,我們使用POST端點(diǎn)來打開通道。

隨著我們迭代了流式傳輸方法,讓我們看看它們的實(shí)際效果。完整代碼可以參考:

https://github.com/decodingml/articles-code/tree/main/articles/computer_vision, 安裝README文件中描述的所需軟件包,請運(yùn)行以下命令:

W = Width (pixels)
H = Height (pixels)
FPS = Frame Rate (frames/s)
BIT = Bit Depth (bits per pixel)
DUR = Duration (video length in seconds)

File Size (bytes) = W x H × FPS x BIT x DUR
File Size (bytes) = 1920 x 1080 x 30 x (24 / 8) x 60 = 11197440000 (bytes)
File Size (mbytes) = 11197440000 / (1024 ** 2) = 10678,71 (mbytes)
File Size (gbytes) = 10678,71 / 1024 = 10,42 (gbytes)

當(dāng)你啟動(dòng)了FastAPI后端和ReactWeb前端,可以轉(zhuǎn)到瀏覽器中的localhost:3000并檢查結(jié)果。

結(jié)論

在本文中,我們介紹了視頻格式的結(jié)構(gòu)及其關(guān)鍵組件,以理解視頻的工作原理。我們還介紹了一些廣為人知的庫,使得處理視頻/圖像數(shù)據(jù)變得容易。最后,我們逐步介紹了三種視頻流方法:HTTP、WebSockets和WebRTC。

責(zé)任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2016-11-01 15:32:43

深度學(xué)習(xí)

2017-09-22 11:45:10

深度學(xué)習(xí)OpenCVPython

2016-12-30 13:23:30

AI 初學(xué)者分類

2017-11-16 17:26:35

深度學(xué)習(xí)移動(dòng)設(shè)備MobileNets應(yīng)

2019-05-22 14:28:08

AI人工智能深度學(xué)習(xí)

2021-07-07 10:00:03

深度學(xué)習(xí)系統(tǒng)機(jī)構(gòu)

2017-08-12 13:23:43

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)推理加速

2023-05-22 08:00:00

深度學(xué)習(xí)機(jī)器學(xué)習(xí)人工智能

2023-03-19 17:24:43

2020-03-10 08:12:26

告警系統(tǒng)運(yùn)維

2017-06-23 14:11:56

2022-10-26 15:41:38

深度學(xué)習(xí)Deepfake機(jī)器學(xué)習(xí)

2024-11-04 08:14:48

2024-05-15 15:27:39

2024-01-03 16:01:23

2021-04-13 10:25:33

人工智能深度學(xué)習(xí)

2016-12-27 14:06:36

Python代碼基礎(chǔ)

2017-07-06 15:02:53

OpenGL ES架構(gòu)GPU

2017-05-22 13:15:45

TensorFlow深度學(xué)習(xí)

2022-01-29 14:09:45

編程語言PythonTaichi
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號