1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 百度AI图片识别学习笔记(3)——tkinter窗体实现图片选择与识别

百度AI图片识别学习笔记(3)——tkinter窗体实现图片选择与识别

时间:2023-08-01 22:13:01

相关推荐

百度AI图片识别学习笔记(3)——tkinter窗体实现图片选择与识别

上一篇链接:/iMlosedog/article/details/102826728

在这一篇博客中,我们要创建一个窗体,来进行图片与文件加的选择,并将上一篇的功能整合进来,设计的内容主要有tkinter的使用。菜鸟教程相关内容链接:/python/python-gui-tkinter.html

参考博客:

python中tkinter库的详细用法及简单案例(图形化界面)/t8116189520/article/details/80137916

1.创建窗体与基本布局

使用Python3 版本,t要小写,所以插入代码为:

import tkinter as tkimport tkinter.filedialog as tk_f #文件读取import tkinter.messagebox #消息提醒

tkinter中创建各组件都比较简单,下面直接给出代码,针对具体函数进行说明

top = tk.Tk()#创建窗体m_text = tk.Text(top)#创建文本框#初始化窗口top.title('图片识别测试')top.geometry('640x600+200+100')#设置窗口大小640x600 和位置#标签label_2 = tk.Label(top, text='请选择文件', width=10, height=2)#text为标签显示内容label_2.pack()#插入窗体中label_2.place(x=30,y=26)#设置位置。此处要先插入,再设置位置

创建文字框entry时,关联一个string字符串,可以用set()和get()函数去设置和获取控件中的值,以动态显示内容

#文字框m_str_var = tk.StringVar()text1 = Entry(top, bg='white', width=45,textvariable=m_str_var)text1.pack()text1.place(x=100, y=30)

创建按钮,参数中command绑定一个点击函数

#选择图片按钮def xz_files_button():b1 = tk.Button(top, text="选择图片", width='10', command=xz_files)#不要加括号,否则会直接运行b1.pack()#先pack ,否则位置不对b1.place(x=430,y=26)#选择文件夹按钮def xz_fold_button():b2 = tk.Button(top, text="选择文件夹", width='10', command=xz_fold)b2.pack()b2.place(x=530, y=26)

#图片识别信息返回区域m_text.pack()m_text.place(x=40, y=100)#文本框滚动条m_scrl = tk.Scrollbar(top)m_scrl.place(x=400,y=100)m_scrl.pack(side=tkinter.RIGHT,fill=tk.Y)m_text.configure(yscrollcommand=m_scrl.set)#绑定文本框m_scrl['command'] = m_text.yviewtop.mainloop()

创建完成后布局如下:

2.功能实现

选择一个或者多个文件代码如下,使用askopenfilenames()函数

参数filetypes 规定选择文件的类型名称和后缀

filenames = tk_f.askopenfilenames(title='选择图片 ' , filetypes=[('图片(JPG)', '*.jpg'), ('All Files', '*')])

选择整个文件夹代码如下,使用askdirectory(函数)

foldname=tk_f.askdirectory(title='选择文件 ')

3.完整代码如下

