图像处理 手写体英文字母的目标检测与识别 实验报告

您所在的位置:网站首页 英语字母图像图片 图像处理 手写体英文字母的目标检测与识别 实验报告

图像处理 手写体英文字母的目标检测与识别 实验报告

2024-06-18 07:47| 来源: 网络整理| 查看: 265

获取本实验的项目代码和实验报告,请>=点击此处=1000向量的映射。

  ②特定样本下的微调 :训练网络参数   采用训练好的AlexNet模型进行PASCAL VOC 2007样本集下的微调,学习率=0.001(PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签);mini-batch为32个正样本和96个负样本(由于正样本太少);修改了原来的1000为类别输出,改为21维【20类+背景】输出。

[2.2.3] SVM分类

  通过上述卷积神经网络获取候选区域的特征向量,进一步使用SVM进行物体分类,关键如下:

  使用了一个SVM进行分类:向SVM输入特征向量,输出类别得分;用于训练多个SVM的数据集是ImageNet数据;将2000×4096维特征(2000个候选框,每个候选框获得4096的特征向量)与20个SVM组成的权值矩阵4096×20相乘(20种分类,SVM是二分类器,每个种类训练一个SVM,则有20个SVM),获得2000×20维矩阵表示每个建议框是某个物体类别的得分;分别对上述2000×20维矩阵中每列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些候选框。

[2.2.4] 边框修正

  使用一个回归器进行边框回归:输入为卷积神经网络pool5层的4096维特征向量,输出为x、y方向的缩放和平移,实现边框的修正。在进行测试前仍需回归器进行训练。   在2014年R-CNN横空出世的时候,颠覆了以往的目标检测方案,精度大大提升。对于R-CNN的贡献,可以主要分为如下方面:   使用了卷积神经网络进行特征提取;使用bounding box regression进行目标包围框的修正;   但是,R-CNN仍然有一些问题:   耗时的selective search,对一张图像,需要花费2s;耗时的串行式CNN前向传播,对于每一个候选框,都需经过一个AlexNet提取特征,为所有的候选框提取特征大约花费47s;三个模块(CNN特征提取、SVM分类和边框修正)是分别训练的,并且在训练的时候,对于存储空间的消耗很大。

[2.3] Fast R-CNN算法介绍

  面对R-CNN的缺陷,Ross在2015年提出的Fast R-CNN进行了改进,概述Fast R-CNN的解决方案:   首先采用selective search提取2000个候选框RoI;   使用一个卷积神经网络对全图进行特征提取;   使用一个RoI Pooling Layer在全图特征上摘取每一个RoI对应的特征;   分别经过为21和84维的全连接层(并列的,前者是分类输出,后者是回归输出) Fast R-CNN通过CNN直接获取整张图像的特征图,再使用RoI Pooling Layer在特征图上获取对应每个候选框的特征,避免了R-CNN中的对每个候选框串行进行卷积(耗时较长)。

[2.4] YOLO v1算法介绍

  这是继RCNN,fast-RCNN和faster-RCNN之后,rbg(RossGirshick)针对DL目标检测速度问题提出的另外一种框架。YOLO V1其增强版本GPU中能跑45fps,简化版本155fps。

[2.4.1] YOLO的核心思想

  YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别;   faster RCNN中也直接用整张图作为输入,但是faster-RCNN整体还是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了,而YOLO则采用直接回归的思路。

[2.4.2] YOLO的实现方法

  将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

  其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。   请添加图片描述 每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。

[3] 程序实现 [3.1] 程序需求分析

  随着计算机视觉方向的发展与各种开源库的涌现,目标检测与图像识别的步骤也越来越规范并且趋于简单化。   本次大作业采用Pycharm编辑器,应用Python的OpenCV图像处理库,基于深度学习的卷积神经网络来识别图像中的手写的大写英文字母。具体功能步骤是:对图像进行切片、目标检测、图像识别、图像定位、识别出来的字母重新写入到图片中。

