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

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

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

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

Python

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

Q&A

解決済

1回答

642閲覧

OpencvをPythonで実行時に発生したWarningをファイルに出力させたい。

hogi

総合スコア1

OpenCV

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

Python

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

0グッド

0クリップ

投稿2024/02/29 03:48

実現したいこと

pythonの実行時に発生したError/Warningメッセージをファイルに出力する。

発生している問題・分からないこと

PythonでOpencvを用いて動画の読み込みの際に、warning メッセージが発生するのですが、このwarningメッセージを自動でファイルに出力しておきたいのですが、方法がわからないです。
具体的にはソースコード上のcapture.read()で以下のメッセージがコンソールに出ますが、これを記録したいです。*エラー発生自体は動画のせいだと思われるので、今回の質問には関係ないです。
[h264 @ 0000017cfe172300] corrupted macroblock 113 67 (total_coeff=-1)
[h264 @ 0000017cfe172300] error while decoding MB 113 67
[h264 @ 0000017c8958cfc0] cbp too large (3199971767) at 86 67
[h264 @ 0000017c8958cfc0] error while decoding MB 86 67
[h264 @ 0000017cfe1c1f40] negative number of zero coeffs at 104 66
[h264 @ 0000017cfe1c1f40] error while decoding MB 104 66

該当のソースコード

import cv2 import sys import re import time import math import glob import os import shutil import numpy as np video_filename=sys.argv[1] curdir=os.getcwd() input_file=video_filename capture=cv2.VideoCapture(input_file) frame_count = capture.get(cv2.CAP_PROP_FRAME_COUNT) frame_rate = capture.get(cv2.CAP_PROP_FPS ) #1フレームの画像の読み込み(グレー化) while True: ret,frame=capture.read() count_frame1 = capture.get(cv2.CAP_PROP_POS_FRAMES) if frame_count==count_frame1: break # 画像が読み込めなかったとき、無限ループを抜ける

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Pythonのwarning機能やlogging機能等を調べたのですが、出力がうまくいっていません。
importしているopencvのプログラムまでは確認できていないです。

補足

特になし

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

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

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

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

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

TakaiY

2024/02/29 05:55 編集

プログラムはどのように実行していますか?
hogi

2024/02/29 08:30 編集

Command Prompt上から python test.py xxx.mp4(動画ファイル) というように実行しています。 すいません、書き忘れましたが、Windows10です。
guest

回答1

0

ベストアンサー

思いついた方法を2つ書いておきます。

1 powershellのリダイレクトを使う
>>> などを指定することで、コマンドの出力をファイルに保存することができます。 Warningが標準エラー出力に出ているようであれば、 2> などを使えばいいでしょう。 両方欲しければ、 2>&1 とします。

powershell

1python test.py xxx.mp4 2>&1 > log.txt

こうすると画面には何も出力されませんが、画面に出したいのであれば、Tee-Objectを挟んでやればOKです。

powershell

1python test.py xxx.mp4 2>&1 | Tee-Object log.txt

2 pythonの中で標準/エラー出力をファイルにしてしまう。
スクリプトの最初の方でファイルに変更してしまえばいいでしょう。
ただし、この方法だと画面に出す方法はなさそうです。

python

1import sys 2 3# 戻すためにとっておく 4stderr_org = sys.stderr 5#変更する 以降は標準エラー出力はファイルに入ります。 6sys.stderr = open("log.txt", 'w') 7 8# <処理本体> 9 10# 必要であれば、元に戻します。 11sys.stderr = stderr_org

投稿2024/02/29 09:01

編集2024/02/29 09:35
TakaiY

総合スコア14286

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

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

hogi

2024/02/29 09:22

回答ありがとうございます。 試したところ問題が解決しました! Power Shellの方で解決しました。Warningは標準エラー出力に入っていないからか、pythonに組み込む方ではうまくいきませんでした。ただ、目的は達成できました。ありがとうございます。 ベストアンサーに選ばせていただきました。
TakaiY

2024/02/29 09:37

> Warningは標準エラー出力に入っていないからか、pythonに組み込む方ではうまくいきませんでした。 であれば、 stderr ではなく、 stdout をファイルにする必要がありますが、何も表示されなくなるので使いにくそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問