文章

顯示從 2023 起發佈的文章

[心得] 股市的技術指標(RSI、KD、MACD)與物理力學的關係

圖片
        過去常常思考一個問題,股市的量價關係如何與物理力學產生連結呢?股市的技術指標如何與牛頓定律扯上關係呢?我在這裡不探討數學式子,單純從概念來思考。以下謹代表個人研究心得,不負責盈虧。首先,股市的成交量能代表推力或衰退力道,股價代表移動的距離大小,股本可視為一個物體的質量。在股海時間久了,普遍的認知就是股本越大越需要更大的成交量能來推動價格,小股本的公司只需一點推力就能產生推升的效果,這樣的邏輯可以套用到力學當中的牛頓第二定律 F = MA (F: 牛頓力,M: 物體質量,A: 移動加速度),移動的距離又與速度/加速度有關。分為四種情境,往前進的速度且加速度為正,往前進的速度且加速度為負,往後退且加速度為負,往後退且加速度為正("正"代表方向轉為向前)。         股市中,常見常用的技術指標 RSI 、 KD、MACD,根據定義 RSI 代表強弱指標,以價格的最高最低來計算 RSI 數值。我們試著把價格高低點想像成移動的距離遠近,移動距離越大是不是代表發力的力道越大?於是, RSI 指標從 50 開始往上增加時,表示開始發力 ,F 開始產生作用,產生加速度 A 的移動,如下圖所示,這視為向前速度且加速度為正。         在牛頓第一慣性定律中,發力的過程即使停止發力了,物體還是會持續往前進,這是慣性也是動能。從下圖中觀察,RSI 回到 50 以上,雖然力道變得很微弱了,但是還有上升上漲的動能。講到這裡,發力強弱指的是瞬間力道,而平均力道就要觀察另一個指標 KD。 倘若 KD 維持在高檔(俗稱高檔鈍化),代表平均力道維持不墜 ,既然有力道就還有前進的速度,也就有動能。因此,觀察 KD 指標能維持高檔多久的時間代表力道的持久度,只要 KD 不斷維持 "中強" 水準,即使量能稍微偷懶沒有出力,事後再瞬間發力,這股前進的慣性還是存在於 K 線中的,如下圖所示。         最後,來講講動能,雖然前進具備動能,但是也要觀察動能的強弱,到底這次動能跟上次相比是更強還是更弱呢?技術指標的 MACD 用來判斷動能的強弱, 當高於零軸時,代表動能轉向往前進 ,低於零軸代表動能為後退(代表價格下跌)。下圖所示的 MACD 維持在零軸之上,顯示一股前進的動能,即使回到靠近零軸,仍然在前進,只要再次發力便可加速往前進。但是,

工控板 STM32F103 與網路晶片 DM9000

圖片
        網路上訂購一塊工控板 STM32F103 帶有網路介面,上面的網路晶片型號是 DM9000,過去我主要用 F207 開發網路的功能,這回使用 F103 試試看(降規打怪),MCU 與 DM9000 溝通的介面方式是 FSMC,過去也經常使用,算是熟悉 FSMC 介面。不過開發過程發現,MCU 讀取不到晶片的 Device ID,於是接上邏輯分析儀觀察腳位的變化,檢查是否符合 datasheet 的規定。測試結果,腳位訊號一切滿足規範,便聯絡廠商技術支援。聽對方工程師說,F103 速度(MCU 72MHz)比較慢所以搭配 DM9000 可能會有些問題,後續會再寄一塊新的給我。我當下思考,是否這樣的系統搭配造成良率不佳?還是說硬體設計本身有問題?         12路光耦合的隔離輸入,如下圖所示, XH 2.54 端子台。當輸入訊號為GND,觸發光耦合迴路導通,激發另一端的電晶體導通。輸入訊號只要以 +24V 或 GND 代表切換 On/Off,MCU 便能判斷輸入訊號的準位。         8路光耦合的隔離輸出,如圖 XH 2.54 端子台,MCU 控制腳位的 On/Off 觸發光耦合 IC。當光耦合開關打開時,+24V 會流向下一級的電晶體,同時開啟電晶體導通,因此輸出會導通到 GND。外部接點必須是一個具有負載的點位,無論它是繼電器或是乾濕接點,都是一個帶有電源負載的點位。 利用這塊工控板實作一個 GPS 軌跡追蹤系統,其影片連結如下: https://youtu.be/d_qeJ52fTf0

