python实战之PyQt5实现漫画脸

目录
  • 最终效果
  • 前言
  • 1.PyQt5的安装。
  • 2.qt designer 布局的使用。
  • 3.百度智能云api的调用。
  • 4.调控界面的控件。
  • 5.最终成果
  • 6.总结

最终效果

前言

这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写了一个简便的gui界面,有点不好看,大家凑合看一下,主要是学思路的哈!

1.PyQt5的安装。

1.PyQt5库的安装。

PyQt5的安装有两个办法。

1:pip install —xxx(库名)

2:把这三个库都下载。

 3:配置qt designer

Name:我们自己给这个tool起的名字

Program:填入designer.exe的路径,每个人路径不同,找到自己计算机上的 路径输进去。一般来说是在site-packages\QtDesigner\designer.exe这里。

Working directory:填入$ProjectFileDir$,表示文件所在的项目路径

4:配置转化工具pyuic

Name:自己起的名字

Program:python.exe所在的位置,一般在Python\Python38-32\python.exe这里

Arguements:填入-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py

是将.ui文件转化成.py文件的语句。

2.qt designer 布局的使用。

1:打开这个设计师

2:创建一个窗口

 3:设计界面,用鼠标拖动左边的控件。

   界面设计完成后点左上角的保存就可以,因为我这个就是一个简单的界面我就没有设置布局之类的,如果有强迫症的小伙伴可以去设置布局哦,在csdn中都有资料的哦。

4:ui转化为py

 qrcTopy这个我说一下,因为这个gui界面没有用到图片就没有qrc转化py,qrc这个就是把图片py文件才能在使用ui转化的py,否则就不可以显示你在qtdesigners 上面设计的图片。

5:在python上面运行转化后的py文件

一般转化过来的py文件里面,类都是没有初始化的,这个后面有一个坑,就是文件窗口调用的时候,你得初始化继承qt中的类才能继续使用文件窗口那个功能,小伙伴如果有什么不理解,可以等会看完整的代码就明白了。

6:我们现在运行py文件就可以看见下面这个GUI界面,所以第一步算是完成了。

3.百度智能云api的调用。

接下来我们来调用百度智能云的api  。

1.首先我们先打开 百度智能云

2.

 然后我们找到这个图像特效

 我么可以查看这个调用方法,然后去获取免费的调用机会。

主要是获取到这个AK 和SK,调用的时候需要用到这个东西。如果吊用还不是很懂的话,可以仔细看看官方的调用文档,接下来话不多说,直接上代码。

import requests, base64

# 这个函数的操作是为了获取access_token参数
def get_access_token():
    url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[AK]&client_secret=[SK]'

    res = requests.post(url)
    res = res.json()
    # print(res)
    access_token = res['access_token']
    return access_token

def img2Cartoon(path):
        request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
    # 二进制方式打开图片文件
        f = open(path, 'rb')
        img1 = base64.b64encode(f.read())

        params = {"image":img1}
        access_token = get_access_token()
        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)
        print(response.json())

        # 对响应结果进行处理
        if response:
            # 打开一个文件
            f = open(path, 'wb')
            # 获取动漫头像
            anime = response.json()['image']
            # 对返回的头像进行解码
            anime = base64.b64decode(anime)
            # 将头像写入文件当中
            f.write(anime)
            f.close()

if __name__ == '__main__':

    img2Cartoon()

 调用成功后,我们的这个第二步就成功了。

4.调控界面的控件。

接下来我们来给界面的布局建立信号和槽

1.界面一共有三个标签,两个按键,一个输入表格。

 查看图片我们是直接打开窗口选择文件然后在输入表格上面显示,就是文件窗口我们如果要使用的话,我们得给类初始化,并继承qt中的类,才能正常使用其中的qt调用窗口函数。

class Ui_MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui_MainWindow, self).__init__()

然后我们分别给按键调用函数功能。

        self.pushButton.clicked.connect(self.xians)
        self.pushButton_2.clicked.connect(self.zh)

可能还有一些小伙伴没有看明白,我们直接上源码吧

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'six.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets
import os,sys
from PyQt5.QtWidgets import *

