假期无聊 就来试试用Python做一个智能识别 包教会哦 多图预警:配置Pyqt5超详细解说(designer.exe和pyuic.exe)以及项目:Python实现百度智能识别,识别各种实物

这是我们最终的效果,那么我们一起来看一看如何实现吧!超简单易上手哦! 

首先我们需要先配置pyqt5的资源,这里就不说关于安装包的问题了(pip或者pycharm可以直接添加解决的问题,不一一赘述),我们直接说环境配置和路径的问题(所有的配置都在FILE -> setting -> Tools -> External Tools里):

1、配置designer.exe

之前没安装过的需要点击加号添加,这里只要注意Working directory和Program的配置正确即可(务必正确,不然后期使用designer需要自己手动导入,比较麻烦),点击加之后,会出现这个界面,再把下面的数据输入就可以了。

Working directory除了前面的存在哪一个盘里不确定,后面的路径都一样

Program Files\PycharmProjects\pythonProject\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

Program不需要更改

$ProjectFileDir$

2、之后我们需要配置pyuic,这一步也很关键,它保证了把我们做出来的窗口界面翻译成python语言。没有这一步,就只能手码(自己敲代码实现窗口涉及)。同样的,点击加号

 再把下面的内容输入就可以:

Program(也是一样,存在哪个盘可能不确定,是自己设置,但是后面的路径都一样)

Program Files\PycharmProjects\pythonProject\Scripts\pyuic5.exe

Arguments(参数也不能有问题):

$FileName$ -o $FileNameWithoutExtension$.py

Working directory(这个务必不能出错)

$FileDir$

3、那么,我们现在也可以添加一个pyrcc.exe(主要是把图像转化为可使用的文件,比如导入图标之类)

 Program

Program Files\PycharmProjects\pythonProject\Scripts\pyrcc5.exe

Arguments

$FileName$ -o $FileNameWithoutExtension$_rc.py

Working directory

$FileDir$

那么到现在,我们以及配置完成了,之后就是代码的问题了。

首先我们打开我们导入的外界工具Qt designer

进去之后,页面如此:

 

我们直接创建一个main window就可以了

我们要实现的窗口大致如下:

 那么我们现在需要开始放东西了:

 首先选中PushButton,之后可以任意更改它的大小和字体。

而后我们编辑第一个信号与槽函数:按下F4按键,点击pushbutton,拖拽出一个红色的线,放在喜欢的位置后,选择“显示从 QWidget 继承的信号和槽”,我们再点击clicked()(意思就是被点击),然后选择close()(意思就是关闭)。即被点击就关闭。

 那么Ctrl+R可以测试一下功能,就是点击一下就退出了。

 

 像这个请选择图片,就需要我们在python的代码里手动添加信号和槽了。但是我们为了写手码方便,最好双击更改一下它的备注。(如下)

那么之后先添加我们所需要的部件

 

 

 双击combox就可以添加了

之后是文本和放图片的位置,我们统一使用Label(所以记得改名,防止记混了)

 当添加到图片和路径的显示时,我们可以更改他们的背景色,如下:

 那么它就变白了。

 到这里,我们已经把窗口的工作做完了,当然我们也可以添加一个窗口小图标,让它打开的时候有图标:(同时注意combox的新建项目改名)

 之后我们点击文件,保存即可:

 现在我们返回pycharm,就能看到我们的文件了:

 使用Py uic,把它转译成python代码,因为ui文件python是打不开的。

这个时候就会生成一个AIrecognition.py文件 

 

 在这里,我们就可以导入一些必要的包(模块了),如下:我们一会儿再讲讲这些包都是干啥的。

import json,sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QGraphicsWidget,QApplication,QFileDialog
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import simplejson,requests

import test_rc

