图片,PDF转换成文字小工具

本想实现微信小程序“传图识字”的功能,后面又添加了pdf文件转文字。

知识点

  • 百度OCR文字识别
from aip import AipOcrAPP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)""" 读取图片 """
def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()
image = get_file_content(r'D:\Python\study\image\d2.png')""" 调用通用文字识别, 图片参数为本地图片 """
content = client.basicGeneral(image)['words_result']
# print(len(content))
for co in content:print(co['words'])# """ 如果有可选参数 """
# options = {}
# options["language_type"] = "CHN_ENG"
# options["detect_direction"] = "true"
# options["detect_language"] = "true"
# options["probability"] = "true"
  • PDF 逐页转换成图片
import fitz
import globdef read_pdf(filename):pdffile = glob.glob(filename)[0]doc = fitz.open(pdffile)for pg in range(0, doc.pageCount):page = doc[pg]zoom = int(100) # 改为1000,图片清晰度会更高rotate = int(0)trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).preRotate(rotate)pm = page.getPixmap(matrix=trans,alpha=True) # True 改为 0pm.writePNG(r'D:\Python\study\image\%s.png' % str(pg+1))read_pdf(r'demo.pdf')
  • TK 控件及布局
    视频教程
    python-tkinter使用方法
    python之tkinter使用-消息弹框

  • 复制到系统剪贴板

安装pyperclip模块 pip intall pyerclip
pyperclip.copy(text) 把text字符串中的字符复制到剪切板
text = pyperclip.paste() 把剪切板上的字符串复制到text

  • 将py文件打包成 exe

切换到py文件目录
pyinstall -F -i KEY.ico tkinterTest.py -w
-w :关闭DOC控制台
-i : 替换exe图标

  • 小工具截图

小工具源码

