1 作業要求

輸入圖像為

普通 A4紙,上有手寫的如下信息:

  • 學號
  • 手機號
  • 身份證號

所有輸入格式一致,數字不粘連,但是拍照時角度可能不正。

輸出

  • 每個主要步驟的輸出結果,包括對 A4紙的矯正結果,行的切割,以及單個字符的切割結果。
  • 對 A4紙上信息進行識別,以 xlsx 格式保存。

2 程序主要流程

提交的程序包含 C和 Python 編寫的兩個部分。C程序包含了 A4紙的矯正、A4紙行信息的識別、數字的切割以及使用 Adaboost 對數字信息的識別。Python 部分則使用 TensorFlow庫通過卷積神經網絡對數字信息進行識別,與 Adaboost 相比識別效果有較大的改進。對於每個給出的測試數據集都根據目錄結構給出了 SHELL 腳本。腳本將自動調用Python 與 C++程序,程序執行中將所有數字圖像分到識別出的對應的文件目錄下,然後生成一個記錄每個圖片的信息的 csv 文件,最後腳本將調用一個 Python 程序將 csv 文件轉為 xlsx 文件。

1.3 程序各個主要步驟簡述

紙矯正

紙的識別與矯正部分由第七次作業的代碼修改而來,主要的流程如下:

  • 使用K-means算法根據圖像像素值分為兩個聚類,輸出圖像的高灰度聚類置為255,地灰度聚類置為0.
  • 使用區域生長去除圖像中除中心部分的紙張之外的其他紙張及亮度較高的部分。
  • 遍歷圖像,將所有8鄰域均為255的點去除,輸出圖像僅保留 A4紙的邊緣
  • 使用霍夫變換求出 A4紙的四條邊,獲取4個角點座標
  • 根據4個角點座標計算從原圖到矯正後圖像的單應性矩陣,對生成圖像的每個座標值使用單應性矩陣計算原圖中的座標,使用雙線性插值計算出矯正後的像素值。

程序將把對每一張圖片矯正後的 a4紙圖像保存在執行目錄的 a4文件夾下。

自適應二值化處理

在第7次作業中 Adaboost 識別圖像前會先將 A4紙圖像進行全局固定閾值二值化處理,由於當時測試數據較少,可以找出一個適合所有測試數據的閾值;但在本次作業中測試數據較多,而且很多圖片有陰影區域造成影響,無法找出一個適合所有的全局閾值,因此改用了局部的自適應閾值二值化處理。其原理是對每一個像素點計算以其為中心的一定範圍內的像素點平均值,若該像素點值大於平均值的一定閾值比例,則認為將該點置為255,否則置0,在本次因為使用了 MNIST 數據集訓練,一樣地將高於閾值的點置0,其餘置255.

自適應二值化的處理結果將保存在程序執行目錄下的thresh 文件夾中。

圖像分割

對圖像的分割方法為首先對圖像沿着邊緣去除灰度值為255的區域,這一步的目的是去除在 A4矯正過程中可能將一部分背景包括在了圖像邊緣對圖像分割所造成的影響。對處理後的圖片,使用投影法進行分割,首先求出垂直方向下每一行的有效像素個數,根據獲得的數據即可求出圖像中數字的行數以及每行的位置。然後,對每行像素作水平方向上每一列的有效像素數求和,即可求得每行上數字的個數和位置。然而上述過程僅在理想狀態下有較好的效果,測試數據中卻有許多字跡歪斜或者粘連的情況,當這種情況出現時分割效果變差,因此對於分出的每一個數字還要再次嘗試進行分割獲取實際的單個數字,然而這種做法的缺點是最終獲得的每行的數字可能順序不準確,而且因為不能識別每行中到底有多少個數字,最終生成的結果中對應行的數字是不正確的。

圖像分割的結果將以“圖片序號-行數-行中位置.jpg”的格式 存入segmentations文件夾中。

Adaboost進行數字識別

Adaboost 通過將多個將多個稍微好於隨機的弱分類器進行組合獲得一個強分類器,在作業7中已經進行了使用,此次僅包括了 Adaboost 的預測部分的代碼,使用的數據為作業7中訓練獲得的數據。

Adaboost 獲得的結果將會把識別的圖像根據識別出的數字放入AdaboostResult文件夾中對應數字的目錄,若無法識別則放入-1目錄。同時會在 AdaboostResult/xlsx目錄下對每個圖片生成一個 csv 文件,包含了對應圖像中每一行識別出的數據。在執行目錄下還會生成一個 Adaboost-result.csv文件,以給出的例子格式保存每張圖的前三行數據。

