Python徒手實現(xiàn)手寫數(shù)字識別—大綱

寫在前面

其實我之前寫過一個簡單的識別手寫數(shù)字的程序辫继,但是因為邏輯比較簡單硼婿,而且要求比較嚴苛锌半,是在50x50大小像素的白底圖上手寫黑色數(shù)字,并且給的訓練材料也不夠多寇漫,導致準確率只能五五開拳喻。所以這一次準備寫一個加強升級版的,借此來提升我對Python處理文件與圖片的能力猪腕。

這次準備加強難度:

  1. 被識別圖片可以是任意大腥叱骸;
  2. 不一定是白底圖陋葡,只要數(shù)字顏色是黑色亚亲,周圍環(huán)境是淺色就行;
  3. 加強識別手寫數(shù)字的邏輯腐缤,提升準確率捌归。

因為我還沒開始正式寫,并且最近專業(yè)課程學習也比較緊迫岭粤,所以可能更新的比較慢惜索。不過放心,代碼質量肯定是不會下降的剃浇,我會盡我所能寫的邏輯明確巾兆、通俗易懂點猎物。

所以這次面向的人群是擁有一定Python基礎角塑,對數(shù)學算發(fā)有一點了解(識別圖像的算法嘛)的人蔫磨。

但畢竟我不是專業(yè)的,也沒有看那么多論文圃伶,所以我這里運用的算法僅僅是我一個粗淺的想法堤如,只是為了練手而已。如果和實際應用脫節(jié)窒朋,還望莫怪搀罢。

當然,如果諸位有什么比較好的想法侥猩,可以在下方評論或者私信我魄揉,我們可以探討一下,相互進步拭宁。

整體思路

大綱

對圖片的預處理

在最開始的時候,我們假設只擁有一個訓練庫瓣俯,里面是從0到9的手寫數(shù)字圖案若干組杰标。

所以我們首先應該將這些圖案讀入程序中,然后運用某種方式保存好彩匕,用來后面識別圖片腔剂。

這里的圖案我們假設是大小不一的,里面手寫的數(shù)字也是有大有小驼仪。所以我們可以將包住手寫數(shù)字圖案的最小矩形給裁剪出來掸犬,然后將裁剪出來的圖案統(tǒng)一給拉伸成相同大小的圖案。

以上操作得出一個矩陣绪爸,這個矩陣的值是圖案的灰度值湾碎。對于訓練用的圖片和被檢測的圖片我們都是這樣處理。

圖像識別的算法處理

我這里想用兩個方法來讓數(shù)字識別準確點:

  1. 識別所寫數(shù)字的“洞數(shù)”奠货;
  2. 將圖片轉為1xn的向量介褥,然后根據(jù)根據(jù)訓練圖片分出的類對被識別圖片圖片進行分類。

洞數(shù)就是某個數(shù)字是否有閉合的曲線递惋,比如說7沒有洞柔滔,6有一個洞,8有兩個洞萍虽。所以我們根據(jù)洞數(shù)可以分成以下三類

  • 0洞:1, 2, 3, 4, 5, 7
  • 1洞:6, 9, 0
  • 2洞:8

但是因為各種手寫差異睛廊,比如說6, 9, 8之類的沒有閉合,4上面閉合杉编,所以會導致下面這種可能情況

  • 0洞:1, 2, 3, 4, 5, 6, 7, 9
  • 1洞:6, 8, 9, 0
  • 2洞:8

雖然說這樣分類0洞占大多數(shù)超全,但是聊勝于無咆霜。

對于將圖片轉為向量的意思就是將圖片原本的二維矩陣展開稱為一維向量。這個用numpy的函數(shù)可以可以很簡單的實現(xiàn)卵迂。

對于這個分類裕便,下面我就簡單的講一下原理。

假設我們在二維平面上有兩個點 A = (1, 1) 和 B = (5, 5) 见咒,我現(xiàn)在再放一個點 C = (2, 2) 偿衰,那么請問, C 點離哪一個更近改览?

學過初中數(shù)學的都會知道肯定是離 A 點更近下翎。所以我們換一種說法,我們現(xiàn)在有兩個類A和B宝当,A類中包括了點 (1, 1) ,B類中包括了點 (5, 5) 视事,所以對于點 (2, 2) ,它可能屬于哪一類庆揩?

