Computer System Lab === ### Lab 1 FTIR #### Problem 1 - Handwritten Digit Recognition 1. utils.py ``` find_tap(frame , threshold_grayscale = 127 , threshold_area = 100) ``` + 參數 : + frame : 型別為numpy array,代表攝影機畫面。 + threshold_grayscale : 型別為int,若像素的值小於threshold_grayscale,就將其值改為0,反之則改為255。 + threshold_area : 型別為int,若發光區域的面積大於等於threshold_area,就判定其為有手指接觸,反之則判定為沒有手指接觸。 + 回傳值 : + (numer_of_tap , center) : 型別為tuple,其中number_of_tap的型別為int,代表有多少個手指接觸的區域,center的型別為list,長度為number_of_tap,並且其中的每一個元素之型別為tuple,代表每一個手指接觸區域的中心座標。 + 實作 : + 先將攝影機畫面轉為灰階圖片,再使用threshold_grayscale將其轉為二元圖片,接著使用skimage.measure.label函式找出圖片中的連通區域,接著計算每一個連通區域的面積,若其面積大於等於threshold_area,代表其為一個手指接觸區域,此時再計算該區域中所有像素座標的平均值,作為該區域的中心座標。 2. digit_recognition.py ``` test(image , parameter = 'CNN.h5') ``` + 參數 : + image : 型別為numpy array,代表要進行辨識的圖片,必須為灰階圖片,並且其中的像素值必須為0或1。 + parameter : 型別為str,代表CNN的參數路徑。 + 回傳值 : + predict : 型別為int,代表CNN預測的結果。 3. VideoCapture.py + 實作 : + 宣告一個大小與攝影機畫面相同且元素皆初始為0的numpy array,稱之為track。首先會先使用前述的find_tap函式找出圖片中手指接觸區域的中心位置,若有手指接觸,便將track中手指接觸區域的中心位置的值記為1,並記錄此時的時間做為最後一次有手指接觸的時間點,而若沒有手指接觸,則計算現在的時間與最後一次有手指接觸的時間之間的差,若時間差超過2秒(代表數字已經寫完,或是根本就沒有寫任何數字)並且track內有不為0的元素(代表有寫入數字),便使用前述的test函式進行辨識並輸出預測的結果,最後將track內的所有元素皆改為0。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up