python识别图片中数字_使用Python程序识别图像中的数字
最近跑了很多的视频分类的实验,实验日志我记录在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程序识别图像中的数字相关推荐
- python批量识别图片中文字_利用Python批量进行图片文字识别
实现逻辑 1. 批量获取图片的路径 2. 通过调用百度OCR接口批量识别图片 3. 将返回值写入txt 实现过程 1. 安装百度的Python SDK pip install baidu-aip 2. ...
- 程序员数字_作为社会科学程序员处理不同的数字数据
程序员数字 Yesterday I had a discussion with a fellow student in Social Data Science, and we asked oursel ...
- python求数组平均值_用python求一个数组的和与平均值的实现方法
用python求一个数组的和与平均值的实现方法 如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:&q ...
- python使用matplotlib可视化折线图、在可视化图像中同时绘制多条折线图
python使用matplotlib可视化折线图.在可视化图像中同时绘制多条折线图 目录 python使用matplotlib可视化折线图.在可视化图像中同时绘制多条折线图
- html中写自增数字,WPS word中数字怎么自增 如何在word中设置数字的千位分隔符
选中某行,列或者某一部分,选择菜单栏的"行和列"->"填充"选项,选择序列选项. 在弹出的窗口中设置你需要的选项. WPS文字怎样自动增加数字 如何在WP ...
- python批量识别图片中文字_如何用Python识别图片中的文字?
一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...
- python数字识别kaggle论文_基于Python语言Kaggle的数据集分析
界 基于 Python 语言 Kaggle 的数 据集 分析 段 聪 聪 柴 世 一 * 渊 河 南 大 学 计 算 机 与 信 息 工 程 学 院 袁 河 南 开 封 475004 冤 揖 摘 要 ...
- python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛.鼻子. ...
- python进行数据查询_使用Python实现NBA球员数据查询小程序功能
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...
- python 幂运算 整数_在Python中检查一个数字是否是另一个数字的幂
python 幂运算 整数 To solve this problem simply, we will use the log() function from the math module. The ...
最新文章
- 系统权限oracle,oracle系统权限
- 印度式画线乘法基本操作
- PyTorch机器学习从入门到实战-CH2
- pdf打印显示spoolsv.exe-应用程序错误的原因和解决方法
- CentOS7图形界面模式
- PS使用:解决图片使用PS打开提示无法完成请求,因为找到不知名的或无效的JPEG标志符类型
- php mysql留言板制作教程_php留言板制作教程
- ArcGIS:土地利用变化模式图绘制,土地利用转移矩阵
- 学习用PS美化软件界面
- phpstorm连接mysql
- 永久开源的cms系统
- 2021-12-11 工作记录--Wechat applet-结合<van-popup>和<van-picker> 实现年份、月份下拉选择弹窗+禁止滚动穿透
- 单节点Rancher离线安装的关键一步
- 符合OpenDRIVE规范的xodr文件格式解读(1) ——road部分
- 从汇编角度看一个C函数调用
- linux下的文件搜索功能
- HTML如何自动播放网易音乐,教大家网易云音乐打开自动播放功能的流程
- laya2.0 微信好友对战
- 各个学习英文网站的汇总
- python实践意义_在Python学习中过程比结果更有意义
热门文章
- kindle DXG 安装多看
- c语言邮递员问题算法,中国邮递员问题的求解实例
- 差点以为是本人!这个3D人体生成模型厉害了,还能自己改POSE
- 光伏电站matlab仿真,光伏发电的MATLAB仿真.doc
- Xposed框架安装、使用及插件开发
- 苹果ipad9和华为matepad11选哪个好
- 【论文阅读】Multitask Prompted Training Enables Zero-shot Task Generalization
- 用C语言编程复数计算器,简单实现C++复数计算器
- 特征探索性分析Exploring_features
- C/C++实现atoll函数