python 图片识别_python识别图片文字

滑稽研究所9ac0640c454ef17421504d87a77eaa2c.gif

python识别图片文字

哈喽,大家好呀,我是滑稽君。大家在写论文时可能经常碰到无法复制文字的文章。明明找到了需要的内容却无法直接复制使用,这让我们十分苦恼。那么本期滑稽君就告诉大家如何使用python识别图片中的文字。

滑稽君整理了网上使用率最高的两种方法。

一是pytesseract+Tessseract-OCR进行图片识别。

二是调用百度文字识别提供的API进行图片文字的处理。

下面我将告诉大家这两种方法一些容易跳坑的地方。

0363fa8c193875d44cd78897bca91008.gif

视频讲解:

7156adc90916e45aa81ee9ca664c435d.gif❂ pytesseract+Tessseract-OCR

第一种方法需要注意的地方是一些第三方库的下载,我们需要用到pytesseract库和pillow库,这两个库我们都可以在cmd中直接pip下载,需要注意的是我们还需额外下载一个文件——tesseract-ocr。下载这个文件之后我们直接安装注意不要修改他的默认路径(大神忽略)。一些小伙伴可能需要配置一下环境路径,滑稽君安装之后它自动帮我添加了,大家注意一下即可。

下载链接:

https://pan.baidu.com/s/1OL0g1MBzeijD23JN0UGC0Q

这个工具默认支持英文,我们需要下载支持中文的包,然后放在这个目录下。C:\Program Files (x86)\Tesseract-OCR\tessdata  里面已经有了支持英文的包是eng开头的,我们放入的支持中文的包是chi_sim开头的意思是中文简体。

接着我们需要在这个目录下找到图片中的最后一个文件,打开文件(用记事本即可)找到如图所示位置后进行如下修改。这个路径一般是通用的,这也是一开始为什么不修改默认路径的原因。当我们准备工作都完成后代码部分就比较简单了。

131e778edade853ca7e4d31264292254.png

27ec61e47ff8919b3355dd7b096964ca.png

源代码:

import pytesseractfrom PIL import Image pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract-OCR\tesseract.exe"text = pytesseract.image_to_string(Image.open('C:\\Users\\86157\\pysw.png'),lang="eng")#识别英文参数为  lang="eng"  中文为lang="chi_sim"   如果参数不对识别就会乱码。# 创建一个txt文件,文件名为mytxtfile,并向文件写入msgdef text_create(name, msg):    desktop_path = "C:\\Users\\86157\\Desktop\\"  # 新创建的txt文件的存放路径    full_path = desktop_path + name + '.txt'  # 也可以创建一个.doc的word文档    file = open(full_path, 'w')    file.write(msg)   #msg也就是下面的Hello world!    file.close()    text_create('saveworld',text)
❂ 调用百度文字识别提供的API

这个方法主要是使用百度文字识别提供的API接口,来完成对图片文字的识别。需要用到baidu-api这个第三方库,cmd中可以直接pip安装。我们需要去百度云免费申请一个百度云文字识别api的接口,获得你自己的APP_ID,API_KEY,SECRET_KEY。

源代码:

#-*- coding: UTF-8 -*-#前提是python已安装aip库--》pip install baidu-aip import osfrom aip import AipOcrimport jsonAPP_ID = '' #你的APP_IDAPI_KEY = '' #你的API_KEYSECRET_KEY = ''  #你的SECRET_KEYaipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)os.chdir("")  #你需要转换的图片目录,大家自行替换。dirs = os.listdir()def get_file_content(filePath):    with open(filePath, 'rb') as fp:        return fp.read()options = {}options["language_type"] = "CHN_ENG"options["detect_direction"] = "true"options["detect_language"] = "true"options["probability"] = "true" print('开始处理,共'+str(len(dirs))+"张图片。")flag=0T = 0 #统计处理图片成功的数量for filePath in dirs:    if filePath.split('.')[-1]=='txt':continue    flag+=1    print('正在处理第'+str(flag)+'张图片')    try:        result = aipOcr.basicGeneral(get_file_content(filePath), options)    except BaseException as e:        print(e)    else:        try:            with open(filePath.split('.')[0]+'.txt','w',encoding='utf-8') as f:                for i in result['words_result']:                        f.write(i['words']+'\n')                T += 1        except BaseException as e :            print(e)        else:            print('处理完成')print('{}全部处理完成!{}'.format("="*30,"="*30))print('处理成功的图片有{}张,处理失败的图片有{}张'.format(T,len(dirs)-T))

