CN111626286A - 一种快递面任意角度摆正快速识别的方法 - Google Patents
一种快递面任意角度摆正快速识别的方法 Download PDFInfo
- Publication number
- CN111626286A CN111626286A CN202010491929.4A CN202010491929A CN111626286A CN 111626286 A CN111626286 A CN 111626286A CN 202010491929 A CN202010491929 A CN 202010491929A CN 111626286 A CN111626286 A CN 111626286A
- Authority
- CN
- China
- Prior art keywords
- image
- picture
- information
- int
- res
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/20—Image preprocessing
- G06V10/22—Image preprocessing by selection of a specific region containing or referencing a pattern; Locating or processing of specific regions to guide the detection or recognition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2415—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
- G06F18/24155—Bayesian classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/20—Image preprocessing
- G06V10/24—Aligning, centring, orientation detection or correction of the image
- G06V10/243—Aligning, centring, orientation detection or correction of the image by compensating for image skew or non-uniform image deformations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Mathematical Physics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Multimedia (AREA)
- Image Analysis (AREA)
Abstract
本发明提供一种快递面任意角度摆正快速识别的方法,属于快递单面识别领域,需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域,本发明通过使用高清摄像头和感光器,便于在日常使用过程中,将快递单面进行高精度拍摄处理,并且采用感光器,便于在人工拍摄的过程中最大限度的降低镜头的晃动感,提高对快递单号的拍摄效果。
Description
技术领域
本发明属于快递单面识别技术领域,具体涉及一种快递面任意角度摆正快速识别的方法。
背景技术
现有的机器识别方法是如果是快递面单的图片,由于快递面单不同,而且拍摄的角度也有差异。这种情况下,误差就会比较大,会导致80%几的图片被误判,无法准确的识别到快递单面上的数字,识别效果不佳,手动输入较为复杂繁琐;
当采用霍夫变换的方法,若提取出直线特征,然后依据直线特征将图片摆正,具有一定的局限性,计算机无法知道图片的朝向问题,识别效果差;
若使用类似于yolv3的框架进行标注,找出所有图像的共有特征并且标注,这种方法理论上应该准确率还可以但是标注过于麻烦,而且如果遇到,只有细小文字的情况,或者不存在共有特征的情况,容易失效;
使用基于深度学习的ocr类似于seglink,理论上可以计算出文本框矩阵的倾斜值,但是无法知道快递单号的面的识别情况,仅仅能知道倾斜值,如果图片存在模糊或者残缺图片上面的文字很小,可能会效果不好,消耗的人力物力成本太大,而且该方法标注较为繁琐。
发明内容
本发明的目的在于提供一种快递面任意角度摆正快速识别的方法,旨在解决现有技术中的现有的机器识别方法是如果是快递面单的图片,由于快递面单不同,而且拍摄的角度也有差异。这种情况下,误差就会比较大,会导致80%几的图片被误判,无法准确的识别到快递单面上的数字,识别效果不佳,手动输入较为复杂繁琐的问题。
为实现上述目的,本发明提供如下技术方案:括以下步骤:
S1:需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域;
S2:裁切所需的图片尺寸使用了随机剪裁并且把剪裁尺寸设置并对得出的角度进行旋转,并将旋转完毕的图像进行计算机视觉训练;
S3:使用了随机剪裁并且把剪裁尺寸设置的成较为容易的将拍摄得到的PNG图片进行修剪,随即裁切成合适的大小,裁切范围根据重要的单号数据进行制定,即可根据识别到的单号信息,快速扫描得到所需数据,不重要的部分直接给裁切掉,只留下所需的部分,以便提高识别的信息准确度;
S4:在数据集的制作上使用旋转增广数据。
作为本发明一种优选的,根据S1步骤所述:首先需要根据需要解决所要拍摄的真正有关且需要的图像识别定位问题,因此需要进行以下分步骤:
步骤一:提高拍摄的图像的定位精准度(提高输入的图像效果):
采用物理处理方式:
①采用高清摄像头,拍摄的镜头多数为高清的工业高精度扫描头;
目的是确保拍摄过程中有更为精密的图像分辨率,细致的画面以防图像虚化、模糊光线具备调焦变焦等。
②镜头采用防抖技术:感光器防抖或光学防抖;目的是确保在拍摄的过程中,防止图像虚化,提高识别效果;
采用电子的处理方式:
③拍摄高质量的PNG格式的图像,PNG高质量图像信息所呈现的图像信息相比较传统的JPG图像信息分辨率更高;
④PNG即可移植网络图形格式,未经过较为严重格式压缩,像素和拍摄的分辨率信息通道呈现较为完整,单帧图像画质比JPG更高,质量中等,适合进行计算机神经网络的可识别和可移植的矢量神经网络和图像神经网络。
步骤二:图像感知、阶跃感知层和过滤图像信息:
图像感知是指采用软件层面的图像信息通道(RGB)的可见的色彩信息图块的可识别能力;
常见的有扫描法,通过软件扫描识别图像坐标信息,俗称卷积神经网络通道分析法。
三维阶跃图像感知转为常见的计算机数字语言,就是RGB图像信息数字化,转为计算机语言;
过滤图像信息:就是所拍摄的数字单号当中,重点分离和灰度取舍的问题,没有绝对清晰的图片信息,因此为了提高图像识别精准度,需要着重考虑图像取舍问题,剔除无关的信息保留重点的颜色信息,也就是根据需要将无关的的图片进行裁切处理,留下相对重要的区域。
采用关键的resnet18(解释详解残差网络分类识别,18层解析级别)
采用的是计算机GPU直接映射图像内部信息;
信息处理过程:
xl+1=f(yl)
即:def res_block_v2(x,input_filter,output_filter):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= Conv2D(kernel_size=(3,3),filters=output_filter,strides=1, padding='same')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= BatchNormalization()(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= Conv2D(kernel_size=(3,3),filters=output_filter,strides=1, padding='same')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 if input_filter==output_filter:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 identity=x
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 else:# 需要升维或者降维
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 identity= Conv2D(kernel_size=(1,1),filters=output_filter,strides=1, padding='same')(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 output= keras.layers.add([identity,res_x])
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return output
def resnet_v2(x):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= Conv2D(kernel_size=(3,3),filters=16,strides=1, padding='same',activation='relu')(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= res_block_v2(x,16,16)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= res_block_v2(x,16,32)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 y= Flatten()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 outputs= Dense(10,activation='softmax', kernel_initializer='he_normal')(y)
return outputs。
代码信息得出所需要的映射得到的识别信息,指出残差网络可以从模型集成的角度理解。对于一个3层的残差网络可以展开成一棵含有8个节点的二叉树,而最终的输出便是这8个节点的集成;而他们的实验也验证了这一点,随机删除残差网络的一些节点网络的性能变化较为平滑,而对于VGG等stack到一起的网络来说,随机删除一些节点后,网络的输出将完全随机。
得出的视觉神经信息网络结构还未进行解析因此需要提取识别过程中的识别范围;
得出所需的视觉信息,然后借助分类任务区别出所需的数据信息,然后进行分类任务,利用数据识别方式。
作为本发明一种优选的,根据S1步骤所述:为了确保读取数据的准确度,提高图像集中识别范围,因此可采用计算机视觉训练方式对所拍摄的图像进行精准捕捉实验;
朴素贝叶斯:(有了训练集,那么p(y=1)、p(x|y=1)的值可根据训练集求出,写到这里对在图像分割利用贝叶斯、MRF理论有了更深的认识,由于没有训练样本,所以利用了吉布斯引入团的概念,求各个像素可能的类别的概率)
p(y=1|x)=p(x|y=1)p(y=1)/p(x)
假设特征无关,根据训练集中相应特征出现的概率乘积来训练分类器。
linear分类器、SVM思想找到一个判别平面来分离不同类型的数据。
多分类问题:
one vs one:训练集中每两个类生成一个分类器
one vs all:训练集中以一个类为正样本,其余所有样本作为负样本
通过不断修正识别出较为精准的文字图像范围,确定图像识别范围后将多余的无太多较为繁琐的信息进行裁切处理,例如:随即确定图像裁切比例规格,图片裁切宽比0.5/0.8、0.8/0.5、0.3/0.9、 0.45/0.8和0.8/0.8进行随机剪裁裁切过程中可结合用于图像捕捉技术,在日常使用过程中通过借助训练集,对关键点进行框选绿色的视觉拾取范围,图像色块精准度可借助所需的图像显像RGB读取技术和resnet技术共同结合作用,从而实现对图像的剔除和筛选,色块读取信息可由自身的显卡将图片信息进行导入,所能够达到的步骤效果为:制作训练集和测试集时主要使用python脚本,从而进行可以自动标标签以及旋转图片的目的,反向编程即在图像是旋转的状态下时,即可采用较为便捷的python脚本语言将导入的拍摄角度较为倾斜的图片自动进行倾斜校正,这样即可反向实现在当拍摄的图像是倾斜的时即可对图片进行微调采用的是较为便捷的
python脚本倾斜校正编制如下:
第一新建文档,命名scan.py
脚本建立语言:
from transform import four_point_transform
import cv2,imutils
import imgEnhance
def preProcess(image):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 ratio= image.shape[0]/500.0
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image= imutils.resize(image,height=500)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 grayImage =cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 gaussImage =cv2.GaussianBlur(grayImage,(5,5),0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 edgedImage =cv2.Canny(gaussImage,75,200)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts= cv2.findContours(edgedImage.copy(),cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts=cnts[0] ifimutils.is_cv2()else cnts[1]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[:5]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 for c in cnts:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 peri=cv2.arcLength(c, True)#Calculating contourcircumference
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 approx= cv2.approxPolyDP(c,0.02*peri,True)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 if len(approx)==4:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、 0.45/0.8和0.8/0.8 screenCnt=approx
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、 0.45/0.8和0.8/0.8 break
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return screenCnt,ratio
if__name__=="__main__":
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image= cv2.imread("image.jpg")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 screenCnt, ratio=preProcess(image)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 warped= four_point_transform(image,screenCnt.reshape(4,2)*ratio)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 enhancer =imgEnhance.Enhancer()
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 enhancedImg =enhancer.gamma(warped,1.63)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.imshow("org",imutils.resize(image,height=500))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.imshow("gamma",imutils.resize(enhancedImg, height=500))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.waitKey(0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.destroyAllWindows()
步骤二:为了提取所拍摄的图片四角的角度旋转函数,需要进行新建第二个读取图片倾斜角度的文档代码:
然后制作order_points函数,通过限定图片哪个是左上角、哪个是右上角还是哪个是左下角和右下角,进而在转动的过程当中将图片的角度函数进行限定,限定的函数网格位置进行限定完成后进而可以进行下一步的图片倾斜角度自动调平处理了;
步骤三:进行参数设置学习,比率设置为0.001迭代10个epoch,使用SGD优化器,正则化系数为0.01,图片尺寸设置为128×128。在测试的时候把随机剪裁关掉,并且训练和测试时将图片的归一化尺寸调整到最优;
SGD优化器.梯度下降法深入理解
对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ1、θ2、θ3......)目标函数为损失函数L=1/N∑Li(每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD 而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性,在鞍点或者局部最小值点的时候,震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。
那么所得出的结论就是采用梯度算法所得到的数据信息可以用作对图片信息进行修正处理,进而实现自动调平处理。
随机规定限定图片旋转的角度:0°、45°、90°、135°,进行阈值录入,进而当使用人员在将拍摄好的快递单图片上传至服务器时,可根据输入的图片倾斜程度进行阈值计算,在阈值计算的过程中进而将倾斜的图片进行调正,然后计算机视觉训练。
裁切尺寸:1、随机图像裁切比比例规格:图片裁切宽比0.5 /0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8进行随机剪裁,裁切长宽比根据所拍摄识别的快递单号大小进行调正。
作为本发明一种优选的,根据S1步骤所述:具体代码如下:
当拍摄得到的PNG图片需要进行裁切时,随即的分辨率得到的数据即可实现对图片的裁切处理,随即裁切比例按照图片分辨率的不同进行修正,所修剪识别得到的数据就是重要的数据即可实现较为便捷的数据计算能力。
S4:在数据集的制作上使用旋转增广数据
首先第一步:使用者可采用脚本语言编译出图片旋转用的C++ 语言:
其次:根据编制出的语言将图片进行转动,根据转动角度的限定可转动;
再次:使用者可以再编译出自动运行脚本代码,这样,当所拍摄的PNG图片在不符合要求时可自动根据选项进行裁切出较为合适大小的图片和识别出所需的区域,这样不用手动再运行当前代码了;
最后:得到的快递单号数据即可自动进行编码,打电子提示标签,最后存档这样整个快递单号的自动角度识别调整过程结束。
与现有技术相比,本发明的有益效果是:
1)通过制备出所需的检索土壤治理污染的数据库便于在以后治理金属土壤过程中,为后续治理者提供检索服务,可利用分类信息架构,得出的检索数据信息便于使用人员更加快速的找寻到所要的文献数据信息,根据文献数据的指导对不同的土壤物质进行种植,同时通过采取本方案制备出的数据库可实施性强,应对不同的重金属土壤治理效果好;
2)通过采用上述步骤,制备文献搜索引擎,采用文献检索算法,检索特定的种植物,从而快速搜索得出所要的数据查询结果;另外所采用的步骤,后台定制存放文献的数据库,服务器、检索网站及算法框架等,可为前台服务端搜索引擎提供更为详细的数据支撑,以便利用引擎能够快速的检索到治理土壤重金属的种植方案,且可实施的效果好,优化查询操作流程。
具体实施方式
下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本发明提供以下技术方案:包括以下步骤:
在本实施例中:S1:需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域:
具体的,首先需要根据需要解决所要拍摄的真正有关且需要的图像识别定位问题,因此需要进行以下分步骤:
步骤一:提高拍摄的图像的定位精准度(提高输入的图像效果):
采用物理处理方式:
①采用高清摄像头,拍摄的镜头多数为高清的工业高精度扫描头;
目的是确保拍摄过程中有更为精密的图像分辨率,细致的画面以防图像虚化、模糊光线具备调焦变焦等。
②镜头采用防抖技术:感光器防抖或光学防抖;目的是确保在拍摄的过程中,防止图像虚化,提高识别效果;
采用电子的处理方式:
③拍摄高质量的PNG格式的图像,PNG高质量图像信息所呈现的图像信息相比较传统的JPG图像信息分辨率更高;
④PNG即可移植网络图形格式,未经过较为严重格式压缩,像素和拍摄的分辨率信息通道呈现较为完整,单帧图像画质比JPG更高,质量中等,适合进行计算机神经网络的可识别和可移植的矢量神经网络和图像神经网络。
步骤二:图像感知、阶跃感知层和过滤图像信息:
图像感知是指采用软件层面的图像信息通道(RGB)的可见的色彩信息图块的可识别能力;
常见的有扫描法,通过软件扫描识别图像坐标信息,俗称卷积神经网络通道分析法。
三维阶跃图像感知转为常见的计算机数字语言,就是RGB图像信息数字化,转为计算机语言;
过滤图像信息:就是所拍摄的数字单号当中,重点分离和灰度取舍的问题,没有绝对清晰的图片信息,因此为了提高图像识别精准度,需要着重考虑图像取舍问题,剔除无关的信息保留重点的颜色信息,也就是根据需要将无关的的图片进行裁切处理,留下相对重要的区域。
采用关键的resnet18(解释详解残差网络分类识别,18层解析级别)
采用的是计算机GPU直接映射图像内部信息。
信息处理过程:
xl+1=f(yl)
即:def res_block_v2(x,input_filter,output_filter):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= Conv2D(kernel_size=(3,3),filters=output_filter,strides=1, padding='same')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= BatchNormalization()(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x= Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=Conv2D(kernel_size=(3,3),filters=output_filter,strides=1, padding='same')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 if input_filter==output_filter:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 identity=x
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 else:# 需要升维或者降维
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 identity= Conv2D(kernel_size=(1,1),filters=output_filter,strides=1, padding='same')(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 output= keras.layers.add([identity,res_x])
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return output
def resnet_v2(x):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= Conv2D(kernel_size=(3,3),filters=16,strides=1, padding='same',activation='relu')(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8x=res_block_v2(x,16,16)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= res_block_v2(x,16,32)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x= BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 y= Flatten()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 outputs= Dense(10,activation='softmax', kernel_initializer='he_normal')(y)
return outputs。
代码信息得出所需要的映射得到的识别信息,指出残差网络可以从模型集成的角度理解。对于一个3层的残差网络可以展开成一棵含有8个节点的二叉树,而最终的输出便是这8个节点的集成。而他们的实验也验证了这一点,随机删除残差网络的一些节点网络的性能变化较为平滑,而对于VGG等stack到一起的网络来说,随机删除一些节点后,网络的输出将完全随机。
得出的视觉神经信息网络结构还未进行解析因此需要提取识别过程中的识别范围;
得出所需的视觉信息,然后借助分类任务区别出所需的数据信息,然后进行分类任务,利用数据识别方式。
在本实施例中:S2:裁切所需的图片尺寸使用了随机剪裁并且把剪裁尺寸设置并对得出的角度进行旋转,并将旋转完毕的图像进行计算机视觉训练概括:
具体的,为了确保读取数据的准确度,提高图像集中识别范围,因此可采用计算机视觉训练方式对所拍摄的图像进行精准捕捉实验;
朴素贝叶斯:(有了训练集,那么p(y=1)、p(x|y=1)的值可根据训练集求出,写到这里对在图像分割利用贝叶斯、MRF理论有了更深的认识,由于没有训练样本,所以利用了吉布斯引入团的概念,求各个像素可能的类别的概率)
p(y=1|x)=p(x|y=1)p(y=1)/p(x)
假设特征无关,根据训练集中相应特征出现的概率乘积来训练分类器。
linear分类器、SVM思想找到一个判别平面来分离不同类型的数据。
多分类问题:
one vs one:训练集中每两个类生成一个分类器
one vs all:训练集中以一个类为正样本,其余所有样本作为负样本
通过不断修正识别出较为精准的文字图像范围,确定图像识别范围后将多余的无太多较为繁琐的信息进行裁切处理,例如:随即确定图像裁切比例规格,图片裁切宽比0.5/0.8、0.8/0.5、0.3/0.9、 0.45/0.8和0.8/0.8进行随机剪裁裁切过程中可结合用于图像捕捉技术,在日常使用过程中通过借助训练集,对关键点进行框选绿色的视觉拾取范围,图像色块精准度可借助所需的图像显像RGB读取技术和resnet技术共同结合作用,从而实现对图像的剔除和筛选,色块读取信息可由自身的显卡将图片信息进行导入,所能够达到的步骤效果为:制作训练集和测试集时主要使用python脚本,从而进行可以自动标标签以及旋转图片的目的,反向编程即在图像是旋转的状态下时,即可采用较为便捷的python脚本语言将导入的拍摄角度较为倾斜的图片自动进行倾斜校正,这样即可反向实现在当拍摄的图像是倾斜的时即可对图片进行微调采用的是较为便捷的
python脚本倾斜校正编制如下:
第一新建文档,命名scan.py
脚本建立语言:
from transform import four_point_transform
import cv2,imutils
import imgEnhance
def preProcess(image):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 ratio= image.shape[0]/500.0
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image= imutils.resize(image,height=500)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 grayImage =cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 gaussImage =cv2.GaussianBlur(grayImage,(5,5),0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 edgedImage =cv2.Canny(gaussImage,75,200)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts= cv2.findContours(edgedImage.copy(),cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts=cnts[0] ifimutils.is_cv2()else cnts[1]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts= sorted(cnts,key=cv2.contourArea,reverse=True)[:5]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 for c in cnts:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 peri=cv2.arcLength(c, True)#Calculating contourcircumference
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 approx=cv2.approxPolyDP(c,0.02*peri,True)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 if len(approx)==4:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、 0.45/0.8和0.8/0.8 screenCnt=approx
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、 0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、 0.45/0.8和0.8/0.8 break
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return screenCnt,ratio
if__name__=="__main__":
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image= cv2.imread("image.jpg")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 screenCnt, ratio=preProcess(image)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 warped= four_point_transform(image,screenCnt.reshape(4,2)*ratio)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 enhancer =imgEnhance.Enhancer()
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 enhancedImg =enhancer.gamma(warped,1.63)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.imshow("org",imutils.resize(image,height=500))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.imshow("gamma",imutils.resize(enhancedImg, height=500))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.waitKey(0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.destroyAllWindows()
步骤二:为了提取所拍摄的图片四角的角度旋转函数,需要进行新建第二个读取图片倾斜角度的文档代码:
然后制作order_points函数,通过限定图片哪个是左上角、哪个是右上角还是哪个是左下角和右下角,进而在转动的过程当中将图片的角度函数进行限定,限定的函数网格位置进行限定完成后进而可以进行下一步的图片倾斜角度自动调平处理了;
步骤三:进行参数设置学习,比率设置为0.001迭代10个epoch,使用SGD优化器,正则化系数为0.01,图片尺寸设置为128×128。在测试的时候把随机剪裁关掉,并且训练和测试时将图片的归一化尺寸调整到最优。
SGD优化器.梯度下降法深入理解
对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ1、θ2、θ3......)目标函数为损失函数L=1/N∑Li(每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD 而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性,在鞍点或者局部最小值点的时候,震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。
那么所得出的结论就是采用梯度算法所得到的数据信息可以用作对图片信息进行修正处理,进而实现自动调平处理。
随机规定限定图片旋转的角度:0°、45°、90°、135°,进行阈值录入,进而当使用人员在将拍摄好的快递单图片上传至服务器时,可根据输入的图片倾斜程度进行阈值计算,在阈值计算的过程中进而将倾斜的图片进行调正,然后计算机视觉训练。
1、裁切尺寸:1、随机图像裁切比比例规格:图片裁切宽比0.5 /0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8进行随机剪裁,裁切长宽比根据所拍摄识别的快递单号大小进行调正。
在本实施例中:S3:使用了随机剪裁并且把剪裁尺寸设置的成较为容易的将拍摄得到的PNG图片进行修剪,随即裁切成合适的大小,裁切范围根据重要的单号数据进行制定,即可根据识别到的单号信息,快速扫描得到所需数据,不重要的部分直接给裁切掉,只留下所需的部分,以便提高识别的信息准确度。
当拍摄得到的PNG图片需要进行裁切时,随即的分辨率得到的数据即可实现对图片的裁切处理,随即裁切比例按照图片分辨率的不同进行修正,所修剪识别得到的数据就是重要的数据即可实现较为便捷的数据计算能力。
S4:在数据集的制作上使用旋转增广数据
首先第一步:使用者可采用脚本语言编译出图片旋转用的C++ 语言:
其次:根据编制出的语言将图片进行转动,根据转动角度的限定可转动;
再次:使用者可以再编译出自动运行脚本代码,这样,当所拍摄的PNG图片在不符合要求时可自动根据选项进行裁切出较为合适大小的图片和识别出所需的区域,这样不用手动再运行当前代码了;
最后:得到的快递单号数据即可自动进行编码,打电子提示标签,最后存档这样整个快递单号的自动角度识别调整过程结束。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种快递面任意角度摆正快速识别的方法,其特征在于,包括以下步骤:
S1:需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域;
S2:裁切所需的图片尺寸使用了随机剪裁并且把剪裁尺寸设置并对得出的角度进行旋转,并将旋转完毕的图像进行计算机视觉训练概括;
S3:使用了随机剪裁并且把剪裁尺寸设置的成较为容易的将拍摄得到的PNG图片进行修剪,随即裁切成合适的大小,裁切范围根据重要的单号数据进行制定,即可根据识别到的单号信息,快速扫描得到所需数据,不重要的部分直接给裁切掉,只留下所需的部分,以便提高识别的信息准确度。
2.根据权利要求1所述的一种快递面任意角度摆正快速识别的方法,其特征在于:根据S1步骤首先需要根据需要解决所要拍摄的真正有关且需要的图像识别定位问题,因此需要进行以下分步骤:
步骤一:提高拍摄的图像的定位精准度(提高输入的图像效果):
采用物理处理方式:
①采用高清摄像头,拍摄的镜头多数为高清的工业高精度扫描头;
目的是确保拍摄过程中有更为精密的图像分辨率,细致的画面以防图像虚化、模糊光线具备调焦变焦等。
②镜头采用防抖技术:感光器防抖或光学防抖;目的是确保在拍摄的过程中,防止图像虚化,提高识别效果;
采用电子的处理方式:
③拍摄高质量的PNG格式的图像,PNG高质量图像信息所呈现的图像信息相比较传统的JPG图像信息分辨率更高;
④PNG即可移植网络图形格式,未经过较为严重格式压缩,像素和拍摄的分辨率信息通道呈现较为完整,单帧图像画质比JPG更高,质量中等,适合进行计算机神经网络的可识别和可移植的矢量神经网络和图像神经网络;
步骤二:图像感知、阶跃感知层和过滤图像信息:
图像感知是指采用软件层面的图像信息通道(RGB)的可见的色彩信息图块的可识别能力;
常见的有扫描法,通过软件扫描识别图像坐标信息,俗称卷积神经网络通道分析法;
三维阶跃图像感知转为常见的计算机数字语言,就是RGB图像信息数字化,转为计算机语言;
过滤图像信息:就是所拍摄的数字单号当中,重点分离和灰度取舍的问题,没有绝对清晰的图片信息,因此为了提高图像识别精准度,需要着重考虑图像取舍问题,剔除无关的信息保留重点的颜色信息,也就是根据需要将无关的的图片进行裁切处理,留下相对重要的区域;
采用关键的resnet18(解释详解残差网络分类识别,18层解析级别)采用的是计算机GPU直接映射图像内部信息;
信息处理过程:
xl+1=f(yl)
即:def res_block_v2(x,input_filter,output_filter):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=Conv2D(kernel_size=(3,3),filters=output_filter,strides=1,padding='same')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=BatchNormalization()(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 res_x=Conv2D(kernel_size=(3,3),filters=output_filter,strides=1,padding='same')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 if input_filter==output_filter:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 identity=x
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 else:#需要升维或者降维
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 identity=Conv2D(kernel_size=(1,1),filters=output_filter,strides=1,padding='same')(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 output=keras.layers.add([identity,res_x])
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return output
def resnet_v2(x):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x=Conv2D(kernel_size=(3,3),filters=16,strides=1,padding='same',activation='relu')(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x=res_block_v2(x,16,16)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x=res_block_v2(x,16,32)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 x=BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 y=Flatten()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 outputs=Dense(10,activation='softmax',kernel_initializer='he_normal')(y)
return outputs;
代码信息得出所需要的映射得到的识别信息,指出残差网络可以从模型集成的角度理解。对于一个3层的残差网络可以展开成一棵含有8个节点的二叉树,而最终的输出便是这8个节点的集成。而他们的实验也验证了这一点,随机删除残差网络的一些节点网络的性能变化较为平滑,而对于VGG等stack到一起的网络来说,随机删除一些节点后,网络的输出将完全随机;
得出的视觉神经信息网络结构还未进行解析因此需要提取识别过程中的识别范围;
得出所需的视觉信息,然后借助分类任务区别出所需的数据信息,然后进行分类任务,利用数据识别方式。
3.根据权利要求1所述的一种快递面任意角度摆正快速识别的方法,其特征在于:根据S2所定制的技术方案:
为了确保读取数据的准确度,提高图像集中识别范围,因此可采用计算机视觉训练方式对所拍摄的图像进行精准捕捉实验;
朴素贝叶斯:(有了训练集,那么p(y=1)、p(x|y=1)的值可根据训练集求出,写到这里对在图像分割利用贝叶斯、MRF理论有了更深的认识,由于没有训练样本,所以利用了吉布斯引入团的概念,求各个像素可能的类别的概率)
p(y=1|x)=p(x|y=1)p(y=1)/p(x)
假设特征无关,根据训练集中相应特征出现的概率乘积来训练分类器;
linear分类器、SVM思想找到一个判别平面来分离不同类型的数据;
多分类问题:
one vs one:训练集中每两个类生成一个分类器;
one vs all:训练集中以一个类为正样本,其余所有样本作为负样本;
通过不断修正识别出较为精准的文字图像范围,确定图像识别范围后将多余的无太多较为繁琐的信息进行裁切处理,例如:随即确定图像裁切比例规格,图片裁切宽比0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8进行随机剪裁裁切过程中可结合用于图像捕捉技术,在日常使用过程中通过借助训练集,对关键点进行框选绿色的视觉拾取范围,图像色块精准度可借助所需的图像显像RGB读取技术和resnet技术共同结合作用,从而实现对图像的剔除和筛选,色块读取信息可由自身的显卡将图片信息进行导入,所能够达到的步骤效果为:制作训练集和测试集时主要使用python脚本,从而进行可以自动标标签以及旋转图片的目的,反向编程即在图像是旋转的状态下时,即可采用较为便捷的python脚本语言将导入的拍摄角度较为倾斜的图片自动进行倾斜校正,这样即可反向实现在当拍摄的图像是倾斜的时即可对图片进行微调采用的是较为便捷的python脚本倾斜校正编制如下:
第一新建文档,命名scan.py
脚本建立语言:
from transform import four_point_transform
import cv2,imutils
import imgEnhance
def preProcess(image):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 ratio=image.shape[0]/500.0
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image=imutils.resize(image,height=500)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 grayImage=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 gaussImage=cv2.GaussianBlur(grayImage,(5,5),0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 edgedImage=cv2.Canny(gaussImage,75,200)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts=cv2.findContours(edgedImage.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts=cnts[0]if imutils.is_cv2()else cnts[1]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[:5]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 for c in cnts:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8peri=cv2.arcLength(c,True)#Calculating contour circumference
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 approx=cv2.approxPolyDP(c,0.02*peri,True)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 if len(approx)==4:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 screenCnt=approx
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 break
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return screenCnt,ratio
if__name__=="__main__":
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image=cv2.imread("image.jpg")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 screenCnt,ratio=preProcess(image)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 warped=four_point_transform(image,screenCnt.reshape(4,2)*ratio)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 enhancer=imgEnhance.Enhancer()
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 enhancedImg=enhancer.gamma(warped,1.63)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.imshow("org",imutils.resize(image,height=500))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.imshow("gamma",imutils.resize(enhancedImg,height=500))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.waitKey(0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 cv2.destroyAllWindows()
步骤二:为了提取所拍摄的图片四角的角度旋转函数,需要进行新建第二个读取图片倾斜角度的文档代码:
新建第二个文档代码,transform.py
import numpy as np
import cv2
def order_points(pts):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 rect=np.zeros((4,2),dtype="float32")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 s=np.sum(pts,axis=1)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 rect[0]=pts[np.argmin(s)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 rect[2]=pts[np.argmax(s)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 diff=np.diff(pts,axis=1)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 rect[1]=pts[np.argmin(diff)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 rect[3]=pts[np.argmax(diff)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return rect
def four_point_transform(image,pts):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 rect=order_points(pts)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8(tl,tr,br,bl)=rect
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 widthA=np.sqrt((tr[0]-tl[0])**2+(tr[1]-tl[1])**2)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 widthB=np.sqrt((br[0]-bl[0])**2+(br[1]-bl[1])**2)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 maxWidth=max(int(widthA),int(widthB))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 heightA=np.sqrt((tr[0]-br[0])**2+(tr[1]-br[1])**2)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 heightB=np.sqrt((tl[0]-bl[0])**2+(tl[1]-bl[1])**2)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 maxHeight=max(int(heightA),int(heightB))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8dst=np.array([
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8[0,0],
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8[maxWidth-1,0],
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8[maxWidth-1,maxHeight-1],
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8[0,maxHeight-1]],dtype="float32")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 M=cv2.getPerspectiveTransform(rect,dst)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 warped=cv2.warpPerspective(image,M,(maxWidth,maxHeight))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return warped
然后制作order_points函数,通过限定图片哪个是左上角、哪个是右上角还是哪个是左下角和右下角,进而在转动的过程当中将图片的角度函数进行限定,限定的函数网格位置进行限定完成后进而可以进行下一步的图片倾斜角度自动调平处理了;
步骤三:进行参数设置学习,比率设置为0.001迭代10个epoch,使用SGD优化器,正则化系数为0.01,图片尺寸设置为128×128。在测试的时候把随机剪裁关掉,并且训练和测试时将图片的归一化尺寸调整到最优。
SGD优化器.梯度下降法深入理解;
对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ1、θ2、θ3......)目标函数为损失函数L=1/N∑Li(每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性,在鞍点或者局部最小值点的时候,震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动;
那么所得出的结论就是采用梯度算法所得到的数据信息可以用作对图片信息进行修正处理,进而实现自动调平处理;
随机规定限定图片旋转的角度:0°、45°、90°、135°,进行阈值录入,进而当使用人员在将拍摄好的快递单图片上传至服务器时,可根据输入的图片倾斜程度进行阈值计算,在阈值计算的过程中进而将倾斜的图片进行调正,然后计算机视觉训练;
裁切尺寸:1、随机图像裁切比例规格:图片裁切宽比0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8进行随机剪裁,裁切长宽比根据所拍摄识别的快递单号大小进行调正。
4.根据权利要求1所述的一种快递面任意角度摆正快速识别的方法,其特征在于:基于植物数据库,根据步骤S3所示具体代码如下:import matplotlib.pyplot as plt
import numpy as np
import random
from PIL import Image
image_path="/home/xsr-ai/datasets/butterfly.jpg"
def random_crop(image,crop_shape,padding=None):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 oshape=np.shape(image)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8if padding:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8oshape=(oshape[0]+2*padding,oshape[1]+2*padding)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 npad=((padding,padding),(padding,padding),(0,0))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image_pad=np.lib.pad(image,pad_width=npad,mode='constant',constant_values=0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 nh=random.randint(0,oshape[0]-crop_shape[0])
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 nw=random.randint(0,oshape[1]-crop_shape[1])
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image_crop=image_pad[nh:nh+crop_shape[0],nw:nw+crop_shape[1]]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8return image_crop
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8else:
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8print("WARNING!!!nothing to do!!!")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.80.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 return image
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8
if__name__=="__main__":
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image_src=Image.open(image_path)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 crop_width=image_src.size[0]-10
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 crop_height=image_src.size[1]-10
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 image_dst_crop=random_crop(image_src,[crop_width,crop_height],padding=10)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8plt.figure()
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.subplot(221)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.imshow(image_src)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.title("oringin image")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.subplot(222)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.imshow(image_dst_crop)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.title("crop image")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8 plt.show()。
当拍摄得到的PNG图片需要进行裁切时,随即的分辨率得到的数据即可实现对图片的裁切处理,随即裁切比例按照图片分辨率的不同进行修正,所修剪识别得到的数据就是重要的数据即可实现较为便捷的数据计算能力。
5.根据权利要求1所述的一种快递面任意角度摆正快速识别的方法,其特征在于:首先第一步:使用者可采用脚本语言编译出图片旋转用的C++语言:CONVOLVE.C-Turbo C 2.0implementation of image convolution*/
/*----------by Wesley G.Faler.All code is"as is".There*/
/*is NO copyright.Use this code as you will,and if you make*/
/*money at it,good for you.*/
/*****************************************************************/
#include<slib.h>
#include<sio.h>
#include<graphics.h>
#include<alloc.h>
#inc lude<ctype.h>
int load_cut(char*fname);
int load_convolution_maix(char*fname);
int convolve_image(void);
int swap_pictures(void);
int minx,maxx,miny,maxy;
int LOADPAGE=0;
int ENHANCEPAGE=1;
int*cmat,*pmat,*vmat;
int cmx,cmy,cmnum;
suct palettetype palette,newpal;
int driver,mode;
int cleancut=-1;
int init_graphics(void)
{
driver=DETECT;mode=0;
detectgraph(&driver,&mode);
if(driver==VGA)mode=VGAMED;
initgraph(&driver,&mode,"");
getpalette(&palette);
getpalette(&newpal);
}
int cleanup_image(void)
{
int i,j,num,x,y,k;
if(cleancut<0)return;
setactivepage(LOADPAGE);
setvisualpage(ENHANCEPAGE);
for(x=minx;x<maxx;x){
for(y=miny;y<maxy;y){
if(getpixel(x,y)!=0)num=-1;
else num=0;
for(j=-1;j<2;j){
for(i=-1;i<2;i){
if(getpixel(x i,y j)!=0)num;
}
}
if(num>cleancut){
k=getpixel(x,y);
setactivepage(ENHANCEPAGE);
putpixel(x,y,k);
setactivepage(LOADPAGE);
}
}
}
k=ENHANCEPAGE;ENHANCEPAGE=LOADPAGE;LOADPAGE=k;
}
void show_test_image(void)
{
int i;
minx=cmx;miny=cmy;
maxx=100 minx;maxy=100 miny;
setcolor(1);
moveto(minx,miny);
randomize();
for(i=0;i<20;i)
lineto(random(100)minx,random(100)miny);
for(i=0;i<10;i)
fillellipse(random(50)25 minx,random(50)25miny,random(25),random(25));
}
main()
{
char fname[50];
int flag=0;
load_convolution_maix("maix.dat");
printf(".CUT file(1)or test image(0)?");
scanf("%d",&flag);
flag=flag?1:0;
if(flag){
fflush(sin);
printf("filename to process:");
gets(fname);
}
printf("Delete pixels with x or fewer neighbors.x=");
scanf("%d",&cleancut);
if(cleancut>8)cleancut=8;
init_graphics();
setactivepage(1);cleardevice();
setactivepage(0);cleardevice();
setactivepage(LOADPAGE);setvisualpage(LOADPAGE);
if(flag)load_cut(fname);
else show_test_image();
cleanup_image();
setvisualpage(ENHANCEPAGE);
convolve_image();
swap_pictures();
restorecrtmode();
}
int toggle_colors(char c)
{
c=tolower(c);
c=c-'a';
if(c<0||c>=palette.size)return 0;
newpal.colors[c]=palette.colors[c]-newpal.colors[c];
setpalette(c,newpal.colors[c]);
return 1;
}
int swap_pictures(void)
{
int mode=0;
char a;
setvisualpage(LOADPAGE);
for(;;){
a=getch();
if(a==27)return;
if(toggle_colors(a))continue;
if(mode==0)setvisualpage(ENHANCEPAGE);
if(mode==1)setvisualpage(LOADPAGE);
mode=1-mode;
}
其次:根据编制出的语言将图片进行转动,根据转动角度的限定可转动;
再次:使用者可以再编译出自动运行脚本代码,这样,当所拍摄的PNG图片在不符合要求时可自动根据选项进行裁切出较为合适大小的图片和识别出所需的区域,这样不用手动再运行当前代码了;
最后:得到的快递单号数据即可自动进行编码,打电子提示标签,最后存档这样整个快递单号的自动角度识别调整过程结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010491929.4A CN111626286A (zh) | 2020-06-03 | 2020-06-03 | 一种快递面任意角度摆正快速识别的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010491929.4A CN111626286A (zh) | 2020-06-03 | 2020-06-03 | 一种快递面任意角度摆正快速识别的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111626286A true CN111626286A (zh) | 2020-09-04 |
Family
ID=72270077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010491929.4A Withdrawn CN111626286A (zh) | 2020-06-03 | 2020-06-03 | 一种快递面任意角度摆正快速识别的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111626286A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113379413A (zh) * | 2021-05-26 | 2021-09-10 | 上海祥承通讯技术有限公司 | 一种识别准确且高安全性的移动支付系统 |
-
2020
- 2020-06-03 CN CN202010491929.4A patent/CN111626286A/zh not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113379413A (zh) * | 2021-05-26 | 2021-09-10 | 上海祥承通讯技术有限公司 | 一种识别准确且高安全性的移动支付系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110298338B (zh) | 一种文档图像分类方法及装置 | |
CN111325203B (zh) | 一种基于图像校正的美式车牌识别方法及系统 | |
CN110399798B (zh) | 一种基于深度学习的离散图片文件信息提取系统及方法 | |
Singh | Practical machine learning and image processing: for facial recognition, object detection, and pattern recognition using Python | |
US9881231B2 (en) | Using extracted image text | |
CN112686812B (zh) | 银行卡倾斜矫正检测方法、装置、可读存储介质和终端 | |
US8031940B2 (en) | Recognizing text in images using ranging data | |
CN112150493B (zh) | 一种基于语义指导的自然场景下屏幕区域检测方法 | |
CN107491730A (zh) | 一种基于图像处理的化验单识别方法 | |
US10592764B2 (en) | Reconstructing document from series of document images | |
CN112651289B (zh) | 一种增值税普通发票智能识别与校验系统及其方法 | |
CN110569878A (zh) | 一种基于卷积神经网络的照片背景相似度聚类方法及计算机 | |
CN107945111B (zh) | 一种基于surf特征提取结合cs-lbp描述符的图像拼接方法 | |
CN110766020A (zh) | 一种面向多语种自然场景文本检测与识别的系统及方法 | |
CN113011144A (zh) | 表单信息的获取方法、装置和服务器 | |
CN114092938B (zh) | 图像的识别处理方法、装置、电子设备及存储介质 | |
CN113033558B (zh) | 一种用于自然场景的文本检测方法及装置、存储介质 | |
CN112686258A (zh) | 体检报告信息结构化方法、装置、可读存储介质和终端 | |
CN113158895A (zh) | 票据识别方法、装置、电子设备及存储介质 | |
CN114842478A (zh) | 文本区域的识别方法、装置、设备及存储介质 | |
CN112686248B (zh) | 证件增减类别检测方法、装置、可读存储介质和终端 | |
CN113628181A (zh) | 图像处理方法、装置、电子设备及存储介质 | |
CN111626286A (zh) | 一种快递面任意角度摆正快速识别的方法 | |
Gyamfi et al. | Pixel-based unsupervised classification approach for information detection on optical markup recognition sheet | |
CN111213157A (zh) | 一种基于智能终端的快递信息录入方法及录入系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200904 |