• 沒有找到結果。

第三章 研究設備與方法

3.1 硬體設備與軟體

3.2.6 字元影像標準化

⎡ ⎤

= ⎢⎣− − − × ⎥⎦ (3.3)

其中 height 與width則分別為字元影像的高度與寬度。

‹ 字元擷取:最後經由三個白色區塊旋轉過後的的重心位置,便能輕易地將兩 個字元影像從標籤中分離出來,這邊使用的函式一樣是 cvSetImageROI。

3.2.6 字元影像標準化

圖 3-19 字元影像標準化,(a) 代測字元,(b) 直方圖等化,(c) 轉換成正方形形式,

(d) 調整大小 3.2.7 字元影像辨識

一般的光學字元辨識其辨識率的高低常取決於特徵擷取的優劣,然而隨著機 器學習演算法的成熟發展,越來越多的研究開始使用這些新方法來進行字元辨 識,而且其辨識率大多都超過80% (Avi-Itzhak et al., 1995; Ashwin and Sastry, 2002;

Shanthi and Duraiswamy, 2009) , 如 類 神 經 網 路 系 統 應 用 在 光 學 字 元 辨 識 等 (Avi-Itzhak et al., 1995)。而本研究選用 SVM 的原因如下,首先,其他機器學習的 方法存在一些缺點,例如類神經網路需要非常大量的訓練資料來建立其辨識模 型,並且找到的最佳解有可能是區域性的最佳,而非全域性最佳,並且受參數影 響非常大;再來,SVM 有很多優點,相較於類神經網路,它所需要的訓練資料量 較少,並且沒有區域性最佳解問題,同時還有多種核函數可以使用 (包含 linear、

ploy 以及 RBF 等),最重要的是,它的辨識率非常高。本研究使用的 SVM 技術為 台大資訊工程學系林智仁老師所開發的 libsvm v2.89所提供 (Chang and Lin, 2001)。

(一) 模型訓練

本研究先使用攝影機捕捉大量的標籤影像,並且經過上述影像前置處理後,

可得到許多單一字元的影像,接著將這些字元依照其在標籤上的位置分成左邊字 元與右邊字元。由於本系統共設計兩種標籤貼紙,包含阿拉伯數字標籤以及英文 字母標籤,因此需對兩種標籤作各自的辨識處理。

(b) (a)

(c) (d)

在阿拉伯數字標籤方面,使用手動操作方式為左邊字元0到9,各挑選出400張 影像,以此當作模型訓練的資料庫,並以影像中的所有點的灰階值當作特徵,然 後 使 用 libsvm v2.89 內 建 的 多 元 分 類 器 建 立 一 個 分 類 模 型 ( 請 參 考 網 站

http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf),此模型能夠對分辨待測字元最接 近0到9中的哪一個數字,各項參數設定如下:kernel_type = LINEAR,C (cost) = 1000。接著分別為左邊數字0到9建立各自的訓練資料庫,以0為例,使用400張顯 示為0的影像,其標示 (label) 為0,以及396張非0的影像 (1到9各44張),並標示為

−1。接著同樣使用 libsvm 為這些訓練資料庫建立一個二元分類模型,這些模型能 夠分別判斷待測的字元是否跟自己所代表的數字一樣,參數設定如下:kernel_type

= LINEAR,C = 1000。最後並以同樣的方式為右邊字元0到9建立多元與二元分類 模型。

在英文字母標籤方面,同樣使用手動操作方式為左邊字元 A 到 Z (沒有包含 Q),各挑選出400張影像,以此當作模型訓練的資料庫。接著利用 PCA 演算法將 影像資料降至30維,並以此當作特徵,然後使用 libsvm 建立一個多元分類模型 (kernel_type = RBF,gamma = 5 10× 8,C = 1000),在標示方面,A 標示為1,B 標 示為2,依此類推,一直到 Y 標示為25,比較特別的是 Z 標示為0。接著同樣分別 為左邊字母 A 到 Z 建立各自的訓練資料庫,以 A 為例,使用400張顯示為 A 的影 像,其標示為1,以及384張非 A 的影像 (B 到 Z 各16張),並標示為1,接著同樣 使用 libsvm 為這些訓練資料庫建立一個二元分類模型 (kernel_type = RBF,gamma

= 5 10× 8,C = 1000)。最後並以同樣的方式為右邊字母 A 到 Z 建立多元與二元分 類模型。

(二) 字元辨識

