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

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

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

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

Python

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

Q&A

0回答

1960閲覧

Python カメラプログラム起動2回目でエラーが出る。

bend

総合スコア3

OpenCV

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

Python

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

0グッド

0クリップ

投稿2023/03/07 03:17

編集2023/07/22 13:30

実現したいこと

Pythonでカメラを撮影しフォルダに保存。再度起動しても撮影ができてフォルダに保存したい。

前提

AI学習データに必要な写真を撮影しています。。
プログラム起動後、撮影している分にはエラーが発生しませんが、
撮影が終了し1度違うプログラムを起動させ終了後、再度撮影プログラムを起動させるとエラーが発生します。

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

%Run satuei2.py

[ WARN:0@0.024] global cap_v4l.cpp:982 open VIDEOIO(V4L2:/dev/video0): can't open camera by index
[ERROR:0@0.033] global obsensor_uvc_stream_channel.cpp:156 getStreamChannelGroup Camera index out of range
Traceback (most recent call last):
File "/home/a/b/satuei2.py", line 10, in <module>
cv2.imshow('framr2side',frame2)
cv2.error: OpenCV(4.7.0) /io/opencv/modules/highgui/src/window.cpp:971: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'```

### 該当のソースコード ```Python import numpy as np import cv2 import datetime cap2=cv2.VideoCapture(0) while True: ret2,frame2=cap2.read() cv2.imshow('framr2side',frame2) key=cv2.waitKey(1)&0xFF if key == ord('q'): break if key == ord('s'): dt_now=datetime.datetime.now() path2=str(dt_now)+"-photo-side.jpg" cv2.imwrite(r"/home/a/c/d-OK/"+path2,frame2) cap2.release() cv2.destroyAllWindows() ### 試したこと cap2.release()とcv2.destroyAllWindows()の位置を変えてもエラーが変わらず出ました。 cap2.release()とcv2.destroyAllWindows()の位置が違うのでしょうか。 ループから抜けられていない事なのでしょうか。

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

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

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

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

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

yominet

2023/03/07 05:42 編集

1: >can't open camera by index とあるので、2回目はカメラが開けていないのではないでしょうか? 2: >1度違うプログラムを起動させ終了 これをしないで、2回目を動かした場合はどうなりますか? 3: 「違うプログラム」とはどういう内容ですか?
bend

2023/03/07 08:07

コメント有難うございます。 1: 2回目はカメラが開けていません。 2: 同じエラーが発生しました。 3: 違うプログラムとは、写真をリサイズするプログラムなどにあたります。   「別のシートで作成しているプログラムを起動させ作業が終了。⇒もう1度カメラで撮影をしたくカメラを撮影するプログラムシートでプログラム起動させるとエラー、になります。
TakaiY

2023/03/07 09:07

satuei2.pyをjupyter notebookから実行していますが、通常のコマンドプロンプトから実行するとどのようになりますか? jupyter notebookでpythonスクリプトをrunすると、そこで作成されたデータなどが取り込まれるので、通常の動作と異なる動きをします。
bend

2023/03/07 09:32

TakaiYさん、いつも有難うございます。 cv2.imshow('framr2side',frame2) の際、shell部に Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome.Use QT_QPA_PLATFORM=wayland to run on Wayland anywasy. と表示され、カメラ画像が写るウィンドウが出てきたのち、ウィンドウ部に「"不明なプログラム"の応答がありません」となります。
TakaiY

2023/03/07 10:07

プログラムはどんな環境で動かしていますか?
bend

2023/03/07 10:27

どんな環境と言いますと。
yominet

2023/03/07 11:17 編集

一回目撮影後に、カメラがきちんと切断できないのではないかと考えます。 追加確認 1. 一回目のときに、どのように終了させていますか?またエラーなどはでていませんか? 2. 「一回目は成功し、二回目は失敗する」という状況を確認できたということは 「一回目の成功」に戻す方法があると推測しまますが、もしそうであればどのように復活させていますか? (例えばカメラを抜き差しするとか、パソコン再起動するなど) 3. 二回起動させるのではなく、一回の処理内でカメラ接続・切断を二回行ったらどうなりますか? 例: cap2=cv2.VideoCapture(0) print(cap2.isOpened()) #ここはTureのはず cap2.release() cap2=cv2.VideoCapture(0) print(cap2.isOpened()) #どうなる? cap2.release() など(すいません、上記のは実際に動作させたソースじゃなく、イメージで書いたものです) memo: カメラが開けていない時点で、それ以降のどこでエラーが出ようが関係ないと考えます。 実際に使う場合は cap2=cv2.VideoCapture(0)のあとに、cap.isOpened()でカメラが開けたかどうか確認し、 開けなかった場合は後段の処理をしないようにしましょう。
yominet

