基于深度学习mediapipe的人脸打码人脸模糊教程pyqt5界面附源码

这篇具有很好参考价值的文章主要介绍了基于深度学习mediapipe的人脸打码人脸模糊教程pyqt5界面附源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、人脸识别

人脸识别是一门比较成熟的技术。

它的身影随处可见,刷脸支付,信息审核,监控搜索,人脸打码等。

更多的时候,它是方便了我们的生活,足不出户,就可以实现各种 APP 的实名认证,信息审核。

一些公司,也都有对内部员工开放的刷脸支付系统,不用带手机,不用带工卡,带着一张或美丽或帅气的脸庞,就可以在公司内部「买买买,刷刷刷」。

二、人脸打码

除了这些常规操作,还可以对视频里的特定人物进行打码。

对于视频,人工后期的逐帧处理,打码任务无疑是个「体力活」。

但如果结合脸识别技术,那这个任务就会简单很多。

本文从原理出发,讲解人脸识别技术的视频打码应用。

过滤视频的敏感人物,就这么简单!

三、人脸识别技术

人脸识别技术包涵了多种算法,整个流程大致如下:

    使用检测技术,检测出人脸位置。
    使用 landmark 技术,检测出人脸关键点。
    根据人脸位置和人脸关键点,裁剪出人脸区域,并根据关键点将人脸图片进行矫正,得到「标准脸」。
    计算「标准脸」的人脸特征向量。
    与「人脸库」的人脸特征向量比对,计算向量的距离,找到最接近的人,输出人脸识别结果。


1、人脸检测

输入:原始的可能含有人脸的图像。

输出:人脸位置的 bounding box。

这一步一般我们称之为“人脸检测”(Face Detection),人脸检测算法,可以使用的库有很多,例如 OpenCV、dlib、face_recognition、RetianFace、CenterFace 等等。

太多了,数不过来。

当然,自己用 yolo 、ssd 这类经典的检测算法,自己实现一个也是可以的。
2、人脸裁剪及矫正

输入:原始图像 + 人脸位置 bounding box。

输出:“校准”过的只含有人脸的图像。

这一步需要使用 landmark 算法,检测人脸中的关键点,然后根据这些关键点对人脸做对齐校准。

所谓的关键点,就是下图所示的绿色的点,通常是眼角的位置、鼻子的位置、脸的轮廓点等等。

有了这些关键点后,我们就可以把人脸“校准”,或者说是“对齐”。

解释就是原先人脸可能比较歪,这里根据关键点,使用仿射变换将人脸统一“摆正”,尽量去消除姿势不同带来的误差。这一步我们一般叫 Face Alignment 。
3、人脸特征

输入:校准后的单张人脸图像。

输出:一个向量表示。

这一步就是使用深度卷积网络,将输入的人脸图像,转换成一个向量的表示。这个向量就是人脸的特征,例如:

这密密麻麻的 128 维的向量,就是一张人脸的特征,你也可以叫做人脸的编码。

提取特征这种事,卷积神经网络很在行。

举个例子,VGG16 是深度学习中一个比较简单的基本模型。

输入卷积神经网络的是图像,经过一系列卷积后,全连接分类得到类别概率。

整个过程是这样的:

其实,卷积神经网络不断的进行卷积,下采样,这就是一个提取特征的过程,最后通过全链接层得到类别概率。

人脸特征提取,我们也可以这么操作。我们可以去掉全连接层,用计算的特征(一般就是卷积层的最后一层,e.g. 图中的conv5_3)来当作提取的特征进行计算。

与分类任务不同的是,最后使用的 loss 损失函数是不同的。

在理想的状况下,我们希望“向量表示”之间的距离就可以直接反映人脸的相似度:

    对于同一个人的人脸图像,对应的向量的欧几里得距离应该比较小。
    对于不同人的人脸图像,对应的向量之间的欧几里得距离应该比较大。

所以,每个人脸的类别中心,应该尽可能远一些,这样才能用于区别不同的人。