[3.2] 程序开发技术介绍 [3.2.1] PyCharm编辑器

  PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。同时支持Google App Engine,支持IronPython。这些功能在先进代码分析程序的支持下,使PyCharm成为Python专业开发人员和刚起步人员使用的有力工具。

  PyCharm的主要功能有:   1、编码协助:其提供了一个带编码补全,代码片段,支持代码折叠和分割窗口的智能、可配置的编辑器,可帮助用户更快更轻松的完成编码工作。   2、项目代码导航:该IDE可帮助用户即时从一个文件导航至另一个,从一个方法至其申明或者用法甚至可以穿过类的层次。若用户学会使用其提供的快捷键的话甚至能更快。   3、代码分析:用户可使用其编码语法,错误高亮,智能检测以及一键式代码快速补全建议,使得编码更优化。   4、Python重构:有了该功能,用户便能在项目范围内轻松进行重命名,提取方法/超类,导入域/变量/常量,移动和前推/后退重构。   5、支持Django:有了它自带的HTML, CSS 和 JavaScript编辑器 ,用户可以更快速的通过Djang框架进行Web开发。此外,其还能支持CoffeeScript, Mako 和 Jinja2。   6、支持Google App引擎:用户可选择使用Python 2.5或者2.7运行环境,为Google APp引擎进行应用程序的开发,并执行例行程序部署工作。   7、集成版本控制登入,录出,视图拆分与合并–所有这些功能都能在其统一的VCS用户界面(可用于Mercurial, Subversion, Git, Perforce 和其他的 SCM)中得到。   8、图形页面调试器用户可以用其自带的功能全面的调试器对Python或者Django应用程序以及测试单元进行调整,该调试器带断点,步进,多画面视图,窗口以及评估表达式。   9、集成的单元测试用户可以在一个文件夹运行一个测试文件,单个测试类,一个方法或者所有测试项目。

[3.2.2] OpenCV图像处理库

  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。   OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby,GO的支持。   所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。   OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。最新版本是3.4,2017年12月23日发布。   OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。   OpenCV 为Intel Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的IPP库,OpenCV将在运行时自动加载这些库。

[3.3] 程序代码实现 [3.3.1] 程序文件介绍

请添加图片描述

  程序的文件目录如图3-3所示。   其中,my_net2文件夹中,存放的是卷积神经网络的权重参数。   Cnn.pyfind_charater.pytotal.pywrite.py分别是编写的4个python文件。   First.jpg是文件进行识别的初始图片,result.jpg是文件识别之后导出的文件。

[3.3.2] 程序算法介绍

  ①. 首先,在total文件中,导入各个文件。   ②. 调用cut()函数。主要是对图像进行处理,灰度处理,高斯滤波虚化,二值化,之后对图片的轮廓进行检测识别,最后对图片进行切片。 在cut函数中,首先调用cv2.imread()读取图片,然后通过cv2.cvtColor()函数来生成灰度图,通过cv2.GaussianBlur()来进行高斯滤波虚化,通过cv2.threshold(gray, 100, 255, 0)对图像进行二值化操作,最后用cv2.findContours()检测字母的轮廓并对图片进行提取切片。   ③.调用reshape()函数。对图像数组的格式进行变换,把28*28的二维数组改变成一维。   ④.调用cnn()函数。CNN是卷积神经网络,cnn()函数的目的在于,把切片好的一组图片,送进cnn()函数里面进行处理、比对标签,输出数组。   ⑤.然后调用write()函数。把上一步cnn()函数导出的pre数组作为输入比对,比对出神经网络识别出的大写字母,最后把对应的大写字母写在原图片上面。   ⑥.调用cv2.imwrite(‘result.png’,img)函数。把图片导出,图片名为result.jpg。   ⑦.最后,cv2.imshow(‘a’,img)函数,显示导出的图片。

[3.3.3] 程序代码展示

  total.py文件:

from find_charater import cut from cnn import cnn from writer import writer import cv2 def main(): path='first.jpg' num,p,q,img=cut(path) num=num.reshape(-1,28*28) pre=cnn(num) img=writer(pre,p,q,img) cv2.imwrite('result.png',img) cv2.imshow('a',img) cv2.waitKey(0) cv2.destroyAllWindows() main()

  write.py文件:

import cv2 def writer(num,p,q,img): list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] for i in range(len(p)): a=list[num[i]] img=cv2.putText(img,a,(p[i]-55,q[i]-55),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2) img = cv2.resize(img, (800, 600), interpolation=cv2.INTER_NEAREST) return img

  find_charater.py文件:

import cv2 #opencv库 import matplotlib.pyplot as plt import numpy as np def cut(path): img=cv2.imread(path) #读取 img = cv2.resize(img, (800, 600), interpolation=cv2.INTER_NEAREST) a,b=img.shape[:2] #长和宽 MAX=a*b #面积 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度图 gray = cv2.GaussianBlur(gray, (5, 5), 0) #高斯滤波虚化 ret, thresh = cv2.threshold(gray, 100, 255, 0) #二值化 image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) num=[] p=[] #横坐标 q=[] #纵坐标 for i in range(len(contours)): x, y, w, h = cv2.boundingRect(contours[i]) if cv2.contourArea(contours[i])>(MAX/500) and cv2.contourArea(contours[i])


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3