python EasyOCR库如何使用

python EasyOCR库如何使用

本篇内容介绍了“python EasyOCR库如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

说明

1、EasyOCR是一个用python编写的OCR三方库。可以在python中调用,用来识别图像中的文字,并输出为文本。

2、支持80多种语言的识别,识别精度高,甚至要超过PaddleOCR。

安装命令

pipinstalleasyocr

代码实现

importeasyocr#设置识别中英文两种语言reader=easyocr.Reader(["ch_sim","en"],gpu=False)#needtorunonlyoncetoloadmodelintomemoryresult=reader.readtext(r"d:Desktop4A34A16F-6B12-4ffc-88C6-FC86E4DF6912.png",detail=0)print(result)

实例扩展:

图文提取的代码

frompathlibimportPathimporteasyocrfile_url=r"识别图片.jpg"#需识别的图片split_symbol=""#默认空格为分隔符row_space=15#默认字符高度为15px,当识别出来的字符间距超过这个数值时会换行。defmake_reader():#将模型加载到内存中。模型文件地址C:Users用户.EasyOCRmodelreader=easyocr.Reader(["ch_sim","en"])returnreaderdefchange_to_character(file_url,reader,split_symbol="",row_space=15,save_dir="."):withopen(file_url,"rb")asimg:img_b=img.read()result=reader.readtext(img_b)result.sort(key=lambdax:x[0][0][1])#按竖直方向,进行排序==>进行分行处理。#foriinresult:#print(i)#print("="*100)#按行进行分组content=[]item=[result[0]]#首先放入第一个元素foriinresult[1:]:ifrow_space>=i[0][0][1]-item[-1][0][0][1]>=0:item.append(i)else:content.append(item)item=[i]content.append(item)filemane=Path(file_url).name.split(".")[0]withopen(f"{save_dir}/{filemane}.txt","w",encoding="utf8")ast:foriincontent:#i为每一行的内容i.sort(key=lambdax:x[0][0][0])#对每行的内容进行先后排序forrini:#print(r)t.write(r[1]+split_symbol)t.write("")returncontentif__name__=="__main__":change_to_character(file_url,make_reader())

UI 界面的代码

