TKGは暇を持て余す

高時給バイトのフリーターしながらゆるゆると生きている頑張らない系趣味日記

MacとPoke-Controllerとキャプチャデバイス

Macポケコン動かそうと色々やっていて前回やっと起動するところまでこぎつけた訳ですが、僕の使っているelgatoのHD60SがMacと相性が悪くてなんやかんやしても結局画像が表示できない問題に直面していました。そこで次に

 

Basicoloの↑コレを買ってみました。HDMIパススルーもついて4kまで対応(要りませんが)で、一流ブランドのものよりはだいぶお安いやつです。ただなんとこれもうまくいきませんでした。Macでデバイスは認識してOBSなら映るんですが何故かポケコンでは動作せず…多分色々すれば使えると思うんですが、色々する前に次の子が届いたので結局使えずじまいでWindowsパソコン用になっています。Windowsでは問題なく使えますし遅延もそこまで目立ちません。

 

結局最後におちついたのが実績のあるコレ、1000円キャプボ

 

やはり信頼と実績のある商品。問題なく使用できました。

ちなみにこちらの商品、おそらく中国のOEM製品を卸してるメーカーのものだと思うんですがAliExpressで似たようなのが500円台とかでも売ってます。(最安で300円台ってのもありましたが消えてました)

この手の似た形のがアマゾンでやたら売られてるやつって大体が同じ中国の製造会社からデザインとブランド名をちょっと変えてもらって仕入れて利益乗せて転売してるだけですからね。

このキャプチャデバイスも元々の仕入れ値は100円とか200円とかなんじゃ無いでしょうか……話がそれましたがMacポケコンで使えるキャプチャデバイス探してる方は無駄にいいやつ買わない方がいいですよ安いのでいいですよって話でした。

ポケモン対戦アシストツール メモ

欲しい機能

・型判別 + ダメージ計算アシスト →一番欲しい

・素早さ比較調整ツールみたいなのを一目で分かるような情報表示

・イベントログ

・最終的にはPC上で対戦シミュレーターを再現するのが目標→これができれば対戦AIが作れるけど途方も無いので一旦保留

 

型判別・ダメ計アシスト開発メモ 必要な処理

①ターン開始状態のHP、状態異常の取得

②(自分の選んだ技の認識or自分で選択)

OCRを使って対戦ログの取得

 →最大の難所 今作はメッセージボックス一応あるけど薄くて背景がぐちゃぐちゃなのでOCRが難しい + バグで変な画面が表示されることがある(これマジクソ)

 技術的に難しいのでまずはチェックボックス形式で自分でアクションを選択する形で作ってみたい

④ターンの終了

⑤次のターンの開始状態の認識

⑥前のターンとのHPの差から定数ダメなどを除いて技によるダメージを求める

⑦ダメージと予め入力しておいた自分のポケモンの情報から相手の型を型を計算する

 

前準備として自分の手持ちの情報を入力しておく機能が必要

他に準備として全ポケモンの選出画面アイコンが必要

 

プログラミング能力は赤ちゃんレベルだけどGoogle先生に助けてもらいながら少しずつ作ってみます

PokeControllerとMacとtkinter

普段WindowsでPokeControllerを使って居ますが出先に持っていくパソコンがMacbookPro(M1)のため、そっちでもPokeControllerの環境構築をしようとしたんですが、問題が発生してかなり時間を取られたので半分愚痴の日記です。

PokeControllerはGUIを表示するのにPythontkinterというライブラリを使用しているのですが、これがMacと相性が悪いようで起動はできるけれどマウスクリックをするとフリーズするという状態になりました。

対応としては教えてもらった情報とTwitterや自動化鯖の情報をもとに上の画像の範囲をコメントアウトすると動くようになるとの事だったので試して見ましたが、解決しませんでした。

紆余曲折あって4時間ほど格闘しましたが、結果としてMacに入っていたPythontkinterのバージョンを変更したところなんとか動くようになりました。ただし動作はかなり重かったです。参考までにPythonを3.7.10→3.8に、tkinterを8.6.12→8.6.10に変更しました。コレが正しいのかどうかは全くわかりません。結果論です。

 

