基于 C++和 Python 实现计算机视觉
计算机视觉Final Project Part 1
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%:

在阿里云 GPU实例下进行自制的数据集的训练,对训练集自身进行测试准确率为99.87%:

对自制的测试集进行训练,准确率为99.82%:

对给出的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行的字迹歪斜:

从而导致程序在进行投影法分割时会将其错误地识别为一行,从而导致了错误的长输出。
识别前的各个步骤的输出图像结果也已保存在压缩包中。
计算机视觉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张图片测试数据集的准确率对比如下:

MNIST 训练的正确率为67.1%,自制训练集的准确率为99.8%。
在自制训练集下训练效果较高,对每个图片生成的 xlsx 文件效果如下。