工廠設備用到的工具:串列資料傳輸轉換為網路通訊

圖片
        工廠生產設備遇到網路化的問題,偏偏產線設備不具有網路端口,這時候可以使用 RS-232 to Ethernet 模組來解決,下圖一所示。有些設備不具有網路,只要將下圖的模組 RS-232 配置設定好後(圖四),設備與模組間就算搞定了,接下來再設定網路模式。 圖一:RS-232 to Ethernet 轉換模組         網路參數的部分,分為 TCP 或 UDP 通訊模式,前者是連線保證(資料不丟失),後者是傳輸不保證(資料可能丟失)。如果是重要數據的傳輸,最好選 TCP 模式。除了通訊模式之外,要事先設定模組當做 server 或者是 client 端,圖二所示。如果做為 server 端,需要設定監聽的埠口,以便讓客戶端連線進來模組。如果做為 client 端,需要設定遠端 server IP 位址與埠口,模組通電後便會自動連線到遠端 server,建立起通訊連線。簡單說,server 角色是被動建立連線,client 角色是主動建立連線。 圖二:TCP 網路模式的參數配置         UDP 的設定就相對簡單了,下圖三所示。沒有所謂的 server 或 client 角色,只要設定本模組的通訊埠口,以及對方的 IP 位址與埠口,模組通電後,資料就會透過埠口互傳了。 圖三:UDP 網路模式的參數配置 圖四:UART 通訊模式的參數配置

[應用] 預訓練模型庫 PaddleHub 快速實現 AI

圖片
        什麼叫「預訓練模型」?現在的科技巨擘本身擁有海量的數據以及大型算力系統,他們事先透過這些大量的數據集訓練神經網路模型,這樣所獲得的模型結果可稱為 預訓練 ,不過生成的模型算是一種通用的模型。比如一個分類的模型,大量被標註的數據集輸入到網路模型經過訓練後,這樣的預訓練模型或許能做到分類工作,但不見得能做得特別精準。所以說它只是一種通用模型,如果想要讓它分類更精準,那就得用自己的數據集再做 fine tune 進行模型參數的微調。         在百度的 PaddleHub 平台上  https://github.com/PaddlePaddle/PaddleHub  提供不少預訓練的模型庫,底下圖一列出了部分網路模型。百度本身擁有不少數據集,適合拿來預先訓練各類網路模型,像是人體關鍵點檢測用到 ResNet50 的模型,目標檢測用到 YOLOv3 模型做訓練,我們身為初學者可以直接拿這些模型庫來做測試,基本上都有不錯程度的效果。不過,如果要針對某特定領域做檢測,可能會覺得精準度還不足。 圖一:PaddleHub 提供的預訓練模型庫         如何使用 PaddleHub?舉圖像分割為例,在 python 環境下,呼叫下面的粗體字函數。先載入模型名稱後,再調用分割的函數。 import paddlehub as hub module = hub. Module (name= "deeplabv3p_xception65_humanseg" ) res = module. segmentation (paths = [ "./test.jpg" ], visualization= True , output_dir= 'humanseg_output' ) 底下是人臉辨識模組, module = hub. Module (name= "ultra_light_fast_generic_face_detector_1mb_640" ) res = module. face_detection (paths = [ "./test.jpg" ], visualization= True , output_dir=