人脸常用的 loss 有 center loss 、 arcface loss 等。

人脸识别类似于,细粒度的分类。

训练过分类任务的,应该都知道。

训练人和猪的二分类,很好训练,因为人和猪的特征差别很明显。

但训练男人和女人的二分类,就要难一些,因为男人和女人的特征很相近。

为了更好区分男人和女人,就需要使用类别中心间距大的损失函数。

人脸识别,更是一种细粒度的区分,都是人,但你要区分出张三、李四、王二麻。

4、人脸识别

人脸识别,一般是需要建立一个「检索库」。

简单解释一下,我们要识别张三、李四、王二麻。

那么,我们就要选张三、李四、王二麻每个人的 10 张(自己定)图片。

然后使用我们训练好的人脸特征模型,提取每个人的人脸特征。

这样每个人,就都有 10 个人脸特征了,这就是一个「检索库」。

需要识别的图片,提取人脸特征后,依次与检索库已有的人脸特征去比对,投票选出最接近的人。

四、人脸打码

人脸识别技术原理清楚了,我们就可以使用这个技术,给仝卓打码。

可以看到,人脸识别技术涉及到的算法较多,自己依次实现是需要时间的。

但这,难不倒身为优秀「调包侠」的我。

开源的第三方库有很多,比如 mediapipe

里面集成了人脸检测、人脸识别等接口。

使用人脸识别技术,对这一小段视频,给人脸进行打码。

整理一下思路:

首先,我们使用 opencv 这类的程序处理视频,只能处理画面,不能处理声音。

所以,需要先将音频保存,再将处理好的视频和音频进行合成,这样既保证了画面打码,又保证了声音还在。

这块可以使用mediapipe实现。

视频演示:

基于深度学习mediapipe的人脸打码人脸模糊教程pyqt

import cv2
import mediapipe as mp


class FaceDetector:
    def __init__(self):
        self.mp_face_detection = mp.solutions.face_detection
        self.mp_drawing = mp.solutions.drawing_utils

    def rectangle(self, image, mosaic_level):
        success = False
        cv2.imwrite('middle_pic/before_handle.jpg', image)
        with self.mp_face_detection.FaceDetection(
                min_detection_confidence=0.5) as face_detection:

            # Flip the image horizontally for a later selfie-view display, and convert
            # the BGR image to RGB.
            # image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
            # To improve performance, optionally mark the image as not writeable to
            # pass by reference.
            image.flags.writeable = False
            results = face_detection.process(image)

            # Draw the face detection annotations on the image.
            image.flags.writeable = True
            image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
            if results.detections:
                for detection in results.detections:
                    h, w, c = image.shape

                    xmin = int(detection.location_data.relative_bounding_box.xmin * w)
                    ymin = int(detection.location_data.relative_bounding_box.ymin * h)
                    width = int(detection.location_data.relative_bounding_box.width * w)
                    height = int(detection.location_data.relative_bounding_box.height * h)
                    xmax = xmin + width
                    ymax = ymin + height
                    if xmax > w:
                        width = w - xmin
                    if ymax > h:
                        height = h - ymin

                    self.do_mosaic(image, xmin, ymin, width, height, int(mosaic_level * 0.2 * width))
                    # 画矩形框
                    # image = cv2.rectangle(image, (xmin, ymin), (xmin + width, ymin + height), (0, 255, 0), 2)
                    success = True
                    cv2.imwrite('middle_pic/after_handle.jpg', image)

            return image, success

    # 正规马赛克
    def do_mosaic(self, img, x, y, w, h, neighbor):
        """
        :param rgb_img
        :param int x :  马赛克左顶点
        :param int y:  马赛克左顶点
        :param int w:  马赛克宽
        :param int h:  马赛克高
        :param int neighbor:  马赛克每一块的宽
        """
        for i in range(0, h, neighbor):
            for j in range(0, w, neighbor):
                rect = [j + x, i + y]
                color = img[i + y][j + x].tolist()  # 关键点1 tolist
                left_up = (rect[0], rect[1])
                x2 = rect[0] + neighbor - 1  # 关键点2 减去一个像素
                y2 = rect[1] + neighbor - 1
                if x2 > x + w:
                    x2 = x + w
                if y2 > y + h:
                    y2 = y + h
                right_down = (x2, y2)
                cv2.rectangle(img, left_up, right_down, color, -1)  # 替换为为一个颜值值

        return img

