基于Python+Tkinter GUI 的模式识别水果分类小程序

这篇具有很好参考价值的文章主要介绍了基于Python+Tkinter GUI 的模式识别水果分类小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  采用Python语言编写,并结合Tkinter GUI工具制作交互式小程序开发,实现了简单的水果的边缘提取和分类。如图1-A,用户可以自定义选择路径并输出,同时可以在对话框中输入/输出结果,如图1-B。

基于Python+Tkinter GUI 的模式识别水果分类小程序

基于Python+Tkinter GUI 的模式识别水果分类小程序

A 界面展示

B 交互展示

 图1 Tkinter GUI 展示

技术路线

本次课程实践一整体设计分为三个部分:

  • 利用Python实现图像处理的基础功能
  • 利用Python实现图像二值化并提取边缘
  • 利用①中的波谱信息以及②中处理后的边缘特征对水果进行分类

基于Python+Tkinter GUI 的模式识别水果分类小程序

图2 技术路线图 

一、界面设计部分 

        利用python中的tkinter GUI 进行交互式设计

    def __init__(self, master, entry, entry1):
        self.master = master
        self.entry = entry
        self.entry1 = entry1
        # self.gray = gray
        entry = tk.Entry(self.master, state='readonly', text=path, width=100, bg="#E0FFFF", justify='center')
        entry.configure(fg='red', bg="#E0FFFF")
        entry.pack()
        self.b1 = tk.Button(self.master, text='加载图像', command=self.select_img, fg="red", bg="#E0FFFF")
        self.b1.pack()
        self.b2 = tk.Button(self.master, text='分波段显示', command=self.seperateband, fg="red", bg="#E0FFFF")
        self.b2.pack()
        self.b3 = tk.Button(self.master, text='多波段合成', command=self.multibands, fg="red", bg="#E0FFFF")
        self.b3.pack()
        self.b4 = tk.Button(self.master, text='直方图绘制', command=self.historgram, fg="red", bg="#E0FFFF")
        self.b4.pack()
        self.b5 = tk.Button(self.master, text='图像灰度化', command=self.Gray, fg="red", bg="#E0FFFF")
        self.b5.pack()
        self.b6 = tk.Button(self.master, text='阈值分割', command=self.binary, fg="red", bg="#E0FFFF")
        self.b6.pack()
        self.b7 = tk.Button(self.master, text='Sobel算子', command=self.Sobel, fg="red", bg="#E0FFFF")
        self.b7.pack()
        self.b8 = tk.Button(self.master, text='Canny边缘提取', command=self.boundary, fg="red", bg="#E0FFFF")
        self.b8.pack()
        self.b9 = tk.Button(self.master, text='边缘生长', command=self.grow, fg="red", bg="#E0FFFF")
        self.b9.pack()
        self.b10 = tk.Button(self.master, text='区域填充', command=self.fillgrow, fg="red", bg="#E0FFFF")
        self.b10.pack()
        entry1 = tk.Entry(self.master, state='readonly', text=num, width=100, bg="#E0FFFF", justify='center')
        entry1.configure(fg='red', bg="#E0FFFF")
        entry1.pack()

基于Python+Tkinter GUI 的模式识别水果分类小程序

二、图像读取 

算法步骤

  • Tkinter交互式选择图片
  • GDAL库读取影像
  • 借助matplotlib显示
  • 源代码

  •     def select_img(self):
            # 路径选择框
            path_ = tk.filedialog.askopenfilename()
            path.set(path_)
            print('path', path_)
            self.entry = path_
            datafile = gdal.Open(str(path_))
            win1 = tk.Toplevel(self.master)
            win1.title('图像加载')
            win1.geometry('600x400')
            plt.rcParams['font.sans-serif'] = ['SimHei']
            plt.rcParams['axes.unicode_minus'] = False
            fig1 = plt.figure(figsize=(6, 4))
            canvas1 = FigureCanvasTkAgg(fig1, master=win1)
            canvas1.draw()
            canvas1.get_tk_widget().grid()
            band1 = datafile.GetRasterBand(1).ReadAsArray()
            band2 = datafile.GetRasterBand(2).ReadAsArray()
            band3 = datafile.GetRasterBand(3).ReadAsArray()
            img1 = np.dstack((band1, band2, band3))
            ax1 = fig1.add_subplot(111)
            ax1.set_title('真彩色', fontsize=10)
            ax1.imshow(img1)