卷積神經網絡進行數字識別

在本次程序中另外使用了TensorFlow來訓練卷積神經網絡對數字進行識別。卷積神經網絡的主要組成部分包括卷積層,池化層和密集層。相對於傳統的BP神經網絡,卷積神經網絡同樣使用反向傳播的方法進行訓練,但是僅有密集層為全連接。卷積神經網絡中的卷積層作用為對圖像中的每個子區域應用卷積核,從而輸出圖像特徵。池化層一般跟在卷積層後,作用為降低卷積層輸出的特徵圖維度,減少神經網絡的處理時間,處理方法有取區域的最大值或平均值進行池化。

在本次代碼實現中主要參考了 TensorFlow 官方教程進行 CNN 的構建,通過對 MNIST 數據集進行訓練後獲得的結果對MNIST 測試集準確率達到97.87%,但是對於作業中的數據實際的準確率目測僅有30%左右。因此,在代碼下 CNN 文件夾中還包含了從給出的圖片中經過圖片分割後選出的部分數字作為訓練集進行訓練,以及560個數字作為測試集,經過訓練後對MNIST 測試集準確率為39%,對自制的測試集準確率為99.8%,對作業中圖片數據的識別效果遠好於此前使用 MNIST 數據集時的效果。

4 文件結構

提交的文件根目錄下中包含三個文件夾:ImageData 文件夾包含了作業第一部分的10張測試圖片和測試結果,part2Data文件夾包含了第二部分的各個文件夾的原圖片與測試結果,project文件夾中包含 C++與 Python 的代碼文件。

AdaboostPredict 文件夾中包含了 A4紙矯正,圖像分割以及 Adaboost 進行識別的代碼,使用 cmake 構建,要求系統具有 OpenCV 環境。編譯指令如下:

# Linux, Mac
cmake .
make -j 4

# Windows (Visual Studio Command Line Prompt)
cmake -G "NMake Makefiles" .
nmake

C++代碼中各個部分作用如下:

  • utils.h與utils.cpp文件包含多個類進行圖像處理時都可能用到的函數
  • OpenCV_utils包含 CImg 到 OpenCV 的 Mat 的轉換方法以及對測試數字圖像數據的預處理
  • Adaboost 文件夾中包含於 adaboost 有關的代碼,執行時從執行目錄下的 mnist 文件夾中讀取訓練好的 Adaboost 數據。
  • a4文件夾下包含 a4紙矯正相關的代碼文件
  • segmentation 文件夾下包含與數字的分割相關的代碼文件。
  • 主程序的使用方法如下:
  • ./recognition lower higher [skipA4] [skipAdaboost]
  • 其中 lower 代表文件的起始序號,higher 代表最後一個文件的序號-1,程序將從執行目錄下的testcases文件夾讀取圖片並輸出結果至對應文件夾。若指定skipA4參數,則程序直接從 a4文件夾讀取已矯正的輸入,不進行矯正操作,若指定skipAdaboost,則程序不會進行 Adaboost 識別數字的操作。

CNN 目錄下包含了使用卷積神經網絡的 Python 代碼,各個文件作用如下:

  • tf_cnn_mnist_test.py,
    tf_cnn_mnist_train.py
    以上2個文件分別對MNIST 數據集進行測試與訓練,訓練結果保存在mnist 文件夾下。
  • tf_cnn_mySet_test.py,
    tf_cnn_mySet_train.py
    以上2個文件分別對自制的數據集進行測試與訓練,訓練結果保存在myTrainSet 文件夾下。
  • tf_cnn_mnist_predict.py
    tf_cnn_mySet_predict.py
    以上兩個文件提供對傳入的數字使用 MNIST 訓練的模型以及自制數據集訓練的模型進行數字識別的函數,若直接運行則從命令行讀取文件名列表並返回所有接受的文件名對應的圖片所識別的數字。
  • tf_cnn_mnist_run.py
    tf_cnn_mySet_run.py
    以上兩個文件使用方法為./py lower higher,lower 和 higher 參數意義為文件序號的範圍,程序將讀取上面 C++程序分割完後的數字文件進行識別並將圖片放入結果中對應的文件夾中,最後生成 csv 文件。

