用Python提取图片&截图中的文字 您所在的位置:网站首页 如何提取代码中的图片 用Python提取图片&截图中的文字

用Python提取图片&截图中的文字

2024-07-16 13:21| 来源: 网络整理| 查看: 265

《用Python“破解”某度文库等文库复制的限制》

tips:当个标题党真刺激啊 开发背景 临近期末,CYooQ要写许多作业。迫不得已寻找度娘解决问题,找到之后,CYooQ习惯性地ctrl+c,当ctrl+v时发现,emmm!?没有啊!仔细一看,网页限制了复制。月末生活费告急的CYooQ,不得不寻求Python的帮助。于是CYooQ快马加鞭完成了。可是!可是!可是!午夜的月光触发了作业截至的丧钟!。。。。

前提准备

Python3.7(目测2.7版本也ok)baidu-aip(百度OCR Python SDK)依赖库 pillow(Python的图像处理标准库)还有 keyboard(此项可选,监控键盘,设置快捷键,增强用户体验)一台电脑百度AI开放平台账号(获取到API调用权限) 百度AI开放平台API使用移步到(这)* 也可自行百度

需求分析

能够对图片进行处理能够显示出处理后的文字结果能够有较好的用户操作界面(日后优化) 功能实现 本地(磁盘中)图片处理功能(初步) 直接读取文件,或者按照用户的输入文件路径进行处理。 使用的函数open()。建议这样写 with open(img_name,'rb') as File: Img = File.read()

优点是,它会自动关毕文件,不让你的内存变红啊啊啊啊

截图(内存中)图片处理功能(初步) 将内存中的数据取出并且保存下来 使用ImageGrab.grabclipboard()来获取图片(因为目前主流的截图都是会放入剪贴板中的,所以可以直接获取到) 这里会返回一个二进制数据。依赖的库是pillow,在一开始我们就导入 from PIL import ImageGrab

然后我们要用个东西接住二进制数据Image = ImageGrab.grabclipboard() 再然后我们保存它Image.save(img_name)这样我们的问题就从内存中转到磁盘中的解决方法了。这样可以保证图片处理模块复用性高!

真正的图片处理功能(敲黑板) 我们需要使用百度AI开发平台的Api,稍后会简单介绍一下,或者移步这篇博客百度AI开放平台—简单步骤介绍(多图警告)看具体的操作。 我们在开头就导入 from aip import AipOcr

我们需要写在前面的是,配置信息

""" 你的 APPID AK SK """ APP_ID = '这里填你的APP_ID' API_KEY = '同理这里是API_KEY' SECRET_KEY = '同理这里是SECRET_KEY' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) """结束"""

我们通过第一个功能,open() 文件之后,获取到的Img传入到这client里面。用个Result接住 Result = client.basicAccurate(Img)

处理结果显示 1. 直接在黑框框中显示,简单明了。(个人觉得这样简约,有B格) 使用函数的话print()不香吗》? 2. 日后添加自动存入到剪贴板中的功能。(贴合用户使用) 使用的依赖库pyperclip(剪切板操作)

可视化操作界面 日后优化,日后优化,日后优化。哈哈哈

截图功能 (可以借用下已有常用软件的模块,系统截图,QQ截图,输入法截图) 基本上能够在指定区域截图的软件都OK。如果以后有机会,跟新个截图的实现方法。还得不断学习学习学习

图片保存功能 上面以及说了,请看 截图(内存中)图片处理功能(初步)这个步骤

图片一键删除功能 我们可以获取程序当前目录下的所有图片文件,这可难到我了,图片文件辣么多。怎么删?那我们就偷下懒(不写正则),两种方法。 ①将全部图片放到一个文件夹里面,直接删除文件夹。os.removedirs(file_name) ②在把内存中图片放到本地时,按照顺序来命名!1.jpg->2.jpg->3.jpg 这样我们可以简单有效的处理,用个for循环,不断try删除,except就退出。

try: for num in range(1,999): i_name = str(num)+r'.jpg' os.remove(i_name) except: print("Done!")

不偷懒写法(写正则) ①先用files = [d for d in os.listdir('.')]生成器获取到当前目录下的所有文件。写个正则,匹配一下所有已知图片文件的后缀。筛选后再直接for循环用os.remove(img_name) 进行删除!不贴代码了

(功能快捷键设置) 这是个黑科技!我们先导入 import keyboard

然后再这样

keyboard.add_hotkey('f7',function_1)

OK啦,就这么简单,所以我们可以按f7执行function_1函数啦。真香~

具体代码实现(截图版本):

可以稍微修改下变成,本地版本,直接阉割掉前部分功能,直接读取就ok了。 日后会持续跟新,优化功能,可以关注一下!

from PIL import ImageGrab from aip import AipOcr import keyboard,os,time """ 你的 APPID AK SK """ APP_ID = '这里填你的APP_ID' API_KEY = '同理这里是API_KEY' SECRET_KEY = '同理这里是SECRET_KEY' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) """结束""" global Count Count = 1 def Solve(): global Count #这是按顺序命名的全局变量 try: Image = ImageGrab.grabclipboard() #获取截图图片 Name = str(Count)+r'.jpg' Image.save(Name) #保存图片 time.sleep(1) #睡觉等待 Count = Count + 1 with open(Name,'rb') as File: Img = File.read() Result = client.basicAccurate(Img) Num = Result['words_result_num'] if (Num==0): print("Your Image Has Not Strings") #你的图片里面没有字哦 else: for x in Result['words_result']: print(x['words']) except: print("No Image") #你内存没有图片哦 def Clear(): #try a try global Count try: for x in range(1,999):#目测正常人应该最多用999个吧 Name = str(x)+r'.jpg' os.remove(Name) except: print("Done") Count = 1 #我香了,别忘记别人还得接住用,把序号再变为1 def main(): keyboard.add_hotkey('f7',Solve) #f7处理图片 keyboard.add_hotkey('f9',Clear) #f9删除图片 keyboard.wait('esc') #按退出键结束程序 if __name__ == '__main__': main()

软件测试贴图 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 日后会持续跟新,优化功能,可以关注一下! 本人软工萌新一枚,程序难免会有些缺现,为了不断完善,还望大家能在评论区或者私信相互交流,互相学习。我尽力及时回复的啦!哈哈哈



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有