应群友要求,要做一个图片转文字的格式,因为有些人的简历中只有一张图片要提取他里面的文字就不好办了。
于是就有了下面这个小工具:
功能:选择要识别的图片后,识别出来后存到.txt文本中。
实现原理,基于百度“文字识别”通用版的api接口调用。
有一点需要说明的是可能无法识别百分百准确的,格式排版还是要人为去处理一下。
代码如下:
from aip import AipOcr
from PIL import Image as PImage
from PIL import ImageTk
from tkinter import *
from tkinter import filedialog
将图片内容翻译为文字,显示在文本框内
def trans():
# """ 你的 APPID AK SK """
APP_ID = ''
API_KEY = ''
SECRET_KEY = '*************'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
contents.delete('1.0', END)
transTxt = client.basicGeneral(open(filePath.get(), 'rb').read())
# 对transTxt进行处理 去空格,换行符去重
transTxt=transTxt['words_result']
# transTxt=[{'words': '每个人总在仰望和'}, {'words': '羡慕着别人的幸福'}, {'words': '一回头'}, {'words': '却发现自己正被别'}, {'words': '人仰望和羡慕着'}]
words_content=''
for words in transTxt:
values =words['words']
words_content +=values+'\n'
print(words_content)
contents.insert(INSERT,words_content)
# 将文字保存到TXT文件
with open(filePath.get()+'_to_word.txt', 'w') as f:
f.write(words_content)
打开图片文件,显示路径,并将图片展现
def openfile():
filename.delete('1.0', END)
filePath.set(filedialog.askopenfilename())
filename.insert(1.0, filePath.get())
org_img = PImage.open(filePath.get())
# 调整图片显示大小 600*800
w, h = org_img.size
if w > 600:
h = int(h * 600 / w)
w = 600
if h > 800:
w = int(w * 800 / h)
h = 800
img = ImageTk.PhotoImage(org_img.resize((w, h)))
showPic.config(image=img)
showPic.image = img # 保持一个引用才能显示图片,tkinter的BUG
设置主窗口
top = Tk()
top.title("图片转文字 引擎:百度云API文字识别 Made by: Running")
top.iconbitmap("./pic/y1.ico")
top.geometry("800x600")
filePath = StringVar()
第一个窗体
frame1 = Frame(top, relief=RAISED, borderwidth=2)
frame1.pack(side=TOP, fill=BOTH, ipady=5, expand=0)
Label(frame1, height=1, text="图片路径:").pack(side=LEFT)
filename = Text(frame1, height=2)
filename.pack(side=LEFT, padx=1, pady=0, expand=True, fill=X)
Button(frame1, text="打开文件", image='', command=openfile).pack(side=LEFT, padx=5, pady=0)
Button(frame1, text="识别图片", image='', command=trans).pack(side=LEFT, padx=5, pady=0)
第二个窗体
frame2 = Frame(top, relief=RAISED, borderwidth=2)
frame2.pack(side=LEFT, fill=BOTH, expand=1)
Label(frame2, text='待识别的图片:', borderwidth=5).pack(side=TOP, padx=20, pady=5)
showPic = Label(frame2, text='图片显示区')
showPic.pack(side=BOTTOM, expand=1, fill=BOTH)
第三个窗体
frame3 = Frame(top)
frame3.pack(side=RIGHT, fill=BOTH, expand=1)
contents = ScrolledText(frame3)
Label(frame3, text='图片识别结果:', borderwidth=5).pack(side=TOP, padx=20, pady=10)
contents = Text(frame3, font=('Arial', 15))
contents.pack(side=TOP, expand=1, fill=BOTH)
Label(frame3, text='Copyright 2024 baidu.com ALL Rights Reserved', borderwidth=5).pack(side=BOTTOM, padx=20, pady=10)
top.mainloop()
标签:文字,python,text,top,words,图片,side,pack From: https://www.cnblogs.com/fishrunning/p/18027337