[應用] OCR 光學字元辨識的開發 (以百度 Paddle Inference 推理模型為核心)

圖片
        OCR 圖形轉文字的識別技術也是架構在深度學習的理論之上,是人工智慧的應用之一。OCR 技術的辨識過程分成三部分:文本偵測 、 文本識別 、 文字分類,每一部分都用到神經網路模型來訓練。本文不打算講模型訓練的過程,而是介紹訓練後的網路模型如何部署到應用端,在 Windows 上的 OCR 軟體如何開發。就核心基礎來說,神經網路的模型是基於百度的 PaddleOCR 所訓練得來,它在 Github 上有開放原始碼,除了用百度內建的模型之外,也可以自建模型來訓練。訓練後的模型,百度提供一套推理模型部署的方法,根據其技術文件的步驟操作,我們可以在 Windows 環境下編譯出 OCR 的應用程式,不過文件操作內容多半還是以 Linux 環境為主。底下我把在 Windows 的編譯過程寫下來。 代碼函數庫下載         (1) OpenCV:到官網上面下載 Windows 版本,裡面包含程式碼和編譯後的函數庫。         (2) PaddleOCR 原始碼:到 Github 上面下載,至少 v2.5 版本以上的代碼。         (3) Paddle Inference 推理預測庫:這是模型的函數庫,可在百度官網下載  https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#windows ,裡面分CPU 和 GPU (CUDA) 的版本,本文是下載 CPU 版本進行編譯。         (4) 模型架構:OCR 需要下載三個模型架構,分別是偵測 、 辨識 、 和分類。在 Github 上面可以下載各種模型架構, https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/models_list.md 。 將上述的資料準備好後,如下圖所示,依序放到資料夾裡。接著,我們用 Visual Studio 2019 來開始編譯 OCR 應用程式。 圖一:開發前需要準備的資料庫         編譯前,先確定 VS2019 有沒有安裝 CMake 元件,系統還要安裝 Git for Windows,沒有 Git 的話,在執行 CMake 過程會出錯。一切就緒後,上圖的目錄中\Pad

[筆記] 百度飛槳 PaddlePaddle 平台的介紹

圖片
         近年來,人工智慧 AI 的浪潮持續發酵,然而,實際上AI的定義和運作方式並不容易說得清楚。AI是一個廣泛的領域,涵蓋了各種技術和應用,其核心目標是讓機器模仿人類的智能和學習能力。 就技術的角度而言,確實需要具備並累積相當多的數學背景知識,例如: 微積分 、 機率 、 線性代數 、 矩陣行列式 ...等,這些知識是理解機器學習 ML 的理論基礎不可或缺的要素。在機器學習中,數學扮演了關鍵的角色,它們構成了算法和模型背後的數學原理,幫助我們解釋和理解機器學習的運作方式。熟悉這些數學概念和技巧,有助於更深入地探索機器學習領域,並設計出更有效和強大的學習模型。 前一篇[1] 大略整理了人工智慧 AI 、 機器學習 ML 、深度學習  DL 三者的關係, 然而,深度學習的技術發展才是真正推動人工智慧在應用面取得大幅進展的主要因素。深度學習以類神經網路為基礎搭配硬體的高效運算能力,進一步改進了許多應用領域,如圖像識別、語音辨識、自然語言處理...等。這些技術的突破性進展使得人工智慧應用的範疇不斷擴展,並為許多行業帶來了革命性的變化和創新 。         雖然機器學習的理論基礎複雜,不過整體開發的流程可以歸納成下圖的管線,就像是面對問題 、 分析問題 、 解決問題 、 放下問題一樣,有一套標準步驟。首先定義問題是不是需要靠深度學習的方法才能解決?再來是收集資料,足夠的資料量或不夠的資料會決定接下來採用哪種模型。有了模型後,才會訂定最佳化的標準,進行一輪又一輪的訓練。最後,用「未訓練」的數據來評估訓練後的模型,看看效果好不好。如果達到預期,則保留模型的參數。有關機器學習的課程,可以到  百度人工智能學習社區 https://aistudio.baidu.com ,先有一些基礎知識後再來開發 AI 會事半功倍。 圖一:機器學習的萬能公式 (取自飛槳平台)         從設計模型的方面來看,在飛槳 Paddle framework 上,提供三種開發的方式給工程人員建立模型與訓練,如下圖二所示。機器學習中的各個模型都有著複雜的數學計算和公式,如果要一個一個用程式碼寫出模型的功能,那大概要花費我們很長的時間。幸好,目前有些 framework (Keras 、 PyTorch 、 TensorFlow...)提供機器學習的模型函數,而百度的飛槳平台也提供相關的函數

