目录

百度API

tkinter界面设计.

完整代码

实现结果如下:

百度API

人脸检测也是调用百度API去实现的。所以我们需要在百度AI开放平台-全球领先的人工智能服务平台里去进行人脸检测与属性分析的应用创建然后获取自己的ID、API key和Secre Key。

进入百度AI平台后选择开放能力下的人脸与人体技术-->人脸检测与属性分析

选择【立即使用】进入,然后选择【创建应用】,根据提示创建完成即可获得自己的ID、API key和Secre Key。

API的具体参数和调用方法请查看技术文档https://ai.baidu.com/ai-doc/FACE/yk37c1u4t

本章只展现了颜值检测的一些信息,还有更多功能可以探索。

tkinter界面设计.

1.界面的初始化及布局:

    def __init__(self):#创建窗口self.interface = Tk()# Toplevel() # Tk()self.interface.resizable(width=False, height=False)self.interface.title('人脸检测')  #设置标题self. interface. geometry('500x800') #设置窗口大小# 打开图像,转为tkinter兼容的对象,IMG = Image.open('4.jpg').resize([500,800])self.IMG = ImageTk.PhotoImage(IMG)#创建画布,将图像作为画布背景, 铺满整个窗口self.canvas = Canvas(self.interface, width=500, height=800) #设置画布的宽、高self.canvas.place(x=0, y=0)self.canvas.create_image(250,400,image = self.IMG) #把图像放到画布,默认放置中心点self.canvas.create_text(250, 100, text='人脸检测', font=('宋体', 40),fill = 'white')# 创建按钮cam = Image.open('cam.png').resize([70, 70])self.cam = ImageTk.PhotoImage(cam)Button(self.interface,image = self.cam, font=('宋体', 20), fg='white',command=lambda :self.Camera(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=120, y=600)  # activebackground 设置按键按下有变化 activebforeground设置前景色pic = Image.open('pic.png').resize([70, 70])self.pic = ImageTk.PhotoImage(pic)Button(self.interface, image = self.pic, font=('宋体', 20), fg='white',command=lambda :self.OpenPhoto(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=220, y=600)face = Image.open('face.png').resize([70, 70])self.face = ImageTk.PhotoImage(face)Button(self.interface,image = self.face, font=('宋体', 20), fg='white',command=lambda :self.Detect(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=320, y=600)Button(self.interface, width=19, text='返回', font=('宋体', 20), fg='white',command=lambda :self.back(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=120, y=700)self.interface.mainloop(0)

2.access_token的获取模块

    def token(self):api_key = '人脸检测的APIkey'secret_key = '人脸检测的Secretkey'# 获取token的网址传递AIPkey和secretkeyhost = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + api_key + '&client_secret=' + secret_key# 用POST方式对URL网址进行请求,获得响应结果response = requests.post(url=host)# 以JSON格式获取响应内容result = response.json()access_token = result['access_token']return access_token

3.摄像头的调用模块

①这里如果你是笔记本电脑调用内置摄像头  cap = cv2.VideoCapture(0) 这个参数为0;

如果是调用其他外置摄像头  cap = cv2.VideoCapture(1) 这个参数为1;

②if cv2.waitKey(1) in [27, ord('q')]:

27 是键盘 esc 键的ASCII码值,这里按下esc或者输入q 退出摄像头的调用

if cv2.waitKey(1) in [ord('c'), 13]:

13 是键盘 enter 键的ASCII码值,这里按下enter 或者输入c 拍下照片并保存

③img_name = '%s/%s.jpg' % ('IMG', 'cam')

这里是图片的保存目录及图片名称;IMG是保存目录,cam是图片名称

    def Camera(self):cap = cv2.VideoCapture(0)  # 0为内置摄像头,1为外接摄像头cvwhile True:success, img = cap.read()cv2.imshow('Capture', img)if cv2.waitKey(1) in [27, ord('q')]:breakcv2.destroyAllWindows()if cv2.waitKey(1) in [ord('c'), 13]:img_name = '%s/%s.jpg' % ('IMG', 'cam')cv2.imwrite(img_name, img)cv2.destroyAllWindows()f = open(img_name, 'rb').read()# 在将二进制进行转码self.img = base64.b64encode(f).decode('utf-8')breakself.SetImg(img_name)