效果图:

方法一:左边为滑稽君自制的图片,右边为识别之后转txt的效果。

可以看到中文识别正确率还说一点低的。英文识别的效果倒是还可以没有出现错误的情况,这里就不展示了。

1402c166943854a954171ee6a0b45890.png

方法二:左边为滑稽君自制的图片,右边为识别之后转txt的效果。

d9b68f8a050c8ffa76d6b41b80ed4f8b.png

可以看到第一种方法对图片中文字的识别准确率较第二种要差很多,特别是在中文的识别上。因此大家日常使用的话还是推荐第二种方法,还有就是下载安装文件和配置环境变量对小白来说不是那么友好。

第一种方法识别图片中文字,如果图片里有中英混杂的情况,就只能识别一种语言。而调用百度文字API的方法可以英文、中文、数字混合在一张图里识别,并且准确率高。前者可以单机识别,后者则是要求网络的。

本期素材来源:

https://blog.csdn.net/zhangshaohua1603/article/details/79722399https://blog.csdn.net/L141210113/article/details/88835914?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare
fe427460ecd7894579fe1d0be31b2a08.gif❂ END

两种方法都为大家整理完毕了,有什么问题欢迎私信滑稽君。

aefebd483a058a8519fc2ced421dd58b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库的数据类型decimal详解

大概意思是这样的: decimal(m,d) m是数字的最大位数,他的范围是从1-65; d是小数点后的位数,他的范围是0-30,并且不能大于m。 如果m被省略了,那么m的值默认为10, 如果d被省略了,那么d…

如何撰写论文

【0】README 0.1)本内容转自一个学长的口述,该学长在硕士期间发表论文6篇,现在 某高校读博; 0.2)鉴于看的人比较多,于今日对文本进行排版便于各位阅读(timestamp: 1512141116)&…

java查找链表中间元素_如何通过Java单次查找链表的中间元素

java查找链表中间元素您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员。 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还会要求编写代码。 为了回答这个问题,候选人必须熟悉LinkedList的数…

python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...

在 PHP 中,想要获取由 SELECT 语句查询到的结果集中有多少条数据的话,则需要使用 mysqli_num_rows() 函数来实现。首先我们来看一下该函数的语法结构:面向对象风格的写法$mysqli_result -> num_rows;其中 $mysqli_result 为使用 mysqli_qu…

Windows系统下,好用的录屏软件工具/屏幕录制工具

文章目录万兴神剪手Open Broadcaster Software(OBS)QQ录屏Window 10 自带的屏幕录制软件录屏王bandicam万兴神剪手 可以录制网络视频、视频教程、游戏指南、演示文稿等。除了一些需要调用显卡的游戏,游戏窗口画面都能录制。神剪手的后期剪辑…

What are definitions of ​Model, Inference and Algorithm and its associations ?

【1】拿初中的二元一次方程来说明: 1.1)说model就好比一元二次方程,它是个方程模型;1.2)再说inference是求解该方程的某种方法——加减消元法(重在推理);1.3)最后说algo…

aws ec2 选择可用区_AWS Messaging Services:选择合适的服务

aws ec2 选择可用区1. AWS消息服务 AWS Messaging服务使云中相似和不同的软件系统能够异步通信和交换信息。 这些软件系统可能不兼容且使用不同的语言,也可能在不同的平台上。 AWS消息传递服务具有高度可用性,高度可扩展性和高度可靠性。 AWS支持针对不同…

qq消息连发代码_我们用的QQ是怎样实现通讯的

聊天工具便利了我们的生活,我们经常使用的QQ怎样实现通讯的呢?首先我们需要知道网络里的两种协议,两种通讯协议分别为UDP和TCP通常网络之间的通讯都是由这两个协议支持的,这两种协议属于传输层,它可以传输文件。UDP&am…