經過影像前置處理後,每一個標籤都能夠得到左右兩個字元影像,接著便需

元使用右邊的分類模型),而根據選用標籤的不同 (阿拉伯數字與英文字母標籤),

其辨識細節會有一點小小的差異。

在辨識阿拉伯數字標籤方面,每一個待測的字元首先會經過多元分類器,判 斷其最接近0到9中的哪一個數字,接著再利用其相對應的二元分類器確認其辨識 結果。如果兩個數字的確認結果皆正確,那就能夠使用簡單的公式算出標籤的號 碼為多少:

標籤號碼 = 左邊字元×10 + 右邊字元 (3.4) 而如果其中一個數字確認結果錯誤,則:

標籤號碼 = 1 (3.5) 在辨識英文字母標籤方面,每一個待測的字元同樣會先經過多元分類器,判 斷其最接近 A 到 Z 中的哪一個字母,接著再利用其相對應的二元分類器確認其辨 識結果,如果兩個數字的確認結果皆正確,則標籤號碼如下:

標籤號碼 = 左邊字元×26 + 右邊字元 (3.6) 如果其中一個字元確認結果錯誤,則:

標籤號碼 = 1 (3.7) 結合方程式 (3.4) 與 (3.6),可以將標籤號碼改寫如下:

標籤號碼 = 左邊字元×S + 右邊字元 (3.8) 其中 S 為使用標籤的進位制 (阿拉伯數字標籤中 S 為10,英文字母標籤中 S 為26),其整體流程如圖3-20所示。

圖 3-20 字元辨識流程

3.3 判斷蜜蜂進出演算法

雖然使用支持向量機進行字元辨識的分辨率非常高,但仍有出錯的時候。因 為蜜蜂在往來蜂箱時常常身體會帶點傾斜,因此也會讓背上的標籤貼紙在攝影機

開始

多元分類器

二元分類器 輸入左邊字元

結束 多元與二元分類

結果是否相同

多元分類器

二元分類器 輸入右邊字元

多元與二元分類 結果是否相同 是

標籤號碼 = -1 標籤號碼 = -1

否 否

標籤號碼 = 左邊 字元×S+右邊字元 是

必須建立一套演算法,讓系統在少量數字辨識錯誤的情況下,仍能做出正確的判 斷。

首先,對於每一個數字號碼,其代表一隻蜜蜂,而每一隻蜜峰都有一個資料 結構用以儲存資料,其中包含時間計數器 (timer)、出現次數 (showed times)、狀態 (state) (蜂箱內或外)、以及第一眼看到的位置 (first sight) 與最後一眼看到的位置 (last sight) 等 (如圖3-21所示)。

圖 3-21 蜜蜂資訊結構

當一隻蜜峰出現時,系統會將其時間計數器設定成一個常數 K,而往後的每 一個畫面,如果此號碼繼續出現,系統會再度將其時間計數器設定為 K,而如果 沒有出現,那其時間計數器便會減一,如果此號碼一直沒有再出現,則其時間計 數器便會慢慢被減至0。而從時間計數器一開始被設定為 K,到最後慢慢減至0,

便是一隻蜜蜂從出現到消失的完整過程。因此我們知道,在這段過程中,一定存 在第一眼看到此號碼的位置與最後一眼看到它的位置,而且在這段過程中,若此 號碼出現的次數低於常數 T,表示這段過程有可能是系統辨識錯誤所致,因此可將 之忽略;而若此號碼出現的次數大於常數 T,那麼我們只要計算 last sight 與 first sight 的 y 座標差異 d,就能知道這個號碼的蜜蜂是離開還是進來蜂箱。如圖3-22,

其中 const_d 是用來判斷蜜蜂離開還是進來蜂箱的常數。

bee info { state;

showed times;

timer;

first sight;

last sight;

}

圖 3-22 判斷蜜蜂進出法則

Initial:

for i = 0 to 99

bee[i].timer = 0;

bee[i].showed times = 0;

bee[i].first sight = (0,0);

bee[i].last sight = (0,0);

end for

for every frames for i = 0 to 99

if (bee[i].timer > 0)

bee[i].timer = bee[i].timer - 1 ; else {

d = bee[i].last sight.y - bee[i].first sight.y;

if ( (d > const_d) && (bee[i].showed times > T) ) bee[i].state = Outside;

if ( (d < - const_d) && (bee[i].showed_times) > T) ) bee[i].state = Inside;

bee[i].first sight = (0,0);

