5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python][画像処理][ポーカー]ハンドレンジ表を文字列データに変換するツール作ってみた

Last updated at Posted at 2021-07-12

#概要
pythonの画像処理でポーカーのハンドレンジ表を GTO+PioSOLVERと呼ばれるポーカーの分析ソフトで使う、分析元データ(文字列データ)に変換するツールを作ってみました。その実行環境構築や使用方法を書きます。
#想定読者
GTO+PioSOLVERPokerSnowieなどのポーカーの学習ソフト使ってる人
・pythonとか知らんけど、とりあえずハンドレンジ表を文字列データに変換するツールを使ってみたい人
##デモ
まずは入力画像を作成します。このツールでは、PokerSnowieと呼ばれるポーカーのトレーニングソフトウェアのmac版のハンドレンジ表を入力データとしています。(今後の機能拡張で色々なハンドレンジ表にも対応できるようにする予定です。)スクリーンショットでハンドレンジ表の画像をPNG形式で保存します。(JPEG等は非推奨)

####入力画像(サンプル)
aa.PNG

上記の入力画像を引数にターミナル画面(Windowsだとコマンドプロンプト画面)で以下のコマンドを実行します。オプションの説明は後ほどします。

python read_poker_rangetable.py -a raise -gto -img sample.png -type snowie_mac

####出力結果

python read_poker_rangetable.py -a raise -gto -img sample.png -type snowie_mac
GTO+のハンドレンジ出力結果
AA,AKs,AQs,AJs,ATs,A9s,A8s,A7s,A6s,A5s,A4s,A3s,A2s,AKo,KK,KQs,KJs,KTs,K9s,K8s,K7s,K6s,K5s,K4s,K3s,K2s,AQo,KQo,QQ,QJs,QTs,Q9s,Q8s,Q7s,Q6s,Q5s,[78]Q4s[/78],AJo,KJo,QJo,JJ,JTs,J9s,J8s,J7s,[87]J6s[/87],ATo,KTo,QTo,JTo,TT,T9s,T8s,T7s,[85]T6s[/85],A9o,K9o,Q9o,J9o,T9o,99,98s,97s,[85]96s[/85],A8o,K8o,[11]98o[/11],88,87s,86s,[86]85s[/86],A7o,77,76s,75s,A6o,66,65s,64s,A5o,55,54s,[59]53s[/59],A4o,44,33,22

上記のコマンドで出力された結果をポーカーの分析ソフト(今回はGTO+)に結果を貼り付けることで、ハンドレンジ表を作成することができます。手作業でハンドレンジ表を作成する場合と比べ、短時間で分析元データの作成ができます。
スクリーンショット 2021-06-28 18.29.40.PNG

#実行環境構築手順
###Macの場合
・python3(pip3)のインストール
・Homebrewのインストール
python3(pip3)をインストールしたらターミナル画面から以下のコマンドを実行します。
(sudoコマンドでパスワード入力を求められたら自分のPCのパスワードを入力します。)

#pip のバージョンが古いと失敗する場合がある.一度、アップグレードする.
sudo pip3 install --upgrade pip
#Pillowをインストール
sudo pip3 install Pillow
#opencv-pythonをインストール
sudo pip3 install opencv-python
#pyocrをインストール
sudo pip3 install pyocr

Homebrewをインストールしたらターミナル画面から以下のコマンドを実行してTesseract OCRをインストールします。

brew install tesseract

###Windowsの場合
・python3(pip3)のインストール
・Tesseract OCRのインストール

python3(pip3)をインストールしたらコマンドプロンプト(管理者権限で開く)から以下のコマンドを実行します。(sudoコマンドでパスワード入力を求められたら自分のPCのパスワードを入力します。)

#pip のバージョンが古いと失敗する場合がある.一度、アップグレードする.
pip3 install --upgrade pip
#Pillowをインストール
pip3 install Pillow
#opencv-pythonをインストール
pip3 install opencv-python
#pyocrをインストール
pip3 install pyocr

#実行
まずは、以下から、ソースを取得します。
https://github.com/tetsujin47/poker_range_table_read
ページ内の[Code]をクリック→[Download ZIP]をクリックしてソースをダウンロードします。zipは解凍して任意のディレクトリ配下に置きます。
f.png

次は、入力画像(サンプル)のような画像を用意して以下のコマンドを実行します。
コマンドの説明は以下です。

python read_poker_rangetable.py -action {raise,call} [-gto | -pio] -img IMG -type {snowie_mac,snowie3_win,snowie4_win}

(例)ハンドレンジ表の画像データのタイプがMac版PokerSnowieであるsample.pngを入力して、レイズレンジのGTO+の文字列データに変換する。
python read_poker_rangetable.py -action raise -gto -img sample.png -type snowie_mac

#省略値で実行する場合は
python read_poker_rangetable.py -a raise -gto -i sample.png -t snowie_mac
オプション 説明
-action(省略値 -a) raise又はcall 取得したいレンジを指定する。raise=レイズレンジ、call=コールレンジ
-gto又は-pio 出力する文字列データの種類を指定する。-gto=GTO+の文字列データ、-pio=PioSOLVERの文字列データ。何も指定しない場合はどちらの文字データも出力する。
-img(省略値 -i) <画像ファイルのパス> ハンドレンジ表の画像データ(PNG形式)のパスを指定する。
-type(省略値 -t) <ハンドレンジ表のタイプ> 読み込むハンドレンジ表の種類を選択する。指定できる値は「-typeに指定できる値」参照。

###-typeに指定できる値

ハンドレンジ表のタイプ -typeに指定する値
Mac版PokerSnowie snowie_mac
Windows版PokerSnowie3 snowie3_win
Windows版PokerSnowie4 snowie4_win
スマホアプリ版PokerSnowie 未対応(今後対応するかも)
Zeros 未対応(今後対応するかも)
その他 未対応(今後対応するかも)
その他のオプションもあります。詳細は以下で確認できます。
python read_poker_rangetable.py -h

#実行が上手くいかない場合
----作成途中-----
・認識色のデータを修正する。
・Tesseract OCRの実行ファイルパスを通す。
・精度が高い学習データを使用する。
----作成途中-----

#補足
・解像度の悪い画像は数字部分が上手く読み込めません。解像度(1680x1050)のmacでハンドレンジ表をスクショで撮った画像は上手く読み込めていました。
・WindowsだとフルHDの解像度(1920×1080)以上が推奨です。
・画像読み込み時に、マス目の外枠は自動で検出するのですが、読み込む画像は「入力画像(サンプル)」のように他のものが写って無いものを使用してください。
・文字認識(OCR)エンジンには、googleのTesseractを使ってます。数字の識字率は98%前後だったので、少し自分の手で修正が必要です。(Mac版PokerSnowieのハンドレンジ表を読み込む場合は、数字の認識に間違った可能性がある箇所を自動で検出し、ターミナルに出力する機能もついてます。)

#参考:動作確認済み実行環境
####Macの場合

名称 バージョン
macOS Big Sur 11.4
python 3.7(バージョン3以上が推奨)
Tesseract OCR 4.1.1(バージョン4以上が推奨)
Pillow 8.2.0
opencv-python 4.5.2.54
pyocr 0.8
####Windowsの場合
名称 バージョン
:--- :---
Windows 10 Windows 10
python 3.9.5(バージョン3以上が推奨)
Tesseract OCR 5.0.0(バージョン4以上が推奨)
Pillow 8.3.1
opencv-python 4.5.2.54
pyocr 0.8

#参考文献
https://www.piosolver.com

5
1
0

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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?