三、直方图绘制

算法步骤

  • GDAL逐个读取波段
  • 对于每个波段,将[0,255]划分为等间隔的小区间,并统计每个区间上样本出现的频数之和。
  • Matplotlib显示

基于Python+Tkinter GUI 的模式识别水果分类小程序

源代码

    def historgram(self):
        win4 = tk.Toplevel(self.master)
        win4.title('直方图绘制')
        win4.geometry('800x600')
        src = gdal.Open(str(self.entry))
        r = src.GetRasterBand(1).ReadAsArray()
        g = src.GetRasterBand(2).ReadAsArray()
        b = src.GetRasterBand(3).ReadAsArray()
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        fig4 = plt.figure(figsize=(8, 6))
        canvas4 = FigureCanvasTkAgg(fig4, master=win4)
        canvas4.draw()
        canvas4.get_tk_widget().grid()
        # 真彩色
        img = np.dstack([r, g, b])
        ax1 = fig4.add_subplot(221)
        plt.imshow(img)
        plt.axis('off')
        ax1.set_title("(a)原始图像")

        # 绘制蓝色分量直方图
        ax2 = fig4.add_subplot(222)
        plt.hist(b.ravel(), bins=256, density=1, facecolor='b', edgecolor='b', alpha=0.75)
        # plt.xlabel("x")
        # plt.ylabel("y")
        ax2.set_title("(b)蓝色分量直方图")

        # 绘制绿色分量直方图
        ax3 = fig4.add_subplot(223)
        plt.hist(g.ravel(), bins=256, density=1, facecolor='g', edgecolor='g', alpha=0.75)
        # plt.xlabel("x")
        # plt.ylabel("y")
        ax3.set_title("(c)绿色分量直方图")

        # 绘制红色分量直方图
        ax4 = fig4.add_subplot(224)
        plt.hist(r.ravel(), bins=256, density=1, facecolor='r', edgecolor='r', alpha=0.75)
        # plt.xlabel("x")
        # plt.ylabel("y")
        ax4.set_title("(d)红色分量直方图")

四、图像灰度化 

常见的图像灰度化有三种方式:

基于Python+Tkinter GUI 的模式识别水果分类小程序

算法步骤

  • GDAL逐波段读取图像
  • 选择r、g、b三波段(有些图像为32bit,及包括RGB+Alpha位)
  • 将r、g、b三波段利用numpy组合
  • 利用rgb2gray函数进行转换,对应转化比例如表三所示
  • Matplotlib显示

      基于Python+Tkinter GUI 的模式识别水果分类小程序       基于Python+Tkinter GUI 的模式识别水果分类小程序

源代码

    def Gray(self):
        win5 = tk.Toplevel(self.master)
        win5.title('图像灰度化')
        win5.geometry('600x400')
        fig5 = plt.figure(figsize=(6, 4))
        canvas5 = FigureCanvasTkAgg(fig5, master=win5)
        canvas5.draw()
        canvas5.get_tk_widget().grid()
        datafile = gdal.Open(str(self.entry))
        band1 = datafile.GetRasterBand(1).ReadAsArray()
        band2 = datafile.GetRasterBand(2).ReadAsArray()
        band3 = datafile.GetRasterBand(3).ReadAsArray()
        img0 = np.dstack((band1, band2, band3))
        # 读入中文路径
        img = cv2.imdecode(np.fromfile(self.entry, dtype=np.uint8), cv2.IMREAD_COLOR)
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        ax1 = fig5.add_subplot(121)
        ax1.imshow(img0)
        ax1.set_title('original')
        # 灰度化
        ax2 = fig5.add_subplot(122)
        ax2.set_title('gray')
        gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        # gray = rgb2gray(img)
        ax2.imshow(gray, cmap=plt.get_cmap('gray'))

    def rgb2gray(rgb):
        # 灰度化原理Y' = 0.299 R + 0.587 G + 0.114 B
        return np.dot(rgb[..., :3], [0.299, 0.587, 0.114])

五、边缘检测 

        常用的边缘检查的方法大致可以分为两类:①基于查找:通过寻找图像一阶导数中最大值和最小值来检测边界,例如Sobel算子、Roberts Cross算法等。②基于零穿越的:通过寻找图像二阶导数零穿越来寻找边界,例如Canny算子、Laplacian算子等。