bee[i].last sight = (0,0);

bee[i].showed times = 0;

} end for

for every detected bee number k if (bee[k].timer == 0)

bee[k].first sight = detected point;

else

bee[k].last sight = detected point;

bee[k].timer = K;

bee[k].showed times = bee[k].showed times +1;

end for

end for

第四章 結果與討論

本章節將對本影像系統做各項性能分析與討論,並且透過設計許多小型實驗 來驗證其結果,最後實際應用本系統於蜂箱,對蜜蜂外出覓食的行為進行記錄與 分析。

4.1 系統性能分析

4.1.1 系統硬體設備

本系統之硬體設備已建立完成,其中包括系統外殼、蜜蜂通道的設計製作、

紅外線投光器與攝影機的架設等,系統外觀如圖 4-1 所示,其中圖 (a) 為大蜂箱 系統,圖 (b) 則為小蜂箱系統。

圖 4-1 系統組成外觀,(a) 大蜂箱系統,(b) 小蜂箱系統

目前蜜蜂通道是由3mm 的透明壓克力板所製成,如圖4-2 (a) 所示,大蜂箱系 統之通道共設有7個出入口,其中每個通道的長寬高尺寸為35 mm×8 mm×6 mm。

圖4-2 (b) 則為小蜂箱系統之通道,共設有5個出入口,每個通道的長寬高尺寸同樣 為35 mm×8 mm×6 mm。

(a) (b) 上蓋

訊號線 蜂箱

出口 系統外殼

圖 4-2 蜜蜂通道,(a) 大蜜蜂通道,(b) 小蜜蜂通道

圖4-3為紅外線投光器與攝影機之架設,大蜂箱系統使用厚度2 mm 的鋁片製成 固定基座,接著將紅外線投光器與攝影機裝置於各自的固定基座上,其中攝影機 高度約為70 mm,如圖 4-3 (a) 與 4-3 (b) 所示。而小蜂箱系統則直接將紅外線投 光器與攝影機裝置在系統外殼上,攝影機高度同樣約為70mm,如圖 4-3 (c) 與 4-3 (d) 所示。

(a) (b)

圖 4-3 紅外線投光器與攝影機,(a) (b) 大蜂箱系統中紅外線投光器與攝影機架 設,(c) (d) 小蜂箱系統中紅外線投光器與攝影機架

4.1.2 系統程式

本節將對系統程式作更進一步的介紹與展示,包含程式介面與功能介紹等,

系統程式的介面主要分成三個區域,其中包含一般區、參數區以及資料分析區。

如圖4-4所示,一般區又可分成兩個部分,一個主要負責啟動攝影機,另一個 則是開啟錄製好的蜜蜂影片,其中攝影機拍攝畫面如圖4-5所示。

(a) (b)

(c) (d)

圖 4-4 系統程式一般區

圖 4-5 攝影機拍攝畫面

參數區分成 3 個部份,如圖 4-6 所示,由上而下分別是偵測蜜蜂視窗邊界的設 定、標籤相關參數設定以及偵測字元大小設定等。

啟動攝影機

啟動攝影機 並錄製拍攝影片 開啟影片

圖 4-6 系統程式參數區

資料分析區可以對蜜蜂進出資訊進行分析,繪出個別蜜蜂在一天中出入蜂箱 的情形,並同時計算其出入次數以及在蜂箱內外所待的時間比例。

圖 4-7 系統程式資料分析區 視窗邊界

標籤參數

偵測字元

4.1.3 標籤字元辨識

本系統使用開源碼 OpenCV 所提供的函式 cvHoughCircles 偵測圓形標籤貼 紙,在標籤字元辨識上使用 SVM 當作分類器,由於本系統共設計兩種標籤貼紙,

故以下分兩部分討論。

(一) 阿拉伯數字標籤

本研究針對標籤中的左右字元分別做其辨識模型,因此各使用4000張字元影 像當作資料庫,接著透過 libsvm 建立分類模型。在測試影像方面,左右字元各另 外使用4018張影像做為辨識率估算之用。最後在參數設定上,使用 linear 核函數,

設定參數 C = 1000,並使用影像灰階值當做特徵,其結果如表4-1所示,辨識每張

表4-2 數字標籤使用 RBF 核函數辨識結果

各使用10000張字元影像當作資料庫,接著透過 libsvm 建立分類模型。在測試影像 方面,左右字元各另外使用10099張影像做為辨識率估算之用。

相關文件