基于深度学习mediapipe的人脸打码人脸模糊教程pyqt5界面附源码

后续又加入登陆注册功能:

基于深度学习mediapipe的人脸打码人脸模糊教程pyqt5界面附源码文章来源地址https://www.toymoban.com/news/detail-432482.html

项目下载:https://download.csdn.net/download/babyai996/87731913

到了这里,关于基于深度学习mediapipe的人脸打码人脸模糊教程pyqt5界面附源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计-基于深度学习的人脸表情识别

    目录 前言 课题背景和意义 实现技术思路 一、深度学习理论基础  二、AdaBoost 结合 SVM 算法表情识别  三、基于 MTCNN 算法的人脸表情识别 实现效果图样例 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计

    2024年02月01日
    浏览(79)
  • 计算机竞赛 基于深度学习的人脸表情识别

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 面部表情识别技术源于1971年心理学家Ekman和Friesen的一项研究,他们提出人类主要有

    2024年02月10日
    浏览(190)
  • 基于深度学习的人脸表情识别 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 面部表情识别技术源于1971年心理学家Ekman和Friesen的一项研究,他们提出人类主要有

    2024年02月06日
    浏览(160)
  • 基于深度学习的AI生成式人脸图像鉴别

    AIGC(AI内容生成)技术的快速发展确实为创作者提供了高效生产力工具,但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等,给不法分子提供了滥用的机会。其中,一些不法分子可能利用AIGC技术制造虚假新闻、违反版权、绕过活体身份验证、散

    2024年02月10日
    浏览(41)
  • 【深度学习】基于Qt的人脸识别系统,门禁人脸识别系统,Python人脸识别流程,树莓派

    在深度学习领域做人脸识别的识别准确率已经高到超出人类识别,但综合考虑模型复杂度(推理速度)和模型的识别效果,这个地方还是有做一些工作的需求的。 人脸识别的过程基本由下面的流程组成。 yolov5-face、yolov7-face等github项目都可以做到这一点,在公开数据集上训练

    2024年02月09日
    浏览(50)
  • 基于YOLOv8深度学习的智能肺炎诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】

    2024年01月23日
    浏览(117)
  • 竞赛保研 基于设深度学习的人脸性别年龄识别系统

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习机器视觉的人脸性别年龄识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 随着大数据与人工智能逐渐走入人们的生活,计算机视觉应用越

    2024年01月17日
    浏览(176)
  • 【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(一)

    ​ 活动地址:CSDN21天学习挑战赛 经过前段时间研究,从LeNet-5手写数字入门到最近研究的一篇天气识别。我想干一票大的,因为我本身从事的就是C++/Qt开发,对Qt还是比较熟悉,所以我想实现一个基于Qt的界面化的一个人脸识别。 对卷积神经网络的概念比较陌生的可以看一看

    2024年02月04日
    浏览(61)
  • 竞赛选题 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计 人脸性别年龄识别系统 - 图像识别 opencv 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:3分 🧿 更多资料, 项目分享: https

    2024年02月07日
    浏览(66)
  • 【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(四)

    经过前段时间研究,从LeNet-5手写数字入门到最近研究的一篇天气识别。我想干一票大的,因为我本身从事的就是C++/Qt开发,对Qt还是比较熟悉,所以我想实现一个界面化的一个人脸识别。 对卷积神经网络的概念比较陌生的可以看一看这篇文章:卷积实际上是干了什么 想了解

    2024年01月17日
    浏览(183)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包