(四)人脸数据模型训练

        上一章节已经采集完人脸图片,这个章节我们将图片文件转化成数据化

0a7ec1adcedc4933910c24e45774cfcc.png

我们将人脸图片训练成人脸数据模型,然后将模型用于人脸识别。我们先来说说图像和像素

图像和像素:每一个小方格就是一个像素。通过将它们并排放置,我们可以形成完整的图像。单个像素被认为是图像中最少可能的信息。对于每张图像,像素值的范围在 0 到 255 之间。

我们本次用 LBPH(Local Binary Pattern Histogram)进行人脸识别; 对每一个像素进行信息提取, 并将其与模型中的对应单元进行比较, 对每个区域的匹配值产生一个直方图。 由于这种方法的灵活性, LBPH是唯一允许模型样本人脸和检测到的人脸在形状、 大小上可以不同的人脸识别算法。

            #用于存储提取到的人脸数据
            facesSamples = []
            #存储学生学号
            ids = []
            path = 'person/'
            imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
            #判断是否有人脸图片防止下面保存
            if(len(imagePaths)==0):
                print("未检出人脸信息,请先采集人脸")
                return
            # 检测人脸
            face_detector = cv2.CascadeClassifier(
                './data1/lbpcascade_frontalface_improved.xml')
            # 遍历列表中的图片
            for imagePath in imagePaths:
                # 打开图片,黑白化
                PIL_img = Image.open(imagePath).convert('L')
                # 将图像转换为数组,以黑白深浅
                # PIL_img = cv2.resize(PIL_img, dsize=(400, 400))
                img_numpy = np.array(PIL_img, 'uint8')
                # 获取图片人脸特征
                faces = face_detector.detectMultiScale(img_numpy)
                # 获取每张图片名字(学生学号)
                id = int(imagePath.split('/')[-1].split('.')[0])
                # 预防无面容照片
                #x,y,w,h(代表检测到的人脸位置信息)
                for x, y, w, h in faces:
                    ids.append(id)
                    #提取提取图片中人脸数据
                    facesSamples.append(img_numpy[y:y + h, x:x + w])
            recognizer = cv2.face.LBPHFaceRecognizer_create()
            # train函数有两个参数,第一个是人脸数据,里面存储多张学生人脸数据,
            #每一个学生人脸数据都是数组类型,第二个参数是与第一个参数对应的学生学号,必须
            #要对应,否则会识别出错,装学生学号的列表需要转为数组类型
            recognizer.train(facesSamples, np.array(ids))
            # 保存文件
            recognizer.write('./trainer/trainer.yml')

训练好的人脸数据模型是一个yml文件:

我们看看提取到的人脸数据信息如下:

9feeeb3f4ea348b8acbe382bdaa681e8.png

人脸数据非常多我只是截取了一部分图片 

对应人脸的学号:

a0355b46fa804ad895a2bb9606fb95a0.png

接下来我分享一下我编写的一个opencv人脸识别案例:地址YueXia/Face-opencv - 码云 - 开源中国 (gitee.com)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
K210是一种高性能嵌入式AI芯片,可用于训练人脸模型。为了训练人脸模型,我们首先需要一个包含人脸图像数据的数据集。数据集应包含不同人的多个图像,以便模型能够学习并识别各种不同的人脸。 在使用K210训练人脸模型之前,我们需要使用适当的图像处理技术来准备数据集。这可以包括人脸检测和人脸对齐等步骤,以确保所有图像都以相似的方式对齐和剪裁。这些步骤有助于提供更好的训练数据,以获得更准确的人脸模型。 一旦数据集准备好,我们可以使用K210进行模型训练。K210芯片具有高性能计算能力和低功耗特性,非常适合用于训练深度学习模型。我们可以使用深度学习框架,例如TensorFlow或PyTorch,结合K210的硬件优势来进行训练。 在训练过程中,我们将数据集输入模型并通过反向传播优化模型参数。这个过程需要大量的计算资源和时间,但是K210芯片的高性能计算能力可以加快这个过程。我们可以根据需要进行多轮的训练,并使用评估指标来监控模型的性能。 一旦训练完成,我们可以将训练好的人脸模型部署到K210芯片上,以用于实时的人脸识别应用。K210芯片的低功耗特性使其能够在嵌入式设备上高效地运行人脸模型,实现快速而准确的人脸识别。 总之,使用K210数据集训练人脸模型可以通过准备数据集、用K210进行模型训练和最终的部署步骤,最终实现高效而准确的人脸识别应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值