#!/usr/bin/python# -*- coding: UTF-8 -*-#千万别把Python的GUI程序命名成tkinter,或者把什么其他的程序命名成tkinter,只要命名成这个,一调用就会报错。#以下为图片识别模块。。。。。。。。。。。。。。。。。。。。。。。from aip import AipImageClassify #pip baidu_aipimport cv2 #pip openCV-pythonimport base64import os#以下为GUI模块。。。。。。。。。。。。。。。。。。。。。。。。。。import tkinter as tkimport tkinter.filedialog as tk_f #文件读取import tkinter.messagebox #消息提醒from tkinter import *#以下为图片显示模块。。。。。。。。。。。。。。。。。。。。。。。from PIL import Image, ImageTk #pip pillow# 定义百度AI常量APP_ID = '17639555'API_KEY = 'VAyOaD7kGqGBQjxfhqlkC60v'SECRET_KEY = '50qmbr44XzkG5vekUYbcSsZ4rqGN4SwU'# 初始化AipImageClassify对象client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)# 定义参数变量options={ "baike_num":1 }top = tk.Tk()m_text = tk.Text(top)# 功能:传入一个有 文件绝对路径组成的list,遍历进行图片识别并进行展示def showresult (files):for pic in files: #pic为图片名称,不包含路径#print("图片展示:", pic)filePath = picfp=open(filePath, 'rb')result = client.advancedGeneral(fp.read(), options)#img = cv2.imread(filePath)#cv2.imshow(pic, img)result_num=result["result_num"]ri=0m_text.insert(tk.CURRENT, ' 图片 '+pic+'。。。。。。。。\n')print("\n图片"+pic+"。。。。。")while ri <int(result_num):m_text.insert(tk.CURRENT, '类别:'+result["result"][ri]["keyword"].ljust(16,' ')+"相似度: "+str(result["result"][ri]["score"])+'\n')print("类别:"+result["result"][ri]["keyword"])print("相似度: "+str(result["result"][ri]["score"]))ri += 1m_text.insert(tk.CURRENT,'\n')#cv2.waitKey(0)#cv2.destroyAllWindows()#功能:获取文件夹中所有JPG格式的图片名称,加文件名组成绝对路径并返回一个listdef showdir(foldname):#for root, dirs, files in os.walk("."):for root, dirs, files in os.walk(foldname+'/'):files_copy = files[:] ## 这里列表只有一层,所以用浅拷贝就okfor pic in files_copy:if not pic.endswith(".jpg"):files.remove(pic)print(" remove :", pic)breakprint("处理后文件列表:")i=0for name in files_copy:files_copy[i]=foldname+'/'+namei+=1print(name)showresult(files_copy)return files_copy#功能:选择一个文件及,将选择的文件夹显示在文字框,并返回文件夹的绝对路径def xz_fold():foldname=tk_f.askdirectory(title='选择文件 ')if foldname !='':print("您选择的文件夹是:" + foldname); # 返回的是绝对路径m_str_var.set(foldname)tkinter.messagebox.showinfo('提示', '您选择的文件夹是:' + foldname+' 非JPG会自动剔除,开始识别')showdir(foldname)else:print("您没有选择任何文件");tkinter.messagebox.showinfo('提示', '您没有选择任何文件')return foldname#功能:选择某一特定类型的图片,返回一个由图片绝对路径组成的元祖def xz_files():filenames = tk_f.askopenfilenames(title='选择图片 ' , filetypes=[('图片(JPG)', '*.jpg'), ('All Files', '*')])i=0if len(filenames) != 0:string_filename = ""for i in range(0, len(filenames)):string_filename += str(filenames[i]) + "\n"print("您选择的文件是:"+string_filename);#返回的是绝对路径if(i>0):m_str_var.set(str(filenames[0])+' 等'+str(len(filenames))+'个文件')else:m_str_var.set(str(filenames[0]) )tkinter.messagebox.showinfo('提示','选择的是 '+str(filenames[0])+' 等'+str(len(filenames))+'个文件,开始识别')#进行图片识别showresult(filenames)else:print("您没有选择任何文件");tkinter.messagebox.showinfo('提示', '您没有选择任何文件')return filenames#选择图片按钮def xz_files_button():b1 = tk.Button(top, text="选择图片", width='10', command=xz_files)#不要加括号,否则会直接运行b1.pack()#先pack ,否则位置不对b1.place(x=430,y=26)#选择文件夹按钮def xz_fold_button():b2 = tk.Button(top, text="选择文件夹", width='10', command=xz_fold)b2.pack()b2.place(x=530, y=26)#传入一个图片的绝对路径,将其展示在窗口中def image_show(img1,render):load = Image.open(img1)#img为路径render = ImageTk.PhotoImage(load)print('tupian')return renderif __name__ == "__main__":#初始化窗口top.title('图片识别测试')top.geometry('640x600+200+100')#设置窗口大小640x600 和位置#标签label_2 = tk.Label(top, text='请选择文件', width=10, height=2)label_2.pack()label_2.place(x=30,y=26)#文字框m_str_var = tk.StringVar()text1 = Entry(top, bg='white', width=45,textvariable=m_str_var)text1.pack()text1.place(x=100, y=30)#按钮xz_files_button()xz_fold_button()#图片识别信息返回区域m_text.pack()m_text.place(x=40, y=100)#文本框滚动条m_scrl = tk.Scrollbar(top)m_scrl.place(x=400,y=100)m_scrl.pack(side=tkinter.RIGHT,fill=tk.Y)m_text.configure(yscrollcommand=m_scrl.set)#绑定文本框m_scrl['command'] = m_text.yview'''#图片显示区load = Image.open('timg.jpg') # img为路径,显示一个默认图片render = ImageTk.PhotoImage(load)img_label = tkinter.Label(image=render)img_label.pack()img_label.place(x=100, y=100)'''top.mainloop()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。