最近跑了很多的视频分类的实验,实验日志我记录在google sheet中,每个实验在本地都保存有对应的log和混淆矩阵。

在运行实验的时候,我为了便于观察混淆矩阵,将它保存成了png格式的图像,现在为了计算一个新的指标,我需要用到混淆矩阵中的数据。

最直接的办法就是手动输入,由于数据量较大,而且小数点后位数也很多,这种做法显然有违人道主义精神。

为了解决这个问题,我找到了一种方法,能够识别出图像中的数字。

我的混淆矩阵全都是用统一的格式保存的,因此本文不涉及检测的问题,直接定位就行了。

识别数字

说到识别数字,相信很多人和我的第一反应一样,想到了Mnist数据集。但Mnist是手写数字,而且是单个数字的识别,还需要自己训练模型,或者去调试别人训练好的模型。

我不想搞这么麻烦,于是找到了pytesseract包,pytesseract是基于Google tesseract

ocr的一个OCR工具,识别率还不错。

安装pytesseract

以Ubuntu为例

1

2sudo apt-get install tesseract-ocr libtesseract-dev

pip install pytesseract

对混淆矩阵进行识别

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23def getCFMatrix(imgpath, class_num=4, start_position=(40, 128), block_height=95, block_width=93):

'''

Convert confusion matrix to numpy matrix via ocr.

:param imgpath: Confusion matrix file path.

:return: Numpy matrix.

'''

img = cv2.imread(imgpath)

ErrorRows = []

CFMatrix = np.zeros([class_num, class_num])

for i in range(class_num):

for j in range(class_num):

cropped_img = img[start_position[0] + block_height * i:block_height * (i + 1) + start_position[0],

start_position[1] + block_width * j:start_position[1] + block_width * (j + 1)]

text = pytesseract.image_to_string(cropped_img)

CFMatrix[i, j] = float(text)

RowSum = CFMatrix.sum(axis=1)

for i in range(RowSum.shape[0]):

if np.abs(RowSum[i] - 1.0) > 0.0005:

ErrorRows.append(i)

print('-'*20)

print("Error occurs in row {0}".format(i+1))

print(imgpath)

return CFMatrix, ErrorRows

在这段代码中,我手动划分出了混淆矩阵每个数字所在的区域。在查看识别结果的时候,我发现tesseract常常会存在识别错误的情况,比如将5和6,3和8弄混。好在混淆矩阵天生的性质是Ground Truth对应的行/列元素之和应该为1。根据这一性质我们可以检查是否存在识别错误的情况。

将结果保存至Excel

识别完成之后还需要手动校正一些错误,根据上一节,错误位置已经被标记出来,因此校正工作就十分轻松了。

我通过xlsxwriter保存识别后的矩阵以及原始的混淆矩阵图像。

详细的代码在这个Gist页面。

python识别图片中数字_使用Python程序识别图像中的数字相关推荐

  1. python批量识别图片中文字_利用Python批量进行图片文字识别

    实现逻辑 1. 批量获取图片的路径 2. 通过调用百度OCR接口批量识别图片 3. 将返回值写入txt 实现过程 1. 安装百度的Python SDK pip install baidu-aip 2. ...

  2. 程序员数字_作为社会科学程序员处理不同的数字数据

    程序员数字 Yesterday I had a discussion with a fellow student in Social Data Science, and we asked oursel ...

  3. python求数组平均值_用python求一个数组的和与平均值的实现方法

    用python求一个数组的和与平均值的实现方法 如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:&q ...

  4. python使用matplotlib可视化折线图、在可视化图像中同时绘制多条折线图

    python使用matplotlib可视化折线图.在可视化图像中同时绘制多条折线图 目录 python使用matplotlib可视化折线图.在可视化图像中同时绘制多条折线图

  5. html中写自增数字,WPS word中数字怎么自增 如何在word中设置数字的千位分隔符

    选中某行,列或者某一部分,选择菜单栏的"行和列"->"填充"选项,选择序列选项. 在弹出的窗口中设置你需要的选项. WPS文字怎样自动增加数字 如何在WP ...

  6. python批量识别图片中文字_如何用Python识别图片中的文字?

    一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...

  7. python数字识别kaggle论文_基于Python语言Kaggle的数据集分析

    界 基于 Python 语言 Kaggle 的数 据集 分析 段 聪 聪 柴 世 一 * 渊 河 南 大 学 计 算 机 与 信 息 工 程 学 院 袁 河 南 开 封 475004 冤 揖 摘 要 ...

  8. python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛.鼻子. ...

  9. python进行数据查询_使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...

  10. python 幂运算 整数_在Python中检查一个数字是否是另一个数字的幂

    python 幂运算 整数 To solve this problem simply, we will use the log() function from the math module. The ...

最新文章

  1. 系统权限oracle,oracle系统权限
  2. 印度式画线乘法基本操作
  3. PyTorch机器学习从入门到实战-CH2
  4. pdf打印显示spoolsv.exe-应用程序错误的原因和解决方法
  5. CentOS7图形界面模式
  6. PS使用:解决图片使用PS打开提示无法完成请求,因为找到不知名的或无效的JPEG标志符类型
  7. php mysql留言板制作教程_php留言板制作教程
  8. ArcGIS:土地利用变化模式图绘制,土地利用转移矩阵
  9. 学习用PS美化软件界面
  10. phpstorm连接mysql
  11. 永久开源的cms系统
  12. 2021-12-11 工作记录--Wechat applet-结合<van-popup>和<van-picker> 实现年份、月份下拉选择弹窗+禁止滚动穿透
  13. 单节点Rancher离线安装的关键一步
  14. 符合OpenDRIVE规范的xodr文件格式解读(1) ——road部分
  15. 从汇编角度看一个C函数调用
  16. linux下的文件搜索功能
  17. HTML如何自动播放网易音乐,教大家网易云音乐打开自动播放功能的流程
  18. laya2.0 微信好友对战
  19. 各个学习英文网站的汇总
  20. python实践意义_在Python学习中过程比结果更有意义

热门文章

  1. kindle DXG 安装多看
  2. c语言邮递员问题算法,中国邮递员问题的求解实例
  3. 差点以为是本人!这个3D人体生成模型厉害了,还能自己改POSE
  4. 光伏电站matlab仿真,光伏发电的MATLAB仿真.doc
  5. Xposed框架安装、使用及插件开发
  6. 苹果ipad9和华为matepad11选哪个好
  7. 【论文阅读】Multitask Prompted Training Enables Zero-shot Task Generalization
  8. 用C语言编程复数计算器,简单实现C++复数计算器
  9. 特征探索性分析Exploring_features
  10. C/C++实现atoll函数