5.1Sobel算子 

算法介绍

Sobel算子思想:取 3 行 3 列的图像数据,将图像数据与对应位置的算子的值相乘再相加,得到x方向的Gx,和y方向的Gy,将得到的Gx和Gy,平方后相加,再取算术平方根,得到Gxy,近似值为和绝对值之和。将计算得到的阈值比较。若大于阈值,则表明该点为边界点,设置DN值为0,否则为255。

基于Python+Tkinter GUI 的模式识别水果分类小程序

基于Python+Tkinter GUI 的模式识别水果分类小程序

结果

基于Python+Tkinter GUI 的模式识别水果分类小程序

源代码 

    def Sobel(self):
        win7 = tk.Toplevel(self.master)
        win7.title('Sobel算子')
        win7.geometry('600x400')
        fig7 = plt.figure(figsize=(6, 4))
        canvas7 = FigureCanvasTkAgg(fig7, master=win7)
        canvas7.draw()
        canvas7.get_tk_widget().grid()
        img = cv2.imdecode(np.fromfile(self.entry, dtype=np.uint8), cv2.IMREAD_COLOR)
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        # 转灰度图像
        d = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        sp = d.shape
        print(sp)
        height = sp[0]
        weight = sp[1]
        sx = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
        sy = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
        dSobel = np.zeros((height, weight))
        dSobelx = np.zeros((height, weight))
        dSobely = np.zeros((height, weight))
        Gx = np.zeros(d.shape)
        Gy = np.zeros(d.shape)
        for i in range(height - 2):
            for j in range(weight - 2):
                Gx[i + 1, j + 1] = abs(np.sum(d[i:i + 3, j:j + 3] * sx))
                Gy[i + 1, j + 1] = abs(np.sum(d[i:i + 3, j:j + 3] * sy))
                dSobel[i + 1, j + 1] = (Gx[i + 1, j + 1] * Gx[i + 1, j + 1] + Gy[i + 1, j + 1] * Gy[
                    i + 1, j + 1]) ** 0.5
                dSobelx[i + 1, j + 1] = np.sqrt(Gx[i + 1, j + 1])
                dSobely[i + 1, j + 1] = np.sqrt(Gy[i + 1, j + 1])
        a = np.uint8(dSobel)
        b = np.uint8(dSobelx)
        c = np.uint8(dSobel)
        img = img[:, :, ::-1]
        image1 = np.dstack([a, a, a])
        image2 = np.dstack([b, b, b])
        image3 = np.dstack([c, c, c])
        ax1 = fig7.add_subplot(111)
        ax1.imshow(image1)
        ax1.set_title('Sobel')

5.2 阈值分割 

算法介绍

本问采用采取自适应局部滤波算法,主要包括两种情形:

  • 均值:以计算区域像素点灰度值的平均值作为该区域所有像素的灰度值,起到平滑或滤波作用。
  • 高斯加权和:将区域中点(x,y)周围的像素根据高斯函数加权计算他们离中心点的距离。

本文中采用高斯加权法进行局部阈值分割,并设置了5*5、7*7、11*11、13*13四种邻域范围,对比不同邻域下的分割效果。

算法步骤

  • 图像灰度化
  • 不同邻域下高斯加权法的局部阈值分割
  • Matplotlib显示

结果

基于Python+Tkinter GUI 的模式识别水果分类小程序

 源代码

    def binary(self):
        win6 = tk.Toplevel(self.master)
        win6.title('阈值分割')
        win6.geometry('800x600')
        fig6 = plt.figure(figsize=(8, 6))
        canvas6 = FigureCanvasTkAgg(fig6, master=win6)
        canvas6.draw()
        canvas6.get_tk_widget().grid()
        # 读入中文路径
        img = cv2.imdecode(np.fromfile(self.entry, dtype=np.uint8), cv2.IMREAD_COLOR)
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        # 二值化
        binary1 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 5)
        binary2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 7, 5)
        binary3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 5)
        binary4 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 13, 5)
        ax3 = fig6.add_subplot(221)
        ax3.set_title('kernal 5*5')
        image1 = np.dstack([binary1, binary1, binary1])
        ax3.imshow(image1)
        ax4 = fig6.add_subplot(222)
        ax4.set_title('kernal 7*7')
        image2 = np.dstack([binary2, binary2, binary2])
        ax4.imshow(image2)
        ax5 = fig6.add_subplot(223)
        ax5.set_title('kernal 11*11')
        image3 = np.dstack([binary3, binary3, binary3])
        ax5.imshow(image3)
        ax6 = fig6.add_subplot(224)
        ax6.set_title('kernal 13*13')
        image4 = np.dstack([binary4, binary4, binary4])
        ax6.imshow(image4)
        # cv2.imwrite("image_binary.png", binary4)

