现有一个数字手写体识别问题,手写数字识别方法
手写识别(3)数字分割,识别1。比较简单的数字分割方法是根据统计的灰度对图像进行分割。首先统计每一行的灰度值,将遇到的空白区间作为拆分行,然后用同样的方法拆分列,从而确定拆分。但很明显,如果数字密集或者稍微倾斜,这种方法就会出现问题。
我写的是用bfs区分,先展开,然后对所有未标记的黑点遍历一次bfs,把同一个连接块当作一个数,然后同时标记为bfs,这样就区分成一个框了。同时我注意到数字“5”的横向宽度可能会偏离主体。这时候考虑所有长宽比增加几倍的盒子(因为普通数字的长宽比很宽),找最近的盒子合并。
效果:
2.最基本的数字识别是SVM,但普通的SVM是无效的。为了提高效果,有必要使用hog进行特色工程。
一种简便的方法是用Keras构造神经网络,训练MNIST数据集。网上也有很多教程,但是这里用的是CNN。
#loaddata(x_train,y_train),)X_test,Y _ test)=mnist . load _ data(# reshape tobe[samples][pixels][width][height]X _ train=X _ train . resen . re one two eight,28)。astype(float 32))x _ train=x _ train/255 x _ test=x _ test/255 x _ train=numpy . round)x _ train onehotencodeoutputsy _ train=NP _ utils . to _ categorial(y _ train)y _ y createmodelmodel=sequential)model . add)conv2d)32),5,5),input_shape=).activation= relu (model . add(max pooling 2d(pool _ size=(2))(model . add)dropout)0.2))activation= relu )(model . add(dense(num _ classes,activation= soft max )(compile model . compile))com come metrics=[ accuracy ])return model # buildthemodelmodelmodel=Baseline _ model(# themodel validation _ data=(x batch _ size=200)# finalautationofmodelmodelsoderboses=0)Print(基线误差3360%)。
char命令[1000];FILE *fp /*要运行的命令是buf */string python _ order= python digit _ rec . py FILE _ name;sprintf(command,sizeof)命令)、python _ order . c _ str);/*执行预置命令,读取命令的标准输出*/FP=popen(command, r );If(null==FP) perror(popen执行失败!);退出(1;}printf(完成);而且数码图像保存默认是28*28。图像保存的话,找到对应的盒子,用一个比盒子略大的正方形矩阵,把盒子里的内容,也就是数字,复制到一个长方形里。即使两个框中有重复的区域,在框中的黑色像素上标记什么并不重要。将矩形大小保存为28*28的矩形。
3.最终结果包括原始图片中标识为四个角的数字。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。