人脸关键点识别

简介: 【6月更文挑战第19天】

只显示关键点,不显示摄像头画面

image.png

import numpy as np
from imutils import face_utils
import dlib
import cv2

p = "shape_predictor_68_face_landmarks.dat"
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(p)

cap = cv2.VideoCapture(0)

while True:

    _, image = cap.read()
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    rects = detector(gray, 0)
    # 尺寸可以根据需要调整,绘制新图像,用于只显示关键点,不显示人脸
    image = np.zeros((500, 500, 3), dtype="uint8")

    for (i, rect) in enumerate(rects):

        shape = predictor(gray, rect)
        shape = face_utils.shape_to_np(shape)

        for j, (x, y) in enumerate(shape):
            cv2.circle(image, (x, y), 1, (0, 255, 0), -1)
            # cv2.putText(image, str(j + 1), (x + 5, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)

    cv2.imshow("Output", image)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()
cap.release()

现有代码中,导致摄像头画面不显示的原因可能是在循环中创建了一个空白的图像数组,并且没有将检测到的人脸标记绘制到原始图像上,而是绘制到了这个空白图像上。具体来说,问题出在以下这段代码:

image = np.zeros((500, 500, 3), dtype="uint8")  # 尺寸可以根据需要调整

这行代码创建了一个500x500像素的空白图像,并且后续的操作都是在这个空白图像上进行的。因此,原始的摄像头画面并没有被显示出来。

为了让人脸正常显示,你需要将人脸标记绘制到原始图像上,而不是空白图像上。以下是修改后的代码段:

# ... 省略之前的代码 ...

while True:
    _, image = cap.read()  # 读取原始图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    rects = detector(gray, 0)

    for (i, rect) in enumerate(rects):
        shape = predictor(gray, rect)
        shape = face_utils.shape_to_np(shape)

        # 绘制人脸标记到原始图像上
        for j, (x, y) in enumerate(shape):
            cv2.circle(image, (x, y), 1, (0, 255, 0), -1)
            # cv2.putText(image, str(j + 1), (x + 5, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)

    # 显示原始图像,上面有绘制的人脸标记
    cv2.imshow("Output", image)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

# ... 省略之后的代码 ...

注意,我已经将创建空白图像的代码行删除了,并且将绘制人脸标记的代码移动到了原始图像上。这样,摄像头的画面就会正常显示,并且上面会有人脸标记。

目录
相关文章
|
网络安全 Docker 容器
内网穿透访问你家里的树莓派
你有一个自己的外网服务器,然后捏你又买了一个树莓派放家里吃灰,有一天,你觉得不能让你的树莓派吃灰,你想上班的时候用你的树莓派在家里编译arm用的镜像程序。于是,便有了本篇文章~~~如何通过内网穿透访问你家里的树莓派。(注:仅用于测试,闹着玩,千万别上生产,上生产需要自己进行改造用户权限以及审计功能,这部分就不贴出来了) 使用的工具:docker,rtty,rttys
543 0
内网穿透访问你家里的树莓派
|
3月前
|
负载均衡 Java Nacos
微服务架构中的服务注册与发现流程
本内容介绍了微服务架构中的服务注册与发现流程,包括服务注册中心(如Nacos)、服务提供者和调用者的角色分工。服务启动时自动注册信息至注册中心,调用者通过客户端负载均衡(如Spring Cloud Loadbalancer)选取服务实例进行远程调用。同时,内容还讲解了OpenFeign的工作原理,其作为HTTP客户端集成负载均衡,通过接口定义、代理生成、请求发送与结果解析,实现服务间的高效通信。
|
12月前
|
存储 Shell Linux
用户和用户组
本文介绍了Linux系统中的用户账户和组的基本概念,包括普通用户和超级用户(root)的定义和区别,以及组的概念和作用。文章还详细描述了用户账户和组的相关文件(如/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow)的结构和内容,并提供了创建和删除用户账户及组的基本命令和选项。
617 3
|
7月前
|
数据采集 人工智能 测试技术
Python有哪些好用且实用的Web框架?
Python 是一门功能强大的编程语言,在多个领域中得到广泛应用,包括爬虫、人工智能、游戏开发、自动化测试和 Web 开发。在 Web 开发中,Python 提供了多种框架以提高效率。以下是几个常用的 Python Web 框架:1) Django:开源框架,支持多种数据库引擎,适合新手;2) Flask:轻量级框架,基于简单核心并通过扩展增加功能;3) Web2py:免费开源框架,支持快速开发;4) Tornado:同时作为 Web 服务器和框架,适合高并发场景;5) CherryPy:简单易用的框架,连接 Web 服务器与 Python 代码。这些框架各有特色,可根据需求选择合适的工具。
326 14
|
8月前
|
数据采集 边缘计算 缓存
|
8月前
|
监控 搜索推荐 数据挖掘
多维度组织支撑:提升CRM线索客户资源分配效率
在当今商业环境中,客户关系管理(CRM)系统是企业提升销售效率和客户满意度的关键工具。其中,多维度组织支撑下的线索客户资源分配尤为重要。它通过自动化分配、个性化服务和数据分析,优化销售流程,提高转化率与客户体验。实施步骤包括建立统一平台、制定分配规则、优化跟进流程及数据驱动决策。实际案例如联想和海康威视借助CRM系统实现了全流程优化,显著提升了销售效率与业绩。这一趋势助力企业在竞争中脱颖而出,实现可持续发展。
|
7月前
|
安全 PHP 监控
织梦CMS迁移的技术路线分析与实践建议
随着技术发展,织梦CMS因安全风险、技术滞后及生态萎缩等问题亟需迁移。相比织梦,WordPress凭借持续迭代和现代化技术栈成为优选。针对迁移需求,提供三种方案:全量数据迁移适合中小型站点;渐进式重构适用于大型平台;生态转换迁移助力拥抱现代开发体系。实施中注重数据精准性、服务器优化与模板适配,并通过风险控制保障业务连续性和SEO效果。从技术生命力、生态完备性和迁移可行性三维度构建决策框架,借助Websoft9等工具实现平稳升级,助企业构建现代化数字化平台。
182 0
|
11月前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
274 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
12月前
|
Shell 数据库
GBase8a 数据库新集群第一次创建dblink
GBase8a 数据库新集群第一次创建dblink
|
12月前
|
存储 JSON 监控
开源日志分析Logstash
【10月更文挑战第22天】
262 1
下一篇
开通oss服务