文中芳 孫新杰
摘 要:為了使人機(jī)交互更為自然、和諧,我們通過KNN算法對手寫體識別進(jìn)行了研究,手寫體識別是為了使計算機(jī)對手寫體進(jìn)行圖像預(yù)處理、基于數(shù)字圖像的特征提取以及數(shù)字串的分割等步驟后,讓計算機(jī)能夠識別人類通過手動書寫在輸入設(shè)備上的字符軌跡并且裝換為計算機(jī)所存儲的編碼,讓計算機(jī)更加智能地輔助我們的生活、辦公以及教學(xué)等各個方面。
關(guān)鍵詞:KNN;手寫體;識別
出生在20世紀(jì)90年代的我們,見證了我國科學(xué)技術(shù)、社會經(jīng)濟(jì)以及生態(tài)環(huán)境等領(lǐng)域的飛速發(fā)展。近幾年,“大數(shù)據(jù)”、“物聯(lián)網(wǎng)”以及“人工智能”等名詞已然是家喻戶曉,這是時代在進(jìn)步的必然趨勢,就如同十多年前“網(wǎng)上購物”是少數(shù)人知道且極少數(shù)人去嘗試的一種購物方式,而現(xiàn)在幾乎是人人都會“網(wǎng)上購物”,可稱得上是“家喻戶曉”。正是這些與計算機(jī)相關(guān)的科學(xué)技術(shù)地逐步普及與推廣,使得人們的生活變得越來越智能化、高效化、便捷化。當(dāng)人們在生活或工作中時,會時不時地進(jìn)行各種各樣的信息交流從而產(chǎn)生各式各樣的數(shù)據(jù),計算機(jī)則可以通過收集、分析這些數(shù)據(jù)后產(chǎn)生新的具有一定價值的數(shù)據(jù)。在這個數(shù)據(jù)以指數(shù)形式增長的時代,世界上中存在著大量的信息數(shù)據(jù)需要錄入計算機(jī)中,或存儲,或處理,收集到的全球海量數(shù)據(jù)經(jīng)過分析、處理等步驟后就會產(chǎn)生其相應(yīng)的價值(換句話說,萬物都可以使用數(shù)據(jù)來描述,而數(shù)據(jù)就是一種實物或者虛擬世界的抽象描述)。目前人們對于海量數(shù)據(jù)的快速輸入有著越來越迫切的需求,它已經(jīng)成為制約信息處理系統(tǒng)性能的關(guān)鍵。因此,如何提高各種信息的輸入速度?如何使得人機(jī)交互更加自然和智能?就要求計算機(jī)不斷地對手寫體識別技術(shù)加以研究,努力提高識別過程中的穩(wěn)定性和準(zhǔn)確性。
任何一項研究都有它存在的價值與意義,那么研究手寫體識別的理論意義在于,手寫體識別技術(shù)與人類的認(rèn)知能力和語言能力有著密切聯(lián)系,它要實現(xiàn)物與人的相連、物與物相連、人與人相連,在這個萬物相連的時代,計算機(jī)的自我優(yōu)化能力、機(jī)器的自我學(xué)習(xí)能力都在不斷地發(fā)展中,使得相關(guān)學(xué)科有著進(jìn)一步發(fā)展。而它的實用性價值在于,手寫體識別技術(shù)不斷地深入研究,該技術(shù)將一步步的滿足人們對人機(jī)交互的需求,滿足人們無紙化的需求,減少資源的浪費(fèi),于人們的生活中給人們帶來便捷,使得一些產(chǎn)業(yè)實現(xiàn)無紙化的鏈接,減輕地球的負(fù)擔(dān),使得計算機(jī)在生活中、學(xué)習(xí)中、工業(yè)中不斷地發(fā)展與壯大,并且它對擴(kuò)大計算機(jī)在社會中各行業(yè)的應(yīng)用具有重大的實際意義。
近年來,海內(nèi)外歷經(jīng)多年對手寫體識別技術(shù)的研究,人們?nèi)〉昧肆己玫膽?yīng)用性成果。手寫體識別存在著最大的問題便是人們所書寫的字體存在著很大的差異性,計算機(jī)無法做到像人類一樣通過“眼睛”來認(rèn)識這些有差異的手寫體(人工智能也正在致力于使計算機(jī)能夠像人類一樣通過“看”、“聽”、“說”、“觸”來實現(xiàn)人機(jī)交互)。本文基于機(jī)器學(xué)習(xí)的特點在大數(shù)據(jù)環(huán)境下對手寫體進(jìn)行準(zhǔn)確的識別,致力于把大數(shù)據(jù)、人工智能等技術(shù)運(yùn)用到手寫體識別的領(lǐng)域?qū)κ謱戵w進(jìn)行預(yù)處理以及特征提取,最終實現(xiàn)提高計算機(jī)對手寫體的識別精度與準(zhǔn)確率的目標(biāo)。本文采用KNN-近鄰算法設(shè)計了手寫體識別系統(tǒng)。該系統(tǒng)主要包括機(jī)器學(xué)習(xí)與識別兩個模塊,利用Python語言編寫相關(guān)代碼,且利用Python自帶的環(huán)境Anaconda與Windows10下的SQL server 2012(存儲數(shù)據(jù))來實現(xiàn)該系統(tǒng)的運(yùn)行。
1 系統(tǒng)主要概念
1.1 KNN-近鄰算法
KNN-近鄰算法是一種能夠?qū)崿F(xiàn)分類和回歸的算法之一,而該手寫體識別系統(tǒng)則是通過KNN-近鄰分類法來實現(xiàn)對數(shù)據(jù)進(jìn)行分類的功能,也就是給出一個已有的訓(xùn)練數(shù)據(jù)集,而現(xiàn)在有一個新的數(shù)據(jù),計算機(jī)并不知道它屬于那一種數(shù)據(jù),通過在已有的訓(xùn)練集中找出與該數(shù)據(jù)最近的K種數(shù)據(jù),在這K種數(shù)據(jù)中,那一種數(shù)據(jù)多則這個新的數(shù)據(jù)屬于數(shù)據(jù)較多的那一種數(shù)據(jù)即少數(shù)服從多數(shù)。根據(jù)這個原理,作出下圖示例:
如上圖所示,有兩類已知的不同樣本數(shù)據(jù),分別用綠色的小菱形和黃色的小圓形表示,而圖正中間的那個紅色的五角星所標(biāo)示的數(shù)據(jù)則是新的未知的數(shù)據(jù)。而現(xiàn)在要做的便是將這種新的未分類的數(shù)據(jù)點通過K值來確定它屬于現(xiàn)有的已分類哪一種數(shù)據(jù),接下來我們將根據(jù)KNN-近鄰的思想來對綠色圓點進(jìn)行歸類,確定它是屬于那一類別的數(shù)據(jù)。當(dāng)K=5時,距離紅色五角星最近的5個點分別是3個綠色的小菱形這一類和2個黃色的小圓形這一類,基于KNN算法,最終判定紅色的這個未分類數(shù)據(jù)屬于綠色的小菱形這一類。
當(dāng)K=12時,綠色圓點的最鄰近的12個數(shù)據(jù)點是7個黃色小圓形和5個綠色的小菱形,基于KNN算法,判定紅色的這個未分類點屬于黃色小圓形這一類。
通過上面的例子,我們知道如何給新的數(shù)據(jù)點來進(jìn)行歸類,即在一定的條件下也就是K的取值,再利用“少數(shù)服從多數(shù)”的原理,便可以對新的未分類的數(shù)據(jù)點進(jìn)行歸類。
1.2 歐幾里得距離
歐幾里得距離即是用來測量在平面上兩點之間的距離即當(dāng)平面上存在兩點a與b時,若a(x1,y1) b(x2,y2),則歐幾里得距離d=((x1-x2)^2)*((y1-y2)^2)。
1.3 二值化(即矩陣化)
圖像二值化就是通過使用0、1來表示圖片上的各個像素點后,再將這些由0、1數(shù)值構(gòu)成的“圖片”按照原本像素點的順序安放到一個二維數(shù)組中,最后要達(dá)到讓整個圖像呈現(xiàn)出只有黑與白的視覺效果。
1.4 需要訓(xùn)練集
在手寫體識別系統(tǒng)中,我們需要不斷的訓(xùn)練產(chǎn)生一個訓(xùn)練集使得機(jī)器識別手寫體。如同我們學(xué)習(xí)知識一樣,一開始我們是通過不斷地去看、寫、讀、說來掌握新知識。對于人來說,這是比較容易的,但是對于計算機(jī)來說它只能通過不斷地計算、存儲與之相關(guān)的數(shù)據(jù),來掌握大量的數(shù)據(jù)。它是無法做到像人類那樣自動地去認(rèn)知。在系統(tǒng)中需要錄入大量的與之相關(guān)數(shù)據(jù),不斷地訓(xùn)練,產(chǎn)生一個訓(xùn)練集使得機(jī)器快速的計算并且得出結(jié)果。在后面,若是條件允許我們可以將所有常見的漢字、數(shù)字、符號、字符甚至是那些少數(shù)名族特有的語言文字錄入一個數(shù)據(jù)庫中,這樣識別的效果會更好。
1.5 通過KNN算法建立機(jī)器識別
如何使用kNN近鄰算法對人類書寫的數(shù)據(jù)進(jìn)行分類,目前我們構(gòu)造的手寫體識別系統(tǒng)還只能夠識別0至9的純數(shù)字,手寫的數(shù)字經(jīng)過一系列處理后,使其具有相同的大小、色彩,且高與寬為10×10像素,它的效果圖如下:
這是一個10×10的矩陣圖,它的顯示出的結(jié)果則是1。
1.6 系統(tǒng)框架
手寫體識別的過程如下圖2所示,通??梢苑譃轭A(yù)處理、特征提取以及數(shù)字串分割等模塊。預(yù)處理于手寫體識別系統(tǒng)中的之主要功能,是對原始圖像進(jìn)行去噪或灰度等特定處理?,F(xiàn)今,我們常常采用光電掃描儀來對原始圖像進(jìn)行掃描,以此獲原始圖像之二維圖像信號。因為人們的書寫方式和書寫習(xí)慣的不同,所以不同的人書寫的字體都存在著差異性。這些差距主要體現(xiàn)在手寫體的字體大小、字體間距又或者是字體內(nèi)距,若要對其進(jìn)行分割有著較大的難度。由此可見,手寫數(shù)字串的分割是其中最重要的環(huán)節(jié),是提高機(jī)器對手寫體識別率的關(guān)鍵。同樣地,對原始圖像的去噪處理也是預(yù)處理中亟為重要重要的環(huán)節(jié)之一,系統(tǒng)不但需要從人類書寫的字體中精確地切分字符圖像,而且需要濾除掉有粘連的邊框又或者是由于在切分時的不正確而引入的其他字符筆劃和隨機(jī)出現(xiàn)的墨點等使前景點增加的噪聲。特征則是可以分為結(jié)構(gòu)特征以及統(tǒng)計特征兩大類,提取的特征決定了分類器的選擇,與之對應(yīng)的識別方法便有結(jié)構(gòu)方法和統(tǒng)計方法。
總而言之,通過手寫體數(shù)字識別原理可知,手寫體識別技術(shù)主要有以下幾種:
(1)圖像預(yù)處理;
(2)基于數(shù)字圖像的特征選擇和提取;
(3)數(shù)字串的分割。
2 系統(tǒng)實現(xiàn)
3 算法測試
當(dāng)用鼠標(biāo)在相應(yīng)區(qū)域?qū)懴聰?shù)字9的時候,左側(cè)區(qū)域出現(xiàn)相應(yīng)的數(shù)字,實現(xiàn)了手寫體識別:
4 結(jié)語
文中介紹了基于KNN-近鄰算法實現(xiàn)的手寫體識別系統(tǒng)。該系統(tǒng)主要通過對手寫體0至9中的數(shù)字進(jìn)行圖像預(yù)處理、基于數(shù)字圖像的特征提取以及數(shù)字串的分割等一系列的處理后,使計算機(jī)能夠?qū)θ祟愂謱懙臄?shù)字進(jìn)行學(xué)習(xí)和識別,當(dāng)我們在系統(tǒng)中對0至9的數(shù)字進(jìn)行一定量的訓(xùn)練后,該系統(tǒng)則可以較為準(zhǔn)確的識別出手寫輸入的數(shù)字,由于人與人之間的手寫體存在著巨大差異,這就要求我們必須在系統(tǒng)中對機(jī)器進(jìn)行大量的訓(xùn)練,來提高計算機(jī)對手寫體識別的準(zhǔn)確率。目前,我們只實現(xiàn)了對0至9的純數(shù)字的識別,待日后進(jìn)一步學(xué)習(xí)后,希望能夠?qū)崿F(xiàn)對所有手寫體的識別,而不僅限于純數(shù)字。