[筆記] 整理人工智慧 AI、機器學習 ML、深度學習 DL

圖片
        「人工智慧」是一個很熱門的話題,不過就技術而言它已經存在已久。 最近,我非常專注地閱讀了百度的 Paddle 飛槳網站 https://www.paddlepaddle.org.cn/   有關人工智慧技術的內容,我覺得它非常清楚地解釋了人工智慧、機器學習和深度學習之間的關係。因此,我特別把這些內容整理起來。從下圖一來解釋這三者的關係, 人工智慧 AI 可以被視為應用於各個領域的一種技術,其需要依賴於機器學習 (ML:Machine Learning) 的方法。機器學習技術可以分為兩種主要形式,即早期的傳統學習技術和現代的深度學習技術 (DL:Deep Learning)。          在早期的機器學習中,由於硬體運算效能有限且訊息數據難以大量取得,技術的發展側重於分析訊息的特徵。以我過去學習過的語音和影像技術為例,我們需要分析語音的發音方式,例如聲母、韻母、子音...等,並提取出聲音的 特徵 ,還有從頻譜的角度來分析 語音特性 。之後,我們建立一個模型,例如隱藏式馬可夫鏈 (HMM),以便進行語音的訓練和識別。過去,同樣的過程也被運用在影像處理方面,先解析影像訊號,分析影像特性並取得其特徵,再建立影像的模型。 從上述描述可以看出,傳統的技術需要對這類型多媒體訊號的特性進行深入研究,不論是從時域(time domain)或頻譜(frequency domain)的角度來解析訊號的特徵。接著,根據這些特徵建立一套模型,並將有限的數據輸入到模型中,最終進行模型的訓練以獲得適合的結果。這個過程需要對訊息進行大量的研究和分析,並且受限於資源和數據的可用性。 圖一:AI,ML,DL 的關係圖          近年來,隨著物聯網和網路技術的進展,深度學習成為人工智慧的主要技術。儘管深度學習的演算核心是類神經網路,這並不是一個特別新穎的技術。然而,由於現在可以獲得各種海量數據,再加上運算晶片的功效大幅提升,深度學習的技術才逐漸被廣泛採用。整理上述的概念後,下圖二說明兩種機器學習的方法,上半部是傳統的機器學習,下半部是深度學習 。上半圖,經過特徵工程獲取輸入訊號的特徵特性,再輸入到一個訓練後的模型,獲得輸出的結果。然而,現在演進到深度學習的技術,透過 神經網路 的訓練後,這樣的模型也可以達到傳統機器學習的結果。 圖二:機器學習的演進圖 (取自百度 Padd

[應用] 在電腦應用程式,使用 GMap.NET 套件繪製出 Google 地圖

