「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



こないだAliexから届いた、USB接続SSD。あれにLinux Mintを
入れてみたんだけど、サクサク動くことはよくわかった。
普通にLinux Mintが起動できるんだけど、内蔵SSDと同じくらい
サクサク動く。ほほう。

ただ、なんかノートPCのBIOSのせいなのか、いつものように
USBコネクタにSSD繋いだ時にはUSB側から、繋いでない時には
内蔵SSDから起動、っていう感じに上手いこといかない。

なんかgrub画面が出てきちゃったり、起動ドライブを認識
できなかったりとかで、いちいちBIOSのブートシーケンスを
直さないといけなかったりする。なんでだろう?地味に不便。

メインのデスクトップPC側でやったら普通に動くのかな?
動くならいいんだけど、今ちょっとそういう実験やって
いられない状況下にあったりするので、まぁそれはまた今度。

なんか、ノートPCのブートシーケンス周りでは、こないだも
トラブってるから、あまりその辺の完成度を信頼できてない
んだよな。





こないだから、やってみよう、やってみようと思ってたこと
をちょっと手を動かしてみた。

PythonとOpenCV使って、動画ファイルから1コマ1コマ取り
出して、ゴニョゴニョ処理するプログラム書きたいと思って
いたんだけど、そもそもOpenCVで動画ファイルをいじるための
基本のキが解ってないので、その辺からまずは調べもの。



(1)Windows版ThonnyにOpenCVをpipでインストール

Linuxなら、サクッとpipコマンドでインストールできるん
だけど、Windows版のThonnyでpip使うのどうすればいいの?
と思って、調べてみた。

https://qiita.com/izuki_y/items/93a86c3de203acb82317

どうやら、メニューバーのToolsからOpen system shellを
開いてやれば、Thonnyの環境に合わせたディレクトリで
cmd.exeを開いてくれるので、そのままpipコマンドで
pip install opencv-python
と打てばいいみたい。なるほど。



(2)動画ファイルにアタッチしてもろもろの情報を取得

https://qiita.com/suzuki-navi/items/ffe449c95fb6e1faf891

ここのページに、ファイルを開いてからどうやったら各種の
属性値を取り出せるのか、プログラムが解説されてるので、
とりあえずそのままやってみる。

出来た。mpgファイルでも、aviファイルでもいけるみたい。
動画ファイルの縦横サイズ、再生時間、全フレーム数、
コーデックの種類なんかが取得できる。



(3)1フレーム抜き出して画像として書きだす

上記の参考ページにある続きの解説見ながら、特定フレームの
画像をイメージとして引っ張り出してきて、それをちょこっと
編集して、画像ファイルとして書き出してみる。

材料は参考ページに一通り載ってるので、それらを元にして
プログラムを書いていったんだけど、さらに画像をいじって
から出力できるように、空のイメージデータをメモリ上に
作る必要があるかなと。OpenCVで扱うこの手のイメージって、
numpy形式のデータらしいので、numpy形式のイメージの生成
周りを調べてみる。

https://tat-pytone.hatenablog.com/entry/2019/03/03/102503

ここにわかりやすく書かれてる。これを参考にして、
切り出したフレームと同じサイズの真っ黒(初期状態)
画像イメージを作っておいて、切り出したフレームの色を
反転させつつ、上下左右も反転させたイメージを書き込んで、
その画像をファイルに吐き出してみる。こんな感じ。

(元フレーム)



(出力画像)



以前実験で使った(というか作った)動画を材料にして、
50フレーム目を切り出して編集。

正確に言うと、プログラムのロジック的には動画の
50フレーム目を切り出して使うっていう処理になっている
んだけど、50フレーム目の画像を取り出してブログに貼る
のが面倒だったので、上記画像は50フレーム目付近のハード
コピーで代用。
(なので、これを処理しても完全に同一の画像にはならない
はず。サイズも異なってたりする)

