因为处理自己的照片分类,萌生了一个通过人脸识别来归类的想法,虽然现在的网络相册都提供了该功能,但是就当是学习了,贴近于AI,现在不是流行AI嘛,本来计划是自己写,网上的教程也多入牛毛,结果写到一半的时候,发现一个开源库face_recognition,据说识别准确率达到98%。且不管这个准确率,可以拿来用就可以。具体的安装过程,教程也有很多,可以自行查找。因为采用了第三方库,所以核心功能调用对应方法即可,代码大部分是处理识别前和识别后的工作。期间看到一个大神写的关于人脸识别的文章,贴在此。供个人参考(https://www.cnblogs.com/neo-T/p/6432596.html)。
本文中face_recognition.face_locations采用model = "cnn"的模式,该模式消耗机器内存和CPU非常大,所以在识别前,对图片了处理,用缩略图作为临时文件的形式来处理的,尽管如此,100张图片也用了12H,所以机器配置不够的话慎用。也可以采用默认的model。
需要先拿出样本数据,你想找的人的图片,最好是单人正面照。我放置了10个样本,有部分侧面的和相对模糊的,对比识别时有些好像也是可以识别出来的。还有阈值,要多调试几次找出适合自己的阈值。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019-07-10 18:10
# @Author : yy
# @File : CNNImage.py
import os
import cv2
import face_recognition
from PIL import Image
import numpy as np
import exifread
import shutil
import time
class Imagetags():
def __init__(self):
self.SampPath =r'E:\Sample'
self.Pic = r'E:\Pic'
self.Photo = r'E:\Photo'
self.TmpPath = r'E:\PicTmp'
def ResizeImage(self,path):
ImgTmp = cv2.imread(path)