import tkinter as tk
import cv2
import time
from PIL import Image, ImageTk
import json
import oss2
from viapi.fileutils import FileUtils
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkfacebody.request.v20191230.DetectMaskRequest import DetectMaskRequest
from aliyunsdkfacebody.request.v20191230.RecognizeFaceRequest import RecognizeFaceRequest
from aliyunsdkfacebody.request.v20191230.RecognizeExpressionRequest import RecognizeExpressionRequest
# 阿里云的AccessKey和Secert(处于隐私和安全考虑,已省去)
AccessKey = 'XXXXXXXXXXXXXXXXXXX'
Secert = 'XXXXXXXXXXXXXXXXX'
# 阿里云OSS对象存储的Bucket名字
BucketName = 'XXXXXXXX'
# OpenCV分类器的完整路径
face_classfier_path = "haarcascade_frontalface_alt.xml"
eye_classifer_path = "haarcascade_eye_tree_eyeglasses.xml"
# 实例化阿里云的各种服务
auth = oss2.Auth(AccessKey, Secert)
bucket = oss2.Bucket(auth, 'http://oss-cn-shanghai.aliyuncs.com', BucketName)
file_utils = FileUtils(AccessKey, Secert)
client = AcsClient(AccessKey, Secert, 'cn-shanghai')
# 开启摄像头
camera = cv2.VideoCapture(0)
# 定义openCV的分类器
fontface_classfier = cv2.CascadeClassifier(face_classfier_path) # 正脸识别
eye_classfier = cv2.CascadeClassifier(eye_classifer_path) # 眼睛识别
# left_eye_classfier = cv2.CascadeClassifier("haarcascade_lefteye_2splits.xml")#左眼识别
# 显示摄像头实时画面函数
######################################################################################
def video_loop():
# 识别出人脸后要画的边框的颜色,RGB格式, color是一个不可增删的数组
color = (0, 255, 0)
success, img = camera.read() # 从摄像头读取照片
if success:
# 将当前桢图像转换成灰度图像
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
faceRects = fontface_classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
eyesRects = eye_classfier.detectMultiScale(grey)
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
# 画出矩形框(绿色)
cv2.rectangle(img, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
if len(eyesRects) > 0:
for (x, y, w, h) in eyesRects:
# 画出眼睛的矩形方框(蓝色)
frame = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2image = cv2.cvtColor(img, cv2.COLOR_BGR2RGBA) # 转换颜色从BGR到RGBA
current_image = Image.fromarray(cv2image) # 将图像转换成Image对象
imgtk = ImageTk.PhotoImage(image=current_image)
camera_panel.imgtk = imgtk
camera_panel.config(image=imgtk)
window.after(1, video_loop)
# 更新右侧信息栏的函数,点击刷新按钮执行的函数
###################################################################################
def info_update():
# 用于存储图片的名字,图片对象,以及阿里云返回的url
img_list = []
# 时间对象,用于给每张图片赋予不同的名字
time1 = time.localtime(time.time())
# 从摄像头读取照片
success, img = camera.read()
if success:
# 将当前桢图像转换成灰度图像
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
faceRects = fontface_classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
# 眼睛检测
eyesRects = eye_classfier.detectMultiScale(grey)
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
# 通过人脸检测的矩形获取人脸图片
image_item = img[y - 50: y + h + 50, x - 50: x + w + 50]
image_item = cv2.resize(image_item, (100, 100), interpolation=cv2.INTER_LINEAR)
img_name = "images\\" + str(time1.tm_year) + str(time1.tm_mon) + str(time1.tm_mday) + str(
time1.tm_hour) + str(time1.tm_min) + str(time1.tm_sec) + ".png"
cv2.imwrite(
"images\\" + str(time1.tm_year) + str(time1.tm_mon) + str(time1.tm_mday) + str(time1.tm_hour) + str(
time1.tm_min) + str(time1.tm_sec) + ".png", image_item)
# 上传到阿里云OSS服务的Bucket(该服务收费)同时获取图片的url
bucket.put_object_from_file(img_name, img_name)
oss_url = file_utils.get_oss_url(img_name, "png", True)
# print(oss_url)
img_info = []
img_info.append(img_name)
img_info.append(image_item)
img_info.append(oss_url)
img_list.append(img_info)
# 如果没获取到人脸但是获取到了眼睛,通过眼睛位置捕获人脸(可能重复捕获)
elif len(eyesRects) > 0:
for eyesRect in eyesRects:
x, y, w, h = eyesRect
image_item = img[y - 130: y + h + 130, x - 130: x + w + 130]
image_item = cv2.resize(image_item, (100, 100), interpolation=cv2.INTER_AREA)
img_name = "images\\" + str(time1.tm_year) + str(time1.tm_mon) + str(time1.tm_mday) + str(
time1.tm_hour) + str(time1.tm_min) + str(time1.tm_sec) + ".png"
cv2.imwrite(
"images\\" + str(time1.tm_year) + str(time1.tm_mon) + str(time1.tm_mday) + str(time1.tm_hour) + str(
time1.tm_min) + str(time1.tm_sec) + ".png", image_item)
bucket.put_object_from_file(img_name, img_name)
oss_url = file_utils.get_oss_url(img_name, "png", True)
# print(oss_url)
img_info = []
img_info.append(img_name)
img_info.append(image_item)
img_info.append(oss_url)
img_list.append(img_info)
# 销毁上一次的当前视频中的人脸信息
for item in frame_c_now.winfo_children():
item.destroy()
frame_c_now.configure(height=0)
# 更新右边的当前信息和历史记录
for item in img_list:
# 0.是否佩戴口罩,1.颜色
Mask_info = DetectMask(item[2])
# 0.性别,1.年龄,2.颜值,3.眼镜,4.帽子
attributes = face_attributes(item[2])
# neutral(中性)、happiness(高兴)、surprise(惊讶)、sadness(伤心)、anger(生气)、disgust(厌恶)、fear(害怕)。
expression = detect_experssions(item[2])
# 更新右侧当前视频中人脸信息
item_Frame = tk.Frame(frame_c_now)
item_Frame_right = tk.Frame(item_Frame)
img_lable = tk.Label(item_Frame)
mask_lable = tk.Label(item_Frame_right, text="是否佩戴口罩:" + Mask_info[0], fg=Mask_info[1])
sex_lable = tk.Label(item_Frame_right,
text="性别:" + attributes[0] + " 年龄:" + str(attributes[1]) + " 颜值:" + str(
attributes[2]))
experssion_lable = tk.Label(item_Frame_right, text="表情:" + expression)
glass_lable = tk.Label(item_Frame_right, text="是否佩戴眼镜:" + attributes[3])
hat_lable = tk.Label(item_Frame_right, text="是否佩戴帽子:" + attributes[4])
# 更新右侧历史记录人脸信息
item_Frame_history =
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于阿里云人脸识别api实现人脸属性识别python源码+详细注释(佩戴口罩、帽子、年龄、表情等属性).zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果有一点儿基础,亦可在此代码基础上进行修改,以实现其他功能。 识别:佩戴口罩、帽子、年龄、表情等属性 识别:佩戴口罩、帽子、年龄、表情等属性 识别:佩戴口罩、帽子、年龄、表情等属性 欢迎下载学习,借鉴! 【特别强调】 1、csdn上资源保证是完整最新,会不定期更新优化; 2、请用自己的账号在csdn官网下载,若通过第三方代下,博主不对您下载的资源作任何保证,且不提供任何形式的技术支持和答疑!!!
资源推荐
资源详情
资源评论

























收起资源包目录








共 6 条
- 1
资源评论


onnx
- 粉丝: 1w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 第五章-数控机床的手工编程教学材料.ppt
- 南开大学2021年9月《手机应用软件设计与实现》作业考核试题及答案参考13.docx
- 大数据驱动的区域卫生平台建设方案.ppt
- 大跨度悬索桥施工控制程序设计及应用研究的开题报告.docx
- 2022将大数据应用在网络营销上的方法.docx
- 数据库系统原理及应用教程第四版课后答案.doc
- 自由空间光通信技术的发展现状与未来趋势.docx
- VPN-1-Power-VSX-NGX-虚拟防火墙.ppt
- 南开大学2021年9月《电子商务网页制作》作业考核试题及答案参考13.docx
- 第3讲logistic回归.ppt
- 20XX年上半年通信公司人力资源部主任工作总结.docx
- 电子计算机与多媒体课堂演示市公开课金奖市赛课一等奖课件.pptx
- 以赛促教模式下高校计算机类课程教学改革研究.docx
- 2022软件开发工程师求职信.docx
- 北航计算机控制系统大作业.docx
- 2021计算机求职简历模板.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
