当前位置: 首页 > news >正文

用Python与OpenCV的实践:实时面部对称性分析

目录

思路分析

整体代码

效果展示

总结


        在当今计算机视觉领域,人脸识别和分析技术得到了广泛应用。无论是安全验证、社交媒体应用,还是美学研究,人脸特征的提取和分析都是关键技术之一。在这篇博客中,我们将深入探讨一个有趣的项目:实时面部对称性分析。通过使用Python语言、OpenCV库和dlib库,实现一个能够实时检测人脸并评估其对称性的程序。

思路分析

  • 导入库

    • 使用cv2处理图像和视频流,dlib用于人脸检测和特征点提取,numpy进行数值计算,PIL用于绘制中文文本。
  • 加载模型

    • 使用dlib加载人脸检测器和特征点预测器,特征点预测器利用68个关键点来定位人脸特征。
  • 定义对称性计算函数

    • calculate_symmetry函数计算左右眼中心与鼻子的距离,进而评估面部的对称性。对称性分数是左右鼻子距离的差值,值越小表示越对称。
  • 文本绘制函数

    • draw_text函数将OpenCV图像转换为PIL图像,利用PIL绘制中文文本,避免OpenCV不支持中文的问题。
  • 摄像头初始化

    • 使用cv2.VideoCapture(0)打开默认摄像头。
  • 实时视频处理循环

    • 循环读取摄像头帧,将每帧转换为灰度图像以进行人脸检测。
    • 检测到人脸后,提取特征点并计算对称性分数。
    • 根据分数分类对称性状态,并在图像上绘制特征点和状态信息。
  • 帧率计算

    • 计算每帧处理的时间,以便显示实时帧率。
  • 显示结果

    • 使用cv2.imshow显示处理后的图像,用户可以通过按下“q”键退出。
  • 释放资源

    • 结束时释放摄像头和关闭所有窗口。

整体代码

import cv2
import dlib
import numpy as np
import time
from PIL import Image, ImageDraw, ImageFont# 加载人脸检测器和特征点预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("./model/shape_predictor_68_face_landmarks.dat")def calculate_symmetry(landmarks):left_eye = landmarks[36:42]right_eye = landmarks[42:48]nose = landmarks[30]left_eye_center = np.mean(left_eye, axis=0)right_eye_center = np.mean(right_eye, axis=0)left_nose_distance = np.linalg.norm(left_eye_center - nose)right_nose_distance = np.linalg.norm(right_eye_center - nose)symmetry_score = abs(left_nose_distance - right_nose_distance)return symmetry_scoredef draw_text(image, text, position, font_size=30):# 将OpenCV图像转换为PIL图像pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(pil_image)font = ImageFont.truetype("simhei.ttf", font_size)  # 使用黑体字体draw.text(position, text, font=font, fill=(255, 255, 255, 0))return cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)# 初始化摄像头
cap = cv2.VideoCapture(0)while True:start_time = time.time()  # 记录开始时间ret, frame = cap.read()if not ret:breakgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 检测人脸faces = detector(gray)for face in faces:landmarks = predictor(gray, face)landmarks = np.array([[p.x, p.y] for p in landmarks.parts()])# 计算对称性symmetry_score = calculate_symmetry(landmarks)# 对称性分类if symmetry_score < 5:symmetry_status = "完全对称"elif symmetry_score < 10:symmetry_status = "较为对称"elif symmetry_score < 15:symmetry_status = "不太对称"else:symmetry_status = "高度不对称"# 可视化特征点for (x, y) in landmarks:cv2.circle(frame, (x, y), 2, (0, 255, 0), -1)# 在图像上显示对称性分数和状态frame = draw_text(frame, f'对称性分数: {symmetry_score:.2f}', (10, 30))frame = draw_text(frame, f'状态: {symmetry_status}', (10, 60))# 计算并显示FPSfps = 1 / (time.time() - start_time)frame = draw_text(frame, f'帧率: {fps:.2f}', (10, 90))# 显示图像cv2.imshow("haha", frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头和窗口
cap.release()
cv2.destroyAllWindows()

