ntk log ntk

競プロや非競技プロのやったことを書いています.

AmongUsの戦績っぽい値を返すDiscordBot書いた

まとめ

こういうやつ.

f:id:ntk_ta01:20210217104329p:plain

github.com

モチベ

最近は知り合いとAmong Usをやることが多い.

ふとゲーム内の統計を見たときに「これ勝率とか見れたらいいのにな~」と思って,簡単な計算をするBotを作った.

画像から文字を読み取るのをBotがやってくれるといいな~ってのが一番のモチベだった.

やったこと(画像から文字認識)

tesseractという文字を認識してくれるエンジンがあるみたいでこれをインストールしてきて,pyocrから利用した.

github.com

ここがモチベだったのだが,スクショの画像そのままだと文字を読み取る精度が低かった.

この画像に対して,

f:id:ntk_ta01:20210217110522p:plain

こう.

f:id:ntk_ta01:20210217110506p:plain

う~~~ん.微妙.Bot作るのやめるか?困った.

困ったのでtesseractのドキュメントのサンプル画像を見に行くと白背景かつ黒字のものが多く,似たような雰囲気にしたら精度が高くなると推測した. 実際,画像をグレースケール変換してからネガポジ反転させたら精度が高くなった.

f:id:ntk_ta01:20210217110847p:plain

いいじゃん!

やったこと(herokuでデプロイ)

あとはDiscord.pyのAPIリファレンスとにらめっこしながらコマンドを実装して,手元では動くようになった.常時動かしたいな~と思ったので,ググったらherokuに置くのがよさげと判明.使ったこともなかったのでアカウント作成してBotを稼働させる!

しかしすぐに動くことはなく,苦戦した. tesseractをherokuのほうに入れて,settingsのbuildpackからaptを使えるようにしたのまではよかった.けれどどうにもtesseractが上手く動いてなかった.

いろいろ探していたら似たようなことで困っている人がいた.

stackoverflow.com

回答にあったようにstack:set heroku-18 をしてみると…動いた!最高!

TESSDATA_PREFIXを環境変数として設定して完璧!完成!

こういう非競技プロの経験をもっと増やしていきたいぜ…….あとBotの機能ももう少し増やしたり,画像は背景が写らないようにした方がきちんと読み取れるのでそこをなんとかしたりしたい.

参考にした記事

Pythonで実用Discord Bot(discordpy解説) - Qiita

Discord Bot 最速チュートリアル【Python&Heroku&GitHub】 - Qiita

heroku 初級編 - GitHub から deploy してみよう - - Qiita