ここんところちょっとずつ弄ってるPythonプログラム。
OpenCV使って、ビデオファイル読み込んでフレーム単位で
変化があるかどうか(フリーズしてるかどうか)をチェック
するプログラムを書いてるんだけど、なかなか思うような
パフォーマンスが出せなくて困ってるとこ。
VGAサイズとか、QVGAサイズとかなら、それなりに高速に
処理できるんだけど、FHDサイズとかになっちゃうと、
映像の実時間の10倍とか20倍とかの処理時間が掛かっちゃって、
全然現実的じゃない。
なので、処理時間が遅い原因と、どうしたら高速化できるか
について、実験しながらプログラムをいじってたとこ。
まず、一つの仮定としては、画面の左上から順々にピクセル
単位で走査してるんだけど、画面四隅は比較的変化が少ない
場合が多いので、真ん中から広がるように走査していく方が
良いんじゃないかな?と。異なるピクセルを見つけた時点で
次のフレームに移れるので。
で、ロジックをいじって、操作する順番を変化させてみた。
…結果、あまりパフォーマンスが上がらない。ロジック的
には、それ以上劇的に速くできそうな方法は思いつかない
のと、多分そもそも、ロジック以外の部分で処理時間を
食っているっぽい。つまり、OpenCVが映像ファイルから
フレームを取り出すときに、numpy形式に変換しているあたり
が遅いんじゃないかなぁ?と。
骨董品の第4世代Core i3使って画像処理するのが間違いと
いえばそうなんだけど、うちには桁違いに速いマシンが
他にあるわけじゃないし、まぁ、仕方ない。
(でも、驚いたことに、自分で書いた処理自体はシングル
スレッド的な単純なものなんだけど、ライブラリ内部では
マルチスレッド対応しているみたいで、CPUメータ見ると
4コア…正確には2コア4スレッド…全部に負荷が分散されて
いることが判った。偉いね。すっごいCPU使ったら、
ちゃんとガンガン処理が回るんだろうなぁ)
気を取り直して、全フレームチェックすることを放棄する
モードも取り付ける。具体的には、5フレーム単位で飛ばし
飛ばしチェックするとか。フリーズする場合は、だいたい
数秒とか止まるみたいなので、それを検知できることに
主眼を置こうと。あと、走査するラインも、全行じゃなくて
5行おきとかにしちゃっても、実質的にはあまり影響ないはず。
で、やってみた。走査するラインを間引く方法では、ほとんど
速度が上がらない。つまり、ロジック以前に、OpenCV側で
映像ファイルからフレームを切り出してnumpy形式にするって
時点で、かなり時間掛かっちゃってるってことが見えてくる。
で、フレーム間引きの方は、実際に間引いたフレームの割合
だけ速くなるって程の効果は無いけど、そこそこ期待に見合う
効果は得られた。よし。
あと、明らかにフリーズしてるフレームがあるのに、チェック
から漏れるものがあるので、その辺もなんとかしないといかん。
映像(というか、多分圧縮の具合)によっては、全ピクセル
が完全一致しているかどうかでチェックできるんだけど
(さすが、フレーム間でも圧縮を掛けている結果)、映像に
よっては微小なノイズを拾っているみたいで、それが異なる
映像とみなされてしまっているみたい。
なので、ある程度の許容範囲誤差を認めて、その範囲内なら
同一ピクセルであると判断するようなロジックに変更。
目下実験中。なんか思ったような効果になってない。なにか
numpy形式のピクセルデータの扱いを間違えているのか…。
なかなかうまくいかないなぁ。
まぁ、入力ファイルをファイルダイアログで拾えるように
したり、処理結果を描きだしているテキストボックスの中身
をファイルダイアログでファイル保存できるようにしたりと
いった、UI周りは少し進展したので、とりあえずロジック
の方に注力しよう。
https://www.youtube.com/watch?v=Z9ki00Z5SWg
>プログラミング学習の救世主?任天堂の“絶対に挫折
>させない”プログラミングゲームvs片渕アナ
飛ばし飛ばしみたんだけど、なんかこういうプログラミング
教育(?)環境って、なんかニンテンドーが作るとすごいな。
https://www.fnn.jp/articles/-/203960
送り付け商法。すぐに捨てても良くなるらしい。ほほう。
https://news.yahoo.co.jp/articles/9890937f0673f003c5d532a6b500b21da0ad9aa5
>米、日本の技能実習を問題視 国務省が人身売買報告書
どんどん問題として取り上げればいいと思う。中国の香港
やチベットの問題なんかと同列の問題として。
https://twitter.com/vgm_robot_GACHA/status/1409430859296382976
RB26DETTのガチャガチャ。これは欲しいな。
ちなみにオイラは32に思い入れがあるので、32のが欲しい。
https://twitter.com/lovyan03/status/1410397318923255808
>M5製ライブラリ、全般的に他所のライブラリをライセンス
>無視してモリモリ取り込んだうえでMITライセンスで公開
>しているので大変おっかない
おっかないな。
https://mainichi.jp/articles/20210630/k00/00m/040/237000c
1回の接種でいいと思ってるなら、本人が1回だけ接種して、
人ごみに出かけてみればいいんだよ。(黄金律テスト)
|
|
|
|
|
|