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

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

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

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

Python

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

Q&A

1回答

3188閲覧

顔認証からのモザイク処理

mochisio

総合スコア19

OpenCV

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

Python

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

0グッド

0クリップ

投稿2017/12/04 05:09

編集2017/12/05 04:16

###前提・実現したいこと
opencvで顔認証した後にモザイク処理をするプログラムを作ろうとしています。

###発生している問題・エラーメッセージ
開いたloadedが応答しません

AttributeError

1<ipython-input-1-52cb7ef26d6b> in <module>() 2 14 3 15 #分類器で顔を認識する 4---> 16 face = face_cascade.detectMultiScale(gray,1.3,5) 5 17 6 18 if 0 < len(face): 7 8AttributeError: 'str' object has no attribute 'detectMultiScale' 9 10In [ ]: 11 12```​ 13 14###該当のソースコード 15```python 16import numpy as np 17import cv2 18 19#顔探索用のカスケード型分類器を取得するためにフォルダから探してアドレス指定 20face_cascade = "C:/Users/wakimoto/Anaconda2/Library/etc/haarcascades/haarcascade_frontalface_default.xml" 21 #フルアドで指定 22img = cv2.imread("C:/Users/wakimoto/testimg/face.jpg") 23result = cv2.imread("C:/Users/wakimoto/testimg/face.jpg") 24 25cv2.imshow("loaded", img) 26#読み込んだ画像をグレースケールに変換 27gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) 28 29#分類器で顔を認識する 30face = face_cascade.detectMultiScale(gray,1.3,5) 31 32if 0 < len(face): 33 34 print "get face" 35 36 for (x,y,w,h) in face: 37 38 #顔の部分だけ切り抜いてモザイク処理をする 39 cut_img = img[y:y+h,x:x+w] 40 cut_face = cut_img.shape[:2][::-1] 41 #10分の1にする 42 cut_img = cv2.resize(cut_img,(cut_face[0]/10, cut_face[0]/10)) 43 #画像を元のサイズに拡大 44 cut_img = cv2.resize(cut_img,cut_face,interpolation = cv2.cv.CV_INTER_NN) 45 46 #モザイク処理した部分を重ねる 47 result[y:y+h,x:x+w] = cut_img 48 49else: 50 51 print "no face" 52 53 54cv2.imshow("face mosaic",result) 55#cv2.imwrite("output file name",result) 56cv2.waitKey(0) 57cv2.destroyAllWindows() 58

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
opencv2.4,python2

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

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

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

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

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

umyu

2017/12/04 05:16

質問文のソースコードは自作ソースコードですか、それともどこかから流用したソースコードですか?
can110

2017/12/04 05:17

文字通りface_cascade変数が定義されていません。定義が必要ですのでその部分のソースを提示ください。
mochisio

2017/12/04 05:18

ほとんどサイトで公開されたものからの流用です(元アドレス忘れた)
can110

2017/12/04 05:27

流用元アドレスを探して提示ください(face_cascadeで検索すればよいのでは?)
can110

2017/12/04 07:07

流用元を参考に修正したうえで解決すれば自己回答を、エラーなど発生した場合は質問に追記ください。
guest

回答1

0

Python

1face_cascade = "C:/Users/wakimoto/Anaconda2/Library/etc/haarcascades/haarcascade_frontalface_default.xml"

もともとここで書かれているのはxmlのパスを書いただけで、これをカスケードファイルとして読み込む作業をしていません。以下のコード

Python

1gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

の下にでも以下のコードが必要になります。

Python

1face_cascade = cv2.CascadeClassifier(face_cascade)

ちょっと原因が分かりませんが、一般的な流れを追記しておきます

Python

1#顔探索用のカスケード型分類器を取得するためにフォルダから探してアドレス指定 2cascade = "C:/Users/wakimoto/Anaconda2/Library/etc/haarcascades/haarcascade_frontalface_default.xml" 3 #フルアドで指定 4img = cv2.imread("C:/Users/wakimoto/testimg/face.jpg") 5result = cv2.imread("C:/Users/wakimoto/testimg/face.jpg") 6#カスケードファイル読み込み 7face_cascade = cv2.CascadeClassifier(cascade) 8cv2.imshow("loaded", img) 9#読み込んだ画像をグレースケールに変換(RGB→BGRに修正) 10gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 11 12#分類器で顔を認識する 13face = face_cascade.detectMultiScale(gray)

投稿2017/12/13 05:12

編集2017/12/21 05:41
Yuki_S

総合スコア356

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

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

mochisio

2017/12/19 03:42

なぜか顔が右回転90度で表示される画像はno faceで無事に終了するのですがちゃんと写っている画像はloadedが応答しなくなります
Yuki_S

2017/12/19 04:08

それは写真が正しく読み込めていないからとかではないですか? img及びresultにデータが入っているかどうかを調べてみてください。 ただしくデータが入っていれば、 imshowの次にcv2.waitKey(0)というのを入れてみてはいかがでしょうか?
mochisio

2017/12/19 04:34

画像は表示できました。しかしそれ以降の処理をすると expected string or Unicode object, cv2.CascadeClassifier found というエラーが出ます。
Yuki_S

2017/12/19 05:42

どの行を処理した時にこのエラーが出たのかを正確に教えていただきたいです。 エラーの内容としては、型が正しくないというエラーが出ているので対象となっている変数か何かが、stringかUnicodeでないといけないのにもかかわらず、cv2.CascadeClassifier型になっているという事ではないでしょうか?
mochisio

2017/12/21 04:31

loadedが表示されてwaitkeyで0を押した後に、 ypeError Traceback (most recent call last) <ipython-input-1-ce41515824b7> in <module>() 13 #読み込んだ画像をグレースケールに変換 14 gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) ---> 15 face_cascade = cv2.CascadeClassifier(face_cascade) 16 #分類器で顔を認識する 17 face = face_cascade.detectMultiScale(gray,1.3,5) TypeError: expected string or Unicode object, cv2.CascadeClassifier found と出ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問