圖片
        GMap.NET 是一個功能強大的地圖繪製套件,用於 WinForm 應用程式並載入 Google 地圖。由於 Google 地圖本身提供 API 函數讓第三方使用,而 GMap.NET 套件將這些 Google 地圖的函數封裝起來,組成一個 .NET 環境下開發的函數庫,方便用 C# 語言開發地圖繪製與標示的功能。         首先,在 Visual Studio 上面開啟一個專案準備開發 GMap 地圖,接著從 NuGet 套件管理中搜尋 "GMap",安裝 GMap.NET.WinForms 等相關的軟體函數庫,如下圖一所示。 圖一:安裝 GMap.NET 套件         GMap.NET 將 Google 地圖的功能函數封裝起來,基本上,這些 GMap 函數還是用到 Google 地圖的功能,而地圖功能有分為基本款和付費款。基本款的功能,像是標示一個點,描繪一個多邊形的路徑圖,這些函數被呼叫後就能執行。付費款的功能(或稱進階功能),像是座標與地址的轉換,像是兩點的路徑搜尋 、 街景服務 、 時區....等,這些函數並不是被呼叫就能 "成功" 執行。         要想使用進階功能,先要連上 Google 控制台  https://console.cloud.google.com/ ,創建一個專案後,如下圖二所示。在憑證的頁面中,我們取得 API key 一串亂碼組成,將這串亂碼複製到前面創建的 Visual Studio 專案裡面,Key 設定到 GMapProviders 如下行,這樣我們開發的應用程式就能使用到地圖的進階功能。     GMapProviders .GoogleMap. ApiKey = "AIzaSyAzzR7MftaJafXwVxHohroTWxxyyy"; 圖二:Google地圖的 API 憑證密鑰         接下來說明 GMap.NET 提供的類別函數,第一個最重要的地圖控制元件 GMapControl,如下的描述。     GMapControl :在 WinForm 下的地圖控制元件,載入 Google 地圖。     GMapOverlay :類別用於疊加到地圖上的物件,也就是說套在 Google 地圖上面的圖 、 文字 、 線條

[應用] 利用 EmguCV 套件開發錄製 IP CAM 的影像檔案

圖片
        前面的文章介紹 Emgu.CV 套件如何擷取網路攝影機 IP CAM 的影像 https://han-ya.blogspot.com/2023/06/emgucv-opencv.html ,延續前文的操作,我們利用 Emgu.CV 提供的函數庫將影像錄製成檔案,如下圖一所示。新增一個錄影的按鈕,當擷取影像的同時,也將影像儲存成檔案。 圖一:錄製 IP CAM 的畫面         首先, VideoWriter  是一個 Emgu.CV 的類別,用來錄製影像檔,參考下圖二的說明。創建這個類別時,至少要提供的參數:錄製的檔名 、 FPS (Frame rate Per Second) 、 Frame尺寸大小 、以及是否彩色錄影。 圖二:VideoWriter 類別函數 宣告呼叫的方式,如下 vWriter = new VideoWriter (vFile, 30, vSize, true); if (vWriter.IsOpened) // 如果成功創建 {      Thread videoTask = new Thread(VideoSaveTask); // 利用一個線程處理錄製影像      videoTask.Start(); } 下圖是有關錄製影像的線程 VideoSaveTask( ),從擷取 IP CAM 影像的資料暫存器 Mat 轉換成 Image,再將 Image 寫入檔案中。 圖三:處理錄製的線程

[筆記] EmguCV 封裝 OpenCV 函數庫的跨平台套件

