BLOG
2018.05.21
画像解析で将棋の棋譜を読む
こんにちは。クラウドソリューショングループのエンジニア明石です。
日曜日の午前中、物心ついたころから変わらぬ光景といえば?
そうです。「NHK杯テレビ将棋トーナメント」です!
羽生善治さんの「永世七冠」、藤井聡太さんの「15歳での七段昇段」、加藤 一二三さんの人気など、将棋ファンにとって、最近の将棋ブームはとてもうれしいです。
将棋といえば、去る2015年に将棋電王戦で、とうとうAI連合がプロ棋士との5番勝負に勝ち越し、人間越えを果たしたことも記憶に新しいと思います。
今日は「AI?何それ美味しいの?」という人に向けて、「ちゃんと味付けをして調理すれば美味しく召し上がれそう。」ということをAIの素人エンジニアがざっくりとお伝えします。
AIというと、IBM、Google、Amazon Web Seivice、Microsoft などの様々なITベンダーが提供しています。それらのAIを利用した様々なサービスが提供されて身近にあふれています。
今回はSalesforce.comが発表している『Einstein Platform Services(アインシュタイン・プラットフォーム・サービシーズ)』(以下、「Einstein」)というAIを紹介します。
Einstein Platform Services: https://metamind.readme.io/

Einsteinはマスコットキャラクターの容姿もあの有名な博士そっくりです。2016年に発表されたサービスですが、
「機械学習や深層学習、予測分析、自然言語処理などを活用したアプリケーションを誰でも簡単に使えるようにする、すなわち『AIの民主化』だ」
Salesforce社
というSalesforce社のコメントにあるとおり、複雑な数学やアルゴリズムなどを知らなくても簡単にAIを試すことができます。(だって僕でも出来たんだもん。)
Einsteinは現時点では2つの分類で4つの機能が提供されています。
Einstein Vision (画像解析)
- Einstein Image Classification・・・画像を分類
- Einstein Object Detection・・・画像内から物体を検知する
Einstein Languege(自然言語解析)
- Einstein Intent・・・文章をポジティブ、ネガティブ、ニュートラルに類推する
- Einstein Sentimment・・・文章を独自のカテゴリで類推する
※現時点では日本語には正式対応されていません。
お分かりのとおり、ガリガリにチューニングして複雑な学習モデルを作成して将棋で人間に勝つ、ということは出来ません。そんな高度なことは本当の専門家に任せてください。
今日は、冒頭で話した『NHK杯テレビ将棋トーナメント』のような将棋盤の画像から画像解析によって、駒の配置を検知して譜面を読めることができるかを試してみました。※よく目にする以下のような画像です。

Object Detectionで将棋の駒を物体検知し、その駒の位置座標から現在の譜面を読み解く
まずは学習データの準備です。
「将棋の駒ってこんなものだよ。」、「王将ってこんな駒なんだよ。」といったことを学習させる必要があります。
1.駒の写真を沢山撮影

先手と後手でどっち向きの駒か、若干傾いている駒、少し傾けて撮影した駒、色をモノクロにした画像など、判定制度を高めるために画像データの準備も工夫が必要です。今回は32個の画像ファイルを学習させました。
2.どこに写っているのが何の駒か座標で覚えさせる。
「後手の銀」→「g_gin」というラベルで名付けてこの部分に写っているよ。
「先手の角」→「s_kaku」というラベルで名付けてこの部分に写っているよ。
という感じで全部のファイルの全部の駒にラベル名と位置を設定します。

今回はデータ作成ツール:misu007/einstein-vision-annotation-creator を使用させていただきました。
Einsteinに対しては『画像ファイル名、駒のラベル名、座標』のセットをCSV形式のファイルで以下のようなデータを渡します。これが学習させる画像ファイルの数だけあります。ジーっと見てると眠くなるので目をそらしてください。
"hogehoge.jpg","{""label"":""s_fu"",""y"":683,""x"":199,""height"":252,""width"":183}","{""label"":""s_kyo"",""y"":676,""x"":482,""height"":251,""width"":202}","{""label"":""s_kei"",""y"":654,""x"":771,""height"":271,""width"":247}","{""label"":""s_gin"",""y"":313,""x"":768,""height"":268,""width"":257}","{""label"":""s_kin"",""y"":323,""x"":1118,""height"":276,""width"":265}","{""label"":""s_oh"",""y"":655,""x"":1105,""height"":287,""width"":304}","{""label"":""s_hisha"",""y"":272,""x"":132,""height"":292,""width"":281}","{""label"":""s_kaku"",""y"":289,""x"":451,""height"":278,""width"":276}"
3.学習データをEinsteinに学習させる。
- 写真と座標情報のCSVファイルをまとめたZipファイル(データセット)をアップロードする。
- アップロードしたデータセットを使用してEinsteinに学習(トレーニング)をさせる。
- 学習モデル(判定プログラム)が作成される。
Postmanというソフトを使って一連の操作を行いました。
実際には日々の業務で収集したデータを使って、日々再学習させていくような仕組みを業務システムへ組み込むことになると思います。

