应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

OCRopencv实现

  1说明
  1。1OCR(光学字符识别):
  该字体有几种用途,其中自动化系统需要定义标准的字符形状以正确扫描不使用条形码的数字和文本。
  OCR应用的一些实例包括银行支票、护照、序列标签和邮件。
  OCRA和OCRB字体有能够被OCR扫描设备准确读取的字符形状。
  1。2OCRA:
  1。2。1源码下载,打不开https:en。wikipedia。orgwikiOCRA
  1。2。2我用OCRAExtended。ttf代替OCRA。ttf也可以。
  2效果图
  3准备
  3。1环境:
  python3。8opencv4。2。0deepinlinux深度操作系统微软编辑器vscode。
  3。2文件结果
  3。3参考文章:英文原版文章https:www。pyimagesearch。com20170717creditcardocrwithopencvandpython中文文章https:www。cnblogs。comxujunjiap11456133。html对源代码进行注释,排版,删减,修改bug,调试和运行
  3。4本次银行卡为Visa,国内银行卡暂时不行。
  4模板字体
  4。1网上下载
  4。2自己生成
  4。2。1代码:importpygamefrompygame。localsimportdefmain():pygame。init()screenpygame。display。setmode((1000,450))窗口的大小pygame。display。setcaption(OCRA数字模板)窗口标题,中文不需要特别的设置backgroundpygame。Surface(screen。getsize())backgroundbackground。convert()background。fill((250,250,250))自己下载OCRAExtended。ttf显示中文的设置和字体,及路径,字体大小120比较好fontpygame。font。Font(homexgjDesktopocraIOCRAExtended。ttf,120)textfont。render(0123456789,1,(10,10,10))textpostext。getrect()textpos。centerbackground。getrect()。centerbackground。blit(text,textpos)screen。blit(background,(0,0))pygame。display。flip()while1:foreventinpygame。event。get():ifevent。typeQUIT:returnscreen。blit(background,(0,0))pygame。display。flip()ifnamemain:main()
  4。2。2图
  截图并命名为:card1。png
  5代码
  5。1myutils。py(自建模块被引用)importcv2defsortcontours(cnts,methodlefttoright):reverseFalsei0ifmethodrighttoleftormethodbottomtotop:reverseTrueifmethodtoptobottomormethodbottomtotop:i1boundingBoxes〔cv2。boundingRect(c)forcincnts〕用一个最小的矩形,把找到的形状包起来x,y,h,w(cnts,boundingBoxes)zip(sorted(zip(cnts,boundingBoxes),keylambdab:b〔1〕〔i〕,reversereverse))returncnts,boundingBoxesdefresize(image,widthNone,heightNone,intercv2。INTERAREA):dimNone(h,w)image。shape〔:2〕ifwidthisNoneandheightisNone:returnimageifwidthisNone:rheightfloat(h)dim(int(wr),height)else:rwidthfloat(w)dim(width,int(hr))resizedcv2。resize(image,dim,interpolationinter)returnresized
  5。2bankcardre。py(主程序代码)第1步:模块导入importcv2importnumpyasnpimportmyutils自建模块被引用fromimutilsimportcontours第2步:指定信用卡类型,国内银行卡暂时不行FIRSTNUMBER{3:AmericanExpress,4:Visa,5:MasterCard,6:DiscoverCard}第3步:显示函数定义因为需要展示的图片比较多,这样打包显得代码简洁defcvshow(str,thing):cv2。imshow(str,thing)cv2。waitKey(0)cv2。destroyAllWindows()第4步:数字字体模板导入和处理imgcv2。imread(homexgjDesktopbankcardrecard1。png)灰度图refcv2。cvtColor(img,cv2。COLORBGR2GRAY)二值化refcv2。threshold(ref,10,255,cv2。THRESHBINARYINV)〔1〕cvshow(imgref,ref)计算轮廓cv2。findContours()函数接受的参数为二值图,即黑白的(不是灰度图)cv2。RETREXTERNAL只检测外轮廓,cv2。CHAINAPPROXSIMPLE只保留终点坐标返回的list中每个元素都是图像中的一个轮廓下面bug,注释掉,删除一个refref,refCnts,hierarchycv2。findContours(ref。copy(),cv2。RETREXTERNAL,cv2。CHAINAPPROXSIMPLE)refCnts,hierarchycv2。findContours(ref。copy(),cv2。RETREXTERNAL,cv2。CHAINAPPROXSIMPLE)cv2。drawContours(img,refCnts,1,(0,0,255),3)cvshow(img,img)print(np。array(refCnts)。shape)注释掉否则报错refCntsmyutils。sortcontours(refCnts,methodlefttoright)〔0〕排序,从左到右,从上到下digits{}for(i,c)inenumerate(refCnts):计算外接矩形并且resize成合适大小(x,y,w,h)cv2。boundingRect(c)roiref〔y:yh,x:xw〕roicv2。resize(roi,(57,88))每一个数字对应每一个模板digits〔i〕roi初始化卷积核rectKernelcv2。getStructuringElement(cv2。MORPHRECT,(9,3))sqKernelcv2。getStructuringElement(cv2。MORPHRECT,(5,5))第5步:银行卡图片处理读取需要识别的银行卡的图片,预处理imagecv2。imread(homexgjDesktopbankcardre1。png)cvshow(image,image)imagemyutils。resize(image,width300)graycv2。cvtColor(image,cv2。COLORBGR2GRAY)cvshow(gray,gray)礼帽操作,突出更明亮的区域tophatcv2。morphologyEx(gray,cv2。MORPHTOPHAT,rectKernel)cvshow(tophat,tophat)ksize1相当于用33的gradXcv2。Sobel(tophat,ddepthcv2。CV32F,dx1,dy0,ksize1)gradXnp。absolute(gradX)(minVal,maxVal)(np。min(gradX),np。max(gradX))gradX(255((gradXminVal)(maxValminVal)))gradXgradX。astype(uint8)print(np。array(gradX)。shape)注释掉否则报错cvshow(gradX,gradX)通过闭操作(先膨胀,再腐蚀)将数字连在一起gradXcv2。morphologyEx(gradX,cv2。MORPHCLOSE,rectKernel)cvshow(gradX,gradX)THRESHOTSU会自动寻找合适的阈值,适合双峰,需把阈值参数设置为0threshcv2。threshold(gradX,0,255,cv2。THRESHBINARYcv2。THRESHOTSU)〔1〕cvshow(thresh,thresh)再来一个闭操作threshcv2。morphologyEx(thresh,cv2。MORPHCLOSE,sqKernel)再来一个闭操作cvshow(thresh,thresh)计算轮廓修改bughresh,threshCnts,hierarchycv2。findContours(thresh。copy(),cv2。RETREXTERNAL,cv2。CHAINAPPROXSIMPLE)threshCnts,hierarchycv2。findContours(thresh。copy(),cv2。RETREXTERNAL,cv2。CHAINAPPROXSIMPLE)cntsthreshCntscurimgimage。copy()cv2。drawContours(curimg,cnts,1,(0,0,255),3)cvshow(img,curimg)locs〔〕遍历轮廓for(i,c)inenumerate(cnts):计算矩形(x,y,w,h)cv2。boundingRect(c)arwfloat(h)选择合适的区域,根据实际任务来,这里的基本都是四个数字一组ifar2。5andar4。0:if(w40andw55)and(h10andh20):符合的留下来locs。append((x,y,w,h))将符合的轮廓从左到右排序locssorted(locs,keylambdax:x〔0〕)output〔〕遍历每一个轮廓中的数字for(i,(gX,gY,gW,gH))inenumerate(locs):initializethelistofgroupdigitsgroupOutput〔〕根据坐标提取每一个组groupgray〔gY5:gYgH5,gX5:gXgW5〕cvshow(group,group)预处理groupcv2。threshold(group,0,255,cv2。THRESHBINARYcv2。THRESHOTSU)〔1〕cvshow(group,group)计算每一组的轮廓,注释掉,修改buggroup,digitCnts,hierarchycv2。findContours(group。copy(),cv2。RETREXTERNAL,cv2。CHAINAPPROXSIMPLE)digitCnts,hierarchycv2。findContours(group。copy(),cv2。RETREXTERNAL,cv2。CHAINAPPROXSIMPLE)digitCntscontours。sortcontours(digitCnts,methodlefttoright)〔0〕计算每一组中的每一个数值forcindigitCnts:找到当前数值的轮廓,resize成合适的的大小(x,y,w,h)cv2。boundingRect(c)roigroup〔y:yh,x:xw〕roicv2。resize(roi,(57,88))cvshow(roi,roi)计算匹配得分scores〔〕在模板中计算每一个得分for(digit,digitROI)indigits。items():模板匹配resultcv2。matchTemplate(roi,digitROI,cv2。TMCCOEFF)(,score,,)cv2。minMaxLoc(result)scores。append(score)得到最合适的数字groupOutput。append(str(np。argmax(scores)))画出来cv2。rectangle(image,(gX5,gY5),(gXgW5,gYgH5),(0,0,255),1)cv2。putText(image,。join(groupOutput),(gX,gY15),cv2。FONTHERSHEYSIMPLEX,0。65,(0,0,255),2)得到结果output。extend(groupOutput)第6步:终端显示和结束打印结果print(CreditCardType:{}。format(FIRSTNUMBER〔output〔0〕〕))print(CreditCard:{}。format(。join(output)))cv2。imshow(Image,image)cv2。waitKey(0)
  6小结
  6。1python和opencv的银行卡数字识别为主,目前以美国银行卡识别为主,国内银行卡识别类似。
  6。2注意数字模板OCRA字体的相关知识复习和模板生成。
  6。3本文介绍比网上的介绍更全面和更细致,更容易懂,适合收藏。
  效果图

