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

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

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

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

Q&A

1回答

1753閲覧

pythonの顔検出で'detectMultiScale'というエラーが発生した

kousuke.py

総合スコア5

Python

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

0グッド

0クリップ

投稿2020/04/05 04:07

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
pythonで顔検出のプログラムをコピペして試していました。
実装中に以下のエラーメッセージが発生しました。

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

OpenCV(4.2.0) /Users/travis/build/skvark/opencv-python/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

該当のソースコード

python

1import cv2, os, argparse, shutil 2 3# 切り抜いた画像の保存先ディレクトリ 4SAVE_PATH = "./outputs/" 5 6# 基本的なモデルパラメータ 7FLAGS = None 8 9# 学習済モデルの種類 10CASCADE = ["default","alt","alt2","tree","profile","nose"] 11 12# 直接実行されている場合に通る(importされて実行時は通らない) 13if __name__ == "__main__": 14 parser = argparse.ArgumentParser() 15 parser.add_argument( 16 "--cascade", 17 type=str, 18 default="alt", 19 choices=CASCADE, 20 help="cascade file." 21 ) 22 parser.add_argument( 23 "--scale", 24 type=float, 25 default=1.3, 26 help="scaleFactor value of detectMultiScale." 27 ) 28 parser.add_argument( 29 "--neighbors", 30 type=int, 31 default=2, 32 help="minNeighbors value of detectMultiScale." 33 ) 34 parser.add_argument( 35 "--min", 36 type=int, 37 default=80, 38 help="minSize value of detectMultiScale." 39 ) 40 parser.add_argument( 41 "--input_dir", 42 type=str, 43 default="./input/", 44 help="The path of input directory." 45 ) 46 parser.add_argument( 47 "--move_dir", 48 type=str, 49 default="/done/", 50 help="The path of moving detected files." 51 ) 52 53# パラメータ取得と実行 54FLAGS, unparsed = parser.parse_known_args() 55 56# 分類器ディレクトリ(以下から取得) 57# https://github.com/opencv/opencv/blob/master/data/haarcascades/ 58# https://github.com/opencv/opencv_contrib/blob/master/modules/face/data/cascades/ 59 60# 学習済モデルファイル 61if FLAGS.cascade == CASCADE[0]:#"default": 62 cascade_path = "./models/haarcascade_frontalface_default.xml" 63elif FLAGS.cascade == CASCADE[1]:#"alt": 64 cascade_path = "./models/haarcascade_frontalface_alt.xml" 65elif FLAGS.cascade == CASCADE[2]:#"alt2": 66 cascade_path = "./models/haarcascade_frontalface_alt2.xml" 67elif FLAGS.cascade == CASCADE[3]:#"tree": 68 cascade_path = "./models/haarcascade_frontalface_alt_tree.xml" 69elif FLAGS.cascade == CASCADE[4]:#"profile": 70 cascade_path = "./models/haarcascade_profileface.xml" 71elif FLAGS.cascade == CASCADE[5]:#"nose": 72 cascade_path = "./models/haarcascade_mcs_nose.xml" 73 74#カスケード分類器の特徴量を取得する 75faceCascade = cv2.CascadeClassifier(cascade_path) 76 77# 顔検知に成功した数(デフォルトで0を指定) 78face_detect_count = 0 79 80# 顔検知に失敗した数(デフォルトで0を指定) 81face_undetected_count = 0 82 83# フォルダ内ファイルを変数に格納(ディレクトリも格納) 84files = os.listdir(FLAGS.input_dir) 85 86# 成功ファイルを移動いない場合は、出力用のディレクトリが存在する場合、削除して再作成 87if FLAGS.move_dir == "": 88 if os.path.exists(SAVE_PATH): 89 shutil.rmtree(SAVE_PATH) 90 os.mkdir(SAVE_PATH) 91 92print(FLAGS) 93 94# 集めた画像データから顔が検知されたら、切り取り、保存する。 95for file_name in files: 96 97 # ファイルの場合(ディレクトリではない場合) 98 if os.path.isfile(FLAGS.input_dir + file_name): 99 100 # 画像ファイル読込 101 img = cv2.imread(FLAGS.input_dir + file_name) 102 103 # 大量に画像があると稀に失敗するファイルがあるのでログ出力してスキップ(原因不明) 104 if img is None: 105 print(file_name + ':Cannot read image file') 106 continue 107 108 # カラーからグレースケールへ変換(カラーで顔検出しないため) 109 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 110 111 # 顔検出 112 face = faceCascade.detectMultiScale(gray, scaleFactor=FLAGS.scale, minNeighbors=FLAGS.neighbors, minSize=(FLAGS.min, FLAGS.min)) 113 114 if len(face) > 0: 115 for rect in face: 116 # 切り取った画像出力 117 cv2.imwrite(SAVE_PATH + str(face_detect_count) + file_name, img[rect[1]:rect[1] + rect[3], rect[0]:rect[0] + rect[2]]) 118 face_detect_count = face_detect_count + 1 119 120 # 検出できたファイルは移動 121 if FLAGS.move_dir != "": 122 shutil.move(FLAGS.input_dir + file_name, FLAGS.input_dir + FLAGS.move_dir) 123 else: 124 print(file_name + ':No Face') 125 face_undetected_count = face_undetected_count + 1 126 127print('Undetected Image Files:%d' % face_undetected_count)
### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

投稿2020/04/05 05:09

_Victorique__

総合スコア1392

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

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

kousuke.py

2020/04/05 06:13

それをみてもよくわからなかったので質問させていただきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問