5.3 Canny算子 

Canny算子流程

  1. 高斯滤波去噪
  2. 计算梯度大小和梯度方向,其中梯度方向为
  3. 基于Python+Tkinter GUI 的模式识别水果分类小程序

  4. 对梯度幅值图像进行非极大抑制(边缘的方向与梯度方向垂直)
  5. 双阈值处理和连接性分析确定边界

处理步骤

  • 图像灰度化
  • 高斯滤波处理
  • 计算图像各方位的梯度大小和方向
  • 对垂直于梯度方向的边缘进行非极大值抑制
  • 进行双阈值处理和连结性分析确定边界
  • Matplotlib显示

结果

基于Python+Tkinter GUI 的模式识别水果分类小程序

 源代码

    def boundary(self):
        win8 = tk.Toplevel(self.master)
        win8.title('Canny_boundary')
        win8.geometry('600x400')
        fig8 = plt.figure(figsize=(6, 4))
        canvas8 = FigureCanvasTkAgg(fig8, master=win8)
        canvas8.draw()
        canvas8.get_tk_widget().grid()
        img = cv2.imdecode(np.fromfile(self.entry, dtype=np.uint8), cv2.IMREAD_COLOR)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        blurred = cv2.GaussianBlur(gray, (3, 3), 0)
        xgrad = cv2.Sobel(blurred, cv2.CV_16SC1, 1, 0)
        ygrad = cv2.Sobel(blurred, cv2.CV_16SC1, 0, 1)
        edge_output = cv2.Canny(xgrad, ygrad, 50, 150)
        edge_image = np.dstack([edge_output, edge_output, edge_output])
        ax1 = fig8.add_subplot(111)
        ax1.imshow(edge_image)
        ax1.set_title('Canny_boundary')

5.4区域生长 

对于上述三种边缘提取的算法(Sobel算子、阈值分割、Canny算子)而言,可以分析得出:

  • Sobel算子阴影处理效果不好,分界线不清晰

优点:输出图像(数组)的元素通常具有更大的绝对数值。

缺点:由于边缘是位置的标志,对灰度的变化不敏感。

  • 自适应局部阈值法中,实验表明邻域为11*11时效果好,但斑点噪声多,不利于后处理。
  • Canny算子处理完之后为无阴影的二值图像,但部分边缘缺失。

优点:Canny算子增加了非极大值抑制以及双阈值方法,因此排除了非边缘点的干扰,检测效果更好,且标识出的边缘要与实际图像中的实际边缘尽可能接近。

缺点:图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。

就算对于效果最好的Canny算子而言,仍然存在一定的边缘缺失。因此我们考虑利用中心对称特性将其补全。

核心思想

由于在实际拍照过程中考虑到到光照等因素的原因,检测出的边缘会存在边缘缺失的情况,而为了提取出完整的边缘,我们需要对缺失部分进行补全。

又考虑到水果总是关于其中心对称的,因此沃恩可以采取判断每一个已知边缘点关于中心对称的点灰度值是否为255即可。

算法流程

  • 执行Canny边缘提取
  • 对提取后的数组进行遍历,求取其长、宽以及相对位置中心
  • 构建与边缘提取后数组大小相同的新数组,并利用中心对称性对缺失值进行补全
  • Matplotlib显示

 结果

处理前:基于Python+Tkinter GUI 的模式识别水果分类小程序

处理后:基于Python+Tkinter GUI 的模式识别水果分类小程序

