一种快递面任意角度摆正快速识别的方法技术

技术编号:25523110 阅读:35 留言:0更新日期:2020-09-04 17:12
本发明专利技术提供一种快递面任意角度摆正快速识别的方法,属于快递单面识别领域,需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域,本发明专利技术通过使用高清摄像头和感光器,便于在日常使用过程中,将快递单面进行高精度拍摄处理,并且采用感光器,便于在人工拍摄的过程中最大限度的降低镜头的晃动感,提高对快递单号的拍摄效果。

【技术实现步骤摘要】
一种快递面任意角度摆正快速识别的方法
本专利技术属于快递单面识别
,具体涉及一种快递面任意角度摆正快速识别的方法。
技术介绍
现有的机器识别方法是如果是快递面单的图片,由于快递面单不同,而且拍摄的角度也有差异。这种情况下,误差就会比较大,会导致80%几的图片被误判,无法准确的识别到快递单面上的数字,识别效果不佳,手动输入较为复杂繁琐;当采用霍夫变换的方法,若提取出直线特征,然后依据直线特征将图片摆正,具有一定的局限性,计算机无法知道图片的朝向问题,识别效果差;若使用类似于yolv3的框架进行标注,找出所有图像的共有特征并且标注,这种方法理论上应该准确率还可以但是标注过于麻烦,而且如果遇到,只有细小文字的情况,或者不存在共有特征的情况,容易失效;使用基于深度学习的ocr类似于seglink,理论上可以计算出文本框矩阵的倾斜值,但是无法知道快递单号的面的识别情况,仅仅能知道倾斜值,如果图片存在模糊或者残缺图片上面的文字很小,可能会效果不好,消耗的人力物力成本太大,而且该方法标注较为繁琐。r>
技术实现思路
...

【技术保护点】
1.一种快递面任意角度摆正快速识别的方法,其特征在于,包括以下步骤:/nS1:需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域;/nS2:裁切所需的图片尺寸使用了随机剪裁并且把剪裁尺寸设置并对得出的角度进行旋转,并将旋转完毕的图像进行计算机视觉训练概括;/nS3:使用了随机剪裁并且把剪裁尺寸设置的成较为容易的将拍摄得到的PNG图片进行修剪,随即裁切成合适的大小,裁切范围根据重要的单号数据进行制定,即可根据识别到的单号信息,快速扫描得到所需数据,不重要的部分直接给裁切掉,只留下所需的部分,以便提高识别的信息准确度。...

【技术特征摘要】
1.一种快递面任意角度摆正快速识别的方法,其特征在于,包括以下步骤:
S1:需要根据随机所拍摄的图片,计算机视觉神经网络自动识别区分所需的快递单号上真正需要的单号图像信息的问题,剔除拍摄图片中无关的识别区域;
S2:裁切所需的图片尺寸使用了随机剪裁并且把剪裁尺寸设置并对得出的角度进行旋转,并将旋转完毕的图像进行计算机视觉训练概括;
S3:使用了随机剪裁并且把剪裁尺寸设置的成较为容易的将拍摄得到的PNG图片进行修剪,随即裁切成合适的大小,裁切范围根据重要的单号数据进行制定,即可根据识别到的单号信息,快速扫描得到所需数据,不重要的部分直接给裁切掉,只留下所需的部分,以便提高识别的信息准确度。


