※ 更新 ’24/9月
この回自体には影響しませんが、次回「第2回 : キャプチャー画像を機械学習で判別、声でお知らせ」で使用するライブラリ ”Tensorflow” のインストール部分を新バージョン対応のため更新しました。
旧記事はこちら
’24/9月より前に本ブログを実行した方は「4. 仮想環境の構築」から再実行して下さい。
※ 修正 「HDMI切替機」の型番。GH-HSPG2-BKではなくGH-HSPA2-BKでした。'24/9/9
※ はてなブログから引っ越し: '24/8/15
しょくぶつ(^^) です。
前回( 第 0 回 )では次回予告として
「スプラトゥーン3のプレイ映像を機械学習で分析。対戦相手のスペシャルを声でお知らせ。」
と書きました。
しかし1回では大変なので、この第 1 回では「Python で(静止画)ビデオキャプチャー」だけやります。
それでもPowershellで最低7回コマンド入力が必要です。
頑張りましょう !
1. 必要な機器
「★」がついているのは前回『1万円以下、もっと安く、ノートPCにNintendo Switch画面を映したい』から追加されたものです。
- Windows10以降のPC
- HDMIキャプチャー機器
動作確認済み エレコムのAD-HDMICAPBK - HDMIケーブル, 1本
- Nintendo Switch本体
- ドック
- ★HDMIケーブル,追加で2本
- ★windowsPC用とは別に、ディスプレイかTV
- ★HDMI分配器(HDMIスプリッターとも言います。)
注意! 「HDMI切替機」ではありません。
私はグリーンハウスのGH-HSPA2-BKを使っています。
(現在はGH-HSPG2-BKという後継品あり。'24/9月現在だとヨドバシで1,900円くらい。)
図にするとこんな感じです。
なお、"HDMIキャプチャー機器" にパススルー機能があれば、"HDMI分配器" は無くてもよさそうです (私は未検証) 。
下記のように接続すればOKなはずです。
2. HDMIキャプチャー機器の動作確認
前回の記事と同じように画面が出るか確認しましょう。
“カメラ” を起動して、Nintendo Switchの画面は表示されたでしょうか?
3. Python実行環境を整えます。
Python実行環境はいろいろあるのですが、本ブログでは、
miniconda の下で Spyder を使用。
とします。
- minicondaのインストール
まずminicondaから整えましょう。これは簡単にできます。たとえば下記サイト様の通りに行って下さい。
Miniconda3をWindows 10にインストール - QiitaMiniconda3をWindows 10にインストールします。■環境Windows 10 x86-64■導入ソフトPython 3.8 Miniconda3 Windows 64-bit… - spyderについて
これは後からインストールします。
4. 仮想環境の構築
面倒だし時間もかかりますが『仮想環境』は必ず作りましょう。一番大きな理由は「5. ライブラリのインストール」でミスると後戻りが困難だからです。
- ご参考: 仮想環境とは
(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) channel(パッケージ の リポジトリ)の設定 ※初めてminicondaを使う人は飛ばしてOK
「リポジトリ」とは"ネット上にある保管場所のこと" だそうです。
(私なりの理解では、Pythonライブラリのダウンロード元のことです。)
ここではまず、Pythonライブラリのリポジトリが conda-forge に設定されていることを確認します。
conda config --show channels
次のように表示されているか確認してみてください。
%conda config --show channels
channels:
- conda-forge
上のような表示ならばOKです。
もし”conda-forge”が最上段にない場合は、次のコマンドを実行します。
conda config --add channels conda-forge
なお、”conda-forge” の他には”default”, ”intel”などもあります。
- --add channel : 指定したチャンネルを最優先にするオプション
(6) 仮想環境の作成
仮想環境作成には次のように入力してください。
conda create -n 仮想環境名 python=バージョン
ここでは仮想環境名は「py312-cnn」としましょう。
名前の変更はOKです。
Pythonのバージョンは「3.12」とします。
詳しくない人はバージョンの変更はNGです。
具体的には次のように入力します。
conda create -n py312-cnn python=3.12
メッセージを多数表示しながら仮想環境が構築されていきます。速くて10秒、遅いと2分くらいです。
(7) 仮想環境を起動しましょう
次のように入力します。
conda activate 仮想環境名
具体的には次のように入力します。
conda activate py312-cnn
5. ライブラリのインストール
作成した仮想環境に、今後使いそうなものも含めて一気に「ライブラリ」をインストールします。
仮想環境構築までで経験したとおり、入力するたびに数秒から数分かかります。
ここでの作業も5分以上、長いと20分必要です。
(1) 次のライブラリをconda でインストール。
spyder, matplotlib, scikit-learn, pandas
具体的には、次のように入力します。
conda install spyder matplotlib scikit-learn pandas
※ 詳しい方: 使わないならばspyderは無くてもOKです。
(2) 次のライブラリを pip でインストール。
pyttsx3, opencv-python, tensorflow
具体的には、次のように入力します。
pip install pyttsx3 tensorflow==2.16.1 opencv-python
( この際にnumpyが2.0から1.26へのダウングレードがあります。ここで時間ロスしないようなもっと良いインストール手順があるかも。)
(参考) もしうまくいかないときは。
タイプミス (たとえばopencv-python ではなく opencv にした ) などでうまくいかなくなります。そのときは、思い切って仮想環境を作り直しましょう。
- 仮想環境を終了
conda deactivate
- 仮想環境を削除
conda remove -n py312-cnn --all
- 上記 4の(4)からやり直し。
6. Pythonでキャプチャー動作確認
いよいよPython でキャプチャーを実行します !!
(1) spyderを起動してください。
Powershell の中で “spyder” と入力
( スタート → Miniconda3 → spyder 、でも起動できますが失敗することあり。)
初めだとすごく驚くのですが、遅いときは起動に1~2分掛かります。
(2) New file(Ctrl+N)してください。
(3) 下記のコードを貼り付けてください。
下記のサイトのコードを参考にして画像をspyderの中に表示する等の改造をしたものです。
https://miseruit.com/2022/09/17/post-3360/
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 31 21:24:02 2023
@author: plant-smile
"""
import cv2
import matplotlib.pyplot as plt
import datetime
# # # # # # # #
cap_dev_no = 1
# # # # # # # #
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の使い方は次のサイト様が詳しいです。
日本語化の方法も載っています。
Spyderの起動と設定
本題の
「スプラトゥーン3のプレイ映像を機械学習で分析。対戦相手のスペシャルを声でお知らせ。」
の実行にはもう少し準備がいるので、今回はここまでです。
おつかれさまでした ! !