4.打开系统文件选择照片的模块

    def OpenPhoto(self):root = tkinter.Tk()  # 创建一个窗口root.withdraw()  # 隐藏窗口实例# 利用文件对话框获取文件路径file_path = tkinter.filedialog.askopenfilename(title='选择文件')# 在程序窗口显示图片文件# 打开图像# img = 'lena.jpg'pic = Image.open(file_path)# 显示文件plt.axis('off')# plt.imshow(pic)# plt.show()# 将文件转为base64编码# 先以二进制读取文件f = open(file_path, 'rb').read()# 在将二进制进行转码self.img = base64.b64encode(f).decode('utf-8')# print(img)root.destroy()self.SetImg(file_path)

5.将拍下的照片或者系统文件里选择的照片放置到界面上的模块(其实就是跟界面设计里的的背景设置一样)

    def SetImg(self,photo_path):# 打开图像,转为tkinter兼容的对象,image = Image.open(photo_path).resize([250, 340])self.image = ImageTk.PhotoImage(image)# 创建画布,将图像作为画布背景, 铺满整个窗口self.canvas = Canvas(self.interface, width=250, height=340)  # 设置画布的宽、高self.canvas.place(x=130, y=130)self.canvas.create_image(125, 170, image=self.image)  # 把图像放到画布,默认放置中心点

6.调用API进行人脸检测并输出返回信息的模块

    def Detect(self):# 确定连接网址URL = 'https://aip.baidubce.com/rest/2.0/face/v3/detect'# 设置URL参数URL = URL + '?access_token=' + self.token()# 调用图像数据# img = self.OpenPhoto()# 设置请求参数params = {'image': self.img,'image_type': 'BASE64','face_field': 'age,gender,beauty,expression'}# 向网址发生POST请求response = requests.post(url=URL, data=params)result = response.json()# print(result)result = result['result']['face_list'][0]text = ('年龄:'+str(result['age'])+'    性别:'+str(result['gender']['type'])+'\n'+'颜值:'+str(result['beauty'])+' 表情:'+str(result['expression']['type']))# print('年龄:', result['age'])# print('性别:', result['gender']['type'])# print('颜值:', result['beauty'])# print('表情:', result['expression']['type'])self.canvas = Canvas(self.interface, width=250, height=60)  # 设置画布的宽、高self.canvas.place(x=130, y=480)self.canvas.create_text(115, 30, text = text, font=('宋体', 15), fill='black')

完整代码

