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

上一篇链接:https://blog.csdn.net/iMlosedog/article/details/102826728

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

参考博客:

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

1.创建窗体与基本布局

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

import tkinter as tk
import 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.yview

 top.mainloop()

创建完成后布局如下:

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

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_aip
import cv2                       #pip openCV-python
import base64
import os

#以下为GUI模块。。。。。。。。。。。。。。。。。。。。。。。。。。
import tkinter as tk
import 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 = pic
        fp=open(filePath, 'rb')
        result = client.advancedGeneral(fp.read(), options)
        #img = cv2.imread(filePath)
        #cv2.imshow(pic, img)
        result_num=result["result_num"]

        ri=0
        m_text.insert(tk.CURRENT, ' 图片 '+pic+'。。。。。。。。\n')
        print("\n图片"+pic+"。。。。。")
        while ri 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 render


if __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()

 

你可能感兴趣的:(百度AI图片识别学习笔记(3)——tkinter窗体实现图片选择与识别)