圖片
Emgu CV 是一套跨平台的影像處理套件,它使用 .Net 核心將 OpenCV 的影像處理函數庫封裝成 Emgu CV。從 2008 年的 1.2 版本開始,Emgu不斷進化發展,於 2009 年推出 2.0 版本,並於 2015 年推出 3.0 版本,之後於 2019 年發佈 4.0 版本,目前已經更新至 4.7 版本。最新版本的 Emgu 支援多個平台,包括 Windows、Linux、iOS、安卓...等。此外,Emgu 還提供了 C#、C++、VB.NET 等語法的範例程式碼供開發人員參考。要使用 Emgu,開發環境需要使用微軟的 Visual Studio 2017 或更高版本。         在實作一個 IP Cam 網路擷取影像的案例之前,讓我們先討論一下 Emgu 的一些缺點。在我的開發過程中,我發現 Emgu 存在一個重要問題,就是版本間的程式碼無法相容。例如,在使用 3.1 版本進行開發後,當升級到 4.2 版本時,許多函數的介面會有所變動,有些類別的命名也會發生改變,這導致程式碼無法在不同版本之間相容。這個問題是 Emgu 的一個重大缺點。         開啟微軟的 Visual Studio 2017 / 2019 開發工具,創建一個專案,接著在專案裡載入 Emgu.CV 軟體套件。點擊 “管理 NuGet 套件” 後,出現如下圖所示的頁面,我們搜尋 Emgu,NuGet 會找到相關的套件,點擊安裝後,便會加載到我們的專案裡頭了。由於我們實作過程會用到 Windows Form,所以還需要安裝 Emgu.CV.UI,它會將 Windows Form 封裝起來並與 Emgu.CV 的影像函數整合,這樣我們就不需要為了 Image 格式的轉換傷腦筋。 圖一:搜尋 Emgu 相關的套件 圖二:安裝所需要的 Emgu.CV         當我們安裝好 Emgu.CV 套件後,點擊 VS 2019 的工具箱,發現多出了一個 Emgu.CV 欄位,如下圖三紅色框所示。拖拉 ImageBox 這個元件,建立一個小螢幕用來顯示 IP Cam 的畫面,同時再拉一個小按鈕,用來切換建立或中斷 RTSP 影像連線。切記別用 Windows Form 工具裡的 PictureBox,它與 Emgu.CV 之間還需要進行 Image 格式

[筆記] 恩智浦 NXP LPC55S69 開發板的開箱

圖片
        最近,我取得了一塊 NXP LPC55S69 開發板,我計劃使用它來開發 USD + SD 存取功能。這塊開發板被精心包裝在一個盒子中,盒子的封面印有這塊開發板的官方網路連結。根據技術文件的介紹,這套開發板大約於2020年推出,並且已經穩定到達一個版本。官方計劃將這塊微控制器單元(MCU)主要應用於工業物聯網(IoT)、自動化、診斷設備等多個領域。 圖一:LPC55S69 開發板的包裝盒         下圖二是開發板的正面原貌,板子中間是 MCU LPC55S69 ,晶片核心是ARM Cortex-M33 ,具有雙核心的封裝,內部最高時脈為 150MHz。基本上,晶片都包含了一般 MCU 該有的周邊,比較特別的部分有雙 USB 介面﹑雙 SD 介面﹑以及語音介面。在圖的右上方有語音的 codec 晶片,能將語音轉成數位化後接到 LPC55S69 處理。左邊有兩個 micro USB 接口,分別支援 Full speed 和 High speed 的規格,另外有兩個 micro USB 接口分別是供電和 debug 之用。 左下方的區塊是 Link2 on-board debugger,它支援除了 NXP 自家的 Link2 除錯器之外,也支援外接 J-Link 的除錯器。         接著,要開發這顆 MCU 的程式前,我們必須先準備好底下幾樣東西:第一個 MCUxpresso IDE ,開發環境套件專門開發恩智浦的晶片。第二個 MCUxpresso SDK ,到官方網站上下載該晶片的 SDK,才能載到 IDE 裡面。 圖二:LPC55S69 開發板正面圖         到恩智浦的官方網站  mcuxpresso.nxp.com  下載 SDK,先選擇晶片,再點選下圖三的右下方按鈕,產生相關的 SDK 連結。然後,進到下圖四的選單,依據我們的開發需求,選擇需要的程式碼與函數庫,網站會生成一個 SDK 壓縮檔,下載保存這個壓縮檔,之後會在 IDE 工具時用到。 圖三:產出 LPC55S69 SDK 圖四:SDK 程式碼與函數庫的選單         下載 MCUxpresso IDE 並安裝到 Windows 10 以上的系統,這個 IDE 環境很類似 Ecplise IDE的介面(其實就是基於它所開發的套件),如果用過 Eclipse ID