因為這個點離A類的點更近一點俐东,所以它可能屬于A類。這就是結論订晌。那么對于3維空間虏辫,A類是點 (1, 1, 1) 和B類是 (5, 5, 5) ,那么對于點 (2, 2, 2) 肯定也是屬于A類锈拨。

可以看出砌庄,我們這里是將兩個點的距離來作為判斷屬于哪一類的標準。那么對于我們將圖片拉成的1xn維向量奕枢,他實際上投影到n維空間上就是一個點娄昆,所以我們將訓練向量分成10類,分別代表十個數(shù)字缝彬,那么被識別數(shù)字靠近哪一個類萌焰,那說明它有可能屬于這一個類。

那么我們這里可以假設對于被識別向量谷浅,列出距離他最近的前十個向量分別屬于哪一類別杆怕,然后根據(jù)名次加上一個權重,并計算出一個值壳贪。該值代表了可能是屬于哪一個類陵珍,因此這就是我們得出的最終的一個結果——被識別手寫數(shù)字圖片的值。

難點

保存已訓練圖片的向量违施。這一條我想就直接保存在csv文件中互纯,每一次運算時先判斷是否有新的訓練圖片加入,如果有磕蒲,則把新的圖片向量也存入csv文件中留潦。若沒有只盹,則直接讀取所有向量保存在一個大矩陣中用于計算。

將手寫數(shù)字從背景中分離兔院。因為我這里令手寫數(shù)字為黑色(灰度值為0)殖卑,其他背景色盡量為,所以就令灰度值大于某個界限(如50)的點全部為255(白色)坊萝,其余不變孵稽。這樣子只要非255,那就是手寫數(shù)字的點十偶。

識別手寫數(shù)字的洞菩鲜。這個有算法,搞過程序設計競賽的應該會了解惦积。具體我就不細講了接校,大概就是利用遞歸之類的去尋找。

求向量距離狮崩。這個更簡單了蛛勉,求解每一個訓練向量與識別向量的距離就行,只不過當訓練向量比較大的時候可能比較慢睦柴。

總結

以上就是全部思路诽凌,如果諸位有更好的想法,歡迎評論/私信我爱只,讓我們一起相互學習進步,謝謝招刹。

如果你喜歡的話恬试,請點個喜歡哦~

源代碼與GitHub

我之前寫的舊版本我會發(fā)在我的GitHub上,同時新版本的源代碼也會同時在上面進行更新疯暑,所以諸位有興趣看我之前寫的比較渣的舊版本训柴,可以點進去看一下哦。

戳進去->我的識別手寫數(shù)字的Github鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末妇拯,一起剝皮案震驚了整個濱河市幻馁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌越锈,老刑警劉巖仗嗦,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異甘凭,居然都是意外死亡稀拐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門丹弱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來德撬,“玉大人铲咨,你說我怎么就攤上這事◎押椋” “怎么了纤勒?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隆檀。 經常有香客問我摇天,道長,這世上最難降的妖魔是什么刚操? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任闸翅,我火速辦了婚禮,結果婚禮上菊霜,老公的妹妹穿的比我還像新娘坚冀。我一直安慰自己,他們只是感情好鉴逞,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布记某。 她就那樣靜靜地躺著,像睡著了一般构捡。 火紅的嫁衣襯著肌膚如雪液南。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天勾徽,我揣著相機與錄音滑凉,去河邊找鬼。 笑死喘帚,一個胖子當著我的面吹牛畅姊,可吹牛的內容都是我干的。 我是一名探鬼主播吹由,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼若未,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倾鲫?” 一聲冷哼從身側響起粗合,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乌昔,沒想到半個月后隙疚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡磕道,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年甚淡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡贯卦,死狀恐怖资柔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情撵割,我是刑警寧澤贿堰,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站啡彬,受9級特大地震影響羹与,放射性物質發(fā)生泄漏。R本人自食惡果不足惜庶灿,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一纵搁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧往踢,春花似錦腾誉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘦癌,卻和暖如春猪贪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讯私。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工热押, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斤寇。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓桶癣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抡驼。 傳聞我的和親對象是個殘疾皇子鬼廓,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容