此外,在每個測試數據下都放置了5個 SHELL 腳本文件,作用如下:

  • clean.sh: 清理運行程序所生成的所有文件
  • init.sh: 運行程序前需先運行此腳本生成所有文件夾,否則運行過程中會出錯。
  • adaboost.sh執行完整的 adaboost 識別數字程序,並自動將生成的 csv 轉為 xlsx,需在運行參數中指定圖片文件序號範圍。
  • CNN_mnist.sh:執行 C++代碼中除 Adaboost 以外的部分,並調用 Python 使用 MNIST 數據集訓練的模型進行識別輸出結果,需在運行參數中指定圖片文件序號範圍,若已生成過 A4矯正則可通過 skipA4參數跳過 A4矯正。
  • CNN_mnist.sh:執行 C++代碼中除 Adaboost 以外的部分,並調用 Python 使用 自制的數據集訓練的模型進行識別輸出結果,

5 程序運行結果

CNN 訓練的結果如下:

在搭載 GTX 965M的 Windows 筆記本下進行MNIST數據集訓練結果,準確率為97.87%:

Ubuntu 計算機視覺開發環境配置(Python/C++)自用_amateur_Ada

在阿里雲 GPU實例下進行自制的數據集的訓練,對訓練集自身進行測試準確率為99.87%:

Ubuntu 計算機視覺開發環境配置(Python/C++)自用_amateur_Ada_02

對自制的測試集進行訓練,準確率為99.82%:

Ubuntu 計算機視覺開發環境配置(Python/C++)自用_amateur_#python_03

對給出的10張圖片測試獲得的xlxs文件如下:

Adaboost(X代表無法識別的數字):

filename

studentID

phone

citizenID

0.jpg

17717791

1X7577X7X11

47X57X1773XX17111777

1.jpg

15771117

171X41557X3

XXX515171177256775

2.jpg

17X71777

17775115777

571711111517X77717

3.jpg

17771777

17991115X75

975179177137977771

4.jpg

15X71X71

1X1X7X77111

7713X73XX777517115

5.jpg

75XX7105

1X61766X171

8451X117711736113X

6.jpg

51151575

51757757777

XX7777777771717557

7.jpg

17X717X1

17167X7771X

1X5155117117251571

8.jpg

15X91377

1X17X7XX37X70177X517X1177XX7757X7777X

15776X11X15

9.jpg

17771577

15777137777

7771771751567X9719

可以看到 Adaboost 經常出現無法識別數字的情況,而且識別到的數字準確率非常低。

CNN(MNIST訓練)

filename

studentID

phone

citizenID

0.jpg

13331333

35211153951

45823713324810331318

1.jpg

15351180

15282851081

882313177843263351

2.jpg

15331327

13811818371

241121183612233312

3.jpg

13331344

13311115818

533132177532277321

4.jpg

15331367

13633753831

971281237333313835

5.jpg

15371366

15617154121

886101171810252138

6.jpg

13331351

33117315355

445233300051510258

7.jpg

15351052

15550553783

550925177112221012

8.jpg

15331348

1415456033320152341841188431180022218

15526411418

9.jpg

15331391

18733181323

350105174105092319

可看到識別準確率已高了許多,把4識別為9,把9識別為7,把5識別為3的情況在錯誤中比較多。

CNN(自制訓練集):

filename

studentID

phone

citizenID

0.jpg

15331333

93777132461

45675713744616331378

1.jpg

15331180

13260831041

442313199803273059

2.jpg

15331029

13827418392

441721199612273012

3.jpg

15331344

15521145678

350102199602294321

4.jpg

15331364

13632552831

441281234503093435

5.jpg

15331646

13619154721

445301199810252734

6.jpg

13331351

13719274306

445202200001010058

7.jpg

15331052

15560563983

350426199712221012

8.jpg

15331348

1415456033320162341941198461180022218

15626411418

9.jpg

15331347

18950182323

350106199705042314

可以看到使用自制的數據集訓練的 CNN 可以達到較高的識別率。

另外可以看到的一個問題是在第9張圖中,由於其第2,3,4行的字跡歪斜:

Ubuntu 計算機視覺開發環境配置(Python/C++)自用_amateur_Ada_04

從而導致程序在進行投影法分割時會將其錯誤地識別為一行,從而導致了錯誤的長輸出。

識別前的各個步驟的輸出圖像結果也已保存在壓縮包中。

計算機視覺Final Project 報告-Part 2