from tkinter import *
from PIL import Image,ImageTk
import tkinter.filedialog
from PIL import Image
import matplotlib.pyplot as plt
import base64
import requests
import cv2#主界面面设计,创建类,在构造方法中没计界面
class FacePage():def __init__(self):#创建窗口self.interface = Tk()# Toplevel() # Tk()self.interface.resizable(width=False, height=False)self.interface.title('人脸检测')  #设置标题self. interface. geometry('500x800') #设置窗口大小# 打开图像,转为tkinter兼容的对象,IMG = Image.open('4.jpg').resize([500,800])self.IMG = ImageTk.PhotoImage(IMG)#创建画布,将图像作为画布背景, 铺满整个窗口self.canvas = Canvas(self.interface, width=500, height=800) #设置画布的宽、高self.canvas.place(x=0, y=0)self.canvas.create_image(250,400,image = self.IMG) #把图像放到画布,默认放置中心点self.canvas.create_text(250, 100, text='人脸检测', font=('宋体', 40),fill = 'white')# 创建按钮cam = Image.open('cam.png').resize([70, 70])self.cam = ImageTk.PhotoImage(cam)Button(self.interface,image = self.cam, font=('宋体', 20), fg='white',command=lambda :self.Camera(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=120, y=600)  # activebackground 设置按键按下有变化 activebforeground设置前景色pic = Image.open('pic.png').resize([70, 70])self.pic = ImageTk.PhotoImage(pic)Button(self.interface, image = self.pic, font=('宋体', 20), fg='white',command=lambda :self.OpenPhoto(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=220, y=600)face = Image.open('face.png').resize([70, 70])self.face = ImageTk.PhotoImage(face)Button(self.interface,image = self.face, font=('宋体', 20), fg='white',command=lambda :self.Detect(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=320, y=600)Button(self.interface, width=19, text='返回', font=('宋体', 20), fg='white',command=lambda :self.back(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=120, y=700)self.interface.mainloop(0)# client_id 为官网获取的AK, client_secret 为官网获取的SKdef token(self):api_key = '人脸检测的APIkey'secret_key = '人脸检测的Secretkey'# 获取token的网址传递AIPkey和secretkeyhost = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + api_key + '&client_secret=' + secret_key# 用POST方式对URL网址进行请求,获得响应结果response = requests.post(url=host)# 以JSON格式获取响应内容result = response.json()access_token = result['access_token']return access_tokendef Camera(self):cap = cv2.VideoCapture(0)  # 0为内置摄像头,1为外接摄像头cvwhile True:success, img = cap.read()cv2.imshow('Capture', img)if cv2.waitKey(1) in [27, ord('q')]:breakcv2.destroyAllWindows()if cv2.waitKey(1) in [ord('c'), 13]:img_name = '%s/%s.jpg' % ('IMG', 'cam')cv2.imwrite(img_name, img)cv2.destroyAllWindows()f = open(img_name, 'rb').read()# 在将二进制进行转码self.img = base64.b64encode(f).decode('utf-8')breakself.SetImg(img_name)# cv2.imshow('getFaceIamge', img)def OpenPhoto(self):root = tkinter.Tk()  # 创建一个窗口root.withdraw()  # 隐藏窗口实例# 利用文件对话框获取文件路径file_path = tkinter.filedialog.askopenfilename(title='选择文件')# 在程序窗口显示图片文件# 打开图像# img = 'lena.jpg'pic = Image.open(file_path)# 显示文件plt.axis('off')# plt.imshow(pic)# plt.show()# 将文件转为base64编码# 先以二进制读取文件f = open(file_path, 'rb').read()# 在将二进制进行转码self.img = base64.b64encode(f).decode('utf-8')# print(img)root.destroy()self.SetImg(file_path)def SetImg(self,photo_path):# 打开图像,转为tkinter兼容的对象,image = Image.open(photo_path).resize([250, 340])self.image = ImageTk.PhotoImage(image)# 创建画布,将图像作为画布背景, 铺满整个窗口self.canvas = Canvas(self.interface, width=250, height=340)  # 设置画布的宽、高self.canvas.place(x=130, y=130)self.canvas.create_image(125, 170, image=self.image)  # 把图像放到画布,默认放置中心点def Detect(self):# 确定连接网址URL = 'https://aip.baidubce.com/rest/2.0/face/v3/detect'# 设置URL参数URL = URL + '?access_token=' + self.token()# 调用图像数据# img = self.OpenPhoto()# 设置请求参数params = {'image': self.img,'image_type': 'BASE64','face_field': 'age,gender,beauty,expression'}# 向网址发生POST请求response = requests.post(url=URL, data=params)result = response.json()# print(result)result = result['result']['face_list'][0]text = ('年龄:'+str(result['age'])+'    性别:'+str(result['gender']['type'])+'\n'+'颜值:'+str(result['beauty'])+' 表情:'+str(result['expression']['type']))# print('年龄:', result['age'])# print('性别:', result['gender']['type'])# print('颜值:', result['beauty'])# print('表情:', result['expression']['type'])self.canvas = Canvas(self.interface, width=250, height=60)  # 设置画布的宽、高self.canvas.place(x=130, y=480)self.canvas.create_text(115, 30, text = text, font=('宋体', 15), fill='black')def back(self):self.interface.destroy()
FacePage()

素材:

【python】tkinter界面化+百度API—人脸检测(三)相关推荐

  1. 【python】tkinter界面化+百度API—聊天机器人(四)

    目录 百度API tkinter界面设计 完整代码 实现结果如下: 百度API 这里聊天机器人的功能也是结合第一篇的语音识别([python]tkinter界面化+百度API-语音识别_张顺财的博客- ...

  2. 基于百度API人脸识别课堂签到系统(一)--------人脸检测

    一.前言 今年由于疫情,全国学生的教学方式都从线下转到了线上:线下可以点名进行签到,那么线上应该如何进行准确的签到,防止学生作弊签到的情况呢?因此一款适用于大中小学生的基于人脸识别的课堂签到系统便应运 ...

  3. 调用百度ai人脸检测接口

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.人脸检测是什么? 二.使用步骤 1.引入库 2.分包操作 3.添加自定义MyApplication 4.Netwo ...

  4. java 百度api人脸识别功能(人脸识别+详细案例+接口及所需工具类)

    最近开发过程中需要用到人脸识别认证功能,然后就用的是百度API接口进行开发,起初设想用直接用人脸识别还是用注册到百度人脸库识别两种方法,为了简化开发直接就用了第一种方式: 直接上业务逻辑代码吧: po ...

  5. C# OpenCV人脸检测(三) DNN加载FaceDetectorYN模型做人脸检测

    点击下方卡片,关注"OpenCV与AI深度学习"公众号 视觉/图像重磅干货,第一时间送达 本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍C# OpenCV人 ...

  6. 【Python】调用百度云API人脸检测 Face Detect

    # encoding:utf-8 # !/usr/local/bin/python3# 百度云:驾驶行为分析 # 应用名称:驾驶行为分析测试import urllib3 from urllib.par ...

  7. 百度AI人脸检测测颜值php,百度AI人脸识别测颜值源码app

    百度AI人脸识别测颜值源码app是由百度AI官方提供的,将人脸识别分为了两个接口,v2与vv3.需要根据文档权限来选择接口类型,这款软件非常方便用户学习和体验.想要学习相关信息的朋友可以来看看哦. 百 ...

  8. 微信小程序开发之颜值测试,调用百度AI人脸检测接口

    ​页面效果 插播一下,颜值71,还可以那么狂,哼........ 项目介绍 页面实现上传一张带有人像的图片,点击测试颜值之后返回照片中人像的年龄和颜值,此项目为颜值测试初级,access_token值 ...

  9. 【python】15行代码实现人脸检测(opencv)

    文章目录 1. 项目简介 2. 项目地址 3. 依赖模块 4. 完整代码 5. 必要组件 5.1. haar级联特征分类器(精度高) 5.2. lbp级联特征分类器(速度快) 6. 成果展示 6.1. ...

最新文章

  1. 动手实践系列:CV语义分割!
  2. Oracle 查询今天、昨日、本周、本月和本季度的所有记录
  3. linux phpstorm安装和激活方法
  4. 基于Leaflet和GraphHopper实现离线路径规划
  5. ELK 企业级日志分析系统
  6. 不擅长面试可以怎么准备面试?
  7. 俄罗斯方块之四 运动块的绘制实现
  8. windows xp https页面找不到_Windows 提权快速查找 Exp
  9. 《C++ Primer》7.4节练习
  10. 使用 ServiceStack 构建跨平台 Web 服务
  11. 卷积神经网络算法python实现_自动色彩均衡(ACE)快速算法python实现
  12. BizTalk开发系列(三十四) Xpath
  13. python不会英语不会数学怎么自学-文科女生学Python:学过初中数学和英语就能懂的编程逻辑...
  14. js checkbox 选中判断
  15. 算法 -- 四种方法获取的最长“回文串”,并对时间复杂进行分析对比PHP
  16. springboot输出日志到文件配置
  17. You need libtool version 1.5.14 or newer to build
  18. MySQL数据库优化的八种方式(经典必看)
  19. CATIA入门学习常见问题(一)
  20. 信息系统与信息化、信息系统开发方法、常规信息系统集成技术

热门文章

  1. macports 2.3.1 安装mysql 报错_使用MacPorts配置PHP开发环境(PHP54+PHP FPM+NGINX+MYSQL55)...
  2. Python银行金额大写汉字转换
  3. 自己编写游戏引擎(1)
  4. GitLab更换远程仓库地址的方法-艾思软件
  5. [C语言] 利用阶乘公式编程计算e的近似值,直到最后一项的绝对值小于10-5时为止,输出e的值并统计累加的项数。输出e值要求小数点后必须保留6位有效数字(四舍五入),不足补零。
  6. MongoDB:数据库角色权限
  7. 智慧数字经营,对于营业额的提升有哪些实际帮助?
  8. 1037 在霍格沃茨找零钱(附详细注释,逻辑分析)
  9. java 判断是否是小数_java判断数字类型(小数和整数)
  10. 全国高中计算机大赛,第十九届全国中小学信息技术创新与实践大赛