立體(3D)流攝像機(jī)和觀看器——第2部分
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在這個(gè)項(xiàng)目的第一個(gè)版本中,我創(chuàng)建了一個(gè)三腳架安裝的立體3D相機(jī),它通過HTTP傳輸立體視頻流,這樣它就可以在谷歌Cardboard這樣的立體觀看器上觀看。在這個(gè)設(shè)置中,我使用了兩臺(tái)Raspberry Pi zero,每個(gè)都有自己的攝像頭。
在這個(gè)更新的項(xiàng)目中,我使用樹莓派5,它有兩個(gè)攝像頭插槽,因此可以在單板上容納兩個(gè)攝像頭。
代碼也已更新,以利用新的PiCamera2 python庫。版本1使用了PiCamera,因?yàn)樽钚碌臉漭刹僮飨到y(tǒng)仍然沒有python支持libcamera。更新后的代碼支持兩種設(shè)置-使用2板,2攝像頭設(shè)置樹莓派零或1板,2攝像頭設(shè)置樹莓派5。它還利用Javascript來防止屏幕自動(dòng)鎖定。
在這個(gè)項(xiàng)目中,我將主要關(guān)注Raspberry Pi 5的設(shè)置。您可以參考前面的項(xiàng)目了解Raspberry Pi Zero安裝的具體細(xì)節(jié),包括將它們安裝在機(jī)箱上并共享電源軌,因此兩者都可以通過單個(gè)電源適配器供電。
立體3D圖像/視頻試圖復(fù)制我們親眼所見的東西。你的雙眼相距約2.5英寸或6厘米(60毫米)(也稱為眼間距離)。因此,每只眼睛從略微不同的角度和角度看圖像。大腦將這兩個(gè)圖像結(jié)合成一個(gè)無縫的圖像,并利用這些信息來測(cè)量距離和深度。這也被稱為雙目視覺。
我們可以用一個(gè)3D立體攝像機(jī)來復(fù)制這個(gè)過程,用兩個(gè)相距大致眼間距離的攝像機(jī)。這兩幅圖像(左圖和右圖)然后使用谷歌Cardboard等立體觀看器分別呈現(xiàn)給每只眼睛。然后,大腦將這些圖像結(jié)合起來,處理視角和角度的細(xì)微差異,從而產(chǎn)生深度感知,即3D圖像!
在這個(gè)項(xiàng)目中,我用一個(gè)樹莓派5和兩個(gè)樹莓派相機(jī)2s建立了一個(gè)立體3D相機(jī),安置在樹莓派3/4/5的ProtoStax外殼中。
我也使用ProtoStax立體3D相機(jī)套件樹莓派相機(jī)- 60mm立體底座,它允許你安裝兩個(gè)Pi相機(jī)2坐落,你猜它相隔60mm -我們的眼間距離(也稱為軸間距離或立體底座時(shí),參考相機(jī)設(shè)置)!它還配備了一個(gè)三腳架安裝件,使整個(gè)外殼三腳架安裝。
我們將使用Python將來自兩個(gè)攝像頭的攝像頭輸出流式傳輸?shù)交谧笱?右眼瀏覽器的復(fù)合視頻流中。然后,您可以在手機(jī)上的瀏覽器上打開這個(gè)立體聲視頻流,并將其放置在谷歌Cardboard等立體觀看器中,然后voilom !-我們有我們的3D立體流媒體相機(jī)和查看器!
現(xiàn)在,你可以給你的奶奶或奶奶帶一個(gè)3D參觀你的房子,而不必讓他們爬樓梯或離開舒適的椅子,因?yàn)槟闳ゲ僮飨鄼C(jī),讓他們遠(yuǎn)程觀看!
或者玩一些愚蠢的3D游戲,你可以讓你的朋友或家人看到你通過谷歌Cardboard呈現(xiàn)的世界——轉(zhuǎn)動(dòng)相機(jī),對(duì)準(zhǔn)他們,看看他們?cè)?D中看到自己時(shí)的反應(yīng)!很迷糊了!
免責(zé)聲明-暈動(dòng)病患者在觀看VR頭顯或立體相機(jī)時(shí)可能會(huì)感到有點(diǎn)惡心。如果你開始感到惡心,只要放松立體相機(jī)觀看!
另一個(gè)免責(zé)聲明-兩個(gè)攝像機(jī)不是同步在這里,這個(gè)項(xiàng)目不是用于硬核立體視頻使用。為此,您可以使用其他硬件,例如Arducam的同步立體相機(jī)HAT用于樹莓派(或來自Arducam的其他類似產(chǎn)品)。ProtoStax外殼有足夠的空間放置HAT,因此您可以升級(jí)項(xiàng)目以使用硬件同步攝像機(jī)。您還可以嘗試使用軟件技術(shù)來改進(jìn)性能和同步。在“前進(jìn)”一節(jié)中提到了如何改進(jìn)這個(gè)項(xiàng)目。
好了,我們開始吧!
第一步:準(zhǔn)備樹莓派
如果您是從頭開始,您需要首先為您的樹莓派5配置SD卡和樹莓派操作系統(tǒng)。Raspberry Pi Imager工具允許您在創(chuàng)建啟動(dòng)映像時(shí)提前進(jìn)行一些配置。
由于我們將在無頭設(shè)置中使用樹莓派(未連接到顯示器或電視),因此您需要在它們上啟用SSH。我們還希望它們?cè)趩?dòng)時(shí)直接連接到無線網(wǎng)絡(luò)。我們可以使用樹莓派Imager工具設(shè)置提供WIFI網(wǎng)絡(luò)名稱和密碼憑證。
一旦我們這樣做了,我們可以做其余的設(shè)置稍后,在我們啟動(dòng)我們的立體流媒體相機(jī)硬件設(shè)置。我們可以SSH到Raspberry Pi,并完成其余的設(shè)置,包括獲取源代碼和運(yùn)行程序。
步驟2:設(shè)置硬件
首先將樹莓派5安裝在樹莓派5 / 4 / 3型號(hào)B/B+的ProtoStax機(jī)箱上。
接下來,安裝樹莓派相機(jī)的頂部板的ProtoStax立體3D相機(jī)套件樹莓派相機(jī)。
將Pi相機(jī)安裝到頂板上
連接相機(jī)線到樹莓派5?;蛘撸梢栽趯⑾鄼C(jī)安裝到頂板之前將相機(jī)連接到樹莓派5上!只要你覺得容易就行!
離以太網(wǎng)接口最近的攝像機(jī)槽位為camera 0。它旁邊的插槽(靠近HDMI端口)是相機(jī)1。在我的設(shè)置中,我將右攝像頭連接到槽0,將左攝像頭連接到槽1。如果您交換了它們,只需適當(dāng)?shù)馗麓a。
添加側(cè)壁(包括一個(gè)/兩個(gè)三腳架安裝側(cè)壁從ProtoStax立體3D相機(jī)套件樹莓派相機(jī)),并關(guān)閉一切。
完成外殼與三腳架安裝
這是最后完成立體相機(jī)設(shè)置,與附加的三腳架安裝適配器板(這將完全取決于你有三腳架的類型!)。
步驟3:配置樹莓派
使用最新的樹莓派和樹莓派操作系統(tǒng),你不需要做很多額外的配置。之前,您需要使用raspi-config啟用相機(jī)接口?,F(xiàn)在,當(dāng)攝像頭連接到接口上時(shí),它們會(huì)自動(dòng)啟用。
步驟4:配置軟件
你可以從GitHub下載該軟件。或者,您可以使用git安裝它
該程序?qū)⑼ㄟ^一個(gè)簡單的web服務(wù)器暴露相機(jī)的兩個(gè)MJPG視頻流,如:
(*將上面的raspberrypi5替換為您為pi選擇的主機(jī)名)
該程序還有一個(gè)主頁(index.html),將兩個(gè)視頻流顯示為立體圖像(并排),如
您可以打開手機(jī)瀏覽器上的鏈接(只需確保您的手機(jī)與樹莓派在同一網(wǎng)絡(luò)上),并將手機(jī)放在谷歌Cardboard(或類似的查看器)等3D立體查看器中,以便在您的查看器上獲得3D立體流媒體相機(jī)。
因此,觀眾可以看到3D的一切。攝像機(jī)操作員可以四處移動(dòng),讓觀眾從舒適的沙發(fā)上享受3D之旅!
第五步:調(diào)焦相機(jī)和其他技巧
為了獲得最佳性能,您可以對(duì)焦樹莓派相機(jī)2的鏡頭,以獲得更清晰的圖像。您可以使用樹莓派相機(jī)的鏡頭調(diào)整工具來輕松調(diào)整焦點(diǎn)。
為了獲得最佳的流媒體性能,請(qǐng)確保您的樹莓派上沒有運(yùn)行太多其他程序或服務(wù)。如果您從SD卡圖像開始,這應(yīng)該不是問題。但是,如果您從已經(jīng)配置的現(xiàn)有樹莓派開始,請(qǐng)確保您已經(jīng)停止并禁用了額外的服務(wù),因此流媒體性能不會(huì)受到影響。
當(dāng)您在手機(jī)上的瀏覽器上打開立體流鏈接時(shí),最好隱藏工具欄,這樣查看器中的無關(guān)元素就會(huì)最小化。您需要在查看器中橫向調(diào)整手機(jī),以便圖像顯示為單個(gè)平滑的3D圖像(并且沒有模糊的偽影)。
更新后的代碼在這個(gè)項(xiàng)目也可以防止屏幕鎖定踢在一段時(shí)間后,這將發(fā)生如果手機(jī)被放置在谷歌紙板查看器-只需點(diǎn)擊“喚醒鎖定被禁用”按鈕啟用它!當(dāng)它被啟用時(shí),背景變?yōu)楹谏?
代碼
這個(gè)代碼是基于Picamera庫的Web視頻流的高級(jí)配方,它開始將相機(jī)的視頻流記錄到緩沖區(qū),然后通過http請(qǐng)求處理程序提供幀。它已經(jīng)更新為在最新版本的樹莓派操作系統(tǒng)上使用PiCamera2。web服務(wù)器在端口8000上啟動(dòng)。您可以使用raspberrypi5.local:8000/leftstream查看每個(gè)相機(jī)的每個(gè)單獨(dú)的mjpg流?;騬aspberrypi5.local:8000/rightstream.mjpg
這個(gè)簡單的web服務(wù)器將使用一些HTML和CSS將左右mjpg流配置為帶有拆分視圖的單個(gè)頁面,并提供對(duì)主頁請(qǐng)求的響應(yīng)(raspberypi5)。本地:8000/或index.html頁面(raspberrypi5.local:8000/index.html)。因此打開主頁將提供一個(gè)立體視頻流。
下面是用來格式化頁面的HTML和CSS:
它利用了richtr的NoSleep.js javascript庫來防止手機(jī)屏幕在一段時(shí)間不活動(dòng)后自動(dòng)鎖定,這將發(fā)生在手機(jī)處于谷歌Cardboard Viewer中時(shí)。在版本1中,我建議你使用手機(jī)的設(shè)置關(guān)閉自動(dòng)鎖定功能。更新后的代碼使其更方便,更易于使用。
代碼也有另一個(gè)HTML/CSS設(shè)置為2攝像頭,2 Pi零設(shè)置,結(jié)合流從左攝像頭。本地和右凸輪。本地pi(更新名稱以匹配您的設(shè)置)。
為了使代碼在啟動(dòng)時(shí)自動(dòng)運(yùn)行,您需要將其作為服務(wù)運(yùn)行。GitHub頁面的README有關(guān)于如何做到這一點(diǎn)的說明,包括服務(wù)的配置文件。
展望未來:
和往常一樣,我想在結(jié)束時(shí)談?wù)勅绾斡米约旱难a(bǔ)充來推進(jìn)這個(gè)項(xiàng)目!一旦您熟悉了代碼示例并理解了代碼,嘗試通過做更多的事情來擴(kuò)展您的學(xué)習(xí)總是好的。以下是一些建議:
?在Pi上將python流程序作為服務(wù)運(yùn)行,這樣它就會(huì)在Pi啟動(dòng)時(shí)自動(dòng)啟動(dòng)。GitHub鏈接有關(guān)于如何做到這一點(diǎn)的說明。
?我們目前使用MJPEG格式流媒體視頻。使用MPEG1或其他可能提供更好性能的格式進(jìn)行流式傳輸
?添加拍攝立體照片的功能——在樹莓派的GPIO上添加一個(gè)按鈕,并使用該按鈕從兩個(gè)相機(jī)中拍攝左右照片,并將它們拼接在一起,形成立體二人組
本文編譯自hackster.io