进来一直为各种课程的实验报告困扰,字数很多,百度文库、豆瓣等资源网站又无法免费下载。

就想着如果我能把他们截图下来,然后批量转换成文字该多好呢?

所谓懒惰是人类进步的阶梯。

笔者决定通过python程序,调用百度api完成这项功能。

认证百度开发者

首先要在百度开发者平台认证成为百度开发者,创建应用后即会获得ID、API  Key、Secret  Key 如图:

图中为笔者自己的账号,所以进行了打码。后文进行编程时,笔者将使用网络上分享的账号等进行演示。

安装库

打开cmd,输入:pip install baidu-aip

等待安装完成即可。下面进行编程。

导入必要文件

from aip import AipOcr  
import os

AipOcr即我们需要的百度文字识别功能。

设置自己的ID、API  Key、Secret  Key

笔者在此使用网络上分享的账号,建议使用自己注册的账号。

APP_ID = '9851066'  
API_KEY = 'LUGBatgyRGoerR9FZbV4SQYk'  
SECRET_KEY = 'fB2MNz1c2UHLTximFlC4laXPg7CVfyjV'   
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)

打开并加载图片文件的函数

def get_file_content(filePath):   #这样只要获得文件名就能够进行识别
    with open(filePath, 'rb') as fp:  
        return fp.read()

注意使用二进制打开。

关键代码

在代码中具体注释

for root, dirs, files in os.walk(".", topdown=False):  # 该迭代类型每单元返回三个部分,我们需要的文件名在第三部分,具体参数自行了解
    for name in files:           # name即为文件夹下每个文件的文件名
        if 'png' in name:      # 判断是否为图片格式,笔者这里设置png因为常用QQ截图,可自行添加其他格式
            filePath = os.path.join(root, name)[2:]   # 记录下的文件名有./.前缀,所以从第二位为我们需要的filepath
            options = {  
              'detect_direction': 'true',  
              'language_type': 'CHN_ENG',  
            }  
            result = aipOcr.webImage(get_file_content(filePath),options)    #通过filepath打开并识图
            for i in result['words_result']:       # result为字典类型,识别出的文字信息存放在'words_result'对应的字典中
                print(i['words'])       #列表中接着嵌套字典,每一部分信息存储在'words'键中     

完整代码

from aip import AipOcr  
import os
 
APP_ID = '********'  
API_KEY = '************************'  
SECRET_KEY = '************************'   
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)
 
def get_file_content(filePath):  
    with open(filePath, 'rb') as fp:  
        return fp.read()
 
for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        if 'png' in name:
            filePath = os.path.join(root, name)[2:]   
            options = {  
              'detect_direction': 'true',  
              'language_type': 'CHN_ENG',  
            }  
            result = aipOcr.webImage(get_file_content(filePath),options)
            print(result)
            for i in result['words_result']:
                print(i['words'])

如何使用

把程序放入单独文件夹中,下面只要把想识别的图片全部放入该文件夹下,运行程序即可批量识别并打印所有图片中的文字。

运行示例

我们任意把一些图片放入文件夹,如下面两图

接着我们运行程序,结果如下图

可以看到程序读完第一个图,接着读第二个图,实现批量转换。

经过笔者多次测试,准确率达到95%以上,达到预期效果。

接着为了提高普适性,可转换为exe格式、增加图形界面等,时间原因笔者不再深入。

文中涉及到的帐号密码来源于网络分享,侵删

https://blog.csdn.net/htgt_tuntuntun/article/details/80547238

发表评论