源代码

    def grow(self):
        # 生成新空间~
        win9 = tk.Toplevel(self.master)
        win9.title('边缘生长')
        win9.geometry('600x400')
        fig9 = plt.figure(figsize=(6, 4))
        canvas9 = FigureCanvasTkAgg(fig9, master=win9)
        canvas9.draw()
        canvas9.get_tk_widget().grid()
        # img[:,:,0]获取band1 shape:360,480
        img = cv2.imdecode(np.fromfile(self.entry, dtype=np.uint8), cv2.IMREAD_COLOR)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        blurred = cv2.GaussianBlur(gray, (3, 3), 0)
        xgrad = cv2.Sobel(blurred, cv2.CV_16SC1, 1, 0)
        ygrad = cv2.Sobel(blurred, cv2.CV_16SC1, 0, 1)
        edge_output = cv2.Canny(xgrad, ygrad, 50, 150)
        # print(edge_output)
        width, height = edge_output.shape
        # print(width, height)  # 360 480
        list_x = []
        list_y = []
        value = []
        for i in range(width):
            for j in range(height):
                if (edge_output[i][j] != 0):
                    list_x.append(i)
                    list_y.append(j)
                    value.append(edge_output[i][j])
                    # print(i, j)
                    # print(edge_output[i][j])
        x_max = max(list_x)
        x_min = min(list_x)
        # print(x_max, x_min)
        x_mean = int((x_max + x_min) / 2)
        # print('x_mean', x_mean)
        y_max = max(list_y)
        y_min = min(list_y)
        img1 = cv2.rectangle(img, (y_min, x_min), (y_max, x_max), (0, 255, 0), 2)  # 红
        y_mean = int((y_max + y_min) / 2)
        visited = np.zeros(shape=(edge_output.shape), dtype=np.uint8)
        for i in range(len(list_x)):
            x = list_x[i]
            y = list_y[i]
            # visited[x][y] = 1
            if x < x_mean and y < y_mean:
                directs = [(1, 0), (1, 1), (0, 1)]
            if x >= x_mean and y < y_mean:
                directs = [(-1, 0), (0, 1), (-1, 1)]
            if x < x_mean and y >= y_mean:
                directs = [(1, 0), (1, -1), (0, -1)]
            if x >= x_mean and y >= y_mean:
                directs = [(-1, 0), (-1, -1), (0, -1)]
            for direct in directs:
                current_x = x + direct[0]
                current_y = y + direct[1]
                if current_x < x_min or current_y < y_min or current_x >= x_max or current_y >= y_max:
                    continue
                # if (not visited[current_x][current_y]) and (edge_output[current_x][current_y] == edge_output[x][y]):
                if (not visited[current_x][current_y]):
                    edge_output[current_x][current_y] = 255
                    visited[current_x][current_y] = 1
                    x = 2 * x_mean - current_x
                    y = 2 * y_mean - current_y
                    # if(not visited[x][y] and current_y>y_mean and current_x<x_mean):
                    if (not visited[x][y]):
                        # 关于原点中心对称
                        # 令关于远点对称点为(x,y)
                        edge_output[x][y] = 255
                        visited[x][y] = 1

        contours, heriachy = cv2.findContours(edge_output, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        max1 = 0
        maxA = 0
        print(contours, heriachy)
        for i, contour in enumerate(contours):
            x, y, w, h = cv2.boundingRect(contour)
            if w * h > maxA:
                max1 = i
                maxA = w * h
        cv2.drawContours(img1, contours, max1, (0, 0, 255), 2)
        band1 = img1[:, :, 0]
        band2 = img1[:, :, 1]
        band3 = img1[:, :, 2]
        ax1 = fig9.add_subplot(111)
        image = np.dstack([band3, band2, band1])
        ax1.imshow(image)
        ax1.set_title('boundary')

六、分类

边缘处理

区域生长

Result

Orange1

基于Python+Tkinter GUI 的模式识别水果分类小程序 基于Python+Tkinter GUI 的模式识别水果分类小程序

面积:597069

种类:橙子

Orange2

基于Python+Tkinter GUI 的模式识别水果分类小程序 基于Python+Tkinter GUI 的模式识别水果分类小程序

面积:362935

种类:橙子

Lemon

基于Python+Tkinter GUI 的模式识别水果分类小程序 基于Python+Tkinter GUI 的模式识别水果分类小程序

面积:130258

种类:柠檬

 本模式识别任务为本人课程实践中所作,受于水平有限,很多地方存在漏洞,欢迎大家批评指正~

程序下载可见下网址

https://download.csdn.net/download/m0_51301348/86728190文章来源地址https://www.toymoban.com/news/detail-489183.html

到了这里,关于基于Python+Tkinter GUI 的模式识别水果分类小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 100个Python实战项目(十三)使用 Tkinter GUI 库构建闹钟应用程序

    本文主要是使用 Python 的 Tkinter 库创建一个简单的闹钟程序,它可以在指定的时间播放一个声音来提醒你。这个程序界面比较简单,只有一个标签、三个选项菜单和一个按钮,用户可以通过选项菜单设置闹钟的时间,然后点击按钮开始计时,直到闹钟时间到达时,程序会播放

    2023年04月16日
    浏览(37)
  • python基于深度学习的水果识别系统

    具体实现分为以下几个步骤: 数据集准备:从互联网上采集水果图片,并将其划分成训练集、验证集和测试集,以便用来训练和测试模型。 模型构建:使用 PyTorch 来构建深度学习模型,常用的有 AlexNet、VGG、ResNet 等。根据实验情况,可以选择不同的模型。 训练模型:使用准

    2024年02月07日
    浏览(32)
  • 水果识别系统Python,基于TensorFlow卷积神经网络算法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示 面对水果识别系统Python,基于TensorFlow卷积神经网络算---深度学习算法: 提示:以下是本篇文章正文内容,下面案例可供参考 果蔬识别系统,使用Python作为主要开发语言,使用深度学习 TensorFLOw框架

    2024年01月16日
    浏览(61)
  • python基于opencv和tkinter实现人脸识别【内附完整代码】

    人脸识别技术已经在许多领域得到了广泛应用,例如安防、金融、医疗等等。人脸识别可以帮助我们识别和验证一个人的身份,这是一项非常重要的任务。本篇博客将介绍如何使用Python和OpenCV库进行人脸识别。我们将学习如何使用OpenCV中的人脸检测器检测图像中的人脸,如何

    2023年04月14日
    浏览(32)
  • 基于深度学习的水果检测与识别系统(Python界面版,YOLOv5实现)

    摘要:本博文介绍了一种基于深度学习的水果检测与识别系统,使用YOLOv5算法对常见水果进行检测和识别,实现对图片、视频和实时视频中的水果进行准确识别。博文详细阐述了算法原理,同时提供Python实现代码、训练数据集,以及基于PyQt的UI界面。通过YOLOv5实现对图像中存

    2024年02月02日
    浏览(33)
  • Python GUI编程(Tkinter)

    Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大

    2024年02月14日
    浏览(54)
  • 基于卷积神经网络的水果成熟度识别(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

    功能演示: 基于vgg16,resnet50卷积神经网络的水果成熟度识别,可识别苹果,香蕉,草莓,荔枝和芒果的成熟度(pytorch框架)_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1ae411C7N5/?spm_id_from=333.999.0.0vd_source=95b9b70984596ccebdb2780f0601b78b  基于卷积神经网络的水果成熟度识别系统是在

    2024年01月23日
    浏览(43)
  • Python的GUI编程库Tkinter的学习

    GUI编程 就像是 搭积木 一样,把库里一个个的组件填好参数放到一个主体里面,最终形成一个可用的用户界面。 总体的流程大概是如此这般: 导入库- 创建主体对象 - 组装库中的组件放入到主体对象里。 Tkinter 内置到python的安装包里,可以不用下载直接使用。 导入库 如下:

    2024年02月21日
    浏览(53)
  • Python制作简易计算器(GUI)---Tkinter

    tkinter模块是Python标准的TK GUI工具包接口,可以实现一些较为简单GUI的创建。 麻雀虽小,五脏俱全 TK工具集使用TCL(Tool Command Language)语言开发 运行相同的程序时,运行速度快于pyqt5 组件能满足基本使用 程序界面较简陋 开发时,使用的语句更短更易懂 Python内置的标准库 Qt框

    2024年02月08日
    浏览(52)
  • 【Python】线程threading与GUI窗口tkinter结合应用

    Python的threading模块是一个强大的工具,它提供了高级别的线程编程接口。通过这个模块,Python程序员可以在应用程序中实现多线程并发执行。 线程(Thread)是程序执行流的最小单元,被包涵在进程之中,是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不

    2024年01月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包