from tkinter import *
import tkinter.filedialog
import datetime
from tkinter import messagebox
import filetype
import os
from aip import AipOcr
import fitz
import glob
from pathlib import Path
import time
import pyperclipdef copy():'''实现复制按钮功能,复制到剪贴板:return:'''pyperclip.copy(text.get('0.0', 'end'))def filepath():'''实现选择文件或目录按钮功能,选择图片或PDF弹出选择文件选择框,选择批量图片,弹出选择目录框:return:'''if r.get()==1 or r.get() == 2 :filename = tkinter.filedialog.askopenfilename()if filename != '':e.set(filename)else:e.set("")else:filename  = tkinter.filedialog.askdirectory()if filename != '':e.set(filename)else:e.set("")def guess_filetype(path):'''获取文件类型:param path:文件路径:return: 文件类型'''kind = filetype.guess(path)if kind is None:print('Cannot guess file type!')messagebox.showerror('系统提示', path+',未能识别文件类型')returnreturn kind.extension""" 读取图片 """
def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()def ocr_jpg(filepath):'''百度ORC识别结果图片:param filepath::return:'''flp1, fullflname1 = os.path.split(filepath)text.insert(tkinter.INSERT, '*'*20+fullflname1 +'*'*20+ '\n')image = get_file_content(filepath)content = client.basicGeneral(image)['words_result']# print(len(content))for co in content:#print(co['words'])text.insert(tkinter.INSERT, co['words']+'\n')def pdf_jpg(filepath):'''先将PDF逐页转为图片:param filepath::return:'''pdffile = glob.glob(filepath)[0]doc = fitz.open(pdffile)img_path_list = []for pg in range(0, doc.pageCount):page = doc[pg]zoom = int(1000)rotate = int(0)trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).preRotate(rotate)pm = page.getPixmap(matrix=trans,alpha=0)flp, fullflname = os.path.split(filepath)imagePath = flp + '/' + 'OCR_' + time.strftime("%Y%m%d")#imagePath = os.path.dirname(filepath)+'/'+fname+'_image'if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在os.makedirs(imagePath)  # 若图片文件夹不存在就创建pm.writePNG(imagePath+'/'+'%s.png' % str(pg+1))# print(imagePath+'/'+'%s.png' % str(pg+1))img_path_list.append(imagePath+'/'+'%s.png' % str(pg+1))return img_path_listdef Transformation():'''开始按钮'''text.delete(1.0, tkinter.END) #清空text 控件starttime = datetime.datetime.now()if e.get()=='':mes = messagebox.showinfo('系统提示', '请选择文件或目录!')#print('showerror:', mes)else:if r.get() == 1:if Path(e.get()).is_file() == True:lb2.config(text='正在转换,请稍候...(请勿关闭窗口)')file_tyep = guess_filetype(e.get()) #获取路径文件类型tupian_list = ['jpg','png','bmp']if file_tyep in tupian_list:print("jpg")ocr_jpg(e.get())fl_path, full_flname = os.path.split(e.get())mk_path = fl_path+'/' +'OCR_' + time.strftime("%Y%m%d") #创建文件路径if not os.path.exists(mk_path):  # 判断文件夹是否存在os.makedirs(mk_path)  # 若文件夹不存在就创建with open(mk_path+'/'+'OCR.txt', "a") as f:f.write(text.get('0.0', 'end')) # 将text内容写入txtend_time = datetime.datetime.now()h_time = str((end_time - starttime).seconds)lb2.config(text='结果已存入:'+mk_path+'/'+'OCR.txt'+'  耗时:'+ h_time+'秒')else:messagebox.showerror('系统提示', '不支持的文件类型!')else:messagebox.showerror('系统提示', '文件路径不正确,请重新选择!')elif r.get() == 2:if Path((e.get())).is_file() == True:file_tyep = guess_filetype(e.get())if file_tyep == 'pdf':#print("pdf")img_path_list = pdf_jpg(e.get()) # 获取PDF转成图片后,所有图片的路径集合for f in img_path_list:ocr_jpg(f)fl_path, full_flname = os.path.split(e.get())mk_path = fl_path + '/' + 'OCR_' + time.strftime("%Y%m%d")if not os.path.exists(mk_path):  # 判断的文件夹是否存在os.makedirs(mk_path)  # 若文件夹不存在就创建with open(mk_path + '/' + 'OCR.txt', "a") as f:f.write(text.get('0.0', 'end'))end_time = datetime.datetime.now()h_time = str((end_time - starttime).seconds)lb2.config(text='结果已存入:' + mk_path + '/' + 'OCR.txt' + '  耗时:' + h_time + '秒')else:messagebox.showerror('系统提示', '不支持的文件类型!')else:messagebox.showerror('系统提示', '文件路径不正确,请重新选择!')else:if Path(e.get()).is_dir():# 获取文件名file_names = os.listdir(e.get())# print(file_names)# 文件名拼接路径file_list = [os.path.join(e.get(), file) for file in file_names]# print(file_list)tupian_list = ['jpg', 'png', 'bmp']for fi in file_list:if guess_filetype(fi) in tupian_list:ocr_jpg(fi)with open(e.get() + '/' + 'OCR.txt', "a") as f:f.write(text.get('0.0', 'end'))lb2.config(text='结果已存入:' + e.get() + '/' + 'OCR.txt'+ '  耗时:' + h_time + '秒')end_time = datetime.datetime.now()h_time = str((end_time - starttime).seconds)lb2.config(text='结果已存入:' + e.get() + '/' + 'OCR.txt'+ '  耗时:' + h_time + '秒')else:continueelse:messagebox.showinfo('系统提示', '文件路径不正确,请重新选择!')def delete_text():'''清空按钮:return:'''text.delete(1.0, tkinter.END)# 百度OCRID
APP_ID = '***'
API_KEY = '***'
SECRET_KEY = '***'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)root = Tk()
root.title('文字识别小工具')
root.geometry("600x600")Label(root,text='转换类型:').place(relx=0, rely=0.05, relwidth=0.2)# 单选框组件
r = tkinter.IntVar()
radio1 = tkinter.Radiobutton(root, text="图片转文字", value=1, variable=r)
radio1.place(relx=0.15, rely=0.05, relwidth=0.3)
radio2 = tkinter.Radiobutton(root, text="pdf转文字", value=2, variable=r)
radio2.place(relx=0.4, rely=0.05, relwidth=0.3)
radio3 = tkinter.Radiobutton(root, text="图片转文字(批量)", value=3, variable=r)
radio3.place(relx=0.7, rely=0.05, relwidth=0.3)
r.set(1) # 默认选择第一个Label(root,text='文件/目录路径:').place(relx=0, rely=0.15, relwidth=0.25)
# 绑定变量 输入框控件
e = tkinter.Variable()
entry = tkinter.Entry(root, textvariable=e)
entry.place(relx=0.25, rely=0.15, relwidth=0.5)
button1 = Button(root,text='选择文件/目录',command=filepath)
button1.place(relx=0.78, rely=0.13, relwidth=0.25)lb2 = Label(root,text='',wraplength = 280,justify = 'left')
lb2.place(relx=0.2, rely=0.25, relwidth=0.7)
button2 = Button(root,text='开始转换',command=Transformation)
button2.place(relx=0, rely=0.25, relwidth=0.2)text = tkinter.Text(root, width=30, height=10)
text.place(relx=0.05, rely=0.35,relheight=0.5,relwidth=0.9)button3 = Button(root,text='复制全部',command=copy)
button3.place(relx=0.15, rely=0.9, relwidth=0.2)
button3 = Button(root,text='清空',command=delete_text)
button3.place(relx=0.6, rely=0.9, relwidth=0.2)root.mainloop()

