3.[人脸识别] python-opencv 人脸特征采集与录入

2023-11-18

目录

1.环境 

2.描述

3.代码

4.效果


1.环境 

1.python: 3.6.6 [64bit]
 
2.python packages:
    1). opencv-python==3.4.1.15
    2). opencv-contrib-python==4.4.0.42
    3). sklearn==0.0
    
3.python包下载安装出错,可以尝试一下方式:
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn <+python包>
 
4.探测器 Haar级联文件下载:
    https://github.com/opencv/opencv/tree/master/data

2.描述

1.文件目录结构:
    project:
            ----image_photograph        # 人脸图片文件夹
                    |----lihua              # 名字叫lihua的多张人脸图片
                    |----xiaoming           # 名字叫xiaoming的多张人脸图片
                    |----zhangfei           # 名字叫zhangfei的多张人脸图片
            ----facefeatures            # 存储人脸特征的文件夹
            ----haarcascade             # 人脸探测器的haar级联文件
            ----main.py                 # 主程序

2.流程:
    (1).获取每一张图片路径,对应id名字(文件夹作为名字)
    (2).将每张图片的人脸部分采集出来
    (3).id名字进行标签编码处理LabelEncoder
    (4).局部二值模式直方图创建人脸识别器
    (5).训练人脸识别器
    (5).将所有人脸特征与名字信息写入到yml文件中
        注意:以后需要用到yml文件时,如果图片名字要与原来一致,还需要原图片名字作为标签解码用
              (代码最后return就是名字列表)

3.代码

"""处理类标签编码"""
class LabelEncoder(object):
    def __init__(self):
        self.le = preprocessing.LabelEncoder()

    def encode_labels(self, label_words):
        self.le.fit(label_words)

    def word_to_num(self, label_word):
        return int(self.le.transform([label_word])[0])

    def num_to_word(self, label_num):
        return self.le.inverse_transform([label_num])[0]


"""采集人脸信息生成yml"""
class FaceFeatures:
    def __init__(self, photo_path):
        self.face_cascade = cv2.CascadeClassifier('haarcascade\\haarcascade_frontalface_alt.xml')
        self.data_transformation = LabelEncoder()
        self.photo_path = photo_path
        self.information = None

    """获取所有图片路径,存储图片的父文件夹名字"""
    def get_images_information(self):
        images = []
        information = []
        for root, dirs, files in os.walk(self.photo_path):
            root = root.replace("/", "\\")
            for filename in [x for x in files if x.endswith(".jpg")]:
                images.append(os.path.join(os.getcwd(), root, filename))
                information.append(root.split('\\')[-1])
        self.data_transformation.encode_labels(information)
        self.information = information
        return images, information

    """采集所有人脸信息,名字标签编码处理"""
    def get_features(self, images, information):
        face_images_info = []
        face_name_info = []
        for num in range(len(images)):
            ret = cv2.imread(images[num], 0)
            faces = self.face_cascade.detectMultiScale(ret, 1.1, 2, minSize=(100, 100))
            for (x, y, w, h) in faces:
                face_images_info.append(ret[y:y + h, x:x + w])
             face_name_info.append(self.data_transformation.word_to_num(information[num]))
        return face_images_info, face_name_info

    """人脸信息录入yml文件, 返回图片对应的名字"""
    def info_enter(self):
        recognizer = cv2.face.LBPHFaceRecognizer_create()
        images, information = self.get_images_information()
        face_images_info, face_name_info = self.get_features(images, information)
        recognizer.train(face_images_info, np.array(face_name_info))
        recognizer.write("facefeatures/trainer.yml")
        return self.information


if __name__ == '__main__':
    FaceFeatures(os.path.join(os.getcwd(), "image_photograph")).info_enter()

4.效果

参考:Python-opencv实现摄像头实时进行人脸识别(点击)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.[人脸识别] python-opencv 人脸特征采集与录入 的相关文章