Part 2給出的圖片共有4個文件夾,對於每個文件夾的內容將其改為Part 1時測試圖片文件夾的結構,並將圖片重新命名為從0開始的序號後運行腳本進行測試。

1. Bad Samples

1.1 Adaboost結果

sh adaboost.sh 0 13

filename

studentID

phone

citizenID

0.jpg

2

21

72

1.jpg

2

1131X057

791X71171703050015

2.jpg

171177X79

177X1767177

1X7777177X17X71717

3.jpg

11X37702

117X7727757

3771XX177111111771

4.jpg

1X77958

113X7844

1315X53X700

5.jpg

5574777X

17972XX711

XX117717X573171575

6.jpg

7X757577

7177775X1671

5176515771X177X777

7.jpg

16391142

180XX5816XX

XXX8091X371X76833X

8.jpg

7X775179

1X5XX773X5X7

77X1711777717X7177

9.jpg

51771X11

174177X71173

X7X57917161X19171

10.jpg

76XX77X7

11171275661

6X1X071X42172X1167

11.jpg

163X6760

157X6XX2176

XX6XX1XX70X30863X

12.jpg

27X17801X8X3

X7216X11771

7901X1156X57X113X

1.2 CNN(MNIST訓練)結果

sh CNN_mnist.sh 0 13 skipA4

filename

studentID

phone

citizenID

0.jpg

2

27

72

1.jpg

7

15352081

881426177883010016

2.jpg

153353023

15331336318

143101117012011211

3.jpg

16343522

13363523337

445102177311111331

4.jpg

8838388

15340547

13322032320

5.jpg

18340030

1342213611

991002111603183554

6.jpg

16340010

135010382218

440681111808032011

7.jpg

16340148

18022581548

945202177312068337

8.jpg

16573178

155625163327

322121177801155111

9.jpg

16370113

154110809173

94080211161012151

10.jpg

18360223

13127227668

441202194310281083

11.jpg

16340260

15738982156

45038199802308633

12.jpg

521168018883

30815341024

13087815538284024

1.3 CNN(自制數據集)結果

sh CNN_mnist.sh 0 13 skipA4

filename

studentID

phone

citizenID

0.jpg

4

44

04

1.jpg

4

15352057

441426199893010016

2.jpg

153543002

15531336318

143701199012011319

3.jpg

16340022

13060520009

445102199811111001

4.jpg

9834484

16340044

13322632720

5.jpg

16340050

1342273619

441002197603183659

6.jpg

16390090

135090582299

440661199608032019

7.jpg

16340144

18022581694

445202199712068339

8.jpg

16340178

154626166529

522101199801155711

9.jpg

16390219

154920804195

44080219961012151

10.jpg

76340228

13129229664

441202194710281065

11.jpg

16340260

15976482106

45078199802306633

12.jpg

424142048495

40516341024

73044115626264024

在第一張圖中數字是橫向寫的,其他圖片中有的包含了中文,程序無法識別,因此部分輸出數據不正確。

2.  Good-samples

2.1 Adaboost

sh adaboost.sh 0 25

filename

studentID

phone

citizenID

0.jpg

77737771

77711651771

X71117117X77157X1X

1.jpg

15591797

1X7X117761X

77177977XX7XX777991

2.jpg

1X75711X

177XX11X777

1111737771071X7X71

3.jpg

1X7X1771

1X51XXX7751

7177711111777277177

4.jpg

77717159

1XXX16X57X1

71117X1X7777716171

5.jpg

15717777

1XX77777X17

1111751771X7X71777

6.jpg

11717711

1X117X51751

XXX777117X11111X1X

7.jpg

1X157777

1X777715711

XX77911111717X7775

8.jpg

11755777

17XX7171577

1177571X5717711171

9.jpg

117X77XX

17XX9111777

X27177151157177317

10.jpg

177177X1

171X5777777

5717X7175777177177

11.jpg

1XXX1145

175X7X7711X

7X7X77177977077157

12.jpg

1XXXX11X

171979X7367

99XX1517477XX17XX5

13.jpg

17751175

1177711XX57

1X71711XX77711X115

14.jpg

1773X111

11177X15711

111711171111771117

15.jpg

117X1117

1X5177X1771

5X51X7117577771171

16.jpg

1X3X71X5

1377X771X11

11XX671157175X7X71

17.jpg

167X1751

17X95X71771

7675X1111X11771777

18.jpg

