しょくぶつ(^^) です。
前回( 第 0 回目 )は
「スプラトゥーン3のプレイ映像を機械学習で分析。対戦相手のスペシャルを声でお知らせ。」
と書きました。 しかし1回では大変なので、この第 1 回では「python でビデオキャプチャー」だけやります。 それでもPowershellで最低7回コマンド入力が必要です。 頑張りましょう !
なお、「もうpythonでopencvを使ってキャプチャーできているよ」という方も「仮想環境の構築」と「ライブラリのインストール」だけは目を通してください。
1. 必要な機器
「★」がついているのは前回『1万円以下、もっと安く、ノートPCにNintendo Switch画面を映したい』から追加されたものです。
・Windows10以降のPC
・HDMIキャプチャー機器
動作確認済み エレコムのAD-HDMICAPBK
・HDMIケーブル, 1本
・ドック
★HDMIケーブル,追加で2本
★windowsPC用とは別に、HDMIのディスプレイかTV
注意! 「HDMI切替機」ではありません。
私はグリーンハウスのGH-HSPG2-BKを使いました。2023年9月現在だと2,100円くらいでヨドバシで買えます。
図にするとこんな感じです。
ただし、上記のもののうちHDMIキャプチャー機器にパススルー機能があれば、無くてもよさそうです (私は未検証) 。
2. HDMIキャプチャー機器の動作確認
前回の記事と同じように画面が出るか確認しましょう。 “カメラ” を起動して、キャプチャー機器に接続した映像機器の画面が表示されたでしょうか?
3. python実行環境を整えます。
本サイトでは実行環境としては、
miniconda の下で Spyder を使用。
とします。既にこれができている前提としたいのですがやはり不親切なので、簡単に書きますね。
- minicondaのインストール まずminicondaから整えましょう。これは簡単にできます。たとえば下記URL通りに行って下さい。
Miniconda3をWindows 10にインストール - Qiita
- spyderについて これは後からインストールします。
4. 仮想環境の構築
面倒だし時間もかかりますが必ず作りましょう。一番大きな理由は次の「ライブラリのインストール」でミスると後戻りが困難だからです。
次のように仮想環境を作ってください。
(1) miniconda専用のPowershellを開く
スタート → Miniconda3 (64bit) → Anaconda Powershell Prompt (miniconda3)
とします。miniconda専用のPowershellが開きます。
(2) 現在の仮想環境の確認
次のコマンドを実行しましょう。
conda info -e
表示に数秒かかります。初めてpython環境を作成したならば base しか無いはずです。
(3) proxyの設定 ※ 一般の環境では不要です
社内などproxy環境が設定な場合は次の設定をしましょう。
( なぜかコピペすると “ “ が消えてエラーになることがあるので注意 )
$env:HTTPS_PROXY=”http://(proxyのアドレス: ポート番号)”
(4) condaやpipのアップデート (環境構築直後でも必要)
次のコマンドを実行してください。
conda update --all
pip install --upgrade pip setuptools
※ 途中で Proceed ([y]/n)? と聞かれたらEnterを入力です。
(5) 仮想環境の作成
conda create -n 仮想環境名 python=バージョン
と入力します。ここでは仮想環境名は「py310-cnn」としましょう。変更OKです。pythonのバージョンは「3.10」とします。詳しくない人は変更NGです。
次のように入力してください。
conda create -n py310-cnn python=3.10
メッセージを多数表示しながら仮想環境が構築されていきます。速くて10秒、遅いと2分くらいです。
(6) 仮想環境の起動しましょう
conda activate 仮想環境名
と入力します。具体的には次のように入力します。
conda activate py310-cnn
5. ライブラリのインストール
作成した仮想環境に、今後使いそうなものも含めて一気に「ライブラリ」を9個、インストールします。仮想環境構築までで経験したとおり、入力するたびに数秒から数分かかります。ここでの作業も5分以上、長いと20分必要です。
(1) 次のライブラリをconda でインストール。
spyder, numpy, matplotlib, scikit-learn, pandas
具体的には、次のように入力します。
conda install -c conda-forge spyder numpy matplotlib scikit-learn pandas
(2) 次のライブラリを pip でインストール。
pyttsx3, opencv-python, tensorflow
具体的には、次のように入力します。
pip install pyttsx3 opencv-python tensorflow==2.8 protobuf==3.20.1
※protobufをダウングレードしています。こうしないとtensorflowが機能しません。
(参考) もしうまくいかないときは。
タイプミス (たとえばopencv-python ではなく opencv にした ) などでうまくいかなくなります。そのときは、思い切って仮想環境を作り直しましょう。
・仮想環境を終了
conda deactivate
・仮想環境を削除
conda remove -n py310-cnn --all
・上記 4の(4)からやり直し。
6. pythonでキャプチャー動作確認
いよいよpython でキャプチャーを実行します !!
(1) spyderを起動してください。
スタート → Miniconda3 ※「Miniconda3 (64bit)」ではありません。→ spyder
としてspyderをクリックすると起動。 初めだとすごく驚くのですが、遅いときは起動に1~2分掛かります。
(2) New file(ctrl+N)してください。
(3) 下記のコードを貼り付けてください。
下記のサイトのコードを参考にして画像をspyderの中に表示する等の改造をしたものです。
Pythonライブラリ | OpenCVでカメラから画像/動画を取得する │ 魅せるIT編集部
# -*- coding: utf-8 -*- """ Created on Thu Sep 31 21:24:02 2023 @author: plant-smile """ import cv2 import matplotlib.pyplot as plt import datetime #def main(): #if __name__ == '__main__': # # # # # # # # cap_dev_no = 0 # # # # # # # # def save_capture(): # 1)カメラIDを設定 camera = cv2.VideoCapture(cap_dev_no,cv2.CAP_DSHOW) # 2)設定したカメラから画像を取得 ret, img = camera.read() # 3)画像を表示する img1= cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img1) # 4)カメラのメモリを解放する camera.release() plt.show(block=False) # 5) このコードを保存したフォルダの下に"cap_screen"というフォルダを作れば画像をjpegで保存します。 now = datetime.datetime.now() f_name = './cap_screen/cap_' + now.strftime('%Y%m%d_%H%M%S') cv2.imwrite(f_name + ".jpg", img) if __name__ == '__main__': while True: input("Enterキーを押したら実行") save_capture()
(4) Run file(F5)してください。
画面の指示通りEnterを押してください。
画面の右中央の”Plot”をクリックしてください。
次のような画面は出たでしょうか?
cap_dev_no = 0
はこのままで、カラーバー、もしくは、キャプチャーした画面が表示されます。
もしカメラデバイスが複数あるならば、
cap_dev_no = 1
cap_dev_no = 2
…
と数字を増やしてみてください。
止めるときはctrl + c などを入力してください。 そのほか、spyderの使い方は次のURLが詳しいです。 日本語化の方法も載っています。
本題の
「スプラトゥーン3のプレイ映像を機械学習で分析。対戦相手のスペシャルを声でお知らせ。」
の実行にはもう少し準備がいるので、今回はここまでです。
おつかれさまでした ! !