效果展示

 

 

总结

      我们构建了一个实时面部对称性分析系统,利用计算机视觉技术将面部特征的对称性可视化。希望这篇博客能够激发大家对计算机视觉的兴趣,并鼓励更多的探索与实践。如果你对该项目有任何疑问或建议,欢迎在评论区留言讨论!让我们一起在计算机视觉的世界中不断前行。

相关文章:

用Python与OpenCV的实践:实时面部对称性分析

目录 思路分析 整体代码 效果展示 总结 在当今计算机视觉领域&#xff0c;人脸识别和分析技术得到了广泛应用。无论是安全验证、社交媒体应用&#xff0c;还是美学研究&#xff0c;人脸特征的提取和分析都是关键技术之一。在这篇博客中&#xff0c;我们将深入探讨一个有趣的…...

第三十三章 使用派生密钥令牌进行加密和签名 - 使用 DerivedKeyToken _进行加密(一)

文章目录 第三十三章 使用派生密钥令牌进行加密和签名 - 使用 <DerivedKeyToken> 第三十三章 使用派生密钥令牌进行加密和签名 - 使用 进行加密&#xff08;一&#xff09; 如果加密了任何安全标头元素&#xff0c;请将它们添加到 WS-Security 标头元素中。为此&#…...

Structure-Aware Transformer for Graph Representation Learning

Structure-Aware Transformer for Graph Representation Learning&#xff08;ICML22&#xff09; 摘要 Transformer 架构最近在图表示学习中受到越来越多的关注&#xff0c;因为它通过避免严格的结构归纳偏差而仅通过位置编码对图结构进行编码&#xff0c;自然地克服了图神经…...

滚动页面,el-table表头始终置顶

效果如下&#xff1a; 起始状态&#xff1a; 滚动后&#xff1a; 代码地址&#xff1a;代码地址-面包多...

Mac使用gradle编译springboot-2.7.x源码

1 开发环境&#xff1a; JDK8 ideaIU-2024.2.2 gradle-7.6.3 代理网络 2 下载springboot源码 代码仓库网址 git clone -b 2.7.x https://github.com/spring-projects/spring-boot.git3 安装gradle gradle下载网址 https://services.gradle.org/distributions/ 安装此文件指…...

MySQL --索引(下)

文章目录 6.索引操作6.1 创建主键索引6.2 创建唯一索引6.3 创建普通索引6.4 创建全文索引6.5 查询索引6.6 删除索引6.7 索引创建原则6.8 复合索引6.9 索引最左匹配原则6.10 索引覆盖 6.索引操作 6.1 创建主键索引 第一种方式&#xff1a; – 在创建表的时候&#xff0c;直接…...

选择寄宿学校,给自闭症孩子一个温暖的第二家

在寻找适合自闭症孩子成长的道路上&#xff0c;每一个家庭都充满了艰辛与希望。而广州市星贝育园康复中心&#xff0c;以其独特的全托寄宿制教育模式&#xff0c;为这些特殊的孩子提供了一个充满爱与关怀的“第二家”。在这里&#xff0c;孩子们不仅能够得到专业的康复训练&…...

大模型训练:K8s 环境中数千节点存储最佳实践

今天这篇博客来自全栈工程师朱唯唯&#xff0c;她在前不久举办的 KubeCon 中国大会上进行了该主题分享。 Kubernetes 已经成为事实的应用编排标准&#xff0c;越来越多的应用在不断的向云原生靠拢。与此同时&#xff0c;人工智能技术的迅速发展&#xff0c;尤其是大型语言模型&…...

【Linux学习】1-2 新建虚拟机ubuntu环境

