0


Python自动化办公:批量识别图片文字并存为Excel

大家好,也许你还记得,前不久复旦大学一博士生写了130行

  1. Python

代码,批量识别核酸截图内容的故事。当时还被人民日报公众号报道出来,夸赞用所学贡献青春力量!

其实,批量文字识别(OCR)是

  1. Python

办公自动化的基本操作,应用在我们工作生活中的方方面面,比如车牌识别、证件识别、银行卡识别、票据识别等等。

  1. Python

  1. OCR

第三方库非常多,比如

  1. easyocr

  1. PaddleOCR

  1. cnocr

等等。当然,直接调用百度

  1. API

也是可以的,不过超过一定限额后要收费,因此本文主要以开源免费的

  1. easyocr

来进行介绍。喜欢记得收藏、点赞、关注。

注:完整版代码、技术交流,文末获取

需求

本文以证件识别为例,我网上找了3张虚拟身份证来实验:

图片

运用

  1. easyocr

进行识别并保存为

  1. Excel

,效果如下:

图片

实战

1.安装模块

  1. Python

中使用

  1. easyocr

非常简单,只要使用

  1. pip

命令安装

  1. easyocr

即可(建议使用清华源,否则安装会比较慢)。

  1. pip install easyocr

不过

  1. easyocr

的深度学习算法依赖于另一个著名的第三方模块

  1. pytorch

,图形处理部分则会用到

  1. opencv

  1. Pillow

等,所以还需要确保自己电脑上已经安装这些基础模块。

2.识别一张图片

    1. easyocr
    识别图片代码非常简洁,只需要创建一个
    1. easyocr.Reader
    类对象,指定以下两个常用参数:
  • 需要识别的文字属于哪几种语言
  • 是否启用GPU显卡加速

2.调用

  1. Reader

对象的

  1. readtext

方法,将图片中所有文字读入一个列表并返回。

  1. # 导入模块import easyocr
  2. # 图片路径
  3. image ='./id_card/1.jpg'# 创建ocr的reader对象,识别中英文
  4. ocr = easyocr.Reader(['ch_sim','en'],gpu=False)# 识别图片文字
  5. content = ocr.readtext(image)print(content)

识别结果如下:

  1. [([[39,31],[207,31],[207,67],[39,67]],'姓 名 韦小宝',0.8973890994570185),([[40,82],[159,82],[159,119],[40,119]],'性 别 男',0.9799311480828728),([[178,86],[272,86],[272,116],[178,116]],'民 族汉',0.5456928014755249),([[40,131],[100,131],[100,161],[40,161]],'出 生',0.5362269878387451),([[114,134],[240,134],[240,162],[114,162]],'1654 年12',0.6952526392609933),([[266,134],[322,134],[322,162],[266,162]],'20日',0.31329770168285426),([[42,181],[395,181],[395,213],[42,213]],'住 址 北京市东城区景山前街4号',0.48138251996753667),([[112,222],[256,222],[256,254],[112,254]],'紫禁城敬事房',0.9732440311960702),([[44,307],[195,307],[195,337],[44,337]],'公民身份证号码',0.612808391503521),([[212,308],[526,308],[526,334],[212,334]],'112044165412202438',0.7003081027071493)]
  1. readtext

返回的列表中,每个元素都是一个元组,内含三个信息:位置、文字、置信度。我们可以在调用

  1. readtext

时指定一个参数

  1. detail=0

,从而只返回文字内容。于是修改后代码和效果如下:

  1. import easyocr
  2. image ='./id_card/1.jpg'
  3. ocr = easyocr.Reader(['ch_sim','en'],gpu=False)
  4. content = ocr.readtext(image,detail=0)print(content)
  1. ['姓 名 韦小宝','性 别 男','民 族汉','出 生','1654 年12','20日','住 址 北京市东城区景山前街4号','紫禁城敬事房','公民身份证号码','112044165412202438']

3.批量识别图片

批量识别图片无非就是遍历图片文件夹,这里用到了

  1. os.listdir()

方法以返回文件列表。然后用

  1. ocr.readtext()

去识别每一张图片文字内容,接着通过字符串切片来获取姓名、性别、民族、出生、住址和身份证号等关键信息,最后统一将这些信息存入列表

  1. data

中。

  1. import easyocr
  2. import os
  3. # 指明所有图片所在的文件夹
  4. images ='./id_card'# 创建ocr的reader对象,识别中英文
  5. ocr = easyocr.Reader(['ch_sim','en'])# 识别图片文字
  6. content = ocr.readtext(images,detail=0)# 遍历所有图片并识别文字,切片提取有效信息
  7. data =[]for image in os.listdir(images):
  8. content = ocr.readtext(f'{images}/{image}', detail=0)print(f"正在识别:{image}")
  9. name = content[0][4:]
  10. gender = content[1][-1]
  11. nation = content[2][-1]
  12. birth = content[-5]if"月"notin birth:
  13. birth = content[-6]+"月"+ content[-5]if"日"notin birth:
  14. birth = birth[:-1]+"日"
  15. address = content[-4][4:]+ content[-3]
  16. number = content[-1]print(f"完成识别:{image}")print("-"*50)
  17. data.append([name, gender, nation, birth, address, number])

4.保存数据

图片文字识别之后,建议通过

  1. pandas

输出为

  1. Excel

,方便简洁。

  1. import pandas as pd
  2. # 保存识别结果至Excel
  3. df = pd.DataFrame(data, columns=["姓名","性别","民族","出生","住址","身份证号"])print(f"识别结果如下:")print(df)
  4. df.to_excel("识别结果.xlsx", index=False)

推荐文章

  • 李宏毅《机器学习》国语课程(2022)来了
  • 有人把吴恩达老师的机器学习和深度学习做成了中文版
  • 上瘾了,最近又给公司撸了一个可视化大屏(附源码)
  • 如此优雅,4款 Python 自动数据分析神器真香啊
  • 梳理半月有余,精心准备了17张知识思维导图,这次要讲清统计学
  • 年终汇总:20份可视化大屏模板,直接套用真香(文末附源码)

技术交流

欢迎转载、收藏、有所收获点赞支持一下!数据、代码可以找我获取

在这里插入图片描述

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

长按关注


本文转载自: https://blog.csdn.net/weixin_38037405/article/details/125107818
版权归原作者 Python学习与数据挖掘 所有, 如有侵权,请联系我们删除。

“Python自动化办公:批量识别图片文字并存为Excel”的评论:

还没有评论