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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

OpenCV

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

0回答

1575閲覧

error: (-215) scn == 3 || scn == 4 in function cv::cvtColorというエラーが出てしまう

Kokku

総合スコア39

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

OpenCV

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

1クリップ

投稿2020/10/05 06:12

リンク内容

上記サイトを参考にしてAzreのFaceAPIとOpenCVを使ってカメラを起動しキャプチャした画像から顔を検出し感情推定を行うというプログラムを作成したいのですが、おそらくカメラの起動時かその画像の保存の段階でエラーが起こってしまいます。

1 --------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-3-7cec7f1f048d> in <module> 28 ret, img = cap.read() 29 print(1) ---> 30 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#グレースケールに変換 31 faces=cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100))#顔判定 minSizeで顔判定する際の最小の四角の大きさを指定できる。(小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) 32 print(2) error: C:\ci\opencv_1512688052760\work\modules\imgproc\src\color.cpp:11048: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor
import requests import json import time import numpy as np import cv2 #from datetime import datetime import matplotlib.pyplot as plt import pandas as pd ##初期設定 cap=cv2.VideoCapture(0) #0にするとmacbookのカメラ、1にすると外付けのUSBカメラにできる #csv_name = datetime.now().strftime('%Y%m%d_%H%M')#csvファイルとして保存するファイル名 data_name = ["anger","contempt","disgust","fear","happiness",'sadness','surprise']#保存データの系列 emotion_data =[0,0,0,0,0,0,0]#初期値 count = 0#撮影回数を示すカウンタ ##顔認識の設定 cascade_path = r'C\Users\shota\opencvcascade\haarcascade_frontalface_alt.xml'# 顔判定で使うxmlファイルを指定する。(opencvのpathを指定) cascade = cv2.CascadeClassifier(cascade_path) ##Faceの設定 subscription_key = '#######################'#ここに取得したキー1を入力 assert subscription_key face_api_url = 'https://https://#######.cognitiveservices.azure.com/face/v1.0/detect'#ここに取得したエンドポイントのURLを入力 ##実行 while True: ret, img = cap.read() print(1) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#グレースケールに変換 faces=cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100))#顔判定 minSizeで顔判定する際の最小の四角の大きさを指定できる。(小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) print(2) if len(faces) > 0: #顔を検出した場合 for face in faces: now = datetime.now()#撮影時間 filename = r"C\Users\shota\opencvcascade\img\ " + str(now) + ".jpg"#保存するfilename cv2.imwrite(filename, img)#画像の書き出し print(3) with open(filename, mode="rb") as image_data:#処理をする画像を選択 content = image_data.read() print(4) print(content) headers = {'Ocp-Apim-Subscription-Key': subscription_key, 'Content-Type': 'application/octet-stream'} params = { 'returnFaceId': 'true', 'returnFaceLandmarks': 'false', 'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise', } response = requests.post(face_api_url, headers=headers, params=params, data=image_data)#FaceAPIで解析 print(5) response.raise_for_status() analysis = response.json()#json出力 print(6) #faceのjsonから抽出する項目をピック result = [analysis[0]['faceAttributes']['emotion']['anger'],analysis[0]['faceAttributes']['emotion']['contempt'], analysis[0]['faceAttributes']['emotion']['disgust'],analysis[0]['faceAttributes']['emotion']['fear'], analysis[0]['faceAttributes']['emotion']['happiness'],analysis[0]['faceAttributes']['emotion']['sadness'], analysis[0]['faceAttributes']['emotion']['surprise']] emotion_data = np.array(result) + np.array(emotion_data) df = pd.DataFrame({now:emotion_data}, index=data_name)#取得データをDataFrame1に変換しdfとして定義 if count == 0:#初期 print(df) print(7) else: df = pd.concat([df_past,df],axis = 1, sort = False)#dfを更新 print(df) print(8) plt.plot(df.T)#dfの行列を反転 plt.legend(data_name)#凡例を表示 plt.draw()#グラフ描画 plt.pause(4)#ウェイト時間(=Azure更新時間) plt.cla()#グラフを閉じる print(9) count = count + 1#撮影回数の更新 df_past = df#df_pastを更新 df.T.to_csv(csv_name+'.csv')#感情分析結果をcsvファイルとして書き出し print(10)

windowsでは:が使えないとのことなのでパスしての時に削除しました。

ほかのコードで簡単にカメラ起動を行ってみたところ正常に動きました。

他サイトで以前質問を書いたところdateitme.nowが原因だと回答をいただきましたがどう変えていいのかわからずそのままの状態です。

始めたばかりで何をしたらいいのかわからず苦戦しています。なにか解決方法があれば教えていただきたいです。

開発環境
windwos
anaconda

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

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

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

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

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

Bull

2020/10/05 12:26

エラーメッセージを読むと cv2.cvtColor() でエラーになっているみたいですね。 検証のため次のプログラム (インターラクティブ モードでもいいですけど) を実行して頂けますか? import cv2 cap = cv2.VideoCapture(0) print(cap) print(cap.isOpened()) ret, img = cap.read() print(ret) print('shape -> ', img.shape) print('depth -> ', img.dtype) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) print('shape -> ', gray.shape) print('depth -> ', gray.dtype) cap.release()
Kokku

2020/10/05 12:42

<VideoCapture 000001E5B62B19F0> True True shape -> (480, 640, 3) depth -> uint8 shape -> (480, 640) depth -> uint8 結果です
Bull

2020/10/05 22:49 編集

カメラからは読み込めて、グレースケール化も出来ているようですね。 ちょっと想定外の結果です。 デバッガーでトレースして、どこでエラーになっているかは、確認出来ていますか? また、基本的な顔認識は出来ているのでしょうか? 顔認識の部分を残して、削除(コメント化)したらどうなりますか?
Kokku

2020/10/09 13:15

if len(faces) > 0: #顔を検出した場合 以下をすべてコメントアウトして while True: ret, img = cap.read() if ret == True: img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#グレースケールに変換 faces=cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100))#顔判定 minSizeで顔判定する際の最小の四角の大きさを指定できる。(小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) cv2.imshow(img_gray) if lastflame is None: lastflame = gray.astype('float') cv2.imshow(img_gray) のようにしたのですが合っていますでしょうか? 結果は何も出力されなかったです。
Bull

2020/10/09 13:21

はい、そうやって範囲を狭めてデバッグしていけば、エラーの発生してる箇所が判明すると思います。 ところで、顔の検出ができると if len(faces) > 0 は成立するはずです。 顔の検出はできましたか?
Kokku

2020/10/09 13:38 編集

--------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-2-1580d5987675> in <module> 27 while True: 28 r, img = cap.read() ---> 29 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#グレースケールに変換 30 faces=cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100))#顔判定 minSizeで顔判定する際の最小の四角の大きさを指定できる。(小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) 31 error: C:\ci\opencv_1512688052760\work\modules\imgproc\src\color.cpp:11048: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor ​ エラーが出ました。カメラも起動していなかったです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問