import urllib,urllib.request
import base64,ssl

 可以看到,我们命名之后,更容易找到对应的槽来书写信号:

 下一步,我们来书写一个打开图片的信号和槽函数(在py文件的最下面),这里要注意打开的窗口是主窗口,必须要存在,不然会报错:

  self.choosepicture.clicked.connect(self.openfile)

    def openfile(self):
        self.download_path = QFileDialog.getOpenFileName(self.centralwidget, "请选择需要识别的图片", "/",
                                                         "Image File(*.jpg *.gif *.png *.jpeg)")
        if not self.download_path[0].strip():
            pass
        else:
            print(self.download_path[0])
            self.filedirectory.setText(self.download_path[0])
            pixmap = QPixmap(self.download_path[0])
            scarePixmap = pixmap.scaled(QSize(421, 281), aspectRatioMode=Qt.KeepAspectRatio)
            self.picturedisplay.setPixmap(scarePixmap)
            self.typeTp()

 由于我们把选择图片的那个Button改名成了choosepicture,所以这时候直接使用这个来做信号发生就好。

那么我们还有编写槽函数,在打开图片之后,要显示图片的路径以及图片的样子。所以这些功能在槽函数实现:

显示图片路径的label我们使用的名字是filedirectory,展示图片的label的名字是picturedisplay,所以我们在setText和setPixmap的时候,直接使用这两个名字就好。这样就实现了文本的展示和图片的展示(具体的代码以及函数,如QPixmap,就不再赘述,因为涉及的知识点会更多,所以只能委屈大大自己上网查一下啦!)

那么现在,我们把这一个信号和槽搞定了,就差接入百度识别的系统了。

就让我们来看一看吧:

 点击搜索百度ai,进入之后选择图像识别,打开技术文档:

 就可以看到python语言如何接入API,以及它的返回示例(我们展示图片信息就需要关注这个返回示例)

 当然,之后需要注册一个属于自己的百度AI的账号,找到自己的API_Key和Secret_Key

注册之后点击左上角的三条横杠,然后选择图像识别。 

 而后创建一个应用(我这里以及创建好了,简要的随便写写信息就行)

之后点进去就可以查看自己的API_Key和Secret_Key了

 然后选择一些我们需要的识别项目(不用担心,免费使用的次数是足够的)

 之后再进入刚才的接入和返回的示例,将其复制到python代码中(导入的模块写在上面)

注意上面书写槽函数实现打开图片代码中的typeTP,我们要靠这个接入网络,所以还要写函数,由于在设计窗口界面的时候,就已经将combox改名为choices,所以这里使用choices就可以。

并且这里我们书写了一个接受token值的函数,我们也需要完善它的功能,一遍正常接入API和返回token值。

    def typeTp(self):
        # 植物识别
        if self.choices.currentIndex() == 0:
            self.get_token()
            self.get_plants(self.get_token())
        # 动物识别
        if self.choices.currentIndex() == 1:
            self.get_token()
            self.get_animals(self.get_token())
        # logo识别
        if self.choices.currentIndex() == 2:
            self.get_token()
            self.get_logo(self.get_token())

 在这里就需要我们导入一些新的包了,不过所有需要导入的包,我已经在开头给出,所以这里也不一一介绍了(比如simplejson,request)。

 def get_token(self):
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + API_Key + '&client_secret=' +Secret_Key
        request = urllib.request.Request(host)
        request.add_header('Content-Type', 'application/json; charset=UTF-8')
        response = urllib.request.urlopen(request)
        token_content = response.read()
        if token_content:
            token_info = simplejson.loads(token_content.decode("utf-8"))
            token_key = token_info['access_token']
            print(token_key)
            print(token_content)
        return token_key

那么我们只演示其中的几个案例,植物和动物和logo,其他的接入都一样,在此之前,我们书写一个函数来处理冗余的代码问题(因为就像能在百度提供的接口代码一样,很多都是一样的,除了接受返回值):