图片,PDF转换成文字相关推荐

  1. 扫描图片怎么转换成文字

    扫描图片怎么转换成文字 在我们使用的文件中会发现不少是pdf格式的,这种格式文件中的文字不能被复制,如果想要修改或是使用里面的文字就需要将pdf转换成txt,那么问题就来了:怎么将pdf转换成txt? ...

  2. 如何将图片在线转换成文字?分享在线转换方法

    怎么把图片转换成文字内容呢?大家在日常中使用的图片文件,很多时候都会拿来记录重要内容,如黑板上的文字来不及记下来就要被擦掉,演示的PPT文件没记完就换页了等操作,这就让我们很多小伙伴养成了用图片拍照或 ...

  3. 如何把图片pdf转换成txt

    如何把图片pdf转换成txt 前段时间看到有午饭们在提问有没有PDF转成txt的软件,几经波折,现在找到了一款非常好的PDF转换成TXT转换器,就逼不及待地和大家分享出来了,需要的午饭们请及时下载喔  ...

  4. 扫描图片如何转换成文字

    扫描图片如何转换成文字 扫描图片能够真实的反映纸质文件中的文字及图像各种元素,而且好的扫描仪扫描出来的效果非常好,这样的文件非常的整洁,对于阅读没有任何的障碍,但是在使用的时候会出现一些麻烦,因为这些 ...

  5. 图片怎么转换成文字?清描OneNote,总有一个适合你!

    昨天,一个小伙伴发信息给我吐槽:工作的时候,老板突然发了一堆图片过来,要他将图片中的文字一个个的生成文档,并且当天就要完成.可是手动码字,这得到猴年马月才能完成啊,有没有什么好的方法可以快速的将图片转 ...

  6. 图片怎么转换成文字?这四种方法分分钟完成转换

    怎么将图片转换成文字呢?通过图片转文字的方式,文本内容更容易编辑和搜索.传统上,我们需要手动输入文本内容,这是一项耗时且费力的工作,但通过图片转文字,我们可以自动将图片中的文字提取出来,然后进行编辑和 ...

  7. OCR图片转文字软件神器出炉,PDF转换成文字软件,简体转繁体,繁体转简体一键导出,手写的也可以试一试

    10门语言 导入图片识别不了的,用截图识别.选择对应的语言,截图识别就好了 支持中文简体繁体一键导出记事本 配备翻译功能(10种语言转换成日语 韩语 英语 中文,需要加其他语言的话Q897655910 ...

  8. C#技术分享【PDF转换成图片——13种方案】

    1.[O2S.Components.PDFRender4NET.dll],第三方DLL,可以实现PDF转图片,支持32位系统.64位系统 官方试用版的dll左上角会有一排红色水印,下面这个是破解版的没 ...

  9. 图片如何转换成PDF格式?教你一招快速转换

    怎么把图片转换成PDF文件格式呢?大家在日常中也经常是需要使用图片的,很多时候我们在记录一些重要的内容时都会选择拍照记录,因为这样会非常快速,同样的,大家在出门游玩时,也会用手机来拍照.当这些图片数量 ...

  10. 怎么把图片文件转换成PDF文件

    除了office文件外,我们最常用的就是PDF文件了.因为PDF文件格式可以将文字.字型.格式.颜色及独立于 设备和分辨率的图形图像等封装在一个文件中.该格式文件还可以包含超文本链接.声音和动态影像等 ...

最新文章

  1. 在活动目录中,转移和占用操作主机角色(占用)
  2. Nat. Mach. Intell. | 利用条件循环神经网络生成特定性质分子
  3. java 高效io框架_Java基础之IO框架
  4. php7不兼容phalcon_Phalcon7
  5. Spring Cloud应用监控与管理Actuator
  6. CSS3的transition和transform
  7. Java 程序员必须掌握的 Linux 命令
  8. 本地提交到yarn_Flink on Yarn三部曲之三:提交Flink任务
  9. kafka 控制台命令
  10. vue报错问题记录1-Cannot read property '0' of null
  11. 零基础python入门-零基础 Python 入门
  12. vue学习日志-过滤器
  13. Linux双系统安装指南
  14. 前端语音转文字实践总结
  15. 计算机硬盘上的文件打不开,电脑硬盘打不开怎么办
  16. springboot发送邮件
  17. spark 相关性分析_《Spark机器学习进阶实战》——2.3.2 相关性分析
  18. 带有播放列表的网页播放器
  19. android 定制手机刷机,怎么定制安卓刷机包
  20. 计算机外存断电会丢失吗,外储存器断电后信息会丢失吗

热门文章

  1. Xftp6-连接Linux传输文件---干货!!!(无私奉献无需积分)
  2. 墨墨背单词mysql_GitHub - FunStuff/WeChat-applets: 微信小程序小鸡单词
  3. 【Godot】Godot 插件制作流程
  4. 百度地图、腾讯地图、高德地图经纬度转换
  5. 如何建立企业员工满意度测评指标体系
  6. 如何添加CDN加速域名
  7. 计算机考研408每日一题 day165
  8. 利用obs技术进行推流直播
  9. Python+Django实现智慧校园考试比赛系统
  10. Axure RP 8--模板的使用