1971X155

15711XXX96X

717X111X1X7X717711

19.jpg

7X31X757

157X1X77X7X

XX71X11XX15X175X7X

20.jpg

17715157

17517777177

X5175111X77517171X

21.jpg

1717X777

15X71X91197

1X731111X771711337

22.jpg

11X57751

177X7551571

XXX777117771775717

23.jpg

1575X757

17X777X1575

X771771X5577117717

24.jpg

12X70311

17575717X11

11017313775X7X7754

2.2 CNN(MNIST數據集)

sh CNN_mnist.sh 0 25 skipA4

filename

studentID

phone

citizenID

0.jpg

15313144

15018151334

440113137102185518

1.jpg

15331335

13431153615

5315728177366388828

2.jpg

15352037

13577065328

480103200103165331

3.jpg

15340011

13572855323

9805011731055231254

4.jpg

16380091

18631165581

881117188810286928

5.jpg

16380355

18920033513

381911177802081025

6.jpg

16390068

18811881381

480101111311181812

7.jpg

15743711

18815386311

840181177105145135

8.jpg

16370584

13160301431

210581134803116111

9.jpg

16343584

13824111338

443101177803155310

10.jpg

15380079

15320121802

454241171802307825

11.jpg

15340107

15877822175

440802111808050731

12.jpg

16370116

13128367363

474888174004012365

13.jpg

18330124

13731818583

440811174103118111

14.jpg

15380131

16333825213

098341851111131131

15.jpg

15390133

13585095305

440102117802113111

16.jpg

18340195

13013353833

440382134180299833

17.jpg

18380181

15120821531

350181117811051213

18.jpg

15340150

18200553318

942000147803255511

19.jpg

18380170

15521433406

440481174805128853

20.jpg

15350133

15108058800

350581143804131311

21.jpg

16340203

12124231350

745381144701011333

22.jpg

18340246

15387551238

440185177331015213

23.jpg

10440135

15626138365

740222137131110810

24.jpg

16340311

11121315661

110108133804111823

2.3 CNN(自制數據集)

sh CNN_mySet.sh 0 25 skipA4

filename

studentID

phone

citizenID

0.jpg

15322244

15018751234

440112199702185678

1.jpg

15331035

13981153616

4510724199766780826

2.jpg

15350039

13599063728

440103200103165501

3.jpg

16340017

13592833323

4405091997054201234

4.jpg

16340042

18637665541

441129199810246429

5.jpg

16340055

18420053672

441427199802081020

6.jpg

16340064

18819861381

440902199811161612

7.jpg

16340072

18825086611

440181199705245130

8.jpg

16340085

13700401982

440582199803216174

9.jpg

16340089

13424111354

440107199803150310

10.jpg

16340094

15920227802

454242199802303826

11.jpg

16340109

15899822193

440602199808050931

12.jpg

16340116

13128567363

444888199004012345

13.jpg

16340129

13902878689

440421199703118117

14.jpg

16340131

16777826213

448771669111221132

15.jpg

16340133

18565043306

440102199802173111

16.jpg

16340145

13073059897

440582199710244597

17.jpg

16340147

15920821537

360781199811057293

18.jpg

16340150

18200653378

442000199803265511

19.jpg

16340190

15521477906

440981199805126853

20.jpg

16340193

15106058800

350581199804121217

21.jpg

16340203

17724221560

445381199901011333

22.jpg

16340246

15989001234

440785199701016213

23.jpg

16340285

15626298865

440222199702110810

24.jpg

16340311

19927575667

110108199804161823

3. 先身份證後手機

3.1 Adaboost

sh adaboost.sh 0 8

filename

studentID

phone

citizenID

0.jpg

1X7X8717

7X1X5117X5117X7777

179727XXX41

1.jpg

11117717

2177311XX177X37676

1XX17721X79

2.jpg

76X7XX77

X17177757671117X73

77771X7977X

3.jpg

1XXX7577

XX377717717717XX25

13115771777

4.jpg

1X797117

751771157577777774

1X717777175

5.jpg

1XXX7117

77717111771715755X

177717151171

6.jpg

161X72XX

51372717X1X11X7517

157XX6X77XX

7.jpg

161X07X5

7X1XX11XXX010111X1

13X73XX455X

3.2 CNN(MNIST)

sh CNN_mnist.sh 0 8 skipA4

filename

studentID

phone

citizenID

0.jpg

18383323

441381177811233732

