人脸识别实战:使用Opencv+SVM实现人脸识别(1)

processing image 15/19

processing image 16/19

processing image 17/19

processing image 18/19

processing image 19/19

serializing 19 encodings…

Process finished with exit code 0

训练人脸识别模型

===================================================================

已经为每张脸提取了 128 维编码——但是我们如何根据这些嵌入来识别一个人呢?

答案是我们需要在嵌入之上训练一个“标准”机器学习模型(例如 SVM、k-NN 分类器、随机森林等)。

今天我们使用SVM实现

打开 train_face.py 文件并插入以下代码:

from sklearn.preprocessing import LabelEncoder

from sklearn.svm import SVC

import pickle

embeddings_path=‘output/embeddings.pickle’

recognizer_path=‘output/recognizer.pickle’

lable_path=‘output/le.pickle’

加载编码模型

print(“[INFO] loading face embeddings…”)

data = pickle.loads(open(embeddings_path, “rb”).read())

给label编码

print(“[INFO] encoding labels…”)

le = LabelEncoder()

labels = le.fit_transform(data[“names”])

训练用于接受人脸 128-d 嵌入的模型,然后产生实际的人脸识别

recognizer = SVC(C=1.0, kernel=“linear”, probability=True)

recognizer.fit(data[“embeddings”], labels)

保存模型

f = open(recognizer_path, “wb”)

f.write(pickle.dumps(recognizer))

f.close()

保存lable

f = open(lable_path, “wb”)

f.write(pickle.dumps(le))

f.close()

导入包和模块。 我们将使用 scikit-learn 的支持向量机 (SVM) 实现,这是一种常见的机器学习模型。

定义变量。

  • embeddings_path:序列化编码。

  • recognizer_path:这将是我们识别人脸的输出模型。 它基于 SVM。

  • lable_path:标签编码器输出文件路径

加载编码。

然后初始化 scikit-learn LabelEncoder 并编码名称标签。

训练模型。本文使用的是线性支持向量机 (SVM),但如果您愿意,您可以尝试使用其他机器学习模型进行试验。

训练模型后,我们将模型和标签编码器保存到电脑上。

运行train_face.py 脚本。

识别图像中的人脸

===================================================================

新建脚本文件recognize_face.py,插入一下代码:

import numpy as np

import pickle

import cv2

import os

导入包,然后我们需要新增一个resize方法。

def resize(image, width=None, height=None, inter=cv2.INTER_AREA):

dim = None

(h, w) = image.shape[:2]

如果高和宽为None则直接返回

if width is None and height is None:

return image

检查宽是否是None

if width is None:

计算高度的比例并并按照比例计算宽度

r = height / float(h)

dim = (int(w * r), height)

高为None

else:

计算宽度比例,并计算高度

r = width / float(w)

dim = (width, int(h * r))

resized = cv2.resize(image, dim, interpolation=i

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值