随机推荐

  • Gogs使用详解

    Gogs使用介绍 Gogs是一款类似Github 国内有码市 的开源文件 代码管理系统 基于Git 目前功能基本介绍 远程代码仓库管理 代码仓库权限分配 管理 团队管理 代码审查 1 注册 2 基本功能介绍 主面板说明 图中 表示自己个人账
  • 【测试入门】测试用例经典设计方法 —— 因果图法

    01 因果图设计测试用例的步骤 1 分析需求 阅读需求文档 如果User Case很复杂 尽量将它分解成若干个简单的部分 这样做的好处是 不必在一次处理过程中考虑所有的原因 没有固定的流程说明究竟分解到何种程度才算简单 需要测试人员根据自己
  • 直线检测方法—LSD论文翻译

    附原文链接 LSD a Line Segment Detector 摘 要 LSD是一个线段检测器 能够在线性时间内得到亚像素级精度的检测结果 它无需调试参数就可以适用于任何数字图像上 并且能够自我控制错误数量的检测 平均来说 一个图像中允
  • Bazel install Tips

    Bazel Fast Correct Choose two Build and test software of any size quickly and reliably Speed up your builds and tests Ba
  • Android接口一般定义格式,Android开发规范

    原标题 Android开发规范 一 书写规范 1 编码方式统一用UTF 8 2 花括号不要单独一行 和它前面的代码同一行 而且 花括号与前面的代码之间用一个空格隔开 3 空格的使用 if else for switch while等逻辑关键
  • 一个不错的关于CPU和GPU(CUDA)的性能比较讨论话题

    http topic csdn net u 20081027 23 67ff3857 3c71 4d5c acf6 095f3497c7a9 html这里是今天的一个论坛的一个帖子 大家可以讨论一下 1 那些程序适合用cpu来做 那些适合用
  • 【Transformer系列】深入浅出理解Tokenization分词技术

    一 参考资料 NLP技术中的Tokenization是什么 核心任务是什么 二 Tokenization相关介绍 1 Tokenization的概念 NLP技术中Tokenization被称作是 word segmentation 直译为分
  • 深入理解工具链-自己搭建STM32编程IDE

    目录 一 前言 二 编译器组成与编译流程 2 1 编译流程概述 2 2 Gcc For Arm编译器 2 3 预编译 2 4 编译 2 5 汇编 2 6 链接 2 7 生成HEX镜像 2 8 通过Makefile编译代码 三 调试流程 3
  • 解决在使用 Ant Design Vue组件库更改Modal对话框样式使用深度作用选择符不生效的问题

    项目场景 在使用 Ant Design Vue组件库更改Modal对话框样式使用深度作用选择符不生效 问题描述 Modal对话框官方样式如下图 现在要修改为下图所示样式 使用深度作用选择符样式没有生效 原因分析 因为modal是直接插入到b
  • 【SQL】10 SQL UPDATE 语句

    UPDATE 语句用于更新表中的记录 SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录 SQL UPDATE 语法 UPDATE table name SET column1 value1 column2 value2
  • Flink消费kafka出现空指针异常

    文章目录 出现场景 表现 问题 解决 tombstone Kafka中提供了一个墓碑消息 tombstone 的概念 如果一条消息的key不为null 但是其value为null 那么此消息就是墓碑消息 出现场景 双流join时 采用的是l
  • 此av非彼"AV"

    作者 王亨 R语言中文社区专栏作者 跟着菜鸟一起一步步学习R语言 争做R语言高手 个人公众号 跟着菜鸟一起学R语言 微信ID learn R 最近发现一个特别有意思的包 av 为什么有意思 首先名字有意思吧 其次这个包可以捕获图像 添加背景
  • 华为OD机试真题(Java),最小步骤数(100%通过+复盘思路)

    一 题目描述 一个正整数数组 设为nums 最大为100个成员 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数 要求 第一步 必须从第一元素起 且 1 lt 第一步步长
  • Java企业微信开发_01_接收消息服务器配置

    一 准备阶段 需要准备事项 1 一个能在公网上访问的项目 见 Java微信公众平台开发01本地服务器映射外网 http www cnblogs com shirui p 7308856 html 2 一个企业微信账号 去注册 https w
  • 链式存储结构-----栈

    链式存储结构实现栈 上一节我们说了关于线性表的链式存储结构的实现 今天的栈也是建立在线性表的基础上 栈的特性 先进后出 1 删除时 出栈 我们考虑时间复杂度时发现 删除时的头删的复杂度为O 1 而尾删的时间复杂度为O n 故而我们出栈选择从
  • 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

    操作系统 键盘敲入字母时 操作系统期间发生了什么 参考资料 键盘敲入 A 字母时 操作系统期间发生了什么 操作系统 浅谈 Linux 中的中断机制 文章目录 操作系统 键盘敲入字母时 操作系统期间发生了什么 设备控制器 I O 控制方式 设
  • html 自定义简单的时间轴 timeline 并与 table 图表和 echarts 进度甘特图联动

    1 需求 最近有需求需要实现 table 图表与 eharts 柱状图的联动 完整的效果图如下所示 这里时间轴要实现的效果要基本如下图所示 该时间轴并不是要实现选中单独的某一个月份并查看单月的数据 而是要将当前数据的时间跨度控制在时间轴的跨
  • uniapp 电商app支付倒计时处理

    电商app支付倒计时 所有电商app支付页面都是有倒计时的 一来可以促进消费 二来可以减少恶意减库存的问题发生 因为创建订单的时候 除了预售的商品外 实际销售的商品是需要减库存的 一般的电商app倒计时都是30分钟或者45分钟的 如果在此页
  • 带调速功能的arduino摇头避障小车

    一 材料同上篇文章 二 接线同上篇文章 L298N红板有两个使能端口ENA和ENB 这两个端口默认是有跳线帽的 也就是接5V的 此时输出就是HIGH或者LOW 摘掉跳线帽 将外边端口分别接arduino的PWM接口就好 本文接的是3和11
  • 3.[人脸识别] python-opencv 人脸特征采集与录入

    目录 1 环境 2 描述 3 代码 4 效果 1 环境 1 python 3 6 6 64bit 2 python packages 1 opencv python 3 4 1 15 2 opencv contrib python 4 4