class Ui_MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui_MainWindow, self).__init__()
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1062, 652)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 10, 471, 451))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(570, 10, 431, 451))
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(150, 530, 151, 41))
        self.pushButton.setStyleSheet("font: 16pt \"仿宋\";")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(740, 530, 151, 41))
        self.pushButton_2.setStyleSheet("font: 16pt \"仿宋\";")
        self.pushButton_2.setObjectName("pushButton_2")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(350, 200, 110, 17))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.widget1 = QtWidgets.QWidget(self.centralwidget)
        self.widget1.setGeometry(QtCore.QRect(340, 490, 371, 41))
        self.widget1.setObjectName("widget1")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget1)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_3 = QtWidgets.QLabel(self.widget1)
        self.label_3.setStyleSheet("font: 12pt \"隶书\";")
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_2.addWidget(self.label_3)
        self.lineEdit = QtWidgets.QLineEdit(self.widget1)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout_2.addWidget(self.lineEdit)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1062, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "漫画脸生成"))
        self.label.setText(_translate("MainWindow", "原图"))
        self.label_2.setText(_translate("MainWindow", "漫画脸"))
        self.pushButton.setText(_translate("MainWindow", "查看原图:"))
        self.pushButton_2.setText(_translate("MainWindow", "生成漫画脸"))
        self.label_3.setText(_translate("MainWindow", "图片地址:"))
        self.pushButton.clicked.connect(self.xians)
        self.pushButton_2.clicked.connect(self.zh)

    def xians(self):
            self.cwd = os.getcwd()
            print(type(self.cwd))
            fileName_choose = QFileDialog.getOpenFileName(self, "文件打开",
                                                          # 起始路径
                                                          self.cwd,
                                                          "All Files (*);;Text Files (*.txt)")  # 设置文件扩展名过滤,用双分号间隔

            if fileName_choose[0] == "":
                print("\n取消选择")
                return
            self.lineEdit.setText(fileName_choose[0])
            if os.path.isfile(self.lineEdit.text()) == True:

                png = QtGui.QPixmap(self.lineEdit.text())
                self.label.setPixmap(png)
                self.label.setScaledContents(True)
            else:
                self.messageDialog()

            pass

    def messageDialog(self):
            mag_box = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning, '警告', '文件异常!')
            mag_box.exec_()
    def zh(self):
        import apics #这个就是调用api接口那个函数
        path = self.lineEdit.text()
        path = path.replace('\\', '\\\\')
        apics.img2Cartoon(path)
        png = QtGui.QPixmap(self.lineEdit.text())
        self.label_2.setPixmap(png)
        self.label_2.setScaledContents(True)
        pass

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

5.最终成果

6.总结

