以下内容转自 数析学院,只节选了部分,有需要的同学可以直接查看原文
今天分享的人脸面部识别模型基于 HOG+SVM 的方法。
首先,我们需要设置 notebook ,导入相关可视化库:
- %matplotlib inline
- import matplotlib.pyplot as plt
- import seaborn as sns; sns.set()
- import numpy as np
导入 skimage 库中的图像集,我们可以通过 skimage 库的 feature.hog 工具来直接提取图像的 HOG 特征,如下图所示:
- from skimage import data, color, feature
- import skimage.data
- image = color.rgb2gray(data.chelsea())
- hog_vec, hog_vis = feature.hog(image, visualise=True)
- fig, ax = plt.subplots(1, 2, figsize=(12, 6),
- subplot_kw=dict(xticks=[], yticks=[]))
- ax[0].imshow(image, cmap='gray')
- ax[0].set_title('input image')
- ax[1].imshow(hog_vis)
- ax[1].set_title('visualization of HOG features');
导入 Scikit-Learn 库内置的人脸照片数据集,作为正样本:
- from sklearn.datasets import fetch_lfw_people
- faces = fetch_lfw_people()
- positive_patches = faces.images
- positive_patches.shape
接着我们来构造一组负样本数据集,这个数据集中的样本为 skimage 库图像集中的照片切割而成,每张照片的大小皆与上文中的正样本一致,即 62x47 像素:
- from skimage import data, transform
- imgs_to_use = ['camera', 'text', 'coins', 'moon',
- 'page', 'clock', 'immunohistochemistry',
- 'chelsea', 'coffee', 'hubble_deep_field']
- images = [color.rgb2gray(getattr(data, name)())
- for name in imgs_to_use]
- rom sklearn.feature_extraction.image import PatchExtractor
- def extract_patches(img, N, scale=1.0, patch_size=positive_patches[0].shape):
- extracted_patch_size = tuple((scale * np.array(patch_size)).astype(int))
- extractor = PatchExtractor(patch_size=extracted_patch_size,
- max_patches=N, random_state=0)
- patches = extractor.transform(img[np.newaxis])
- if scale != 1:
- patches = np.array([transform.resize(patch, patch_size)
- for patch in patches])
- return patches
- negative_patches = np.vstack([extract_patches(im, 1000, scale)
- for im in images for scale in [0.5, 1.0, 2.0]])
- negative_patches.shape
以上内容节选自 数析学院,原文内容较多,先搬运到这,后续有时间再补充,有需要的同学可以先直接到 数析学院 查看原文


雷达卡




京公网安备 11010802022788号