今後制作するプログラムもtkinterの使用を想定していましたが、PokeControllerに限らず他の色々のテストプログラムもMac上のVSCではうまく動かない事が多々あり困ってます。wxPythonとかもkindle unlimitedで読める参考書で見てみましたが、解説してるサイトなんかがtkinterに比べるとはるかに少なくて勉強のハードルが高いなあって事で諦めて当分はtkinter勉強して行こうと思います。かわりのGUI用ライブラリのおすすめがあれば教えて下さい。

ちなみにですが、その後キャプチャデバイスのelegato HD60SがMacで使えないという問題にも遭遇しました。elegato純正アプリでは問題なく使用できるのですが、OBSやopenCVでの画像の読み込みが出来ない状態でした。調べるとどうやらelegatoのデバイスのハードウェアエンコードMacと相性が悪いらしく、ソフトウェアエンコードに切り替えた上で出力解像度も変えると認識するらしいんですが、力尽きて未解決のままです。毎回切り替えるのも面倒くさいんで実績のある1000円キャプボをAmazonでポチりました。こちらも解決できたら備忘録としてまとめます(まとめるとは言っていない

 

結論:大人しくWindows使っとけ

 

2023/04/10追記:

最新版のPython + tkinterでは一部Windowsと表示の差異はありますが問題なくGUIが表示出来ることを確認できたので面倒くさいことをしなくてもよくなりました。神。

 

2023/04/18追記:

やっぱり一部条件下でCombobox(プルダウンメニュー)操作時にフリーズする減少を確認。完全では無い模様。

進捗

Pythonの勉強の進捗

 

OCRのプログラム作成→一応出来たけど難しかったです。環境にもよるので。

②pokeconのテンプレオートマッチングを使った自動化→超簡単

③対戦補助ツールの作成

→キャプチャ画面をtkinterで作ったcanvas上に表示するところまでは出来た。openCVの動画表示関数を直接は使えないのでひと手間必要。

 

次の課題

・手持ち6体の表示

・テンプレートマッチングを使って相手の手持ちの6体を認識

・HPバーの画像からHP残量の推定

 

とりあえずこの3つをやってみたい

GUIを作りたい

30半ばにもなってポケモン対戦AIを作りたいなんで大言壮語恥ずかしくないのでしょうか。

 

ちょっと調べたら剣盾の頃にすでに被ダメから相手の型を推測する対戦補助プログラムを作っていた人が居てすごいなと思ったんですがブログの更新止まってて残念でした。

 

似たようなのをSVでも作りたいなと思うんですが全部CUIでやるのは流石に見にくいしダサいので次の目標はシンプルでいいからGUIを作れるようになることです。

 

出来るかどうかはわかりませんが今月中に頑張ります。

備忘録

ポケモン対戦における現在の盤面を表す特徴量:

 

①お互いの手持ち3匹のHP

②お互いのポケモンのタイプ

③実数値

④持ち物

⑤技のPP

⑥場の状況(天候、フィールド、設置技、ルーム系、追い風、重力)

⑦特性

 

これくらいと思いますが組み合わせ数エグいことになりますね

1秒に100万通り読めるとして入力時間考慮して持ち時間のうち40秒だと4000万手

ポケモンには乱数と命中率があるから同じ技選択でも複数回(できれば30回くらい)の試行が必要だとするとまあ読めて3-4手先とかそれくらいになるんでしょうか

最適なプログラムを書けたとしてですけどね…

終盤はまあまあ強そうだけど序盤は厳しそう

起点作りとか釣り交換とかはかなり評価値作るのが難しそう

 

まあ一番面倒なのはシミュレーション用の対戦プログラム作るところなんですけどね

日記③

2023年になりました

 

なにか新しいことにチャレンジしてみようと思い機械学習の勉強を始めました

 

とりあえず画像認識のプログラムを作るところが最初の目標です

 

ゆくゆくはポケモン対戦AIを作るのが野望です

 

AIがランクマ最終1位とか面白そうじゃないですか(絶対燃える)

 

そこまでイカなくてもこれからの時代知識があって損はしないのでやれるペースで勉強してみたいと思います