※ 更新'24/9/13
※ 「HDMI切替機」の型番の誤り修正。GH-HSPG2-BKではなくGH-HSPA2-BKでした。'24/9/9
※ はてなブログから引っ越し: '24/8/15
しょくぶつ(^^) です。
前回( 第 0 回 )では次回予告として
「スプラトゥーン3のプレイ映像を機械学習で分析。対戦相手のスペシャルを声でお知らせ。」
と書きました。
しかし1回では大変なので、この第 1 回では「Python で(静止画)ビデオキャプチャー」だけやります。
それでもPowershellで最低7回コマンド入力が必要です。 頑張りましょう !
なお、「もうpythonでopencvを使ってキャプチャーできているよ」という方も「仮想環境の構築」と「ライブラリのインストール」だけは目を通してください。
1. 必要な機器
「★」がついているのは前回『1万円以下、もっと安く、ノートPCにNintendo Switch画面を映したい』から追加されたものです。
・Windows10以降のPC
・HDMIキャプチャー機器
動作確認済み エレコムのAD-HDMICAPBK
・HDMIケーブル, 1本
・Nintendo Switch本体
・ドック
★HDMIケーブル,追加で2本
★windowsPC用とは別に、HDMIのディスプレイかTV
★HDMI分配器(HDMIスプリッターとも言います。)
注意! 「HDMI切替機」ではありません。
私はグリーンハウスのGH-HSPA2-BKを使っています。(現在はGH-HSPG2-BKという後継品があり、2024年9月現在だと1,900円くらいでヨドバシで買えます。)
図にするとこんな感じです。
ただし、上記のもののうちHDMIキャプチャー機器にパススルー機能があれば、無くてもよさそうです (私は未検証) 。 下記のように接続すればOKなはずです。
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
- Tensorflow 2.8だと上記のようにprotobufのダウングレードという一工夫が必要。
Tensorflow 2.16だと不要です。
(参考) もしうまくいかないときは。
タイプミス (たとえばopencv-python ではなく opencv にした ) などでうまくいかなくなります。そのときは、思い切って仮想環境を作り直しましょう。
・仮想環境を終了
conda deactivate
・仮想環境を削除
conda remove -n py310-cnn --all
・上記 4. 仮想環境の構築 の(4)からやり直し。
6. pythonでキャプチャー動作確認
いよいよpython でキャプチャーを実行します !!
(1) spyderを起動してください。
Powershell の中で “spyder” と入力
( スタート → Miniconda3 → spyder 、でも起動できますが失敗することあり。)
としてspyderをクリックすると起動。
初めだとすごく驚くのですが、遅いときは起動に1~2分掛かります。
(2) New file(ctrl+N)してください。
(3) 下記のコードを貼り付けてください。
下記のサイトのコードを参考にして画像をspyderの中に表示する等の改造をしたものです。https://miseruit.com/2022/09/17/post-3360/#google_vignette
# -*- 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”をクリックしてください。
次のような画面は出たでしょうか?
もし接続したカメラデバイスがHDMIキャプチャー機器だけならば、コードの12行目の
cap_dev_no = 0
はこのままで、カラーバー、もしくは、キャプチャーした画面が表示されます。
もしカメラデバイスが複数あるならば、
cap_dev_no = 1
cap_dev_no = 2
…
と数字を増やしてみてください。
止めるときはctrl + c などを入力してください。
そのほか、spyderの使い方は次のURLが詳しいです。
日本語化の方法も載っています。
本題の
「スプラトゥーン3のプレイ映像を機械学習で分析。対戦相手のスペシャルを声でお知らせ。」の実行にはもう少し準備がいるので、今回はここまでです。
おつかれさまでした ! !