根据照片确定性别和年龄





在内部审计的实践中,有些任务需要进行检查以识别客户数据的错误输入。这些问题之一可能是产品注册时输入的数据与客户照片之间的差异。



例如,可以使用以下信息:性别,年龄和照片链接。为了检查符合性,我们将使用Python语言的py-agender库。



图书馆分为两个阶段。首先,opencv确定面部在照片中的位置。第二,在UTKFace数据集上训练的EfficientNetB3体系结构的神经网络确定照片中面部所有者的性别和年龄。



首先,让我们导入所需的库:



import cv2
from pyagender import PyAgender


让我们创建一个性别和年龄检测器对象:



agender = PyAgender()


使用opencv上传照片:



img = cv2.imread("habensky.jpeg")


接下来,我们使用agender对象的detect_genders_ages方法定义面部特征:



face_info = agender.detect_genders_ages(img)


其中变量face_info包含以下信息:



[{'left': 0,
  'top': 5,
  'right': 299,
  'bottom': 299,
  'width': 299,
  'height': 294,
  'gender': 0.0075379927,
  'age': 41.585840644804094}]


在这里,参数(“左”,“上”,“右”,“下”,“宽度”,“高度”)描述了脸部在照片中的位置。性别参数表示属于特定性别的特征,其中0对应于男人,1对应于女人。那些。图像处理后,在0.5的阈值下,我们将处理后的样本分为男性和女性。







算法确定该图像代表一个男人(性别值非常接近零:0.0075379927),并且在这张照片中他已经41岁半(41.5858),我不知道这张照片中的康斯坦丁·哈本斯基几岁,但是我认为算法很接近说实话。



这是一个很好的例子,图像清晰,效果令人印象深刻。但是,当您开始将算法应用于实际数据时,事情并没有我们想要的那么乐观。关键不是算法,而是初始数据的质量。



就我而言,这是一组1542张图像,分辨率为300x300。对于64张图像,该算法无法确定脸部特征。主要原因是拍摄时照明不佳(面部几乎不可见)。对于1478张图像,中位年龄误差为4.96年。下图显示了错误的分布:







对于8.5%的图像(1478张中的125张),该算法在确定人的性别时犯了一个错误。其中,在122种情况下,该算法将女人误认为男人。同样,不要在所有情况下都怪罪算法。在大多数错误的示例中,有很多戴着眼镜的脸可能会掩盖某些面部特征。下图显示了UTKFace







数据集的年龄分布:您可以看到大多数数据集都包含20至40岁的人的图像。尽管如此,该算法最经常在指定的时间间隔内准确地犯了一个错误,即该错误很可能与应用该算法的数据集的特殊性有关。下图显示了算法出错的年龄分布:







Py-Agender是一个有趣的工具,可以帮助自动化许多日常任务,或者至少减少用于手动分析的样本量。本文提供了对特定数据集的估计,也许在您的情况下,该算法将更有效地工作。



All Articles