2020年3月31日火曜日

PythonでFirebaseを用いる際のサービスアカウント情報の設定

最近、ボチボチとGAEとかFirebaseとか、いわゆるGCP周りのサービスを触っているのですが、それらを利用するための認証系のところがいまいち理解できてなくて、急にプログラムが認証できなくなったりして、、、ということがあったのでメモ書きです。

エラーの例
以下のようなエラーがでた場合、認証系のところでトラブってることになります
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or
explicitly create credential and re-run the application.

サービスアカウントの設定方法
GCPの管理画面でサービスアカウントキーを作成してダウンロード(jsonファイル)しておきます。認証設定しないといけない箇所は
  • 環境変数の設定
  • CREDENTIALS情報の読み込み
の2つです。実は、前者の環境変数を設定しておけばコード内に認証情報を明示的に指定する必要はありません。環境変数の設定はシェルで設定するPythonかプログラムで明示的に設定するかのいずれかですが、認証ファイルの情報をコード内で明示的に書かないほうがいいので、シェルで環境変数を設定するのがベターです。Pythonの場合は下記の通りです。



2020年3月11日水曜日

Python:OpenCVで動画再生時の各フレームの絶対時間を取得する方法

OpenCVで再生している動画(mp4など)に対して、「○時○分○秒の動画を再生したい」という時の各フレームの絶対時間を利用したい場合、そのフレームの絶対時間がわかればいいんですが、どうやら記録されていないようです。そこで、次のアプローチが考えられます。

再生開始時からの経過時間は取得できる
cv2.CAP_PROP_POS_MSECを利用することで、再生中のフレームの経過時間(相対時間)を取得できます。つまり、動画の再生開始の絶対時間さえわかれば、この時間をプラスすることで再生時間がわかります。

再生開始時間を取得するには
動画ファイルの保存時間が1つの手がかりになりますが、それは動画が終了した時の時間になります。ただ、経過時間はわかるわけですから逆算すれば求めることができるでしょう。ただし、ファイルのタイムスタンプは秒が最小ですので、ミリ秒単位での誤差(最大999ミリ)が生じます。

録画時に細工をする
もし、動画録画のアプリケーションに細工ができるなら、録画開始時間を記録しておくとよいでしょう。録画アプリケーションをOpenCV等を利用して作成して、各フレームの時間を記録することもできると思います。どちらがスマートかは As you likeで。。。。