質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

Q&A

3回答

513閲覧

python3.6.4で顔認識を行ないたい

ohyama

総合スコア29

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

0グッド

0クリップ

投稿2019/04/23 05:48

編集2022/01/12 10:55

前提・実現したいこと

このサイトのサンプルコードを用いてpythonで顔認識を行ないたいのですが、エラーメッセージが表示されて実行できません。エラーは以下の通りです。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "face_predict.py", line 4, in <module> import cv2, os ModuleNotFoundError: No module named 'cv2'

該当のソースコード

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

試したこと

以下のようにpythonコマンドを実行してnumpyやcv2を一つずつimportしたら、numpyとcv2は同じ内容が表示され、osはimportに成功しました。

python Python 3.6.4 (default, Mar 9 2018, 17:05:38) [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 Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'numpy' >>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'cv2' >>> import os

python3系だからダメなのかなと考え2系のコマンドを以下の通りに実行してみました。

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には成功しているのですが、プログラムを実行してもエラーが出てしまいました。

ImportError: numpy.core.multiarray failed to import

について調べたところnumpyが古いからnumpyをバージョンアップすれば解決するとあったのですが、しても解決しませんでした。

補足情報(FW/ツールのバージョンなど)

OSはFreeBSD11.2
portsでpy-opencvはインストールしました。インストールしたところpy27-opencv-3.4.1_17と書いてありました。
タイトルにはpython3.6.4で行いたいと書いてありますが、3系がダメなら2系へ妥協することも視野に入れています。
###追記
それぞれのpythonでモジュールのパスを調べてみました。python3.6は以下の通りです。

>>> import sys >>> sys.path ['', '/root/local/lib/python3.6/site-packages', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']

python2.7は以下の通りでした。

>>> import sys >>> sys.path ['', '/root/local/lib/python3.6/site-packages', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-freebsd11', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/site-packages/gtk-2.0']

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryupe

2019/04/23 08:24

FreeBSDにopencvをインストールする際に参考にしたサイトはありますか? 私の方で10分程度調べてみましたが、python3で使えるopenCVをインストするのは難しそうな雰囲気がありますね。
ohyama

2019/04/24 02:39

インストールの際に参考にしたサイトは無く、portsからopencvを見つけて、インストールしました。py-opencvも同様です。 3系に特にこだわりはないので2系でも良いと考えているのですが、2系でも ImportError: numpy.core.multiarray failed to import というエラーが出て解決策が分からない状態です。
ohyama

2019/04/25 10:30

一旦3系を諦めて2系に絞って質問しなおしたいと思います。
guest

回答3

0

FreeBSD の ports&package では、py-opencv は現在 python 2.7 に対するものしか作成されません。OpenCV 3.4.5 への更新と合わせて python3 系にも対応する PR が出ていますが、まだコミットされていないようです。
当面は python2.7 でやらないといけないでしょう。

投稿2019/04/27 04:59

cugel

総合スコア220

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

pip freeze | grep opencvをターミナルで実行してopencv-pythonは出てきますか?
FreeBSDのデフォルトはpython3なのでしょうか。
pipはもしかしたらpip3を使うべきかもしれません。

以下、直接的な解答ではありません。

与えられている情報だけではっきりとした答えはわかりませんが、
Pythonの環境はきちんとpyenvなどで丁寧に構築したほうが良いです。

また、機械学習系がやりたいのならOSは(特にこだわりがないのであれば)
Ubuntu系の方が情報が多く、余計な問題が減ると思います。
(もしこだわりがあってFreeBSDを使われているのならごめんなさい)

追記:
portsというのはBSD系OSのパッケージマネージャなのですね。
pythonのライブラリマネージャはpipなので、
pip install opencv-pythonをしたらどうなるでしょうか。
※もしpipが存在しないと言われたら、pipをportsでインストールする必要があるかもしれません。

投稿2019/04/23 13:30

編集2019/04/23 13:35
sin_250

総合スコア112

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ohyama

2019/04/24 02:31

pip freeze | grep opencvをターミナルで実行しても何も出てきませんでした。 pip install opencv-pythonをしたらCould not find a version that satisfies the requirement opencv-python (from versions: ) No matchng distribution found for opencv-pythonと出て見つかりませんでした。
guest

0

ModuleNotFoundError: No module named 'cv2'

モジュールがないというエラーですね

あるあるなのが、復数のpythonが入っていて、モジュールを入れているヤツと実行させようとしてるヤツが違うというものがあります。

それぞれ、どこに入っているpythonで行っているのか調べてみてはどうでしょう

投稿2019/04/23 05:58

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ohyama

2019/04/23 07:35

それぞれのモジュールのパスを調べたんですが、やはりpython3の方にパスが不足しているみたいです。python2系と似たようなパスを通そうとしたのですが、見当たらなかったので、パスをどう通せばいいのか分かりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問