黃繼鵬,劉進偉,李金環(huán),高志華
(東北師范大學(xué) 物理學(xué)院,吉林 長春 130024)
智能手機配備了加速度計、磁力計、陀螺儀、光強度計等多種傳感器,可以輔助學(xué)生測量物理量,智能手機已經(jīng)成為移動物理實驗室[1]?,F(xiàn)有的Phyphox[2]、Sensor kinetics[3]、Geogebra[4]等手機應(yīng)用程序可以很容易地捕捉和分析來自傳感器的數(shù)據(jù),允許用戶研究不同的物理現(xiàn)象,能夠為教師開展物理實驗教學(xué)、揭示物理規(guī)律提供新的方法和途徑。然而,當(dāng)前運動視頻的物理實驗分析手機應(yīng)用程序還很匱乏,本文使用手機圖像傳感器設(shè)計了基于安卓系統(tǒng)的運動視頻物理實驗分析應(yīng)用程序SPnenu,以單擺運動的視頻分析為例講述該應(yīng)用程序在手機物理實驗中的具體應(yīng)用,消除了由于單擺實驗過程中計時不準(zhǔn)確等原因?qū)嶒灲Y(jié)果造成的影響。
SPnenu是一款由東北師范大學(xué)自行設(shè)計的手機物理實驗應(yīng)用軟件,是基于OpenCV的運動視頻分析安卓應(yīng)用程序,經(jīng)過簡單設(shè)置后即可自動跟蹤視頻中的運動目標(biāo),并測量、計算出視頻中的物理實驗參數(shù),生成原始數(shù)據(jù)供師生分析。視頻可以是手機拍攝的或來自其他來源,格式推薦MP4格式,視頻中的運動目標(biāo)物理顏色應(yīng)和背景顏色有較大的差別(且只包含一種顏色)。視頻拍攝時應(yīng)保證攝像頭垂直于運動目標(biāo)和參照物構(gòu)成的平面拍攝。
SPnenu由三個主要部分構(gòu)成,第一個部分是參照物檢測,該部分的目的是通過手動設(shè)置視頻中的參照物來確定視頻中每個像素代表的實際長度。
第二個部分是基于OpenCV中的CamShift[5]算法實現(xiàn)的目標(biāo)跟蹤,為了跟蹤視頻中較小的目標(biāo),應(yīng)用程序?qū)υ撍惴ㄖ蓄伾狈綀D的計算方法部分進行了針對性的改進,使得選擇跟蹤目標(biāo)更為便捷。
第三個部分是數(shù)據(jù)處理,該部分對目標(biāo)跟蹤部分得到的目標(biāo)坐標(biāo)和時間信息進行分析,計算出運動目標(biāo)的位置、運動周期等物理參數(shù)信息,為了快速地處理視頻,為應(yīng)用程序設(shè)計了一個專門的硬件加速解碼模塊。
“用單擺測量重力加速度大小”實驗是2017版高中物理課標(biāo)選修部分學(xué)生必做實驗之一,該實驗原理簡單,但從近年學(xué)生經(jīng)典單擺實驗的效果看,實驗誤差較大。導(dǎo)致誤差產(chǎn)生的主要原因有:擺長測量和單擺周期的測量。特別是,經(jīng)典單擺周期測量對起始位置的選擇、單擺周期的判斷、周期次數(shù)的計量等都提出了極高的要求,極易出現(xiàn)失誤。為了解決以上兩個問題,利用手機錄制視頻,結(jié)合安卓程序SPnenu對該實驗進行了視頻分析。
首先需要推導(dǎo)單擺周期公式,設(shè)小球質(zhì)量為m,質(zhì)心到懸掛點O的距離為L(擺長),單擺周期為T。當(dāng)擺線與豎直方向夾角小于5度時,根據(jù)牛頓第二定律,可得重力加速度g=4π2L/T2。利用這個公式在每個單擺周期的結(jié)束計算一次重力加速度并進行記錄,最后將所有重力加速度的平均值作為最終實驗所得的視頻當(dāng)?shù)氐闹亓铀俣取?/p>
SPnenu App精確測出擺錘位置坐標(biāo)和時間信息,計算出單擺的擺長和周期,然后根據(jù)g=4π2L/T2,就可以求得視頻當(dāng)?shù)氐闹亓铀俣取?/p>
實驗裝置如圖1所示。主要實驗器材有:鐵架臺、勻質(zhì)擺錘、不可伸長輕質(zhì)繩、安裝了SPnenu App的Android手機、參照物卡、三腳架(選配)等。
圖1 單擺實驗裝置圖(手機App端)
1)手機攝像頭垂直于運動擺錘和參照物卡構(gòu)成的平面拍攝視頻。在單擺視頻分析的開始,首先需要設(shè)置參照物,如圖1所示,選取五條間距為50 mm的線條中的任意兩條作為參照物,這里選擇兩條相鄰的線條作為參照物,設(shè)置參照物的起點和終點,此時輸入框填寫50。
2)設(shè)置視頻中坐標(biāo)系。以擺線懸掛點表示坐標(biāo)系的原點,在其所在的垂直手機鏡頭主光軸平面上,原點水平向右表示為X軸正方向,原點豎直向下表示為Y軸正方向。
為了盡可能精確地設(shè)置參照物和坐標(biāo)系,應(yīng)用程序中包含了拖動和點擊兩種設(shè)置調(diào)節(jié)方式,滿足微調(diào)需求。
3)設(shè)置自動跟蹤的目標(biāo)。在手機屏幕畫出一個和擺錘大小相近的矩形框,然后將矩形框拖到和擺錘重合的位置上,最后點擊確認(rèn)按鈕即可完成設(shè)置。
4)設(shè)置完成后,開始自動分析視頻直至視頻結(jié)束,視頻分析共有三個界面:視頻播放、原始數(shù)據(jù)和數(shù)據(jù)結(jié)果分析。視頻播放界面顯示每一幀處理后的圖像,黃色的矩形框是目標(biāo)跟蹤檢測到的擺錘。原始數(shù)據(jù)界面包括兩個部分,上半部分是點圖形式:豎軸表示每一幀圖像中擺錘坐標(biāo)的x值,橫軸表示與之對應(yīng)的幀圖像時間。下半部分列表:從上到下的每一行原始實驗數(shù)據(jù)代表從視頻開始的每一幀圖像中擺錘的坐標(biāo)和時間,如圖2所示。
圖2 原始數(shù)據(jù)界面
5)如圖3所示,數(shù)據(jù)結(jié)果分析界面包括實驗項目選擇和實驗結(jié)果展示,該模塊接收擺錘的原始數(shù)據(jù),并根據(jù)選定實驗的計算過程,得出實驗結(jié)果。當(dāng)前默認(rèn)選擇單擺實驗,計算操作包括計算單擺的周期[6]、擺長、視頻當(dāng)?shù)氐闹亓铀俣萚7]和實驗誤差分析。
周期計算包括周期的起始定位及周期時長的計算。周期的起始定位點選取為擺錘的最大位移處,擺錘共有左右兩個最大位移點,這里選擇視頻中左邊的最大位移處,對應(yīng)點圖中的波谷位置,此時擺錘的速度最慢,可以精確地確定單擺每個周期的開始和結(jié)束(不同于傳統(tǒng)單擺實驗秒表最低點計時)。
擺長計算首先定義擺長。視頻中的擺長定義為目標(biāo)跟蹤檢測到的擺錘框的中心到設(shè)置坐標(biāo)系原點的歐氏距離。
在計算出單擺的周期和擺長后,就可以計算視頻當(dāng)?shù)氐闹亓铀俣?。視頻拍攝地(長春)的標(biāo)準(zhǔn)重力加速度為9.804 8 m/s2,本次實驗最終測得視頻中單擺的擺長為0.643 49 m,周期為1.621 76 s,計算得出視頻當(dāng)?shù)氐闹亓铀俣葹?.801 77 m/s2,和視頻當(dāng)?shù)氐臉?biāo)準(zhǔn)重力加速度的差值rg為-0.003 03 m/s2,如圖3所示。
可知實驗值和理論值的相對偏差為
Er=0.03%.
實驗值和理論值吻合較好,即通過本實驗方法測得重力加速度的結(jié)果較為精確。
Tracker沒有智能手機的客戶端,本文選擇安裝Windows 8.1的個人電腦作為運行環(huán)境,處理器為Intel?CoreTMi7-4710MQ,內(nèi)存16 GB,最終的運行結(jié)果如圖4所示。
圖4 Tracker分析結(jié)果
Tracker只展示了實驗的原始數(shù)據(jù),沒有對于單擺實驗的數(shù)據(jù)結(jié)果分析;從分析速度看,SPnenu安卓程序用了50 s,而Tracker分析相同視頻耗時75 s,并且Tracker在自動跟蹤目標(biāo)的過程中會偶爾出現(xiàn)中斷,手動輔助操作后,才能繼續(xù)分析視頻,而SPnenu則不會出現(xiàn)這種情況,這是因為SPnenu在目標(biāo)跟蹤部分沒有采用Tracker所使用的模版匹配算法,而采用了基于顏色跟蹤的CamShift算法,該算法只對顏色敏感,對視頻的背景形狀和跟蹤目標(biāo)的形狀的復(fù)雜度并不敏感,對目標(biāo)的大小變化也有較好的自適應(yīng)性,即使擺錘在運動過程中發(fā)生旋轉(zhuǎn),只要保證顏色不發(fā)生變化,目標(biāo)跟蹤就能很好地跟蹤到擺錘。
確定了單擺周期始末的定位點后,應(yīng)用程序需要在給定的原始數(shù)據(jù)中找到所有的波谷,在連續(xù)可導(dǎo)函數(shù)中,波谷對應(yīng)點處的一階導(dǎo)數(shù)[8]為0,并且在左鄰域中一階導(dǎo)數(shù)為負(fù)值,右鄰域中一階導(dǎo)數(shù)為正值。根據(jù)連續(xù)可導(dǎo)函數(shù)中波谷的特點,可以設(shè)計出單擺實驗中對于原始實驗數(shù)據(jù)中波谷有如下判斷方法。
講述判斷方法之前,需要先定義點圖中每一點一階導(dǎo)數(shù)的正負(fù)。這是因為視頻拍攝時是以幀為單位進行記錄的,這就導(dǎo)致原始實驗數(shù)據(jù)是離散的,不能像判斷連續(xù)可導(dǎo)函數(shù)的波谷一樣去判斷點圖中每一點的一階導(dǎo)數(shù)是否等于0,只能根據(jù)波谷鄰域點的一階導(dǎo)數(shù)進行判斷,但是離散數(shù)據(jù)無法像連續(xù)可導(dǎo)函數(shù)一樣去求得一階導(dǎo)數(shù)的表達式,然后根據(jù)表達式求出鄰域中點具體的一階導(dǎo)數(shù)值,而只能求得鄰域點的一階導(dǎo)數(shù)的正負(fù)。根據(jù)一階導(dǎo)數(shù)的定義,這里將A點的一階導(dǎo)數(shù)的正負(fù)定義為B點的x值減去A點x值的差的正負(fù),其中A點為點圖中的一點,B點為和A點相鄰的下一個點,即A和B為兩個相鄰幀在點圖中對應(yīng)的點。
在定義了點圖中每一點的一階導(dǎo)數(shù)的正負(fù)后,就可以判斷出點圖中的波谷一階導(dǎo)數(shù)為正且它前一個點的一階導(dǎo)數(shù)為負(fù)的點。通過上述方法判斷出兩個相鄰的波谷對應(yīng)的點,將后一個點對應(yīng)的時間減去前一個點對應(yīng)的時間即可求出一個完整周期的長度。但關(guān)于周期的計算仍未完成,考慮圖5和圖6所示的兩種情況,圖5表示點圖中一般波谷的情況,其中B點對應(yīng)擺錘運動至左邊最大位移處的點,A點和C點分別對應(yīng)前一幀和后一幀對應(yīng)的點。上述方法可以很準(zhǔn)確地判斷出B點就是波谷,但是當(dāng)發(fā)生圖6所示的特殊波谷時,上述方法就無法準(zhǔn)確判斷出正確的波谷E點,這仍是由視頻拍攝的離散性導(dǎo)致的,圖中E點也是對應(yīng)擺錘運動至左邊最大位移處的點,但因為視頻拍攝到的圖像不是連續(xù)的,導(dǎo)致E點對應(yīng)的幀未被拍攝,而只拍攝到了E點之前和之后的兩幀圖像,分別對應(yīng)D點和F點,此時前述的波谷判斷方法在判斷波谷時就會發(fā)生錯誤,因為點圖中根本不存在E點,所以會發(fā)生以下兩種情況:
圖5 一般波谷
圖6 特殊波谷
1.當(dāng)D點略低于F點或D點和F點一樣高時,D點就會被判斷為波谷;
2.當(dāng)D點略高于F點時,F(xiàn)點就會被判斷為波谷;
然而無論發(fā)生哪種情況,波谷的判斷都是不準(zhǔn)確的,當(dāng)情況1出現(xiàn)在周期的開始,會導(dǎo)致該周期的時長增加一幀的時間,出現(xiàn)在周期的結(jié)束會導(dǎo)致周期的時長減少一幀的時間,情況2則和情況1恰好相反。為了消除這種特殊波谷帶來的周期計算誤差,應(yīng)用程序?qū)σ曨l中所有的周期進行記錄,然后依次判斷哪些周期的時長比其余周期的時長多一幀的時間或少一幀的時間,將這些周期判斷為壞周期,這樣判斷的原因是因為擺錘在最大位移處的速度最小,此時擺錘在一幀時間內(nèi)的位移很小,所以特殊波谷發(fā)生的概率比一般波谷發(fā)生的概率就小很多,這樣周期記錄中大部分周期都是測量準(zhǔn)確的周期,然后通過對所有周期進行比較就能篩選出那些包含特殊波谷的壞周期并進行剔除,最后將其余周期的總時長除以對應(yīng)周期數(shù)作為最后實驗所得的單擺周期,以減少相對誤差。
完成對擺長的定義后,需要確定計算擺長的時機,這里選擇在每個周期的開始計算擺長,因為如果實驗不具備三腳架條件,視頻拍攝時會有輕微的抖動,而智能手機的攝像頭相關(guān)模塊并不能完全消除抖動,這就會導(dǎo)致視頻拍攝畫面的畸變,如果在畸變的幀中計算擺長,則會導(dǎo)致擺長測量誤差較大,但這種畸變只存在于小部分視頻幀中,所以這里只選擇周期開始時的幀計算擺長,這樣就大大降低了遇到畸變幀的概率。實驗中,對所有擺長的測量值計算平均值,二次消除誤差,將計算得到的平均擺長作為最后的擺長計算結(jié)果。
1)測量單擺周期的常規(guī)做法需要學(xué)生計量多次(30~50次)全振動的時間,存在操作耗時久、計數(shù)易受干擾、實驗誤差大等問題。SPnenu 應(yīng)用程序直接輸出單擺運動的周期,減少周期測量誤差,有助于學(xué)生在小角度傾角下進行實驗,可以快速準(zhǔn)確地對物理過程進行量化和圖形化分析。
2) SPnenu應(yīng)用程序可以輸出原始數(shù)據(jù),保留了傳統(tǒng)物理實驗的推理論證分析過程,可供學(xué)生自主設(shè)計實驗,遴選數(shù)據(jù),選擇不同的時機來計算周期,分析和安卓App自動計算的誤差,增加學(xué)生自主探究的樂趣,不受時空限制,提升了實驗的便捷性,而Tracker只能在電腦上運行。
3) SPnenu應(yīng)用程序操作比Tracker更加簡單,手動操作的部分全程由應(yīng)用程序引導(dǎo)提示,即使新手也能輕松使用,數(shù)據(jù)處理是隨著視頻實時進行的,使用者可以直接觀察到物理量的動態(tài)變化,對物理現(xiàn)象有一個更加直觀的感受。
4)圖3中擺錘運動的點發(fā)生了向上偏移,這是因為無三腳架拍攝視頻時手機向左有輕微的擺動,導(dǎo)致坐標(biāo)系的原點和擺線的懸掛處不重合,建議實驗采用三腳架拍攝視頻,消除偏移。
基于OpenCV設(shè)計Android手機應(yīng)用程序,可以讓學(xué)生非常方便地訪問智能手機的傳感器,并使用它們開展運動視頻分析物理實驗。通過運動視頻分析,可以脫離實驗室環(huán)境,不受時空限制,反復(fù)分析比較,提高實驗精度。已經(jīng)創(chuàng)建了一個運動視頻分析程序來計算基于單擺運動實驗的重力加速度,安卓程序保留了很多接口,可以進一步修改和功能擴展,還有其他如平拋運動、自由落體等物理實驗有待探索。希望通過編寫和配置自己的應(yīng)用程序,讓學(xué)生們將手機視為一個充滿傳感器的移動實驗室,探索有趣的物理世界。
App下載鏈接:
https://share.weiyun.com/yRyn7eDg