importtkinterastkfromtkinterimportfiledialogfromPILimportImage,ImageTkfrompathlibimportPathfromcharacterimportchange_to_character,make_readerfromthreadingimportThreadimporttime#classShowing(tk.Frame):#def__init__(self,master=None):#super().__init__(master)#self.master=master#self.pack()##self.img=tk.PhotoImage(file=r"C:UsersyanhyDesktop捕获22.PNG")#self.create_widgets()##defcreate_widgets(self):#self.img=tk.PhotoImage(file=r"C:UsersyanhyDesktop捕获22.PNG")#self.img_wig=tk.Label(self,image=self.img)#self.img_wig.pack()#最外层窗口设置root=tk.Tk()root.title("图片文字识别程序联系:410889472@qq.com")window_x=root.winfo_screenwidth()window_y=root.winfo_screenheight()WIDTH=1200HEIGHT=750x=(window_x-WIDTH)/2#水平居中y=(window_y-HEIGHT)/3#垂直偏上root.geometry(f"{WIDTH}x{HEIGHT}+{int(x)}+{int(y)}")root.resizable(width=False,height=False)#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》Row_space=15File_url_list=[]Img_type=[".jpg",".jpeg",".png",".gif"]Split_symbol=""#间隔符。Save_dir=Path.cwd().joinpath("img_to_word")ifSave_dir.is_dir():passelse:Path.mkdir(Save_dir)#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》deftest():print(f"{Row_space=}")defchoose_file():#获取导入的图片路径地址globalshow_img,img_label,text,File_url_listfilenames=filedialog.askopenfilenames()iflen(filenames)==1andlen(File_url_list)==0:#单张图片导入,显示图片ifPath(filenames[0]).suffix.lower()inImg_type:#判断是否图片类型File_url_list=list(filenames)try:iftext.winfo_exists():text.destroy()exceptNameErrorase:print(f"choose_file提示:张图片导入错误>>>{e}")try:ifimg_label.winfo_exists():img_label.destroy()exceptNameErrorase:print(f"choose_file提示:单张图片导入错误>>>{e}")img=Image.open(File_url_list[0]).resize((560,660))#print(img.size)show_img=ImageTk.PhotoImage(image=img)img_label=tk.Label(f_left,image=show_img)img_label.pack()else:print("导入的是非图像格式")else:#多张图片导入,显示列表。try:ifimg_label.winfo_exists():img_label.destroy()exceptNameErrorase:print(f"提示:多张图片导入错误>>>{e}")try:iftext.winfo_exists():text.destroy()exceptNameErrorase:print(f"提示:多张图片导入错误>>>{e}")text=tk.Text(f_left,spacing1=5,spacing3=5)text.pack(fill="both",expand=True)foriinfilenames:ifPath(i).suffix.lower()inImg_type:File_url_list.append(i)else:passFile_url_list=set(File_url_list)foriinlist(File_url_list):#把文件写入到文本框中text.insert("end",str(list(File_url_list).index(i)+1)+":"+i+"")File_url_list=list(File_url_list)print(f"{File_url_list=}")defchoose_dir():globalshow_img,img_label,text,File_url_listdirectoryname=filedialog.askdirectory()print(f"{directoryname=}")try:ifimg_label.winfo_exists():img_label.destroy()exceptNameErrorase:print(f"choose_dir提示:多张图片导入错误>>>{e}")try:iftext.winfo_exists():text.destroy()exceptNameErrorase:print(f"choose_dir提示:多张图片导入错误>>>{e}")text=tk.Text(f_left,spacing1=5,spacing3=5)text.pack(fill="both",expand=True)foriinPath(directoryname).iterdir():#获取文件夹下的所有文件。ifPath(i).suffix.lower()inImg_type:File_url_list.append(i.as_posix())#as_posix()把Path型转为字符串。else:passFile_url_list=set(File_url_list)foriinlist(File_url_list):#把文件写入到文本框中text.insert("end",str(list(File_url_list).index(i)+1)+":"+i+"")File_url_list=list(File_url_list)print(f"{File_url_list=}")defclear_file_list():globalFile_url_listFile_url_list.clear()try:ifimg_label.winfo_exists():img_label.destroy()exceptNameErrorase:print(f"clear_file_list提示:清空错误>>>{e}")try:iftext.winfo_exists():text.destroy()exceptNameErrorase:print(f"clear_file_list提示:清空错误错误>>>{e}")defget_entry1():#设置换行间距变量值globalRow_spacenum=entry1.get()ifnum.isdigit():ifint(num)>0:Row_space=int(num)else:entry1.delete(0,"end")entry1.insert(0,15)Row_space=15defset_split_symbol():globalSplit_symbolSplit_symbol=entry2.get()print(f"{Split_symbol=}")defdo_change():ifFile_url_list:v.set("文字提取中,请稍后……")button_do.config(state="disable")#使按钮不可用。#========================================defmain():reader=make_reader()foriinFile_url_list:content=change_to_character(i,reader,row_space=Row_space,split_symbol=Split_symbol,save_dir=Save_dir)read_text.delete(1.0,"end")forcincontent:#i为每一行的内容c.sort(key=lambdax:x[0][0][0])#对每行的内容进行先后排序forrinc:#print(r)read_text.insert("end",r[1]+Split_symbol)read_text.insert("end","")v.set("文字提取结束。")button_do.config(state="normal")#恢复按钮可用。#========================================t=Thread(target=main,daemon=True)t.start()else:v.set("请先选择图片!")defjoin_file():v.set("文件开始合并。")filst=list(Path(Save_dir).iterdir())#获取文件夹中所有的文本文件。withopen(f"{Save_dir}/合并文件.txt","w",encoding="utf8")asjoin_f:forfinfilst:withopen(f,"r",encoding="utf8")asr_f:read_con=r_f.read()join_f.write(f.name+""+read_con+"")time.sleep(1)v.set("文件合并完毕。")#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》f_top=tk.Frame(root,height=65,width=1100,bd=1,relief="flat")#"sunken""raised","groove"或"ridge"f_top.pack_propagate(False)#如果不加这个参数,当Frame框架中加入部件时,会自动变成底层窗口,自身的特性会消失。f_top.pack(side="top",pady=5)f_left=tk.Frame(root,height=660,width=560,bd=1,relief="groove")f_left.pack_propagate(False)f_left.pack(side="left",padx=20)f_right=tk.Frame(root,height=660,width=560,bd=1,relief="groove")f_right.pack_propagate(False)f_right.pack(side="left",padx=20)read_text=tk.Text(f_right,spacing1=5,spacing3=5)read_text.pack(fill="both",expand=True)#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》button_choose_file=tk.Button(f_top,text="选择图片",command=choose_file)button_choose_file.pack(side="left",padx=10,ipadx=5)button_choose_file=tk.Button(f_top,text="选择文件夹",command=choose_dir)button_choose_file.pack(side="left",padx=10,ipadx=5)button_clear_file=tk.Button(f_top,text="清空选择",bg="#FFEF2F",command=clear_file_list)button_clear_file.pack(side="left",padx=5,ipadx=5)#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》f_row_content=tk.Frame(f_top,height=50,width=300,bg="#D1D4D0",relief="flat")#"sunken""raised","groove"或"ridge"f_row_content.pack_propagate(False)f_row_content.pack(side="left",padx=15)button_set_row_height=tk.Button(f_row_content,text="设置行间距",command=get_entry1)button_set_row_height.pack(side="left",ipadx=3,padx=3)entry1=tk.Entry(f_row_content,font=("",18),width=3)entry1.insert(0,15)entry1.pack(padx=5,side="left")tk.Label(f_row_content,justify="left",text="填入像素值,设置换行间距。默认15个像素。").pack(side="left")#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》f_split=tk.Frame(f_top,height=50,width=215,bg="#D1D4D0",relief="flat")#"sunken""raised","groove"或"ridge"f_split.pack_propagate(False)f_split.pack(side="left",padx=4)button_split=tk.Button(f_split,text="设置分隔符",command=set_split_symbol)button_split.pack(side="left",ipadx=3,padx=3)entry2=tk.Entry(f_split,font=("",18),width=3)entry2.insert(0,"")entry2.pack(padx=5,side="left")tk.Label(f_split,justify="left",text="默认一个空格").pack(side="left")#《《《《《《《《《《《《《《《《《《《《《《提取合并文件》》》》》》》》》》》》》》》》》》》》》》》》》button_do=tk.Button(f_top,text="开始提取",bg="#4AB0FF",command=do_change)button_do.pack(side="left",padx=10,ipadx=2)button_join=tk.Button(f_top,text="合并文件",command=join_file)button_join.pack(side="left",padx=5,ipadx=2)v=tk.StringVar()v.set("info……")tk.Label(f_top,bg="#2EBD1D",justify="left",textvariable=v).pack(side="left")#《《《《《《《《《《《《《《《《《《《《《《右键菜单》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》defcopy_text():read_text.event_generate("<<Copy>>")menubar=tk.Menu(tearoff=False)#root["menu"]=menubar#没有把这个菜单部件加入到root窗口的菜单属性中,所以它不会在root窗口的顶部显示。menubar.add_command(label="复制",command=copy_text)defshow_menu(event):"""用菜单部件的post方法展示菜单"""menubar.post(event.x_root,event.y_root)read_text.bind("<Button-3>",show_menu)#》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》root.mainloop()

“python EasyOCR库如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

发布于 2022-03-29 22:36:21
分享
海报
53
上一篇:python的pytesseract库怎么使用 下一篇:Python数字/字符串补零的方法
目录

    忘记密码?

    图形验证码