當你用手機時,你有用過手寫的輸入嗎?相信很多人用過,不過我想知道原理的人應該不多,讓我為大家介紹一下這個技術的大概。

文字辨識是圖形辨識的一個應用,中文和英文的辨識方法可以相同,也可以有區別,為何存在這個區別,不是本文的主題,就不說了。

要瞭解文字辨識的技術,我們要先瞭解辨識的東西是什麼,能夠手寫的手機螢幕其實是一個數位板,根據螢幕上手寫區域的大小,我們可以將之想成m * n 的數位影像,影像的大小就以128 * 128為例來說明好了,每一個點稱為像素,由於手寫對每一個像素只有經過與未經過,所以每一像素的值也就只有0和1,當我們的手指劃過時,所有經過的位置上面的像素值都會變成1;還有一個想法是當手指劃過時,上面的座標值會被儲存在成一個序列,我們就把他們叫做軌跡好了,軌跡上面有我們寫的順序資訊,也可以稱為動態資訊,這個資訊對辨識英文和數字有用,但用來辨識中文字,死路一條,理由之一是大家手寫的筆畫順序不同。好了,簡單一句話,你的輸入就是一個二元的數位影像啦。(再囉唆一下,二元就是0和1.)

辨識的概念也很直覺,將輸入的影像特徵和預先建立好的字典裡的M個影像特徵比較(或稱為模型庫──我不想用這個字,一般人讀起來比較「硬」),誰比較像,這個輸入的文字就是誰。這裡的「比較像」在手寫中文字辨識時,可以找出前十名(可以調整)最像的,然後由使用者點選他要的,如果前十名沒有輸入的字,只好再輸入一次,我最近使用iPad的經驗,第一、二名的辨識結果已經蠻高的,這辨識率當然和螢幕大小和手寫字工不工整有關係了(iPhone螢幕相對的比較小,比較不好寫)。一般說來常用的中文字有五千多個,我們就取整數6000好了,也就是說字典裡已經建立好6000個(上面的M)特徵值。

再來談談我們要比較的特徵是什麼,一般來說,不會直接用影像相比,系統開發者必須找出他們認為最為有效的特徵,這裡跟大家介紹兩種特徵。當我們手寫時,也就是在輸入一張128 * 128的影像,我們可以將之分成64(8*8)個格子,每一個格子有256(16*16)個像素點,我們取特徵都是針對每一個格子進行。我要介紹的第一種特徵稱為「交叉點」,我們針對每個格子等距離的劃三條橫線、三條縱線,然後計算每一條直線和輸入筆畫相交的數目,再將這六個值加起來,這就是這個格子的第一個特徵。第二個特徵一樣劃六條直線(三橫、三縱),然後記錄在何處碰到輸入筆畫,一樣的將這六個值加總,這就成為這個格子的第二個特徵。一個字不是有64個格子嗎,那每個格子有2個特徵,所以一個字就有128個特徵值了。再強調一下,不同的開發者會使用不同的特徵。

再來談一下怎樣計算相不相似(相似度),用一個最簡單的方法來說明好了(雖然很簡單,但對中文的辨識很有效),不論輸入的字或字典裡存放的字,我們都轉換成128個特徵值(數學上稱為向量或矩陣),將輸入影像和第i個字典裡儲存文字的128個特徵值對應相減,其差值(取絕對值)相加後就是輸入文字或第i個字典文字的差異度,將6000個字典中儲存文字的差異度全部算出來後,前10名差異度最小的就是我們要的結果,簡單吧,這就是文字辨識,用到的計算只有加加減減;你也許會發現這裡有好多的計算,但現在的電腦處理器速度很快,不成問題。

辨識手寫的文字必須考量不同人的書寫方式不同,一個人不同時間寫的字也不一樣,為了處理這個問題,我們在將文字影像切割成64個格子時,會採用非均勻式的切割方法,此為後話,本文暫且不談。最後,我想提一下,應用我這裡介紹的方法時(這個方法稱為「統計式文字辨識」),文字越複雜,特徵值會越有特色,越容易找到我們要的答案,所以,辨識中文不會比辨識英文或數字難!

 

(初稿完成於20110222)

創作者介紹

思在樹人

快樂的園丁 發表在 痞客邦 PIXNET 留言(0) 人氣()