一年级语文下册第一课春夏秋冬,看资深教师带学生学习全文统编版教材一年级语文下册,第一单元是个识字单元,一共编排了《春夏秋冬》《姓氏歌》《小青蛙》《猜字谜》四篇课文。下面资深教师杜du带大家走进语文下册书的第一课,杜du老师将……动词时态是死记硬背制造的语法怪物其实是纸老虎首先要特别提醒各位家长:学习语言,首要任务是听懂、会说,而不是用死记硬背的办法记忆单词和语法概念。人类的孩子都是通过模仿成人学习说话,和背单词、学习语法都没有半点关系。……微小说小李的故事一次聚会,朋友对小李开玩笑:怎么结婚了还那么腻。结婚前,爱她的男生成群结队,现在独一无为。对她腻爱,会少许多是非。那像你老婆婚前婚后追求者始终络绎不绝。朋友灰头土脸不再言语。……程序员是什么领?引言技术工人叫蓝领,高级管理者叫金领,朝九晚五上班族叫白领。程序员应该是什么领啊?公司发的衣服大多是短袖T恤,没有领子啊?在现今社会很多人都……什么人会参加精神PUA,他们是如何受害的?网络消息,DCM董事总经理魏萌(SaraWei)在参加一个精神PUA课程,一个四人辱骂一人的互动环节中,因情绪激动突发心脑血管异常不治,不幸离世。年仅32岁。她的两个孩子永远地……迄今为止,科学家们仍然无法找到答案的7个问题科学是在不断地探索和研究中产生进步的,可即便科学家们在不断努力着,依然无法解决所有的问题。哪怕有一些问题在经过了很多年以后也没能够收获答案。今天,杰瑞整理了,迄今为止,科学家们……纵观609000三代青春期女孩最恨父母易抑郁的是哪一代?作者:本文谢绝转载。自己过好了,孩子才能教育好,父母想了解如何调整情绪和亲子关系,收听我的音频、关注我就对啦文玛丽。皮弗,萨拉。吉列姆首发给妈妈们的心理学20……这3所211大学录取分数比部分985院校还高,成绩不好千万别在我国,原位列985工程的39所院校代表国内最高水平的大学,录取分数一般也明显高于其他院校。当然也有例外,有一些行业特色型大学的录取分数一点儿也不低,比如说今天介绍的这3所21……黑龙江一女子人肉占车位,后来车辆直接开进车位被拍窗怒斥近日,黑龙江哈尔滨一辆小车停车时遭遇了人肉占车位,一名女子用自己的身体霸占着一个空车位,小车人员与女子交涉无果后,直接将车停进了怼进了车位内。女子见状恼羞成怒,对着小车玻璃不断……有出息的孩子都是讲规矩的,有远见的家庭都会给孩子立下6条家规01hr别人的东西,不经允许绝不能动别人的东西,不能随便动。这是最基本的教养。但很多家庭忽视了这一点,孩子没有分寸,没有界限,随便动他人的东西,招来的除了讨厌,还有……出了电影院,电影还有什么值得思考电影从黑白到彩色,从2D到3D,展现形式变得越来越丰富多彩,也越来越深入我们的生活。周末、节假日到电影院观影放松对于很多人来说是非常常见的休闲娱乐方式,然而电影除了在线上、线下……刚刚,湖北消费券投放时间定了拼手速的时候到了!9月10日,从省商务厅了解到,湖北消费券发放时间表及细则已经确定,首批优惠券将于9月17日20点,在6大电商渠道同时开抢。据介绍,本次湖北消费券发……
北大院长批评学霸,你们太完美了,就像一个模子造出来的家具我们之所以送孩子上学,并不是因为孩子必须要上学,而是因为他们要为未来的生活做好充分的准备。我们总喜欢讨论学习的意义是什么、读书的意义是什么这类话题,如果单纯从表面上来说,……新手爸妈必备,给宝宝刷牙的正确打开方式花爸说:然而如何选购合适的牙刷和牙膏?成了不少新手父母的一大难题。因此,今天满满的干货花爸这就为你奉上!如何选牙刷?花爸建议根据宝宝年龄段选择牙刷:12……下雨天,是你不再懂得的快乐这个夏天来的比往年早,雨水也比往年多。曾经的我,一到下雨天就有冲到雨里淋雨的冲动,有时候甚至会拉着身边的人一起。上次淋雨,都是06年高中毕业那年的事了。这几天大湖南的天气……教育厅传来消息,学生开学或将线上上课,家长表示无可奈何导语:去年因为疫情的原因,很多学校都采取了线上教学的形式,遵循无接触上课的原则,全中国人居家办公,居家学习,这就成为了一大奇特的景观。十四亿中国人,全部在家里不出门,就是……萱恩妈咪课堂什么是生化妊娠?孕期要补的黑知识!生化妊娠是指精子、卵结合了,生成了受精卵,但是受精卵没有回到子宫里着床,或者是回来了,没有着上床,医学上称此为亚临床流产。发生生化妊娠的原因主要是胚胎本身质量不好,或者受……奥运冠军经历曝光,他们的秘密藏不住了今年东京奥运会,你最喜欢哪个运动员?目前我国拿到金牌的运动员里,不少00后!真是开挂的人生啊!看了比赛,网友都这么感叹。冠军,是一个孩子成长缩影的华丽收尾。……这是我的劫看着我的孩子,人活在世界上,总要有那么一些精神寄托吧。可是惯子如杀子,终究还是太宠他了。太在乎孩子的感受,而忽略了自己的感受。为了孩子的将就和妥协。终于……乳腺癌术后患肢功能锻炼在我国,乳腺癌的发病率呈逐年上升趋势,部分大城市报告中乳腺癌占女性恶性肿瘤首位。而这种疾病首选治疗是手术治疗,由于手术切除了胸部肌肉、筋膜和皮肤,使患侧肩关节活动明显受限制。术……来天津医科大学总医院看病,这份指南一定要收藏看病,是每个人既无奈又必须经历的。为了方便广大患者就医,小Q今后将定期推出天津部分三甲医院的看病就医指南,内容涵盖预约、挂号、取号、爽约、取消预约等方面,记得保存收藏。看……宝贝成长记今天是二宝心心出生的第90天,今天的上海降温了,感觉特别冷,昨天还热的穿短袖短裤,今天突然变天了,弄的我都不知道给孩子们穿什么了〔捂脸〕,昨天晚上心心躺在摇椅上抠嘴,结果抠吐奶……天生我材必有用逻辑数学智能第一个注意到7条鱼与7天这两组数字之间相似之处的人,在思想史上迈出了一大步。他是第一位拥有纯数学科学概念的人。有一天,一名将要成为数学家的儿童,在自己面前看到了一组物体,……一年级坚持8点半睡的孩子,现在怎么样了?文图图妈来源三个妈妈六个娃最近,全国政协委员、江苏省锡山高级中学校长唐江澎火出了圈,他关于教育的真谛是什么的回答,引发了大家的思考,也让大家记住了那句话:学生……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网