薛暉 北京市育英學(xué)校信息技術(shù)教師,北京市青少年機(jī)器人競(jìng)賽技術(shù)委員會(huì)成員,北京市機(jī)器人骨干教師,海淀區(qū)信息技術(shù)骨干教師,海淀區(qū)優(yōu)秀科技輔導(dǎo)教師。曾任全國(guó)智能控制大賽裁判長(zhǎng),北京青少年機(jī)器人競(jìng)賽裁判,北京市海淀區(qū)創(chuàng)客秀項(xiàng)目負(fù)責(zé)人。指導(dǎo)學(xué)生獲得中國(guó)青少年機(jī)器人競(jìng)賽創(chuàng)意項(xiàng)目一等獎(jiǎng),北京市青少年創(chuàng)新大賽一等獎(jiǎng),北京市青少年科技后備人才早期培養(yǎng)計(jì)劃展評(píng)活動(dòng)最佳學(xué)生獎(jiǎng),等等。
教學(xué)背景
本節(jié)課的主題是“視覺(jué)識(shí)別——感興趣區(qū)域ROI”,利用Python語(yǔ)言實(shí)現(xiàn)圖像及視頻中興趣點(diǎn)的單獨(dú)選取,能夠節(jié)省網(wǎng)絡(luò)監(jiān)控?cái)z像機(jī)帶寬占用和視頻存儲(chǔ)空間。復(fù)習(xí)課前知識(shí)為本節(jié)課的項(xiàng)目做好充足的準(zhǔn)備,過(guò)程中教師注重提示學(xué)生攝像頭的視頻顯示就是一幀幀已經(jīng)存儲(chǔ)好的單張圖像顯像,圖像按照一定的時(shí)間間隔不斷地刷新,就形成了視頻的播放。
感興趣區(qū)域(Region of Interest,ROI)的行與列是對(duì)圖像的裁剪范圍,教師通過(guò)范例講解,幫助學(xué)生理清進(jìn)行區(qū)域選擇的方法,為項(xiàng)目中的興趣點(diǎn)選取做準(zhǔn)備。在項(xiàng)目實(shí)施過(guò)程中為學(xué)生提供已學(xué)程序的資料,減輕學(xué)生的代碼輸入量;在項(xiàng)目臨近成功時(shí)增加改變項(xiàng)目需求的環(huán)節(jié),讓學(xué)生體驗(yàn)解決突發(fā)問(wèn)題的過(guò)程,鍛煉學(xué)生的信息意識(shí)。
教學(xué)目標(biāo)
1.了解什么是ROI,學(xué)會(huì)如何在數(shù)字化圖像處理中實(shí)現(xiàn)興趣點(diǎn)的裁剪。
2.通過(guò)需求分析來(lái)解決問(wèn)題,經(jīng)過(guò)自主探究,結(jié)合實(shí)際效果,實(shí)現(xiàn)視頻中單獨(dú)顯示興趣點(diǎn)的程序設(shè)計(jì)。
3.對(duì)發(fā)現(xiàn)的問(wèn)題能夠進(jìn)行自主探究和修正,提升信息意識(shí)。在反復(fù)嘗試的過(guò)程中進(jìn)行深入思考,通過(guò)思考、編程,實(shí)現(xiàn)理想的效果,從而獲得成功的喜悅。
教學(xué)重點(diǎn)與難點(diǎn)
教學(xué)重點(diǎn) 理解什么是ROI,學(xué)會(huì)裁剪圖像中的興趣點(diǎn)。
教學(xué)難點(diǎn) 設(shè)計(jì)出單獨(dú)顯示興趣點(diǎn)的視頻。
教學(xué)準(zhǔn)備
廣播軟件、Python軟件、Anaconda 3軟件、Spyder開(kāi)發(fā)環(huán)境、計(jì)算機(jī)、攝像頭等。
教學(xué)過(guò)程
一、了解計(jì)算機(jī)視覺(jué)中的圖像原理
在計(jì)算機(jī)視覺(jué)中,如果我們對(duì)視野中的某一個(gè)位置感興趣,就要對(duì)該位置進(jìn)行單獨(dú)的提取和圖像處理。首先,我們要了解的就是圖像的數(shù)字化存儲(chǔ),也就是RGB彩色圖像的制作方法。
彩色圖像由一個(gè)三維數(shù)組組成,在Python中用[行像素范圍,列像素范圍,顏色通道號(hào)]來(lái)表示,例如:
img[10:20,0:100,0]=0
img[10:20,0:100,1]=255
img[10:20,0:100,2]=255
其中img變量中10:20表示10至20行的像素范圍,0:100表示0至100列的像素范圍,0表示藍(lán)色通道,1表示綠色通道,2表示紅色通道。藍(lán)色通道0,綠色、紅色通道255,混合出來(lái)的顏色就是黃色。
二、實(shí)驗(yàn)探究
實(shí)驗(yàn)1:攝像頭的視頻顯示
師:視頻顯示多張靜態(tài)圖片,按照一定的時(shí)間間隔不斷地刷新,也就是一幀一幀地播放圖片形成了視頻的效果。在Python中使用cv2.VideoCapture(0)函數(shù)可以讀取實(shí)時(shí)的視頻圖像并存儲(chǔ)到變量中,再把讀取到的變量通過(guò)cv2.imshow()函數(shù)顯示出來(lái),如此彈屏循環(huán)就實(shí)現(xiàn)了攝像頭拍攝的實(shí)時(shí)視頻圖像。在程序中,“ret, frame = capture.read()”表示一幀一幀讀取視頻圖像并存儲(chǔ)到frame變量中。“frame = cv2.flip(frame, 1)”表示將圖像鏡像翻轉(zhuǎn)。
教師下發(fā)程序代碼,學(xué)生進(jìn)行程序?qū)嶒?yàn),具體程序如下:
import cv2
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read()
frame = cv2.flip(frame, 1)
cv2.imshow('video', frame)
c = cv2.waitKey(10)
if c == ord('q'):
print("press q")
break
capture.release()
cv2.destroyAllWindows()
實(shí)驗(yàn)2:感興趣區(qū)域(ROI)
師:在圖像處理過(guò)程中,我們可能對(duì)某一特定區(qū)域感興趣,該區(qū)域稱(chēng)為感興趣區(qū)域(ROI)。例如,如果我們對(duì)圖1中的五角星感興趣,就可以用“img[70:170,460:590]”來(lái)表示,其中70:170指的是行的像素范圍,460:590指的是列的像素范圍,如圖2。
程序語(yǔ)句“interest=img[70:170,460:590]”的作用是裁剪范圍內(nèi)的圖像,其中70:170是行的范圍,460:590是列的范圍。“cv2.imshow('Interest',interest)”的作用是顯示裁剪后的interest存儲(chǔ)的圖像,窗口名稱(chēng)為“Interest”。
教師下發(fā)程序代碼,學(xué)生進(jìn)行實(shí)驗(yàn),具體程序如下:
import cv2
img=cv2.imread("YX2.jpg")
interest=img[70:170,460:590]
cv2.imshow('Interest',interest)
cv2.waitKey()
cv2.destroyAllWindows()
實(shí)驗(yàn)3:探究在視頻中如何進(jìn)行ROI的裁剪方法
教師引導(dǎo)學(xué)生進(jìn)行思考,通過(guò)實(shí)驗(yàn)1和實(shí)驗(yàn)2分析如何進(jìn)行視頻ROI的方法:把cv2.VideoCapture(0)函數(shù)讀取到的圖像進(jìn)行裁剪,然后新建一個(gè)窗口顯示出來(lái),窗口名稱(chēng)為“video interest”。具體程序設(shè)計(jì)如下:
import cv2
cap = cv2.VideoCapture(0)
while True:
flag, frame = cap.read()
frame = cv2.flip(frame, 1)
interest=frame[70:170,460:560]
cv2.imshow('video interest', interest)
if ord('q') == cv2.waitKey(40)
break
cap.release()
cv2.destroyAllWindows()
三、情景化項(xiàng)目研究
教師提出項(xiàng)目需求:學(xué)校門(mén)前安裝了固定機(jī)位的安保攝像機(jī),且攝像機(jī)不能移動(dòng)?,F(xiàn)在想對(duì)畫(huà)面中部分內(nèi)容進(jìn)行識(shí)別,但畫(huà)面中有很多無(wú)用的部分,影響了識(shí)別的效果,需要對(duì)識(shí)別的部分進(jìn)行單獨(dú)提取使用。
使用電腦攝像頭設(shè)備來(lái)模擬固定機(jī)位的安保攝像機(jī),請(qǐng)學(xué)生根據(jù)本節(jié)課的三個(gè)實(shí)驗(yàn)開(kāi)展自主研究,探究如何只顯示原始視頻指定位置的單獨(dú)畫(huà)面。教師要明確攝像頭畫(huà)面大小為480行×640列,需要單獨(dú)顯示整體的視頻畫(huà)面,窗口名稱(chēng)為“video all”。需要單獨(dú)顯示指定部分的畫(huà)面,窗口名稱(chēng)“video interest”。教師指定視頻畫(huà)面中,右上角區(qū)域范圍100×100的位置是本節(jié)課需研究的項(xiàng)目。
程序設(shè)計(jì)中右上角的100×100區(qū)域,并不能直接寫(xiě)進(jìn)程序,因?yàn)橐曨l畫(huà)面大小為480行×640列,左上角為(0,0),所以右上角的范圍為[0:100,540:640]。其中0:100是行的范圍,540:640是列的范圍。再使用實(shí)驗(yàn)2方法對(duì)采集的圖像進(jìn)行裁剪,完整程序如下:
import cv2
cap = cv2.VideoCapture(0)
while True:
flag, frame = cap.read()
frame = cv2.flip(frame, 1)
interest=frame[0:100,540:640]
cv2.imshow('video all', frame)
cv2.imshow('video interest', interest)
if ord('q') == cv2.waitKey(40):
break
cap.release()
cv2.destroyAllWindows()
在學(xué)生進(jìn)行項(xiàng)目研究的過(guò)程中,教師巡視并進(jìn)行單獨(dú)指導(dǎo)。若部分學(xué)生已完成右上角興趣區(qū)域的單獨(dú)顯示,教師可增加項(xiàng)目任務(wù)——單獨(dú)顯示視頻左下角200行×50列的區(qū)域,推算區(qū)域范圍。教師應(yīng)鼓勵(lì)學(xué)生挑戰(zhàn)更高的任務(wù)難度,分層遞進(jìn)教學(xué),促進(jìn)不同層次學(xué)生發(fā)展,鍛煉學(xué)生的應(yīng)變能力。
四、教學(xué)評(píng)價(jià)
使用項(xiàng)目驗(yàn)收單對(duì)學(xué)生的項(xiàng)目完成情況進(jìn)行驗(yàn)收,并給予相應(yīng)的分?jǐn)?shù)。評(píng)價(jià)標(biāo)準(zhǔn)共10分,分為是否實(shí)現(xiàn)單獨(dú)窗口顯示全部畫(huà)面(5分)、是否實(shí)現(xiàn)單獨(dú)窗口顯示右上角興趣點(diǎn)(2分)、窗口大小是否為100×100(1分)、是否實(shí)現(xiàn)單獨(dú)窗口顯示左下角興趣點(diǎn)(1分)、窗口大小是否為200×50(1分)等評(píng)價(jià)指標(biāo)。
教學(xué)反思
在本節(jié)課中的教學(xué)過(guò)程中,筆者努力落實(shí)新課程改革要求,讓學(xué)生自主發(fā)現(xiàn)問(wèn)題并解決問(wèn)題。本節(jié)課采用了情景化項(xiàng)目研究的形式開(kāi)展探究學(xué)習(xí),以圖像中的興趣點(diǎn)為主線展開(kāi)自主探究。視覺(jué)識(shí)別作為我校特色校本課程,充分利用現(xiàn)有的教學(xué)資源,結(jié)合當(dāng)前人工智能?chē)?guó)家戰(zhàn)略,培養(yǎng)學(xué)生的信息技術(shù)學(xué)科素養(yǎng)。利用知識(shí)的遷移引導(dǎo)學(xué)生發(fā)散思維,用已學(xué)知識(shí)解決更多的生活實(shí)際問(wèn)題,為國(guó)家培養(yǎng)科技人才做出自己的貢獻(xiàn)。
在課程實(shí)施的過(guò)程中,發(fā)現(xiàn)學(xué)生自主研究的能力偏弱,遇到未知問(wèn)題時(shí)對(duì)自己的能力不夠自信,不知道自行探究解決方法,存在坐等教師講解灌輸?shù)默F(xiàn)象,這也導(dǎo)致學(xué)生進(jìn)入研究狀態(tài)慢,課堂時(shí)間不夠用。本節(jié)課是學(xué)生情景化項(xiàng)目研究的第一次嘗試,后續(xù)的課程也會(huì)采用類(lèi)似的方法進(jìn)行自主研究,相信在學(xué)生適應(yīng)這種學(xué)習(xí)方式后,能夠提高課堂時(shí)間效率。