DeepFace.analyze:AttributeError:模块'keras.utils.generic_utils'没有属性'populate_dict_with_module_objects

Posted

技术标签:

【中文标题】DeepFace.analyze:AttributeError:模块\'keras.utils.generic_utils\'没有属性\'populate_dict_with_module_objects【英文标题】:DeepFace.analyze: AttributeError: module 'keras.utils.generic_utils' has no attribute 'populate_dict_with_module_objectsDeepFace.analyze:AttributeError:模块'keras.utils.generic_utils'没有属性'populate_dict_with_module_objects 【发布时间】:2021-08-25 13:32:39 【问题描述】:

我正在使用 DeepFace 对一些人脸图像进行分析/分类

过程很简单,我将图像下载到文件夹中,然后使用 DeepFace.analyze 对其进行分析

from deepface import DeepFace


url = "url_to_imagefile.jpg"  

# Download image
file_path = os.path.join(BASE_DIR, "other_files_ignore_this/image.jpg")
urllib.request.urlretrieve(url, r''.format(save_path))
print(os.path.isfile(file_path))

# Analyze image
obj = DeepFace.analyze(img_path=file_path, actions=['age', 'gender', 'race', 'emotion'])
        

这个过程给了我一个 AttributeError

*** AttributeError: module 'keras.utils.generic_utils' has no attribute 'populate_dict_with_module_objects'

这是我安装的 tensorflow 包:

tensorboard==2.5.0
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.0
tensorflow==2.5.0
tensorflow-estimator==2.5.0

【问题讨论】:

【参考方案1】:

我相信您应该确保您的图像文件没有损坏或其他原因,因为我在 colab 上使用最新的 tensorflow 2.5 成功运行了 deep face。虽然运行此软件包的 requirement 版本是 1.9,但您可能希望通过类似的 discussion。

我在colab上测试了以下版本(默认没有变化)。

pip freeze | grep tensorflow

tensorflow==2.5.0
tensorflow-datasets==4.0.1
tensorflow-estimator==2.5.0
tensorflow-gcs-config==2.5.0
tensorflow-hub==0.12.0
tensorflow-metadata==1.0.0
tensorflow-probability==0.12.1

运行 DeepFace

!pip install deepface
from deepface import DeepFace

obj = DeepFace.analyze(img_path="/content/a.png",
                       actions=['age', 'gender', 'race', 'emotion'])
obj
'age': 30,
 'dominant_emotion': 'happy',
 'dominant_race': 'middle eastern',
 'emotion': 'angry': 1.4167338413528796e-06,
  'disgust': 1.0070460736690082e-16,
  'fear': 1.4578033333441376e-12,
  'happy': 100.0,
  'neutral': 2.3746911104183255e-07,
  'sad': 1.3744319267774974e-10,
  'surprise': 4.669798076874232e-11,
 'gender': 'Man',
 'race': 'asian': 0.0026936733561638694,
  'black': 0.0007858925087059574,
  'indian': 0.3253198189851534,
  'latino hispanic': 4.1496003657341225,
  'middle eastern': 57.77809964287875,
  'white': 37.74350510498912,
 'region': 'h': 450, 'w': 345, 'x': 88, 'y': 140

这里是tensorflow和keras的版本。

import tensorflow as tf 
from tensorflow import keras 
tf.__version__, keras.__version__
('2.5.0', '2.5.0')

【讨论】:

【参考方案2】:

它的默认面部检测器后端是 mtcnn。问题来自here 提到的依赖关系。

obj = DeepFace.analyze(img_path = file_path
, actions=['age', 'gender', 'race', 'emotion']
, detector_backend = 'opencv')

你可以毫无问题地使用opencv、ssd或retinaface。

【讨论】:

【参考方案3】:

我遇到了同样的问题,这个解决方案(由 kirthan0899 在这里发布:https://github.com/fizyr/keras-retinanet/issues/1538)对我有用:

!pip uninstall keras -y  
!pip uninstall keras-nightly -y  
!pip uninstall keras-Preprocessing -y  
!pip uninstall keras-vis -y  
!pip uninstall tensorflow -y  

!pip install tensorflow==2.3.0  
!pip install keras==2.4

【讨论】:

以上是关于DeepFace.analyze:AttributeError:模块'keras.utils.generic_utils'没有属性'populate_dict_with_module_objects的主要内容,如果未能解决你的问题,请参考以下文章

sql Attribut选项Sql Select

相当于 django 上的 entry.objects.filter(foreignkey__attribut='x') 和 .get()

如何添加 element with a href attribut in multipleelement? [duplicate]

Java–cvc-complex-type.4:Attribut ‘version’ must appear on element ‘web-app’

在 PostgreSQL 中导入带分隔符列表的 CSV 数据

PL-SQL 从对象表中删除项目