产品经理十大悲催错误

文章目录错误1: 将用户需求混淆为产品需求错误2: 将老板的需求混淆为产品需求错误3:将发明(invention)混淆为创造(innovation)错误4: 以自己的需求取代用户的需求错误5: …

cognito_将Spring Boot应用程序与Amazon Cognito集成

cognito在本文中,我们将展示如何使用Spring Security 5.0中引入的OAuth 2.0客户端库 ,在Spring Boot应用程序中为身份验证用户使用Amazon Cognito服务。 什么是AWS Cognito? Amazon Cognito是由AWS提供的服务,除了提供支持访问AW…

how to build a paper's architecture?

【0】README 0.1) these contents below are from PhD Hongjun Wang on ML class in #9133. best regards! 0.2) these contents below are just for reference. 【1】related to build a paper’s architecture 1.1) problem? what’s…

python之路 mysql 博客园_Python之路(二十七):Mysql(下)

本结目录数据库操作数据表操作外键约束多表查询索引事务python连接Mysql数据库操作此操作针对windows环境下该操作再Mysql服务器启动以及客户端连接之后对数据库操作之前,引申一些较为听的懂的白话1、显示数据库show databases; --后面记得跟英文字符的分号show cre…

APP视觉稿该怎么切图和标注

本篇教程跟大家分享UI设计的一些知识,就是APP怎么切图和标注,还不懂的同学,赶紧了解一下。 首先:哪些东西要切出来? 简单来说就是代码不好实现的东西就直接切成一张图放到软件里面展示,例如图片&#xff…

skynet.fork_Apache Ant 1.10.6发布–用于junitlauncher的fork模式以及新的jmod和链接任务

skynet.forkApache Ant 1.10.6已于本周发布。 此版本包含许多错误修复以及一些非常令人兴奋的新功能。 完整的发行说明可在此处获得 ,下载本身也可以在此处获得 。 在本文中,我将介绍该版本中引入的一些新功能。 使用junitlauncher任务在派生的JVM中运行…

使用MRUnit,Mockito和PowerMock进行Hadoop MapReduce作业的单元测试

0、preliminary 环境搭建 Setup development environment Download the latest version of MRUnit jar from Apache website: https://repository.apache.org/content/repositories/releases/org/apache/mrunit/mrunit/. For example if you are using the Hadoop version 1.…

python奇偶求和_python 判断奇偶并求和,运行过程有错误,希望高手给指导一下。...

问题是:b) Add to the condition in the while loop so that it will stop if either the user inputs a zero or the sum is larger than limit (if limit is None then ignore the second stopping condition). Do not use a break statement to implement this f…

产品经理如何进行需求管理?

文章目录交付需求第一步:提交需求1、流程图2、结构图3、原型图4、产品需求文档第二步:需求评审制定需求实施计划1、和研发确定开发计划2、和设计人员确定UI设计计划3、和运营人员确定运营计划管控需求变更1、分析需求2、分析变更的可行性3、 变更需求需求…

sap wad_使用网真和WAD热部署Kubernetes

sap wad在Kubernetes环境中测试企业应用程序时,更改,重新打包和重新部署应用程序的周转率可能会很高。 网真旨在通过将本地运行的进程代理到我们的Kubernetes集群中来缓解这种情况,就像本地进程是集群的一部分一样。 如果我们将这种方法与诸如…

关于产品的核心问题

文章目录交互设计产品方向产品定位产品使命产品愿景产品逻辑用户价值用户体验产品价值什么样的产品才是合格的?什么样的产品才是优秀的?产品经理关注的核心点做产品前产品经理必须明确三个问题交互设计 定义和设计系统的行为就是交互设计,说…

正则表达式总结之查找

【0】、写在前面 以下内容总结于shell脚本学习指南 【1】我们说查找文本要用到三种文本匹配程序 : 1.1)grep 使用的是基本正则表达式(basic regular expression,BRE) 1.2)扩展式grep 使用 egrep&#xf…