到此这篇关于python实战之PyQt5实现漫画脸的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实战之百度智能云使人像动漫化

    一.目标 之前无意中看到有某位博主写过人像动漫化这样的文章,看着还挺好玩,所以我也想尝试一下. 利用百度智能云中的人工智能,对图片进行处理达到人像动漫化的效果. 二.准备工作 1.百度云智能账号创建 2.图像特效应用 3.开发环境python3.7+pycharm 首先要注册一个百度智能云账号,并创建这个图像特效应用 三.操作流程 3.1 阅读官方文档 当我们要使用一个我们不太了解的东西时,阅读官方文档无疑是最重要的,官方文档一般都写的特别详细,对每一个功能描述的很细节,我们先来看一下 而且这里

  • python实现人像动漫化的示例代码

    利用百度api实现人像动漫化 百度API地址:https://ai.baidu.com/tech/imageprocess/selfie_anime 技术文档:https://ai.baidu.com/ai-doc/IMAGEPROCESS/Mk4i6olx5 注册百度账号,开通实现人像动漫化,创建应用. # encoding:utf-8 import requests import base64 # client_id 为官网获取的AK, client_secret 为官网获取的SK host

  • python实战之PyQt5实现漫画脸

    目录 最终效果 前言 1.PyQt5的安装. 2.qt designer 布局的使用. 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写了一个简便的gui界面,有点不好看,大家凑合看一下,主要是学思路的哈! 1.PyQt5的安装. 1.PyQt5库的安装. PyQt5的安装有两个办法. 1:pip install -x

  • Python实战项目用PyQt5制作漫画脸GUI界面

    目录 最终效果 前言 1.PyQt5的安装. 1.PyQt5库的安装. 2.qt designer 布局的使用. 1:打开这个设计师 2:创建一个窗口 3:设计界面,用鼠标拖动左边的控件. 4:ui转化为py 5:在python上面运行转化后的py文件 6:运行py文件 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写

  • Python实战之OpenCV实现猫脸检测

    开发工具 Python版本:3.6.4 相关模块: cv2模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 简单地讲一讲Haar分类器,也就是Viola-Jones识别器. 详细的原理说明可参考相关文件中的两篇论文: Rapid Object Detection using a Boosted Cascade of Simple Features; Robust Real-Time Face Detection. (1

  • Python爬虫eval实现看漫画漫画柜mhgui实战分析

    目录 ️ 看漫画MHG mhgui 实战分析 通过开发者工具的 DOM 事件绑定器 截取相应的代码文件 eval 函数解析 ️ 看漫画MHG mhgui 实战分析 本文所有MHG使用 MHG 替代~ 本次爬虫采集的案例是MHG,该站点貌似本身就游走在法律的边缘. 站点地址直接检索即可进入,在该目标站点,橡皮擦发现了 eval 加密的双重用法. 页面所有点位都无太大难点,而且漫画超多,但是当点击详情页的时候,发现加密点位了. https://i.看评论区.com/ps1/u/17287/cmdty

  • Python实战之画哆啦A梦(超详细步骤)

    一.写在前面 本文基于64位windows系统(鼠标右键点击桌面"此电脑"图标--属性可查看电脑系统版本).python3.x(pycharm自动安装的版本, 3.0以上).文中代码内容所使用的工具是pycharm-community-2020.1,实践中如有碰到问题,可留言提问. 前阵子有看到zh上有大神画了这个哆啦A梦的大头贴,自己也来试了一下,很简单,但长篇整段的代码对刚刚学会海龟绘图语法的初学者来说还是有一定难度,所以来做一个拆解版详细步骤讲解实现. 二.效果图 言归正传,先上

  • Python实战之实现百度智能图片识别

    这是我们最终的效果,那么我们一起来看一看如何实现吧!超简单易上手哦! 首先我们需要先配置pyqt5的资源,这里就不说关于安装包的问题了(pip或者pycharm可以直接添加解决的问题,不一一赘述),我们直接说环境配置和路径的问题(所有的配置都在FILE -> setting -> Tools -> External Tools里): 1.配置designer.exe 之前没安装过的需要点击加号添加,这里只要注意Working directory和Program的配置正确即可(务必正确,不

  • Python实战之天气预报系统的实现

    目录 前言 一.前期准备 二.代码展示 三.效果展示 前言 鼎鼎大名的南方城市长沙很早就入冬了,街上各种大衣,毛衣,棉衣齐齐出动. 这段时间全国各地大风呜呜地吹,很多地方断崖式降温. 虽然前几天短暂的温度回升,但肯定是为了今天的超级降温,一大早的就开始狂风四起. 周五早晨,终于体验了一把久违冷冷的冰雨在脸上胡乱的拍!昨天还有10几度的天气,今天就  只有2-3°了,真真是老天爷的脸七十二变~ 广东的朋友们,听说你们哪儿最低温度都是10几度,我实名羡慕了——(要我说从哪儿听说的,昨天跟刺激战场打游

  • Python实战小程序利用matplotlib模块画图代码分享

    Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序:画出y=x^3的散点图 样例代码如下: #coding=utf-8 import pylab as y #引入pylab模块 x = y.np.linspace(-10, 10, 100) #设置x横坐标范围和点数 y.plot(x, x*x*x,'or') #生成图像 ax = y.gca() a

  • python实战之实现excel读取、统计、写入的示例讲解

    背景 图像领域内的一个国内会议快要召开了,要发各种邀请邮件,之后要录入.统计邮件回复(参会还是不参会等).如此重要的任务,老师就托付给我了.ps: 统计回复邮件的时候,能知道谁参会或谁不参会. 而我主要的任务,除了录入邮件回复,就是统计理事和普通会员的参会情况了(参会的.不参会的.没回复的).录入邮件回复信息没办法只能人工操作,但如果统计也要人工的话,那工作量就太大了(比如在上百人的列表中搜索另外上百人在不在此列表中!!),于是就想到了用python来帮忙,花两天时间不断修改,写了6个版本...

  • python实战串口助手_解决8串口多个发送的问题

    今晚终于解决了串口发送的问题,更改代码如下: def write(self, data): if self.alive: if self.serSer.isOpen(): self.serSer.write(data) def m_send1butOnButtonClick( self, event ): if self.ser.alive: send_data = '' send_data += str(self.m_textCtrl5.GetValue()) self.ser.write(s

随机推荐