[筆記] 如何配置 ESP32 模組的連線資料與密碼?

圖片
        ESP32 模組具有 WiFi 和藍芽無線的功能,沒有鍵盤與螢幕的環境,要如何配置模組的 WiFi 連線方式呢?在 樂鑫科技 所著的 『 ESP32-C3物聯網工程開發實戰 』 一書中給了三種配置無線網路連線的方式,分別是:SoftAP配網﹑一鍵配網﹑藍芽配網。書中還提到另一種透過路由器的 WPS 方式配置網路參數,但是 WPS 功能逐漸被路由器所關閉,所以這裡就不討論 WPS 方式。 SoftAP 方式配網         這方式的概念很容易理解,ESP32 模組一開始先做為 WiFi AP 的角色,讓手機 APP 連上 ESP32 模組,從 APP 介面將 WiFi 的連網參數 (SSID / password) 設定到模組裡面。接著,斷開模組的 AP 連線後,ESP32 會轉換成 STA 角色去連接無線網路 AP,如下圖所示。         在 ESP32 模組的開發組件,原廠提供一個 wifi_provisioning 組件用來實現上述的這項功能,另外也提供手機端的 APP,名為 ESP SoftAP Prov 的手機應用程式,請從這連結下載 https://www.espressif.com/zh-hans/support/download/apps 。參考 YouTube 影片連結: https://youtu.be/6zTjZJ8Z76U 圖一:SoftAP 配置網路連線的示意圖 (資料取自原廠書) 一鍵方式配網         第二種配置無線網路參數的方式屬於原廠自訂的功能,稱為 Smart Config 。手機端需要下載一個 ESP Touch 的 APP 程式,而 ESP32 模組一開始藉由掃描通道的過程獲取連網的 SSID 和密碼,如下圖所示。然後,模組再連線到 SSID 的 WiFi AP,獲取網路 IP。這一個開發組件放在 esp_wifi 目錄底下,原廠也提供範例程式 smart_config。有關這部分的開發過程,可參考 YouTube 影片連結: https://youtu.be/yiuLxTq7Cqc 圖二:一鍵配置網路連線的示意圖 (資料取自原廠書) 藍芽方式配網         第三種方式就是先透過藍芽 BLE 的連線將 SSID 和密碼設定到 ESP32模組上,然後再由模組連線到 WiFi AP 上面獲

[筆記] WebRTC VP8 視頻封包的解析

圖片
WebRTC 媒体流中,从 RTP 视频流接收到的封包,封包包含 RTP header 头部以及 RTP payload ,其中 RTP 的 payload 内含是 VP8 视频内容。将封包刨除 RTP header 后的 VP8 内容,其包含两部分: Payload descriptor 和 Payload data 部分。 Payload descriptor 用来描述每笔收到的 RTP 封包中的 VP8 画面资料, descriptor 后面就带着 VP8 的资料。 🔰  底下是  Payload descriptor  的部分 90 代表  VP8  第一个 header ,栏位意义如下 X 0 N S 0 PID   X : 1 代表后面还有 option S : 1 代表 VP8 第一个 partition PID : 0~7 ,第一个为 0 80 代表 option I L T K 000                   I : 1 代表后面有 I 行,带着 picture ID CC-B5  代表 picture ID ,当 M=0 , ID 为 7-bit 。 M=1 , ID 为 15-bit , ID 随机产生。 M Picture ID       🔰 底下是  Payload data  的  header  部分 70 - C7 - 00 这三个 byte 代表意义,如下 Size0 H Ver P Size1 Size2 Size = 0 * 2048 + 0xC7 * 8 + 3 = 0x63B = 1595 后面有 1595 bytes                 P : 0 代表 key frame , 1 代表 inter frame