catalinaの備忘録スマートフォン用の表示で見るcatalinaの備忘録ソフトウェアやハードウェアの備忘録。後で逆引きできるように。2017-03-30MTGの公式APIを叩いてみるpythonカードゲームのイラストを自動判別しようと試行錯誤しています。今回はMagicTheGatheringのカードの自動判別の前に、データ集めに挑戦します。やってデータを集めるか?DeepLearningとか機械学習だの前に、まず学習させるデータが必要です。学習用のデータは実際にカメラで撮影したもののほうが程よくノイズが乗って学習にはよさそうな気がしますが、そのためにはそういうデータを収集するアプリが必要です。学習済みモデルをアプリで利用したいのに、学習するためのアプリを作る必要があって、鶏が先か卵が先かみたいな不毛な話になってしまいます。仕方ないので試しに手作業で実際のカードをスキャナで取りんでみましたが、一枚あたり一分くらいです。一つのシリーズに200から300種類のカードがあるので、とりあえずは300分ですね。こんなの手作業でやる気は起きません。そもそもすべてのカード揃ってるわけないですし、人力でカードの束からサーチしたりと手間かかりすぎます。クローラーを書く?少し試しましたが、面倒すぎます。スクレイピングした結果のデータを目視確認してラベル付けする必要もありますし、そんなの手作業でやっていてはお話になりません。目視確認の代わりにDeepLearningでモデルを作ってそれを使えば......と思いましたが、またしても鶏と卵になってしまいます。公式APIがあった発売元から公式のAPIが提供されていました。こいつを使えばなんとかなりそうです。https://docs.magicthegathering.io/試しにREST-APIを叩いてみるよくあるWebAPIの使い方と同じです。カードに関するクエリであればHTTPRequestとして示されているhttps://api.magicthegathering.io/v1/cardsのURLをベースとし、?の後ろにクエリを付けてあげればOKです。名前検索するならname=“検索したいカード名"とか。"nissa"を含むカード一覧を取得する例はこうなります。ブラウザで開くとJSON文字列が並びます。画像をとってくる↑の結果得られたJSONには「名前に"nissa"を含むカード」がリストアップされています。このcards配列から適当な"imageUrl"要素を抽出すると、こんなURLがとれます。http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=190411&type=cardここにアクセスすると、確かにそれらしいイラストが取得できました。Windows上から叩きたいLinuxならcurlやwgetですが、windows上で自動化するにはPowerShellから叩きたいところです。いうわけでInvoke-RestMethodというのを使えば一発でした。test.jpgできました。これで理論上はMTG公式APIが提供している全てのカードの絵柄は、自動で収集できるということになります。Pythonで自動化するよくよく考えたらPowerShell書かなくても公式が出してる各プログラミング言語の実装を使えば済みますね。公式のsdkのPython版を落としてきて、適当に叩いていきます。叩き方がわかればあとはスクリプト書いてぐるぐるまわせばいいので。準備まずはローカルでテストしやすいように全カードの情報をとります。10分くらいかかるので待ちましょう。base_file)close(base_file)80MBくらいのファイルになりました。pickle.load(base_file)で読めます。webからのダウンロードは時間かかりますが、これなら数秒で終わります。上記で取得してきたデータの中身を見てみます。signed?)で嫌な感じですが、URLも取れてるので先に進みます。これでカード名をもとにローカルに保存するファイル名が生成できそうです。Elemental.jpg"とか。Pythonからイメージをダウンロードurllibというライブラリを叩くだけでした。image_request.read()これでimage_dataにダウンロードしたイメージのバイナリが格納されます。あとはfileにwriteしてあげればOKです。スクリプトでカードイメージを全部ダウンロードする先の全カードのダウンロードでは嫌な数字が見えているので、特定のエキスパンションだけダウンロードします。数万枚もの画像分類モデルを作るよりは、少しずつ積み重ねていったほうが色々と見えそうというのもあります。いうわけで「カラデシュ」という弾の(略称=kld)カードをすべてダウンロードします。ここで与えるパラメータset=にはエキスパンションの略称。同じカード名のものが重複してしまうとうまく保存できません。土地カード(forestとかswampとか)は同一カード名で複数の絵柄があります。これは今後の課題ということで。同様にしてset=のところを'ktk'とかにすれば「タルキール覇王譚」が取れます。実際にカードの属性見て気づいたのですが、カードを分類するための情報ってカード名だけじゃないんですよね。学習モデルに突っ込むことを考えると、カード名は人間がつけた分類ラベルであって、そのラベルに「人間が見て意味を解釈できる文字列」が関連付けられているだけのことです。次のステップでは今回の画像セットを水増しして、学習モデルに入力していきたいと思います。HoloLens側のアプリも作っていきたいですね。それでは今回はこれくらいで。22:19MTGの公式APIを叩いてみるTweet広告を非表示にする関連記事2019-05-28MTGのカード情報の傾向分析を行う(準備編)GWが終わって、しばらく祝日なしの日が続きます。chainercvが0.6になって、rcnnの実装のひとつであるSSDの...2017-08-05外出先からDNNの学習状況を確認したい今回はchainerでの学習進捗を見るのが目的ですが、あんまりchai...2017-05-04ChainerでMTGのカードを分類する(識別フェーズ)黄金週間なので趣味プログラミングに没頭です。»プロフィールid:Catalina1344ソフトウェアやハードウェアの備忘録。後で逆引きできるように。OpenMVSで3D再構築するOpenMVGを試してみる(環境構築+α)父の日ですね月別アーカイブ忍者AdMaxはてなブログをはじめよう!Catalina1344さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。