2.根据权利要求1所述的一种快递面任意角度摆正快速识别的方法,其特征在于:根据S1步骤首先需要根据需要解决所要拍摄的真正有关且需要的图像识别定位问题,因此需要进行以下分步骤:
步骤一:提高拍摄的图像的定位精准度(提高输入的图像效果):
采用物理处理方式:
①采用高清摄像头,拍摄的镜头多数为高清的工业高精度扫描头;
目的是确保拍摄过程中有更为精密的图像分辨率,细致的画面以防图像虚化、模糊光线具备调焦变焦等。
②镜头采用防抖技术:感光器防抖或光学防抖;目的是确保在拍摄的过程中,防止图像虚化,提高识别效果;
采用电子的处理方式:
③拍摄高质量的PNG格式的图像,PNG高质量图像信息所呈现的图像信息相比较传统的JPG图像信息分辨率更高;
④PNG即可移植网络图形格式,未经过较为严重格式压缩,像素和拍摄的分辨率信息通道呈现较为完整,单帧图像画质比JPG更高,质量中等,适合进行计算机神经网络的可识别和可移植的矢量神经网络和图像神经网络;
步骤二:图像感知、阶跃感知层和过滤图像信息:
图像感知是指采用软件层面的图像信息通道(RGB)的可见的色彩信息图块的可识别能力;
常见的有扫描法,通过软件扫描识别图像坐标信息,俗称卷积神经网络通道分析法;
三维阶跃图像感知转为常见的计算机数字语言,就是RGB图像信息数字化,转为计算机语言;
过滤图像信息:就是所拍摄的数字单号当中,重点分离和灰度取舍的问题,没有绝对清晰的图片信息,因此为了提高图像识别精准度,需要着重考虑图像取舍问题,剔除无关的信息保留重点的颜色信息,也就是根据需要将无关的的图片进行裁切处理,留下相对重要的区域;
采用关键的resnet18(解释详解残差网络分类识别,18层解析级别)采用的是计算机GPU直接映射图像内部信息;
信息处理过程:



xl+1=f(yl)
即:defres_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.8res_x=BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8res_x=Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8res_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.8res_x=BatchNormalization()(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8res_x=Activation('relu')(res_x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8res_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.8ifinput_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.8identity=x
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.8identity=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.8output=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.8returnoutput
defresnet_v2(x):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8x=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.8x=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.8x=BatchNormalization()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8y=Flatten()(x)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8outputs=Dense(10,activation='softmax',kernel_initializer='he_normal')(y)
returnoutputs;
代码信息得出所需要的映射得到的识别信息,指出残差网络可以从模型集成的角度理解。对于一个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思想找到一个判别平面来分离不同类型的数据;
多分类问题:
onevsone:训练集中每两个类生成一个分类器;
onevsall:训练集中以一个类为正样本,其余所有样本作为负样本;
通过不断修正识别出较为精准的文字图像范围,确定图像识别范围后将多余的无太多较为繁琐的信息进行裁切处理,例如:随即确定图像裁切比例规格,图片裁切宽比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
脚本建立语言:
fromtransformimportfour_point_transform
importcv2,imutils
importimgEnhance
defpreProcess(image):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8ratio=image.shape[0]/500.0
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8image=imutils.resize(image,height=500)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8grayImage=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.8gaussImage=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.8edgedImage=cv2.Canny(gaussImage,75,200)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8cnts=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.8cnts=cnts[0]ifimutils.is_cv2()elsecnts[1]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8cnts=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.8forcincnts:
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)#Calculatingcontourcircumference
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.8approx=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.8iflen(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.8screenCnt=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.8break
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8returnscreenCnt,ratio
if__name__=="__main__":
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8image=cv2.imread("image.jpg")
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8screenCnt,ratio=preProcess(image)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8warped=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.8enhancer=imgEnhance.Enhancer()
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8enhancedImg=enhancer.gamma(warped,1.63)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8cv2.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.8cv2.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.8cv2.waitKey(0)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8cv2.destroyAllWindows()
步骤二:为了提取所拍摄的图片四角的角度旋转函数,需要进行新建第二个读取图片倾斜角度的文档代码:
新建第二个文档代码,transform.py
importnumpyasnp
importcv2
deforder_points(pts):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8rect=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.8s=np.sum(pts,axis=1)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8rect[0]=pts[np.argmin(s)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8rect[2]=pts[np.argmax(s)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8diff=np.diff(pts,axis=1)
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8rect[1]=pts[np.argmin(diff)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8rect[3]=pts[np.argmax(diff)]
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8returnrect
deffour_point_transform(image,pts):
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8rect=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.8widthA=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.8widthB=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.8maxWidth=max(int(widthA),int(widthB))
0.5/0.8、0.8/0.5、0.3/0.9、0.45/0.8和0.8/0.8heightA=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.8heightB=np.sqrt((tl[0]-bl[0])**2+(tl[1]-b...

【专利技术属性】
技术研发人员:陈锟颜荣
申请(专利权)人:上海巨瓦信息科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1