2023/03/07 11:28

>どんな環境と言いますと。 OS,pythonの開発環境など もし、わからないであれば、画面のスクリーンショットを上げるというのもあり。 #ただし、個人・組織情報は注意。
TakaiY

2023/03/07 12:28

yominetさんの指摘にあるように、1回目で使ったリソースを解放していないのが原因と思いますが、それは、スクリプトを jupyter notebookから起動しているためだと思います。 で、コマンドプロンプトから起動すると、 wayland関連のエラーが出るとのことだったので、windowsで直接起動したのではないなということで、環境を聞きました。 Linuxですか? Windows ですか? Linuxとして、OSのディストリビューションとバージョンはは何ですか? Windowsとして、WSLだったりしますか?
jbpb0

2023/03/07 23:59

1回目をターミナルで実行しても、 > カメラ画像が写るウィンドウが出てきたのち、ウィンドウ部に「"不明なプログラム"の応答がありません」 となるのでしょうか?
bend

2023/03/08 00:03

yominetさん 1:1回目は"q"を押して終了しています。エラーは何も出ません。 2:復活させる方法は、ラズパイを再起動させてプログラムを起動させています。 3:TureとTureになりました。 TakaiYさん ラズパイ4のThonnyを使用しています。回答になっていますでしょうか。
bend

2023/03/08 00:08

jbpb0さん 1回目だとなりません。詳しく説明させて頂くと、 1-1.1回目プログラム起動させる。写真を撮らず"q"を押す。プログラム終了。  ↓ 1-2.2回目プログラム起動させる。エラー出ず。写真を撮らず"q"を押す。プログラム終了。  (以後、3回目も同様) 2-1.1回目プログラム起動させる。"s"を押し撮影。"q"を押してプログラム終了。  ↓ 2-2.2回目プログラム起動させると、[ WARN:0@0.024] global cap_v4l.cpp:982 open VIDEOIO(V4L2:/dev/video0): can't open camera by index [ERROR:0@0.033] global obsensor_uvc_stream_channel.cpp:156 getStreamChannelGroup Camera index out of range Traceback (most recent call last): File "/home/a/b/satuei2.py", line 10, in <module> cv2.imshow('framr2side',frame2) cv2.error: OpenCV(4.7.0) /io/opencv/modules/highgui/src/window.cpp:971: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'``` のエラーが出る時と、 カメラ画像が写るウィンドウが出てきたのち、ウィンドウ部に「"不明なプログラム"の応答がありません」のエラーが出る時があります。 説明が分かりづらく申し訳ありません。
jbpb0

2023/03/08 00:47 編集

エラーが起きるのは、「2回目」ではなくて、撮影(正確には画像ファイルへの保存)をした次の実行、でしょうか? (何回目かは関係無い) 撮影の後に、 > 1度違うプログラムを起動させ をしなくても、次のpythonコードの実行はエラーになるのでしょうか? Thonnyを全く使わず、pythonコードを毎回ラズパイのターミナルで実行させた場合でも、撮影の次の実行はエラーになるのでしょうか?
TakaiY

2023/03/08 01:25 編集

このコメントの流れでの「実行」というのは、 Thonnyを使って Runボタン を押して実行しているということだと思いますが、合っていますか? であれば、切り分けのために、Thonny上ではなく、ターミナルから python3 satuei2.py のように実行してみてください。 また、そのときに、前のコメントにあった wayland関連のエラーが出るのであれば、以下のサイトを参考に waylandが有効になっているかどうか確認して、有効であれば無効にして試していただけますか。 https://raspida.com/experimental-wayland pythonの実行はターミナルで実行するのが基本だと思っています。 特に問題が発生している場合は。
yominet

2023/03/09 01:44

1: ls /dev/video* で、カメラデバイスの状態が確認できるみたいです。 これで、一回目の作業の前後でカメラの状態を確認してみてください。 2: 症状が出た際、VideoCapture()に指定する番号を変えてみたらどうなりますか? #1の結果に0以外のデバイスファイルが認識されたらその番号を入れてみるなど
退会済みユーザー

退会済みユーザー

2023/07/22 04:30

releaseの後にtime.sleep(1)をしてからcap.release()をするとどうでしょうか? 非力なPCほどこういうしょうもないsleepで問題が解決できた気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問