1.双击打开VMware软件&#xff0c;点击“创建新的虚拟机”&#xff0c;在弹出的中选择“自定义&#xff08;高级&#xff09;” 2.点击下一步&#xff0c;自动识别ubuntu光盘映像文件&#xff0c;也可以点击“浏览”手动选择&#xff0c;点击下一步 3.设置名称及密码后&#xf…...

ftdi_sio驱动学习笔记 3 - 端口操作

目录 1. ftdi_port_probe 1.1 私有数据结构ftdi_private 1.2 特殊probe处理 1.3 确定FTDI设备类型 1.4 确定最大数据包大小 1.5 设置读取延迟时间 1.6 初始化GPIO 1.6.1 使能GPIO 1.6.2 添加到系统 1.6.2.1 设置GPIO控制器的基本信息 1.6.2.2 设置GPIO控制器的元信息…...

[leetcode]39_组合总和_给定数组且数组可重复

给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数。 解集不能包含重复的组合…...

【笔记】第三节 组织与性能

3.1 基本成分 3.2 微观组织特征 0.6-0.8C%碳素钢的组织为珠光体和少量的铁素体。 如何把组织和性能联系起来&#xff1f;德国克虏伯公司的研究——珠光体片间距与渗碳体片层厚度成比例&#xff1a; t s 0 ( ρ 15 ( C % ) − 1 ) ts_0(\frac{\rho}{15(C\%)}-1) ts0​(15(C%)…...

数据库——sql语言学习 查找语句

一、什么是sql SQL是结构化查询语言&#xff08;Structured Query Language&#xff09;的缩写&#xff0c;它是一种专门为数据库设计的操作命令集&#xff0c;用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 二、查找相关语句 ‌‌首先&#xff0c;我们已经设…...

【计算机网络 - 基础问题】每日 3 题(二十三)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…...

JPA + Thymeleaf 增删改查

一、 什么是 Thymeleaf JPA&#xff08;Java Persistence API&#xff09;&#xff1a;是一种用于对象关系映射&#xff08;ORM&#xff09;的 Java 规范&#xff0c;它简化了数据库操作&#xff0c;使开发者可以以面向对象的方式处理数据存储。通过定义实体类和数据访问接口&a…...

Android常用C++特性之std::this_thread

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::this_thread 是 C11 标准库中的一个命名空间&#xff0c;提供了一组与当前线程&#xff08;即调用这些函数的线程&#xff09;相关的操作。通过 std::this_threa…...

成语700词(31~45组)

目录 31.对待错误的态度(12 个)32.改变与不变(19 个)33.顺势造势(6 个)34.自然会发生(6 个)35.提早准备和补救(11 个)36.办公、管理相关(8 个)37.空谈与虚幻(8 个)38.来者众多(11 个)39.人多热闹(6)40.好坏掺杂(7 个)41.流行与名声(14 个)42.与传播、传闻…...

vue3组件通信(组合式API)

vue3组件通信&#xff08;组合式API&#xff09; vue3组件通信&#xff0c;采用组合式API。选项式API&#xff0c;参看官网 Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。 vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所…...

从预测性维护到智能物流:ARM边缘计算控制器的工业实践

工业4.0时代的到来&#xff0c;边缘计算技术成为连接物理世界与数字世界的桥梁。ARM架构的边缘计算控制器凭借其低功耗、高能效和灵活性等特点&#xff0c;在工业自动化领域展现出巨大潜力。本文将通过几个实际应用案例来探讨ARM边缘计算控制器是如何提升生产线效率和安全性的&…...

2024年汉字小达人区级自由报名备考冲刺:最新问题和官模题练一练

今天是2024年第十一届汉字小达人的区级自由报名活动的第二天。 我们继续回答几个关于汉字小达人的最新问题&#xff0c;做几道2024年官方模拟题&#xff0c;帮助孩子们少走弯路&#xff0c;再冲刺一般&#xff0c;更精准地备考2024年汉字小达人。 【温馨提示】本专题在比赛期…...

HighwayEnv完全指南:10分钟快速上手自动驾驶强化学习环境