4.実際に画像を判定してみる!
このような画像を判定させてみました。

先手は矢倉囲いで、後手は美濃囲いか。
というのはどうでもよくて・・・
5.判定結果を読んでみる。
Einsteinに判定させると以下のような結果が返ってきます。
{
"probabilities": [
{
"label": "g_kin",
"probability": 0.78360254,
"boundingBox": {
"minX": 739,
"minY": 560,
"maxX": 981,
"maxY": 784
}
},
{
"label": "g_kin",
"probability": 0.75549245,
"boundingBox": {
"minX": 753,
"minY": 60,
"maxX": 964,
"maxY": 291
}
},
~~~ 省略(全部で35駒有り) ~~~
],
"object": "predictresponse"
}
また目をそらしたくなるようなものが出てきました。
これはJSON形式というデータです。
1駒分のデータを解説
{
"label": "g_kin", ・・・・・「後手の金」を表すラベルを名前付けています。
"probability": 0.78360254,・・・78%の確立でこれは「後手の金」だと判定した。
"boundingBox": {
"minX": 739, ・・・・左からのピクセル位置
"minY": 560, ・・・・上からのピクセル位置
"maxX": 981, ・・・・左からどこまでかのピクセル位置
"maxY": 784 ・・・・上からどこまでかのピクセル位置
}
},
このような情報が駒の数だけずらーっと帰ってきます。
6.駒の座標を将棋盤に当てはめる。
上記の「後手の金」を画像の座標に当てはめると、以下のような位置になります。

なんかそれっぽいですね!
これを将棋盤の座標から棋譜表記に変換していけば「後手6三金」というように棋譜にできそうです。
というところで、中途半端ですが『画像解析で将棋の棋譜は読めそう』ということで、Einsteinの紹介でした。
ちなみに上記の作業ですが、仕事が終わってから思いついて、近所のイオンに将棋盤を買いに行ったのが夜の20時、その晩のうちに作業をしてこの記事まで書き上がりました。本当にパッと出来て簡単です。
Einsteinは自然言語解析のほうがまだ日本語対応がリリースされてないこともあり、未知数な部分などありますが、今後が楽しみです。
ITをいかに理解して活用できるかというスキルを「ITリテラシー」と呼び、ITリテラシーが仕事の生産性に影響を及ぼしている昨今ですが、今後はAIをいかに使いこなせるかという「AIリテラシー」が当たり前になるという話も聞きます。いろいろとアイデアを出して、さまざまな業務システムに活用していけたらと思います。
Salesforce 技術関連記事
- Salesforce でお小遣い帳を作ってみよう!
- Salesforceでノンプログラミングでプロセス自動化
- Salesforceのデータを簡単更新!Googleスプレッドのアドオン「Data connector for Salesforce(Beta版)」を使ってみた
- Visual Studio Code で作る Salesforce 開発環境
- 画像解析で将棋の棋譜を読む
- Salesforceのデータストレージで困ったら・・・ ~Big Object~
- Salesforceを簡単更新!Googleスプレッドシート上でSalesforceデータの一括編集をやってみた!
- VisualforceをLightning Experience風のスタイルに ~LightningStylesheets属性~
- Salesforce 「活動(行動&ToDo)」のアーカイブについて
- データの「探索的分析」をやってみませんか? ~Einstein Analytics~
- Salesforce のデータをExcel 上で一括更新できるアプリ「VyNDEX」を使ってみた!
一緒に開発しませんか?
サンビット株式会社では、Salesforce によるクラウドシステム構築の開発技術者を募集しています!
興味のある方はぜひお問い合わせください。