13432257341

1.jpg

18340025

412331144802330838

13333211433

2.jpg

16380087

415127117657115743

15313154385

3.jpg

15380111

442166177820162225

13513161771

4.jpg

18343182

342501177110280124

18365357821

5.jpg

18370210

500101177310121588

153211358871

6.jpg

16340282

513028113808140013

15783904228

7.jpg

18340842

941881139301011121

13233234853

3.3 CNN(自制數據集)

sh CNN_mySet.sh 0 8 skipA4

filename

studentID

phone

citizenID

0.jpg

16340023

441581199811275972

13432769341

1.jpg

16340025

412731199802230678

13823241935

2.jpg

16340049

470129199609175943

15077704386

3.jpg

16340177

442766199820162220

18575761997

4.jpg

16340182

342501199710280924

18365359627

5.jpg

16340210

500101199710129544

145213554471

6.jpg

16340282

513028199808140013

15989004228

7.jpg

16340292

441441199901011121

13277774859

4. Others

4.1 Adaboost

sh adaboost.sh 0 35

filename

studentID

phone

citizenID

0.jpg

17X1X0X1

1X71119617X

37XX3X177171X12211

1.jpg

11775715

11X5175X511

71117111111715171X

2.jpg

1X571915

11X11X711X7

711XX1176752X1X711

3.jpg

17771777

175X1571711

7111X71XXX1175X711

4.jpg

1533141X

1X1X7200703

27062X1XX77XX8717

5.jpg

1574311XX

1X1X7275717

4X1171117701757615

6.jpg

17571175

117171XX771

717X77111X17776X71

7.jpg

715X65XX

157XX707111

XX711517177X6X61X1

8.jpg

12347739

171X0177277

X61XXX577771775151

9.jpg

11117577

115X77X1755

757X57X71771117175

10.jpg

163X7X51

13X5X3XX128

1X12X31X1X17767X21

11.jpg

755XX67X

17X7X775615

XX775771717777XXXX

12.jpg

757X7711

111157X5X17

171X751111X1557711

13.jpg

71XX3587

1X677X51XX7

447555177113515XX3

14.jpg

16X777XX

17576667XX1

9716XX144717131X67

15.jpg

51177117

77777777777

7175757X7X7X717777

16.jpg

16741171

1X177751X75

517777177217175377

17.jpg

1X575737

11727725677

7177XX777706X3157X

18.jpg

16117171

111X71771171X177X7X116X175711

111X71771171X177X7X116X175711

19.jpg

1X377117

1777XX71774

3X6X316177X631001X

20.jpg

1111X175

17X7111757X

XXX17711X7X767X112

21.jpg

1X121171

17X75219737

X7XX751X1X1771115X

22.jpg

15777775

17771757X71

5X1779577767177715

23.jpg

173X2771

19156777711

71163X11X701X5XX19

24.jpg

111X031X

132XX157715

7101X7115X07772277

25.jpg

167X5777

7176772777X6

9XX771716711577777

26.jpg

75X1073X

15177X777X7

1X1X011XX77125101X

27.jpg

763X7157

15370371516

XX650X1375576X71XX

28.jpg

11767X7517X165X11X77111171X1X717176X77

11767X7517X165X11X77111171X1X717176X77

11767X7517X165X11X77111171X1X717176X77

29.jpg

113X7717

110716721XX

19X1X6171711XX5677

30.jpg

167XXX71

17X256X7X16

4X79761X74X78767X9

31.jpg

715X73X1

135177574777

171772757511XX13X5

32.jpg

76711177

1921111X777

1X7197145X16X1X077

33.jpg

1X3X1076

XX557X76770

37737X7X7777XX7677

34.jpg

1XX9XXX7

1XX1X611170

XX01XX1X1XXX01X0X0

4.2 CNN(MNIST)

sh CNN_mnist.sh 0 35 skipA4

filename

studentID

phone

citizenID

0.jpg

12330023

18530124417

340826177501048610

1.jpg

12353085

13571255111

111102111705151315

2.jpg

13531111

18811981138

413051176012334731

3.jpg

15331223

15521220011

513102177611218111

4.jpg

15331817

18842200741

22062514730604317

5.jpg

153530043

15810230101

440103171301110618

6.jpg

16370005

13307088211

510822177812228881

7.jpg

18384728

18888800111

440114881239551885

8.jpg

16340032

15180112270

241440803181806148

9.jpg