出力画像のとおり、色と上下左右が反転しているのがわかる。


で、これがプログラム。
(例によって、このブログの制約のせいで、1行おきに間延び
しちゃうので、適当に編集してから眺めて頂ければと)
import cv2
import numpy as np

def buildVideoCaptures(videoPath, outputPath):
    cap = cv2.VideoCapture(videoPath)
    if not cap.isOpened(): return
    
    # フレーム番号を設定
    n = 50
    cap.set(cv2.CAP_PROP_POS_FRAMES, n)
    
    # 画像サイズを拾う
    x_size = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    y_size = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print(f"captured frame : x={x_size}, y={y_size}, frame number={n}")
    
    _, img = cap.read()
     # imgは、読み込んだフレームのNumpy配列でのピクセル情報(BGR)
    # imgのshapeは (高さ, 横幅, 3)
    print(f"image.shape = {img.shape}")
    
    # numpyの黒いRGB画像を生成(3はRGB、np.uint8は0~255の8ビットunsigned)
    img2=np.zeros((y_size, x_size, 3), np.uint8)
    print(f"img2 : {img2.shape}")

    # imgをピクセル単位で眺めて、反転してみる    
    for y in range(y_size):
        for x in range(x_size):
            b, g, r = img[y][x]
            #print(f"x{x} y{y} r{r},g{g},b{b}")
            nx = x_size - x - 1
            ny = y_size - y - 1
            img2[ny][nx][0] = 255 - b
            img2[ny][nx][1] = 255 - g
            img2[ny][nx][2] = 255 - r

    # 画像ファイルで書きだす
    # 描きだすときの画像フォーマットはファイル名から自動で決定
    cv2.imwrite(outputPath, img2)
    cap.release()

iVideo = ".\MVI_1925_clip1.avi"
oPicture = ".\MVI_1925_clip1.jpg"

buildVideoCaptures(iVideo, oPicture)

参考にさせていただいたプログラムをちょこっといじった
だけなので、それほど付け加えたことなないんだけど、まぁ
やりたいことの「材料」はおよそ揃った感じ。
これらを使って、ゴニョゴニョと処理するプログラムを
書いていこうかなと。


Pythonで画像処理っていうと、これまでPILばかり使ってた
ので、OpenCVではどういう風にゴニョゴニョすればいいん
だろうなと思ってたんだけど、まぁ、ライブラリを利用
すれば、そんなに大変なことはなかった。ありがたい。
先人に感謝。

あとは、フレーム間の比較をやりたいんだけど、それって
PILとnumpy形式、どっちが処理速いんだろうな?




https://www.youtube.com/watch?v=aRLkn0QDbbE

クロアリさん動画。

  \宇宙のお姉さ~ん/

脚の震えを見れば想像できるけど、やっぱバンジーなんて
怖いよな。オイラは出来る気がしない。




https://minkara.carview.co.jp/userid/2398027/car/1904772/3341341/note.aspx

ほうほう、ABSカットスイッチ。

まぁ、普通ならヒューズ引っこ抜いて完了って感じになる
ものだと思うんだけど、こういう風にスイッチを付けて
オンオフできるようにしちゃうの、面白いな。




https://www.youtube.com/watch?v=QwDnzaeuNzw

コーラのハチミツの続き。3種類のジュースではちみつ。
面白い。




https://www.youtube.com/watch?v=vXpWsQptlRA

また、小岩の菖蒲園の季節になったのか。ニワトリさん動画
を見るようになってから、かれこれ1年ほど経つのか。




https://www.youtube.com/watch?v=NvsNMDgaTco

さやっち1時間。
もう、しょっぱなから面白い。
(飛ばし飛ばし見たけど、全体的に面白い)

https://www.youtube.com/watch?v=NvsNMDgaTco&t=1748s

特にこれ。妖精なことがばれてしまった。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« EAGLE II mini CLI版のロジッ... »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。