LoginSignup
4
5

More than 1 year has passed since last update.

雀魂の画面から画像認識で対戦情報を持ってくる(Vol. 1)

Last updated at Posted at 2022-06-22

≪前の記事                          次の記事≫

前回までのあらすじ

  1. 雀魂の画面のスクリーンショットを持ってくる
  2. OpenCVのテンプレートマッチングでスクショから牌姿情報を持ってくる

という方針を決めたのはいいものの、いきなり1. でつまづく。
雀魂のスクショを取ってこれないのである。
参考にした記事だとスクショなんてスッと取ってきてるんだけど、node.jsになると途端に難しいらしい。

スクショ難民

さて、色々調べた時に巡回したページを挙げる。

C#での画面キャプチャの取得方法を徹底解説!
https://www.fenet.jp/dotnet/column/language/4633/

Pythonでスクリーンショットを取得して指定フォルダに保存する
URL長いので省略

特に二番目のやつ見てくださいよ奥さん。
Pythonならわずか数工程で画面のスクショが保存できるらしいですよ。

  1. pipでpillowをインストールする
  2. ImageGrabモジュールをインポートする
  3. ImageGrab.grab().save('screenshot.jpg')を実行

今までの苦労はなんだったんだー!?

ちなみにこんなサイトもありました。
https://www.redbubble.com/shop/node+js+pillows
image.png

node.jsのpillow(まくら)

なんつって

閑話休題

pythonとの連携

【Node.js入門】python-shellによるNode.jsとPythonのデータ連携方法まとめ
https://www.sejuku.net/blog/84736

こちらによると、python-shellというモジュールを使用すると、node.jsからpythonのコードが実行できるようです。
少し光明が見えてきました。

すなわち
image.png
こーんな感じの実装が(多分)できるという訳ですね!

ただ、前回のteratailの回答者様曰く、

速度は落ちますが、C++のソースコードをWASMの技術で無理やりJavaScriptに加工したOpenCV.jsなるものも存在します。

とのことなので、下のようにpythonの方でopenCVを使った方が素直?高速?になる気もします。
先人の教えもありますし。
ちらっと見たところpythonからnodeにわたす情報は、python側でもprintで渡すみたいなんですよね。
画像情報をprintするのって、なんか気持ち悪いし、

image.png

今後の方針

  1. pythonとpillowを使ってスクリーンショットのデータを取得
  2. pythonとopenCVを使って牌姿情報を取得
  3. node.jsとpython-shellを使って、pythonコードを実行し牌姿情報を受取る

という流れで進めたいと思います!
次回はpythonとpillow回です。

4
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5