前提・実現したいこと
このサイトのサンプルコードを用いてpython2系で顔認識を行ないたいのですが、エラーメッセージが表示されて実行できません。エラーは以下の通りです。
発生している問題・エラーメッセージ
python2.7 Python 2.7.14 (default, Mar 9 2018, 14:46:34) [GCC 4.2.1 Compatible FreeBSD Clang 4.0.0 (tags/RELEASE_400/final 297347)] on freebsd11 Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> import cv2 >>> import os >>> quit() python2.7 face_predict.py ImportError: numpy.core.multiarray failed to import Traceback (most recent call last): File "face_predict.py", line 4, in <module> import cv2, os ImportError: numpy.core.multiarray failed to import
すると、numpy,cv2,osのimportには成功しているのですが、プログラムを実行してもエラーが出てしまいました。
該当のソースコード
python
1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3 4import cv2, os 5import numpy as np 6from PIL import Image 7 8# トレーニング画像 9train_path = './yalefaces' 10 11# テスト画像 12test_path = './test' 13 14# Haar-like特徴分類器 15cascadePath = "haarcascade_frontalface_default.xml" 16faceCascade = cv2.CascadeClassifier(cascadePath) 17 18# 顔認識器の構築 for OpenCV 2 19# ※ OpenCV3ではFaceRecognizerはcv2.faceのモジュールになります 20# EigenFace 21#recognizer = cv2.createEigenFaceRecognizer() 22# FisherFace 23#recognizer = cv2.createFisherFaceRecognizer() 24# LBPH 25recognizer = cv2.face.LBPHFaceRecognizer_create() 26 27# 指定されたpath内の画像を取得 28def get_images_and_labels(path): 29 # 画像を格納する配列 30 images = [] 31 # ラベルを格納する配列 32 labels = [] 33 # ファイル名を格納する配列 34 files = [] 35 for f in os.listdir(path): 36 # 画像のパス 37 image_path = os.path.join(path, f) 38 # グレースケールで画像を読み込む 39 image_pil = Image.open(image_path).convert('L') 40 # NumPyの配列に格納 41 image = np.array(image_pil, 'uint8') 42 # Haar-like特徴分類器で顔を検知 43 faces = faceCascade.detectMultiScale(image) 44 # 検出した顔画像の処理 45 for (x, y, w, h) in faces: 46 # 顔を 200x200 サイズにリサイズ 47 roi = cv2.resize(image[y: y + h, x: x + w], (200, 200), interpolation=cv2.INTER_LINEAR) 48 # 画像を配列に格納 49 images.append(roi) 50 # ファイル名からラベルを取得 51 labels.append(int(f[7:9])) 52 # ファイル名を配列に格納 53 files.append(f) 54 55 return images, labels, files 56 57 58# トレーニング画像を取得 59images, labels, files = get_images_and_labels(train_path) 60 61# トレーニング実施 62recognizer.train(images, np.array(labels)) 63 64# テスト画像を取得 65test_images, test_labels, test_files = get_images_and_labels(test_path) 66 67i = 0 68while i < len(test_labels): 69 # テスト画像に対して予測実施 70 label, confidence = recognizer.predict(test_images[i]) 71 # 予測結果をコンソール出力 72 print("Test Image: {}, Predicted Label: {}, Confidence: {}".format(test_files[i], label, confidence)) 73 # テスト画像を表示 74 cv2.imshow("test image", test_images[i]) 75 cv2.waitKey(300) 76 77 i += 1 78 79# 終了処理 80cv2.destroyAllWindows() 81
###試したこと
ImportError: numpy.core.multiarray failed to import
について調べたところnumpyが古いからnumpyをバージョンアップすれば解決するとあったのですが、
pip install numpy --upgradeは失敗し、解決しませんでした。
補足情報(FW/ツールのバージョンなど)
OSはFreeBSD11.2
portsでpy-opencvはインストールしました。インストールしたところpy27-opencv-3.4.1_17と書いてありました。
numpyのバージョンは1.16.1
numpyのバージョンはいくつですか?