16387346

13726683228

221351177711110116

10.jpg

18380359

13358323523

881883188811352421

11.jpg

16340016

18426377823

441371187111234316

12.jpg

16390011

18118723548

891224111131310311

13.jpg

15343324

13424531237

442555187812515155

14.jpg

16370088

15626283331

381602144310131350

15.jpg

15395117

17812385818

440838588604145123

16.jpg

16340121

13020551614

312125181611123310

17.jpg

11330121

11120823518

510108111806223111

18.jpg

16370128

17840134985121333388809235088

17840134985121333388809235088

19.jpg

15340135

15120807717

350133141108210038

20.jpg

16970173

13813083115

973111137303033112

21.jpg

15340141

15825212730

450005177712018180

22.jpg

16340116

13026261624

193202118101123116

23.jpg

18348206

13628120708

111622137701010018

24.jpg

16580215

13247618865

810135117808232211

25.jpg

16340120

113628240586

370385144803280038

26.jpg

16540224

15720822583

841301149011201012

27.jpg

16340225

15420821586

440503177808150888

28.jpg

11963832188962081875281331888011126438

11963832188962081875281331888011126438

11963832188962081875281331888011126438

29.jpg

18380180

18018622388

940106178111255613

30.jpg

15340250

13335802886

430426147408058148

31.jpg

18340361

132130215770

330206177111061321

32.jpg

16581007

13231113077

140183148306230088

33.jpg

15341006

18520578170

330324114803240437

34.jpg

15388080

15303011190

460105148003014020

4.3 CNN(自制數據集)

sh CNN_mySet.sh 0 35 skipA

filename

studentID

phone

citizenID

0.jpg

12330029

18520124374

340826199501046610

1.jpg

12353045

13631256719

211102191405151515

2.jpg

13331217

18819481138

419001996072734451

3.jpg

15331220

15521220011

513102199611276111

4.jpg

15331419

18902200701

22062519970604717

5.jpg

153450043

15820250709

440107199701270618

6.jpg

16340006

13309088299

510522199812226441

7.jpg

16340024

18988800111

440119981234567890

8.jpg

16340032

15980192290

241440803199806148

9.jpg

16340046

13725583658

461301199711110711

10.jpg

16340054

13354325528

441883199811050421

11.jpg

16340056

18026599823

441301199711290666

12.jpg

16340071

18718023344

441224199701010011

13.jpg

16340084

13424501234

442000199812310760

14.jpg

16340088

15626287371

441602199710131750

15.jpg

16340113

13822385829

440808088604190723

16.jpg

16340121

15020557674

372925199611123310

17.jpg

11340121

15120823518

510106199806223516

18.jpg

16340128

14840124485171393988809235084

14840124485171393988809235084

19.jpg

16340135

15920809974

360739199906210038

20.jpg

16340139

15625085724

445222199709053912

21.jpg

16340141

15626212930

460006199912018760

22.jpg

16340186

15626267424

445202199707123175

23.jpg

16340206

15626120907

511622199901070018

24.jpg

16340216

13247655463

610125199808222217

25.jpg

16340220

112626290586

370285199805280038

26.jpg

16340224

15920822568

441301199811207012

27.jpg

16340225

15920821586

440507199805150828

28.jpg

11463432184462081490291379849011126958

11463432184462081490291379849011126958

11463432184462081490291379849011126958

29.jpg

16340240

18028622384

440106199711255613

30.jpg

16340250

17775602846

430426199906056198

31.jpg

16340269

132150254990

350206199711061327

32.jpg

16341005

13231112094

140183199706230049

33.jpg

16341006

18520576970

330324199803240439

34.jpg

16348080

15902011130

440106199603014020

可觀察到在自制訓練集下訓練的 CNN 的識別效果最好,然而當圖片中存在數字字跡歪斜時圖像分割仍會將多行數字切割為一行數字,從而使獲得的結果出現問題。

使用MNIST訓練的 CNN 模型與使用自制的數據集訓練的模型對560張圖片測試數據集的準確率對比如下:

Ubuntu 計算機視覺開發環境配置(Python/C++)自用_amateur_數據集_05

MNIST 訓練的正確率為67.1%,自制訓練集的準確率為99.8%。

在自制訓練集下訓練效果較高,對每個圖片生成的 xlsx 文件效果如下。

Ubuntu 計算機視覺開發環境配置(Python/C++)自用_amateur_數據集_06