OpenCV

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

1回答

2426閲覧

macosにおいて,opencvのVideoCaptureでのカメラの認識ができない

ponnnta

総合スコア1

OpenCV

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

0クリップ

投稿2023/08/06 10:20

編集2023/08/06 13:11

質問内容,環境

openCVのVideoCaptureでカメラの映像を取得できません
・macos
・spyder
(クラムシェルモードで使用)

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

[ WARN:0@0.009] global /private/var/folders/nz/j6p8yfhx1mv_0grj5xl4650h0000gp/T/abs_d9lyif19nl/croot/opencv-suite_1676472756314/work/modules/videoio/src/cap_gstreamer.cpp (862) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created OpenCV: not authorized to capture video (status 0), requesting... Fatal Python error: Aborted Main thread: Thread 0x00000001e3cdde00 (most recent call first): File "/ユーザー名/Library/CloudStorage/クラウド名\u72ec\u7acb\u884c\u653f\u6cd5\u4eba\u56fd\u7acb\u9ad8\u7b49\u5c02\u9580\u5b66\u6821\u6a5f\u69cb/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7/spyder/保存ファイル名.py", line 11 in <module> File "/ユーザー名/anaconda3/lib/python3.10/site-packages/spyder_kernels/py3compat.py", line 356 in compat_exec File "/ユーザー名/anaconda3/lib/python3.10/site-packages/spyder_kernels/customize/spydercustomize.py", line 473 in exec_code File "/ユーザー名/anaconda3/lib/python3.10/site-packages/spyder_kernels/customize/spydercustomize.py", line 615 in _exec_file File "/ユーザー名/anaconda3/lib/python3.10/site-packages/spyder_kernels/customize/spydercustomize.py", line 528 in runfile File "/var/folders/tc/lkwdg48j6k5bbl2mg_blgzqw0000gn/T/ipykernel_14548/3951762717.py", line 1 in <module>

該当のソースコード

python

1import cv2 2 3cap = cv2.VideoCapture(0) 4 5if not cap.isOpened(): 6 print("カメラが開けませんでした。") 7 exit() 8 9while True: 10 ret, frame = cap.read() 11 12 if not ret: 13 print("映像を取得できませんでした。") 14 break 15 16 cv2.imshow('Camera', frame) 17 18 if cv2.waitKey(1) & 0xFF == ord('q'): 19 break 20 21cap.release() 22cv2.destroyAllWindows()

試したこと

ターミナルで,カメラの識別子があっていることを確認しました.

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

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

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

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

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

meg_

2023/08/06 10:30

opencvはどうやってインストールしましたか?
ponnnta

2023/08/06 10:42

conda install cv2とanacondaにインストールしました. 今まで同じ環境において,画像加工で何度もopencvを使用していましたので,インストールは問題ないかと思います.
meg_

2023/08/06 11:00

エラー発生行は「cap = cv2.VideoCapture(0)」ですか?他のところですか?
ponnnta

2023/08/06 13:12

回答になっているかわかりませんが,今質問に追記した文が出てきた後,カーネルが再起動されます.
jbpb0

2023/08/07 02:12

当方のmacのanacondaのpythonで質問のコードをそのまま実行したら、エラーは出ずに実行でき、macの内蔵カメラの映像が画面に出ました ただし、opencvはcondaではなく、 pip3 install --upgrade opencv-contrib-python でインストールしたものです 質問のコードでは特殊な機能は使ってないので、「-contrib」が付いてないのをpipでインストールした場合でも、問題なく実行できただろうと思います anacondaにopencvをpipでインストールすることを推奨するわけではありませんが、情報としてお知らせしておきます > 今まで同じ環境において,画像加工で何度もopencvを使用していましたので,インストールは問題ないかと思います. > 今質問に追記した文が出てきた後,カーネルが再起動されます. 質問者さんがcondaでインストールしたopencvは、一般的な画像処理では問題がなくても、カメラを使う機能には支障があるのかもしれません condaで新たな仮想環境を作って、試しにその仮想環境にはpipでopencvをインストールしてみて、エラーが出るか試してみたらいかがでしょうか pipで入れた場合はエラーが出ずに正常に実行できるなら、質問者さんが今使ってる(condaでインストールした)opencvにエラーの原因がある可能性があります
ponnnta