HighwayEnv完全指南&#xff1a;10分钟快速上手自动驾驶强化学习环境 【免费下载链接】HighwayEnv A minimalist environment for decision-making in autonomous driving 项目地址: https://gitcode.com/gh_mirrors/hi/HighwayEnv HighwayEnv是一个轻量级的自动驾驶决…...

BG3ModManager完整教程:高效管理博德之门3模组的实用指南

BG3ModManager完整教程&#xff1a;高效管理博德之门3模组的实用指南 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager BG3ModManager是一款专为《博德之门3》玩家设计的模组管理工具&…...

PID调参翻车实录:STM32驱动编码电机时,P值过大为何电机啸叫还振荡?

PID调参实战&#xff1a;STM32编码电机啸叫与振荡问题深度解析 当你在深夜实验室里第一次听到电机发出刺耳的啸叫声&#xff0c;同时观察到示波器上速度曲线像过山车一样上下震荡时&#xff0c;那种既困惑又兴奋的感觉&#xff0c;相信每个做过电机控制的工程师都深有体会。这不…...

终极指南:Google Maps Python客户端错误处理与异常类型完全解析

终极指南&#xff1a;Google Maps Python客户端错误处理与异常类型完全解析 【免费下载链接】google-maps-services-python Python client library for Google Maps API Web Services 项目地址: https://gitcode.com/gh_mirrors/go/google-maps-services-python 在Pytho…...

Qwen2.5-VL应用指南:如何用它做智能客服、文档分析和内容创作

Qwen2.5-VL应用指南&#xff1a;如何用它做智能客服、文档分析和内容创作 1. 引言&#xff1a;认识Qwen2.5-VL的强大能力 Qwen2.5-VL是通义千问团队推出的最新视觉-语言多模态模型&#xff0c;相比前代产品有了显著提升。这个7B参数的模型不仅能理解图像内容&#xff0c;还能…...

Delphi MVC框架ActiveRecord中间件多连接配置详细解析[特殊字符]

1. 数组长度必须一致1234567// 错误示例 - 会抛出异常TMVCActiveRecordMiddleware.Create(MainDB,[LogDB, CacheDB], // 2个元素[LogDB_Def], // 1个元素 ← 错误&#xff01;MultiConnections.ini);2. 连接名命名规范1234567// 建议使用有意义的命…...

Hunyuan-MT-7B开源镜像免配置部署:像素语言传送门一键启动教程(含GPU适配)

Hunyuan-MT-7B开源镜像免配置部署&#xff1a;像素语言传送门一键启动教程&#xff08;含GPU适配&#xff09; 1. 项目介绍 像素语言跨维传送门是一款基于Tencent Hunyuan-MT-7B大模型构建的创新翻译工具。它将传统翻译体验重构为16-bit像素冒险风格&#xff0c;让语言转换变…...

GLM-4.1V-9B-Base与MATLAB联动:科学计算可视化报告的自动生成

GLM-4.1V-9B-Base与MATLAB联动&#xff1a;科学计算可视化报告的自动生成 1. 科研工作流中的痛点与解决方案 科研人员每天都要面对大量实验数据&#xff0c;从原始数据到最终的可视化报告往往需要经历繁琐的步骤。传统的数据分析流程通常包括&#xff1a;数据整理→MATLAB编程…...

MediaPipe模型优化:从性能瓶颈到实时推理的全流程解决方案

MediaPipe模型优化&#xff1a;从性能瓶颈到实时推理的全流程解决方案 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe 问题发现&#xff1a;计算机…...

基于cv_unet_image-colorization的Python爬虫实战:自动化图像数据集着色

基于cv_unet_image-colorization的Python爬虫实战&#xff1a;自动化图像数据集着色 为计算机视觉项目快速构建高质量的彩色图像数据集 在计算机视觉项目中&#xff0c;获取高质量的标注数据集往往是最耗时耗力的环节。特别是当我们需要大量彩色图像数据时&#xff0c;手动收集…...