実現したいこと
GoogleDriveにある画像から顔認識をしたいと考えています。
前提
GoogleColabで顔認証をさせるためのコードをチャットGPTから書かせてそれを用いることにしました。
kerasを用いたコードを実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-1-1fd1e5f6721a> in <cell line: 10>() 8 import numpy as np 9 import keras ---> 10 from keras_vggface.vggface import VGGFace 11 12 #GoogleDriveの参考 2 frames /usr/local/lib/python3.10/dist-packages/keras_vggface/__init__.py in <module> ----> 1 from keras_vggface.vggface import VGGFace 2 from keras_vggface.version import __version__ /usr/local/lib/python3.10/dist-packages/keras_vggface/vggface.py in <module> 7 ''' 8 from __future__ import print_function ----> 9 from keras_vggface.models import RESNET50, VGG16, SENET50 10 11 /usr/local/lib/python3.10/dist-packages/keras_vggface/models.py in <module> 14 AveragePooling2D, Reshape, Permute, multiply 15 from keras_applications.imagenet_utils import _obtain_input_shape ---> 16 from keras.utils import layer_utils 17 from keras.utils.data_utils import get_file 18 from keras import backend as K ImportError: cannot import name 'layer_utils' from 'keras.utils' (/usr/local/lib/python3.10/dist-packages/keras/utils/__init__.py)
ModuleNotFoundError Traceback (most recent call last) <ipython-input-1-09a6fed00bef> in <cell line: 12>() 10 import numpy as np 11 import keras ---> 12 from keras_vggface.vggface import VGGFace 13 14 #GoogleDriveの参考 2 frames /usr/local/lib/python3.10/dist-packages/keras_vggface/models.py in <module> 18 from keras import backend as K 19 from keras_vggface import utils ---> 20 from keras.engine.topology import get_source_inputs 21 import warnings 22 from keras.models import Model ModuleNotFoundError: No module named 'keras.engine.topology'
該当のソースコード
GoogleColab上でpythonを用いて作業しています。
1import os 2import cv2 3import numpy as np 4import keras 5from keras_vggface.vggface import VGGFace 6 7#GoogleDriveの参考 8from google.colab import drive 9drive.mount('/content/drive/') 10 11# 顔写真のファイルパスを指定 12file_path = "/content/drive/MyDrive/okakou/face/01/" 13 14# ファイルパスから画像データを読み込み 15image = cv2.imread(file_path) 16 17# 画像をRGBに変換 18#image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 19 20# 顔検出のためのカスケード分類器を読み込み 21face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") 22 23# 画像から顔を検出 24faces = face_cascade.detectMultiScale(image, 1.3, 5) 25 26# 顔の分類のためのVGGFaceモデルを読み込み 27model = VGGFace(model="resnet50") 28 29# 検出された顔に対してループ 30for (x, y, w, h) in faces: 31 # 顔の領域を切り出し 32 face = image[y:y+h, x:x+w] 33 # 顔のサイズを224x224にリサイズ 34 face = cv2.resize(face, (224, 224)) 35 # 顔のデータを4次元配列に変換 36 face = np.expand_dims(face, axis=0) 37 # 顔のデータを前処理 38 face = preprocess_input(face, version=2) 39 # 顔の分類を予測 40 pred = model.predict(face) 41 # 予測結果をデコード 42 result = decode_predictions(pred)[0][0] 43 # 予測結果を表示 44 print(f"Detected face at ({x}, {y}, {w}, {h})") 45 print(f"Name: {result[0]}") 46 print(f"Score: {result[1]}")
試したこと
コメントをいただき、kerasのダウングレードを行いましたが、上記のエラーになりました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
2023/7/27 に issue として報告されています。
Issue ImportError: cannot import name 'layer_utils' from 'keras.utils' · Issue #97 · rcmalli/keras-vggface · GitHub
https://github.com/rcmalli/keras-vggface/issues/97
原因としては Keras package との不整合の様で、Keras のバージョンを下げることで解消するとのことです。
> I solved this issue by reverting to keras version 2.12. The issue arose for me with tensorflow version 2.13.0 and keras version 2.13.1
>
> My fix:
> pip uninstall keras
> pip install keras==2.12
>
> now it imports layer_utils as well.
コメントありがとうございます。ダウングレードを試しましたがまだ解決できていません。
試した結果を質問に追記しました。
そのエラーも issue として上がっていて、
ModuleNotFoundError: No module named 'keras.engine.topology' · Issue #73 · rcmalli/keras-vggface · GitHub
https://github.com/rcmalli/keras-vggface/issues/73
PR がマージされているのですが、PyPI のリポジトリには反映されていない様です。なので、GitHub のリポジトリからインストールするとよいかと思います。
pip3 uninstall keras-vggface
pip3 install --user git+https://github.com/rcmalli/keras-vggface.git
コメントありがとうございます。GitHubについて存じておらず、調べましたがよく理解できませんでした。
参考サイト等があれば教えていただけますでしょうか?
いただいたコードをGoogleColab上で以下のように書き換えて使用したのですが、うまくいきませんでした。
!pip uninstall keras-vggface
!pip install --user git+https://github.com/rcmalli/keras-vggface.git
こちらでもGoogleColab上で実行してみました。以下を実行してからコードを実行してみてください。
!pip install keras==2.12
!pip install Keras-Applications
!pip install git+https://github.com/rcmalli/keras-vggface.git
コメントありがとうございます。
いただいたコメントを記入したうえ以下のように実行したのですが、from keras 以下の部分でやはりエラーが出ました。
インストールに問題があるのでしょうか。
!pip install keras==2.12
!pip install Keras-Applications
!pip install git+https://github.com/rcmalli/keras-vggface.git
import os
import cv2
import numpy as np
import keras
from keras_vggface.vggface import VGGFace
以下エラー文
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-3-0d43efdfc483> in <cell line: 15>()
13 import numpy as np
14 import keras
---> 15 from keras_vggface.vggface import VGGFace
16
17 #GoogleDriveの参考
ModuleNotFoundError: No module named 'keras_vggface'
セッションデータが残ったままになっているかもしれませんので、新規にノートを作成して、そちらで実行してみてください。(こちらで試した限りではエラーは発生していません)
コメントありがとうございます。新規に実行したところ問題が解決しました!
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
解決できてよかったです。回答欄に投稿しました。
確認しました。
いろいろとありがとうございました。
> ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
もしかして、この文言はコメントに自動的に挿入されるテンプレートなのでしょうか?
その文章については回答欄にあるテンプレートです。
ご不快に思われたのであれば申し訳ありません。
いえ、不快ではないのですが、できれば削っておいてほしかったと思います。(無駄な投稿をしないで済む様に)
今後気を付けます。
教えていただきありがとうございます。