2023/08/07 03:11

提案していただいた通りに,新たに仮想環境を作り,pipでopencvをインストールすると,実行できました. ありがとうございます. これで,condaでインストールしたopencvがカメラ使用の機能に支障をきたしていたことはわかったのですが,元の環境でカメラを使用するには,opencvを再度pipでインストールし直す他に方法はないのでしょうか...
jbpb0

2023/08/07 23:49

> 元の環境でカメラを使用するには,opencvを再度pipでインストールし直す他に方法はないのでしょうか 私には分かりません https://anaconda.org/search?q=type%3Aconda+opencv で検索したら、condaでインストールできるopencvはたくさん有り、その中には質問者さんのmac環境でちゃんとカメラを扱えるものが有るかもしれませんが、私はpipでインストールしたものしか使ったことがないので、分かりません
guest

回答1

0

多分gstremaerが悪さをしています。マックでどうかは分かりませんが、Linuxだと代わりにV4L(video for Linux)経由でカメラにアクセスするとうまくいく可能性が高いです。
※経験上gstreamerを入れ直したりあれこれしてもうまくいかないです。大人しくv4lを試した方がうまく行きます。

対策はカメラのcapの部分を以下に差し替えてください。

Python3

1cap = cv2.VideoCapture(0, cv2.CAP_V4L2)

追記

たぶんですが、

  • OpenCVが非MACの環境でOpenCVがコンパイルされたせいで、WindowsやLinuxの標準バックエンドが既定でロードされてしまっていた(今回の質問の件)
  • そこに私が提案したV4LもLinux用なのでMACのバックエンドとして適さなかった(カメラが開けませんでした、の件)

のような気がしています。そこで、気になってリファレンスを少し調べました。すると、第二引数のV4Lの部分をほかにも変えられるらしいことがわかりました。

MACでどれを指定すればよいかはわかりませんが、「GSTREAMERでもV4Lでもないバックエンドの何か(?)」であればうまくいきそうな気がします。

Qiitaのオオタニシンヤさんの記事を参考にすると、上述のcv2.CAP_V4L2の部分を、cv2.CAP_FFMPEGcv2.CAP_AVFOUNDATIONに差し替えるとうまくいきそうです。

投稿2023/08/06 11:10

編集2023/08/06 22:11
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ponnnta

2023/08/06 13:13

回答ありがとうございます. 差し替えたのですが,”カメラが開けませんでした”と出力されました.
ponnnta

2023/08/07 02:33 編集

(回答追記への返信) お調べいただきありがとうございます. cv2.CAP_FFMPEGやcv2.CAP_AVFOUNDATION,リンクを貼っていただいたサイトに記載されていた他のものにも差し替えましたが,cv2.CAP_FFMPEGでは”カメラが開けませんでした.”と出力され,cv2.CAP_AVFOUNDATIONでは,質問に記載しているエラーが出力されました.
退会済みユーザー

退会済みユーザー

2023/08/07 12:23 編集

コメントに対する回答の概要: ちょっと手間はかかりますが、OpenCVの自前コンパイルが一番よさそうに思います。理由は、使う予定のPCデコンパイルしてインストールすると、そのPC用に最適化されてインストールできる(USBカメラの問題もおそらく解決できる)ためです。 解決方法: MACユーザーではないのでMACでコンパイルしたことはありませんが、普通はインストール予定のPCでOpenCVをコンパイルすれば、そのPCに最適化された状態でOpenCVを用意することができます。 たぶんMACであれば「brew install opencv」でできるはずです。 --- 恐らく起きていることは、Python用のOpenCVは"多くの環境"に合うようになっています(例えば、Intel/AMDのいわゆる"普通のCPU"向けに最適化されている)が、特別な環境には対応していない(例えば、AARCH64のような特殊なCPUには対応していない、今回の場合にはUSBのカメラ周りの何かが足りていない)というようなことがあるためです。pip3 install opencv-python3とした時のwhlファイルにグダグダ続いているバージョン情報以外の部分がその情報になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問