最近收到一个任务,任务内容如下:

指定一个目录,内含数千张图片,要求能将指定区域的数字记录下来,便于分析,图片如下所示

红框部分是需要识别出的区域

先分析下功能需求

1.识别指定区域的数据

2.将数据导出为excel

这里有一个很简单的方法,就是使用easyocr识别整张图片,然后检索结果,整理成excel

识别代码如下:

import easyocr
reader = easyocr.Reader(['en'])
result = reader.readtext("xx.bmp")
#打印出所有识别到的文字
print(result)

很简单的一段代码,执行完成后,就能将图片上能识别到的文字都存到result上,

我们可以先打印出来,用人肉识别出需要识别的数据坐标x,y是什么,之后写if else将信息筛选出来

下面是执行的结果

apple@MacBook-Pro ocr % python3 ocr_img.py
CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU.[([[277, 0], [355, 0], [355, 19], [277, 19]], 'FC0RI1', 0.0014008946827395506),
([[479, 0], [637, 0], [637, 19], [479, 19]], '2021-10-13,21:19:58',
0.6067788830140517),
([[5, 17], [57, 17], [57, 37], [5, 37]], 'CHI23:',
0.4357974768811839),
([[69, 17], [107, 17], [107, 37], [69, 37]], 'Ir8W', 、0.07446147501468658), ([[125, 17], [171, 17], [171, 37], [125, 37]], 'IOOO',
0.34371185302734375),
([[189, 17], [231, 17], [231, 37], [189, 37]], '5C8',
0.01371344964992317),
([[381, 17], [489, 17], [489, 37], [381, 37]], 'U:220 f:
SOHZ', 0.25379714901679773), ([[545, 19], [567, 19], [567, 37], [545, 37]], '8',
0.002208985491478424),
([[585, 21], [635, 21], [635, 39], [585, 39]], '24days',
0.36577745892357233),
([[10, 34], [86, 34], [86, 60], [10, 60]], 'MONITOR',
0.3407369661092041),
([[108, 36], [146, 36], [146, 60], [108, 60]], '8/8',
0.9650125824419508),
([[236, 34], [289, 34], [289, 63], [236, 63]], '放',
0.948400562849713),
([[296, 36], [326, 36], [326, 60], [296, 60]], '大',
0.8672227436346134), ([[521, 37], [567, 37], [567, 57], [521, 57]], '鸥ET',
0.0012719364986274106), ([[6, 62], [214, 62], [214, 88], [6, 88]], 'Btart :10-
13_10:43:5', 0.11246014436800789),
([[226, 63], [276, 63], [276, 89], [226, 89]],
'Time:', 0.9575283801158503),
([[294, 62], [442, 62], [442, 88], [294, 88]],
'Odayg_10:36:@', 0.20593363300327408),
([[25, 93], [135, 93], [135, 153], [25,
153]], 'Urms', 0.9993236064910889),
([[324, 96], [482, 96], [482, 150], [324,
150]], '236.42', 0.9945926786375755), ([[28, 158], [132, 158], [132, 210], [28,
210]], 'IrMS', 0.6551271080970764), ([[352, 156], [482, 156], [482, 212], [352, 212]], '1.734', 0.903081369161515), ([[528, 162], [552, 162], [552, 204], [528, 204]], 'A', 0.8598717599713979), ([[25, 214], [138, 214], [138, 275], [25, 275]], 'Freq', 0.9916050434112549), ([[324, 216], [482, 216], [482, 272], [324, 272]], '49.996', 0.9935817354482747), ([[523, 215], [585, 215], [585, 275], [523, 275]], 'Hz', 0.7322396318166535), ([[350, 276], [506, 276], [506, 332], [350, 332]], '0.229k', 0.8985150015324731), ([[526, 280], [558, 280], [558, 326], [526, 326]], '川', 0.04304330616733765), ([[21, 271], [86, 271], [86, 451], [21, 451]], '阼', 0.008450670474303479), ([[348, 336], [506, 336], [506, 392], [348, 392]], '0.410k', 0.9760298809799972), ([[526, 336], [582, 336], [582, 392], [526, 392]], 'VA', 0.985728575046812), ([[302, 396], [482, 396], [482, 452], [302, 452]], '-0.5576', 0.8452973534231776), ([[26, 454], [110, 454], [110, 480], [26, 480]], '画面选择', 0.22726230323314667), ([[152, 454], [236, 454], [236, 480], [152, 480]], '项目选择', 0.004154475871473551), ([[534, 454], [618, 454], [618, 480], [534, 480]], '画面保持', 0.7061346769332886)]

仔细查看数据,可以发现我们要找的第一个框的数据信息如下

([[324, 96], [482, 96], [482, 150], [324, 150]], '236.42', 0.9945926786375755)

一个元组,有三个数据,第一个数据是坐标信息,第二个是识别到的字符串,第三个是识别的准确率

4个坐标分别代表了图片的四个角

其它数据也是按这个逻辑找到,接下来,我们只需要写一个for循环,用if else将结果识别出来即可,下面是我项目的部分代码,以作参考

def ocr_img(img):# 创建reader对象# 读取图像if not img.endswith("jpg"):returnresult = reader.readtext(img)print(result)print(len(result))line=[]for a in result:s=a[1];x=a[0][0][0]y=a[0][0][1]if x==479:
#            print("time:"+s)line.append(s)if x>=300 and x<=356 and y>=90 and y<=100:
#            print("Urms:"+s)line.append(s)if x>=300 and x<=356 and y>=145 and y<=160:
#            print("Irms:"+s)line.append(s)if x>=300 and x<=356 and y>=200 and y<=220:
#            print("Freq:"+s)line.append(s)if x>=300 and x<=356 and y>=270 and y<=280:
#            print("P:"+s)line.append(s)if x>=300 and x<=356 and y>=330 and y<=340:
#            print("S:"+s)line.append(s)if x>=300 and x<=356 and y>=390 and y<=400:
#            print("PF:"+s)line.append(s)if len(line)==7:print(line)if not os.path.exists("result/"+img+".result"):s=""for i in range(0,len(line)):s+=line[i]+","open("result/"+img+".result","w").write(s)else:print("error:"+img,line)for a in result:print(a)

有多张图片的话,直接for调用即可解决问题

最后会将识别到的结果以csv的格式存起来,可以用excel直接打开查看

这是第一版的程序,执行一个命令行,将那几千张图片转换成csv,任务完成

最终出来的数据,虽然有一部分不是很完整,或者有些错乱,但总体来说还是好的,至少不用费力一个个输,只需要将出错的地方修复一下,能节省大量的录入时间,perfect

第二版程序2.0,就做成了图形化界面,可以针对不同的图片进行批量的识别,如下图所示

之后再有类似的任务,就是选择目录,点击运行,等个2小时,就OK了

3000张图片2小时识别完,性能还是差了点,反正是挂机的,没关系,

等哪天有空再写个3.0吧

如何用python批量识别图片上的文字(一)相关推荐

  1. 如何用python批量识别图片上的文字(二)

    上一篇文章讲的是1.0怎么批量识别,这一篇则讲解2.0的实现细节 两个版本功能细分如下: 1.0 支持批量识别图片并输出csv文件 2.0 包含1.0所有功能,并支持选定识别区域,单个识别和批量识别功 ...

  2. python识别图片指定位置文字_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  3. python 制定识别图片的某些区域_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  4. python查找图片区域_python批量识别图片指定区域文字内容

    python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  5. python3识别图中的文字_Python3.x:如何识别图片上的文字

    Python3.x:如何识别图片上的文字 安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google ...

  6. python怎么识别图片里面的文字并合成语音_几行代码搞定识别图片中的文字信息,同时转换成语音...

    image前几天想把一篇不错的文章保存下来,无奈是图片的,于是想利用python把图片中的文字识别出来 实现的方式还是挺多的,这里介绍下百度的AI开放平台,毕竟大公司,感觉识别的精度会高点,同时相信他 ...

  7. 识别图片上的文字,如何在线识别?

    如何在线识别图片上的文字?其实很简单的,我们借助一些工具就可以进行识别了.不会识别图片文字的小伙伴们,可以跟着小编一起来学习一下哈! 步骤一:首先我们就是要在电脑上,下载一款工具.下载安装完成识别图片 ...

  8. 教你用OCR文字识别工具快速识别图片上的文字

    OCR文字识别工具,指利用OCR(Optical Character Recognition,光学字符识别) 技术,将图片.照片上的文字内容,直接转换为可编辑文本的工具.软件可以把图片 转换成可以编辑 ...

  9. 可以识别图片上的文字的小程序

    微信上的小程序相信大家都不陌生,近年来,微信小程序从"跳一跳"之后,越发火了.由于小程序的出现,微信上的功能也逐渐增加了,今天就给大家介绍一个小程序,比较实用,它可以快速识别图片上 ...

最新文章

  1. 构筑超异构计算时代,英特尔 AI 全布局
  2. 中科院自动化所招AI算法实习生!
  3. .Net版InfluxDB客户端使用时的一些坑
  4. 基于pygame的射击小游戏制作(三)让外星人动起来
  5. opencv学习笔记8:类型转换
  6. byte数组穿换成pcm格式_形象地介绍DSD的编解码原理及和PCM的区别
  7. 如何确定你的伴侣真的爱你?复杂数学公式告诉你
  8. java中生成pdf文件,java 中生成pdf 文件
  9. 【转】《iOS7 by Tutorials》系列:iOS7的设计精髓(下)
  10. 爬楼梯 · Climbing Stairs
  11. 凸优化第五章对偶 5.9广义不等式
  12. zemax输出ies_基于ZEMAX的光学设计教程(第2版)
  13. shenyu自定义插件
  14. 【pytest官方文档】解读-fixtures函数和测试函数的参数化
  15. 【最新版】VScode C\C++中文路径无法运行问题解决办法
  16. mysql分区表去重复_MySQL分区表管理
  17. RIFF和WAVE文件格式
  18. 为什么双赞安卓ARM工控主板应用前景那么好?
  19. VMWare中ubuntu打开终端方法
  20. opencart seo优化_OpenCart商品与目录页标题SEO优化

热门文章

  1. English - every和each的用法和区别
  2. 计算机怎么不休眠,怎么设置电脑不休眠?
  3. 逆向学习litevm篇
  4. 程序员与公务员之争,到底选啥?
  5. linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录
  6. JAVA反色计算方法的改进和修正
  7. android 精品软件,《分享精彩应用 Android精品软件推荐》
  8. Android仿微信气泡样式使用drawable实现
  9. 新一代人工智能产业技术创新战略联盟和开放原子开源基金会举行战略合作签约仪式
  10. Linux Graphics 周刊(第 9 期)