眼動(dòng)應(yīng)用其實(shí)實(shí)現(xiàn)的主要功能是:實(shí)時(shí)注視估計(jì)和跟蹤。注視估計(jì)是識(shí)別任何給定時(shí)刻的視線,而跟蹤是連續(xù)跟隨視線的能力。
這個(gè)眼動(dòng)儀是研究性質(zhì)的,不建議,也不適合投入生產(chǎn)實(shí)踐。文章中諸多細(xì)節(jié)也未給出,硬件改裝也未給出。安全性和合規(guī)性也未給出,有復(fù)現(xiàn)的,研究的,注意相關(guān)文件的補(bǔ)充。
ESP32-CAM是采集眼動(dòng)數(shù)據(jù)的,接著通過串口或者網(wǎng)絡(luò)把這個(gè)數(shù)據(jù)傳到電腦里面,這個(gè)時(shí)候有一個(gè)Python后端在運(yùn)行,把視頻流解碼,然后使用一個(gè)上位機(jī)來控制這個(gè)后端。
這個(gè)東西只要25
傳輸上面,一個(gè)是無線的2.4G:
測試
一個(gè)有線的-看上去是USB,其實(shí)是串口,比特率高的不行(30W)
這里我就放了seeed的板子
首先項(xiàng)目第一步要跑起來這個(gè)后端:
安裝windows的包管理
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser > Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
成功
scoop install pipx pipx ensurepath
接著安裝pipx
pipx install poetry
這個(gè)代碼在運(yùn)行的時(shí)候不可以翻墻,我這里是手機(jī)熱點(diǎn)安裝成功。
pipx ensurepath
自動(dòng)加路徑
poetry install --no-root
最后在包下面安裝所有的依賴
需要注意要使用高版本的解釋器
這里會(huì)出現(xiàn)很多吃這個(gè)問題
我們只要把上面的包重新卸載安裝就好
這個(gè)是所有的后端需要的庫
完成后,直接開啟
會(huì)有一個(gè)集成的API列表出現(xiàn)
這個(gè)API寫了什么呢?
這段JSON描述了一個(gè)跟蹤系統(tǒng)的配置,關(guān)鍵組件的簡要說明:
Enabled: 指示跟蹤系統(tǒng)當(dāng)前是否啟用。在這里,設(shè)置為false,表示已禁用。
Algorithm: 描述了跟蹤系統(tǒng)使用的算法。
以下是按順序列出的算法:
每種算法可能具有特定的參數(shù)和配置。
LEAP
BLOB
HSRAC
RANSAC
HSF
Camera: 描述了與捕獲輸入有關(guān)的參數(shù):
Capture Source: 當(dāng)前為空,這意味著此處未指定。
Rotation: 指定捕獲圖像的旋轉(zhuǎn)。
Threshold: 相機(jī)操作的閾值。
Focal Length: 相機(jī)鏡頭的焦距。
Flip X/Y Axis: 指示是否沿著X或Y軸翻轉(zhuǎn)圖像的標(biāo)志。
Region of Interest (ROI): 指定捕獲圖像中感興趣的區(qū)域,由其X、Y坐標(biāo)、寬度和高度定義。
細(xì)節(jié)什么的,以后再寫,現(xiàn)在看固件,使用platformio開發(fā)
默認(rèn)固件就是最便宜的開發(fā)板
使用USB的話可以直接切換工程
這些是需要的所有庫,會(huì)自動(dòng)安裝
這個(gè)USB其實(shí)就是串口轉(zhuǎn)USB,為了速度,30W的比特率
這個(gè)是相機(jī)的數(shù)據(jù)
fb = esp_camera_fb_get(); // 從相機(jī)獲取幀緩沖區(qū) if (fb) { len = fb->len; // 獲取幀的長度 buf = fb->buf; // 獲取幀的數(shù)據(jù) } else { log_e("Camera capture failed with response: %s", esp_err_to_name(err)); // 如果獲取幀失敗,則記錄錯(cuò)誤信息 err = ESP_FAIL; // 設(shè)置錯(cuò)誤碼 }
這個(gè)是一幀數(shù)據(jù)的樣子
這段代碼的作用是循環(huán)地從攝像頭捕獲幀并將其傳輸?shù)酱?a target="_blank">端口。如果捕獲幀失敗,則會(huì)記錄錯(cuò)誤信息并繼續(xù)循環(huán)。在每次傳輸之后,會(huì)計(jì)算延遲并記錄幀大小和延遲信息。
代碼進(jìn)行了解耦,就三部分,恒流源的LED和相機(jī)以及串口
這個(gè)是代碼的循環(huán)
該函數(shù)的作用是不斷循環(huán)監(jiān)聽串口通信。如果串口可用,它將嘗試解析接收到的 JSON 命令,并將其傳遞給命令管理器進(jìn)行處理。如果串口不可用(可能因?yàn)檎谑褂肬SB接口),則會(huì)調(diào)用 send_frame() 函數(shù)發(fā)送攝像頭幀。
串口
函數(shù) SerialManager::run(): 不斷循環(huán)監(jiān)聽串行端口上是否有數(shù)據(jù)可用。如果有數(shù)據(jù)可用,則讀取并解析 JSON 命令,然后交給 CommandManager 處理。
這個(gè)代碼有趣
把代碼的頭對比好,來控制機(jī)器
初始化眼動(dòng)跟蹤器的網(wǎng)絡(luò)相關(guān)功能(如果未啟用 USB API)
看代碼,串口沒有控制功能,單純的輸出圖像數(shù)據(jù)。
測試可以到70FPS,這個(gè)數(shù)據(jù)有點(diǎn)假
后端開啟,再打開追蹤的GUI
連接
這個(gè)是我的攝像頭太垃圾了,沒有調(diào)焦
開始捕獲了
追蹤中
這個(gè)上位機(jī)的代碼呢,也可以自己開發(fā):
第一步在這里改成小寫以免打包失?。ㄒ欢ǜ模?/p>
記住進(jìn)這個(gè)地方,不然讀取不到打包文件
poetry run pyinstaller eyetrackapp.spec
在dist里面找到exe啟動(dòng)
最新的更新有了新算法
ONNX是一個(gè)開放式的規(guī)范,定義了可擴(kuò)展的計(jì)算圖模型、標(biāo)準(zhǔn)數(shù)據(jù)類型以及內(nèi)置的運(yùn)算符。該文件在存儲(chǔ)結(jié)構(gòu)上可以理解為是一種層級(jí)的結(jié)構(gòu)。
最新的代碼還是加入了神經(jīng)網(wǎng)絡(luò)
可能對于大多數(shù)人來講,這些東西太過于復(fù)雜。但是沒辦法,就這么個(gè)情況,很多人倒是需要這個(gè)眼動(dòng)儀,過段日子就可以小批量的賣一波了。
審核編輯:劉清
-
CAM
+關(guān)注
關(guān)注
5文章
200瀏覽量
42970 -
上位機(jī)
+關(guān)注
關(guān)注
27文章
941瀏覽量
54790 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627 -
串口轉(zhuǎn)USB
+關(guān)注
關(guān)注
0文章
2瀏覽量
1996 -
ESP32
+關(guān)注
關(guān)注
18文章
971瀏覽量
17201
原文標(biāo)題:ESP32眼動(dòng)追蹤實(shí)現(xiàn)-EyeTrackVR
文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論