# 为了解决代码的冗余问题,使用函数来接入网站,而后再在子函数里实现获取value
    def get_website(self,token_key,k):
        websitelist=["https://aip.baidubce.com/rest/2.0/image-classify/v1/plant",
                     "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal",
                     "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo"]
        request_url = websitelist[k]
        f = open(self.download_path[0], 'rb')
        img = base64.b64encode(f.read())
        params = {"image": img}
        access_token = token_key
        request_url = request_url + "?access_token=" + access_token
        headers = {"content-type": "application/x-www-form-urlencoded"}
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            return response.json()

可以看到,这里return的是一个response,也就是我们需要的一些内容(token_key的值),

    def get_plants(self, token_key):
        plants = self.get_website(token_key, 0)
        strover = '识别结果如下:\n'
        strover += '辨认种类:{}\n辨认置信度:{}\n' \
                       .format(plants["result"][0]["name"], plants["result"][0]["score"]) + \
                   '\n其他可能植物:\n1.{}\n2.{}\n' \
                       .format(plants["result"][1]["name"], plants["result"][2]["name"])
        self.pictureinfo.setText(strover)

    def get_animals(self, token_key):
        animals = self.get_website(token_key, 1)
        strover = '识别结果如下:\n'
        strover += '辨认种类:{}\n辨认置信度:{}\n' \
                       .format(animals["result"][0]["name"], animals["result"][0]["score"]) + \
                   '\n其他可能动物:\n1.{}\n2.{}\n' \
                       .format(animals["result"][1]["name"], animals["result"][2]["name"])
        self.pictureinfo.setText(strover)

    def get_logo(self, token_key):
        logos = self.get_website(token_key, 2)
        strover = '识别结果如下:\n'
        strover += '辨认种类:{}\n辨认置信度:{}\n' \
            .format(logos["result"][0]["name"], logos["result"][0]["probability"])
        self.pictureinfo.setText(strover)

我们使用strover来接受返回的内容,这时候我们需要查看返回的示例了(以植物为例):

 可以看到,它返回了一个字典,那么我们就需要提取字典里的信息,也就是上面的代码所给出的:

  def get_plants(self, token_key):
        plants = self.get_website(token_key, 0)
        strover = '识别结果如下:\n'
        strover += '辨认种类:{}\n辨认置信度:{}\n' \
                       .format(plants["result"][0]["name"], plants["result"][0]["score"]) + \
                   '\n其他可能植物:\n1.{}\n2.{}\n' \
                       .format(plants["result"][1]["name"], plants["result"][2]["name"])
        self.pictureinfo.setText(strover)

字典的一些基本操作就不多解释了,所以,我们就这样成功的获取了信息。

其他的识别也可以以此类推,所以,我们就实现了智能识别(基于百度AI)。当然,要记得写入自己的AK和SK,不然也无法识别。

当然了,只是这样是无法运行这个代码的,我们还需要一个测试文件:

from AIrecognition import *

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(main)
    main.show()
    sys.exit(app.exec_())

那就让我们看看效果吧:

 效果非常好。当然,我们看这个表头啥也没有,很难看,我们可以手码写入:

 import test_rc 不能少

icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/new/Lib/schoolbus.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)

 

同时,我们也可以设置一些标题文字,来改掉MainWindow:

 就把这个地方改成我们想要的就可以了:

这样就大功告成了,小伙伴们还不赶紧试一试手,顺便给个三连吗? 

  • 43
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
### 回答1: PythonPyQt5可以用于创建人脸识别界面。人脸识别是一种计算机视觉技术,可以识别和验证人脸。PyQt5一个Python GUI框架,可以用于创建用户界面。结合这两个工具,可以创建一个用户友好的人脸识别界面,使用户能够轻松地使用人脸识别技术。 ### 回答2: Python是当下最受欢迎的开源编程语言之一,而PyQt5则是Python中最为流行的GUI(图形用户界面)库之一。人脸识别技术已经得到广泛的应用,如安全控制、班级考勤、体育运动分析等。因此,通过使用PythonPyQt5,我们可以创建一个人脸识别界面,用于识别照片或视频中的人脸。 写一个人脸识别界面需要经过以下几个步骤: 1. 准备工作:安装PythonPyQt5、OpenCV等必要的库,并下载可识别的数据集。 2. 设计界面:使用PyQt5designer工具来设计一个漂亮的人脸识别界面。 3. 代码编写:利用OpenCV库实现人脸检测和识别功能,并将其应用到PyQt5的界面中。 以下是具体的步骤: 1. 准备工作:首先要安装Python,建议安装Python3版本,因为Python2已经逐渐被淘汰。然后我们需要安装必要的库,如PyQt5、OpenCV等。以Python3为例,可以使用以下命令安装: ```pip3 install PyQt5``` ```pip3 install opencv-python``` 2. 设计界面:使用PyQt5designer工具来设计人脸识别界面,可以添加一些按钮和标签等。设计好的界面将保存为.ui文件,使用以下命令将其转换为.py文件: ```pyuic5 input.ui -o output.py``` 3. 代码编写:在编写代码之前,需要先下载数据集,以著名的LFW数据集为例,可以在以下网址下载: http://vis-www.cs.umass.edu/lfw/ 然后我们需要加载数据集,并进行人脸检测和识别。以下是一个简单的python代码示例: ``` import cv2 import numpy as np face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') img = cv2.imread('test.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 通过使用OpenCV库,我们可以使用haar级联分类器进行人脸检测。检测到人脸后,我们可以在检测到的人脸周围绘制一个矩形,以标明检测到人脸的位置。 最后,将检测到的人脸显示在PyQt5的界面中即可。 综上所述,使用PythonPyQt5创建人脸识别界面并不复杂,只需要对PythonPyQt5有一定了解,并熟悉OpenCV库的使用。这个简单的示例可以为初学者提供一些思路,并为进一步的开发提供帮助。 ### 回答3: Python是一种极具使用性的编程语言,它可以应用于各种领域,人脸识别。在Python中,PyQt5一个流行的GUI(图形用户界面)开发框架,可用于创建可交互的用户界面。在PyQt5中,我们可以使用OpenCV来实现人脸识别。下面介绍如何使用PythonPyQt5创建一个人脸识别界面: 1. 安装必要的库和工具 要创建人脸识别界面,您首先需要安装PythonPyQt5和OpenCV库。例如,您可以使用pip命令安装这些库: pip install PyQt5 pip install opencv-python 2. 设计界面 使用PyQt5,您可以使用Qt Designer创建用户界面。Qt Designer一个允许您通过鼠标和拖放操作创建GUI设计的应用程序。您可以选择不同的控件和布局来设计UI。将按钮和标签放在界面上,并使用布局选项来调整它们的位置和大小,创建出能够实现人脸识别功能的UI。 3. 实现人脸识别 通过OpenCV库,您可以使用各种算法来识别人脸,并在PyQt5应用程序中实现它们。例如,您可以使用Haar级联分类器训练一个模型来识别人脸,或使用深度学习算法如卷积神经网络技术来进行人脸识别。 在实现人脸识别过程中,需要注意以下几点: a. 显示摄像头视频流 通过OpenCV库,我们可以在PyQt5中显示摄像头的实时视频流。这可以通过打开视频捕获设备并将其帧读取到窗口中来实现。 b. 识别人脸并加框 在识别到人脸并准确确定其位置后,可以在人脸周围绘制一个矩形框来加以标记。这可通过使用cv.rectangle()函数来实现。 c. 显示人脸识别结果 识别人脸后,可以将结果显示在UI上。例如,可以显示人脸图像和人脸识别结果,如人物姓名或ID等。 4. 调试和测试 完成代码编写并运行时,请务必进行调试和测试。在测试过程中,可以使用不同的数据集来对识别算法进行测试,并排除任何运行时错误。通过长时间的测试和调试,从而能够得到一个完整且高效的PyQt5人脸识别应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值