【Azure×Rails】アップした画像に自動タグ付けするWebアプリを作ってみた
ゴリラの画像ならば「animal」、ラーメンの画像ならば「food」、iPadならば「computer」といった具合で、画像に自動でタグ付けをしてみました。
マイクロソフトのCognitive Servicesのうちのひとつ、Computer VisionをRuby on Railsから利用することで、簡単に実現できました。
要件
- 画像をアップロードする
- アップロードした画像のタグ情報を取得する
- タグ情報をDB保存する
画像のアップロード機能
まずRailsプロジェクトを作成します。
$ rails _5.0.1_ new azure_computer_vision_on_rails $ cd azure_computer_vision_on_rails $ bundle install --path vendor/bundle
画像情報用のVisionテーブルと、タグ情報用のVisionTagテーブルを作成します。
$ rails generate model Vision url:string $ rails generate model VisionTag vision_id:integer name:string confidence:float $ rake db:migrate
Visionコントローラを定義し、「public/uploads」以下にアップロードした画像を保存していきます。
class VisionController < ApplicationController def index upload_file = params[:image] if upload_file != nil # 画像のアップロード @vision = Vision.create() filedir = "./public/uploads/visions/#{@vision.id}" FileUtils.mkdir_p(filedir) unless FileTest.exist?(filedir) filepath = "uploads/visions/#{@vision.id}/#{upload_file.original_filename}" File.open("./public/#{filepath}", 'wb') do |f| f.write(upload_file.read) end @vision.url = "#{request.url}/#{filepath}" @vision.save redirect_to :action => "show", :id => @vision.id end end def show @vision = Vision.find(params[:id]) end end
Viewはこんな感じです。
<%= form_tag('/', method: :post, multipart: true) do %> <div> <input type="file" name="image"> </div> <input type=submit> <% end %>
あとは下記のことをすると、画像アップローダーとしてはひとまず完成です。
- config/routes.rbにルーティング情報を定義
- VisionテーブルとVisionTagsテーブルにActiveRecordリレーションを定義
- .gitignoreにアップロードバスを追記
Computer Vision APIを利用
Microsoft Cognitive ServiceのWebページに行って、「Get started for free」から「Computer Vision - Preview」を利用開始します。
月間5,000および分間20トランザクション範囲内ならば無料で利用できます。 今回登録に必要な手順は特にありませんでしたが、MicrosoftAzureのアカウントを持っていない場合はもしかしたらここで作成が必要かもしれません。
「Key」を表示してsecrets.ymlに記載しておきます。
development: azure_computer_vision_api_key: XXXXXXXXXXXXXXXXXXXXXXXXXXX
Cognitive Services APIs ReferenceにRubyのサンプルコードがあります。 これを参考にして、APIを叩きタグ情報を保存するコードを記述します。
# リクエストの生成 uri = URI('https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze') uri.query = URI.encode_www_form({ 'visualFeatures' => 'Tags', 'language' => 'en' }) http = Net::HTTP::Post.new(uri.request_uri) http['Content-Type'] = 'application/json' http['Ocp-Apim-Subscription-Key'] = Rails.application.secrets.azure_computer_vision_api_key http.body = { url: @vision.url }.to_json response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |client| client.request(http) end # レスポンスの加工 json = JSON.parse(response.body) raise json["message"] if response.code != "200" json["tags"].each{|tag| vision_tag = @vision.vision_tags.build(name: tag["name"], confidence:tag["confidence"]) vision_tag.save }
あとは、この情報を表示するViewを定義すれば完成です。
<% if @vision %> <img alt="<%= @vision.url %>" src="<%= @vision.url %>" class="vision_image"> <ul> <% @vision.vision_tags.each do |tag| %> <li><%= "#{tag.name} (#{tag.confidence})" %></li> <% end %> </ul> <% end %>
詳細はGitHubのコミットログにあります。
デプロイ
このRailsアプリケーションは、アップロードした画像(/uploads/以下)がマイクロソフトからアクセスできるような環境に配置する必要があります。localhostとかでは動作しません。
個人用途のため全IPからアクセス許可するのは嫌だったので、マイクロソフトからのアクセスに絞ります。
noindexを付けて一瞬だけ3000番ポートを全体公開し、$ rails s
でアプリケーションを起動し$ netstat -ant | grep 3000
と$ whois
でAPI使用時にアクセスが来るマイクロソフトのIPアドレスを調べました。
結果、「13.104.0.0/14,13.64.0.0/11,13.96.0.0/13」に対してアクセスを許可すれば利用できるようでした。 なんか広すぎるのでもう少し絞りたいのですが、今回は特に機密な要件ではないのでこれくらいで進めます。
今回IDCFクラウドの仮想マシンを使っていたので、ソースIPのファイアウォールでアクセスを許可すればOKです。
完成
試しにゴリラの画像を使ってみると
「mammal(哺乳類)」「animal(動物)」「primate(霊長類)」「ape(猿)」といったタグ情報が得られました。 ズバリ「Gorilla」とは出てこなかったものの、かなりの精度で解析されていることがわかります。
また、信頼度は低いものの「close(接近している)」「staring(見つめている)」といった微妙な表現も得られました。
知らなかったのですが<input type="file">
はスマホから直接カメラを起動して写真をアップロードできるようなので、こんな単純なソースコードでも割とそのまま使い物になって結構面白いです。
まとめ
Azure Computer Vision APIを使うことで、画像にタグ付けを簡単に実現できました。
耕友会コンサート2017に行ってきた
2月11日 第八回耕友会コンサート「明日に向けて」に行ってきました。
第一部
- Gaia Philharmonic Choir
- 千原英喜 作曲「おらしょ」
- Avis Libera&Ensemble Gione
- The Ladies' Vocal Artists Antheia
- レディースシンガーズSophia
- 休憩(15分)
- インターカレッジ男声合唱団Voces Veritas
- Kodály Zoltán(コダーイ)作曲『Fölszállott a Páva』
- Eric Whitacre(ウィテカー)作曲『Lux Aurumque』
- 松本望 作曲「天使のいる構図」より『V. Finale』
- みなみ野キッズシンガーズ
- Brilliant Harmony
- 合同演奏
- 松下耕 作曲『ほらね、』
前半は全体的に女声合唱が多かったです。(混声1、男声1、あとは女声と同声)
第一部第一曲目からしてガイアの「おらしょ」という、まあ大変な曲順だったのですが、続く団も負けず劣らずの名演を繰り広げていました。 結成から数ヶ月とかの団体もあったり、4歳のお子様もいる児童合唱団もあったのですが、どの団体もそれを思わせない演奏は流石でした。
演奏曲目の字面だけ並べると強烈なインパクトを放っている『牛丼屋夜間アルバイト』はBrilliant Harmony第26回コンサートで初演された曲です。私も初演を聴いたのですが、まさに名演再びという感じ。 当時はちょうどすき家のワンオペ問題がタイムリーに問題に上がっていたこともあり大変な話題を呼びましたがそれとは関係なく、また別の視点から社会の闇にスポットを当てた大作です。
ちなみに超余談ですが、初演当時問題に上がっていたすき家はその後業務改善により業績回復したとのことです。良かったですね。 昼飯は勝どき駅前の松屋でしたが。
第二部
- インターカレッジ女声合唱団Voces Fidelis
- Chamber Choir VOX GAUDIOSA
- Meredith Monk(メレディス・モンク)『Panda ChantⅡ』『Other Worlds Revealed』『Travellers4 /Churchyard Entertainment』
- Voces Dulcis&Lucis
- 休憩(15分)
- 東京レディースコンソート”さやか”
- Raymond Murray Schafer(レイモンド・マリー・シェーファー)作曲『Ariana’s Lament』『Lu-li-lo-la』
- Collegium Cantorum YOKOHAMA
- 高田三郎 作曲「内なる遠さ」 より『飛翔-白鷺』『燃えるもの-蜘蛛』『己れを光に-深海魚』
- TAIWAN台湾耕友会
- 合同演奏
- 松下耕 作曲『Cantate Domino in B♭』
これだけ様々な団体がありながら団によって演奏に様々な味があるので、次はどんな歌声だろうかとわくわくしながら聴いていました。 耕友会は同じ松下耕を音楽監督に置きながら、一貫している音づくりと、団によって変えている部分と、あるように思います。
一貫していると言えば、「言葉を大切にしている」とコンサート中にも何度か案内されていましたが、それを強く実感したのが台湾耕友会の演奏。 『今、ここに』という言葉が非常に重要な曲を選んでおきながら、日本人が聴いても全く違和感のない(むしろ日本人でありながら日本語に聞こえない演奏を何度も聴いたことがあります)演奏に仕上がっていました。 この実力はさすが。
その対極に位置するのがガウディのモンクだったと思います。 歌詞だとか、旋律とか、そういったものから一段抽象的な世界に昇華した「声」の演奏を楽しむことができました。 言葉を突き詰めた先にあるのが歌詞の無い合唱というのが、また面白いですね。 (もしかしたら何かものすごい深い意味のある言葉なのかもしれませんが)
第一部、第二部ともに、クロージングの合同演奏は150人超の大人数による演奏で、凄まじいパワーがありました。 少ない団体でも10人はいた覚えがありますが、やや少人数から超大人数まで様々な演奏を、すべてハイクオリティで聴くことができて幸せでした。
その他
耕友会はチラシやパンフレットも相当こだわっていて毎回楽しみにしているのですが、今回は特にWebサイトが素敵でした。
私は仕事柄Webサイトの出来はめちゃくちゃ気になるのですが
- レスポンシブWebデザイン(ウィンドウを狭めたりしてもレイアウトが崩れず、スマートデバイス向けとPC向けを同一ページで表現しています)
- Webフォント(モリサワフォント Shuei Mincho L)
- 画像未使用の縦書きレイアウト
などと、結構イマドキの技術を持ったプロが作っている事が垣間見えます。
バックエンドの技術を見ても、エックスサーバー上にWordPress(CMS使うまでもない気はしますが)を載せていたり、「kc8.koyukai.info」という恐らくこの演奏会専用であろうサブドメインを切っていたりと、ちゃんと作られていることがわかります。 SSL取っていれば完璧でしたが。
シンプルですが、チラシと同じくらいこだわって作ってある事が伺える素敵なWebサイトです。
アンケートについて
会場では普通に紙のアンケートが配られていたのですが書き忘れてしまいました。 なので、こうしてブログに感想を書いてTwitter広告でも打って、SNSと金の力で解決を試みます。
さてうまくいくでしょうか。ちゃんと関係者様各位に届きますでしょうか。
なお集計担当者様のもとまでたどり着くことが出来たときのために書いておきますが、当方この演奏会は耕友会公式のfacebookページにて知りました。 チケットの価格設定については東京までの旅費に比べると誤差みたいなものなので何とも思いません。むしろ関西とかで開催してくれると嬉しいです。
その後
そのまま1泊して、パナムジカフェア開催中のヤマハ銀座店に遊びに行きました。 おわり。
【ポケモン サン・ムーン】パーティのQRコードを公開してみた
先日、QRレンタルチーム機能がオープンしました。 せっかくなので、自分のパーティも公開してみました。価値はとくに無いですが。
特性/持ち物 | 性格/努力値 | 技 |
---|---|---|
スターミー しぜんかいふく @こだわりメガネ |
おくびょう CS252 H4 |
ハイドロポンプ サイコキネシス れいとうビーム 10万ボルト |
バシャーモ かそく @クサZ |
ひかえめ B228 C252 S28 |
だいもんじ きあいだま ソーラービーム にほんばれ |
モジャンボ ようりょくそ @いのちのたま |
やんちゃ H140 A252 S116 |
リーフストーム じしん はたきおとす せいちょう |
ベトベトン くいしんぼう @バンジの実 |
いじっぱり AS252 H4 |
ダストシュート はたきおとす ストーンエッジ かわらわり |
ムクホーク いかく @ラムの実 |
ようき AS252 H4 |
ブレイブバード インファイト でんこうせっか とんぼがえり |
ジジーロン ぎゃくじょう @オボンの実 |
ひかえめ HC252 S4 |
ハイパーボイス だいもんじ へびにらみ ひかりのかべ |
ちなみにこのパーティのレーティングバトルの勝率は30%です。 レートの道は厳しいです。
解説
バシャーモがパーティの軸です。特殊型です。
もともと第5世代でたまたま手に入れた加速アチャモ(※当時は孵化厳選不可能だったので貴重)が性格ひかえめで、なんとか活用できないかと考えたのがこの特殊型でした。
初手に出して流し際に日本晴れを決めて、草のジュエルをもたせたソーラービームで、受けに来たヤドランとかを吹き飛ばす型でした。 ブルンゲルとかは1発で落とせませんが、晴れ下ならばC無振りハイドロポンプを耐えたりしたので2発目を叩き込めました。のろわれボディが発動しなければ。
日本晴れを決めなければ物理型の劣化であるため第5世代当時はネタでしたが、第7世代ではクサZが使えるので晴れ下でなくとも一発だけソーラービームを報いることができ、いくらか実戦で使えるのではないかと思います。 Bに振って鉢巻マリルリのアクアジェット確定耐え調整にしていますので、対面から勝てます。
【Azure】ブラウザ上から直接SQL実行してみた
先日、Azure SQL Databaseに『クエリ エディター』という機能がパブリック・プレビューで公開されました。
Public preview: Interactive query experience for SQL databases
A new lightweight T-SQL editor within the Azure portal is available for all Azure SQL databases
AzureポータルのWeb画面上からAzure SQL Databaseに対して直接SQLが打てるようです。
さっそくやってみましょう。 「SQL Database」を選んで「クエリエディター」に入り、ID/Passを入れればSQLを実行できます。おわり。
先日の記事で使ったクエリを投げてみます。
SELECT DATEPART(YEAR, tweet_datetime) AS year, COUNT(*) AS 'ツイート総数', SUM(retweets) AS 'リツイート総数', SUM(favorites) AS 'いいね総数', SUM(impressions) AS 'インプレッション総数' FROM tweets WHERE tweet_datetime >= '2014-01-01' GROUP BY DATEPART(YEAR, tweet_datetime) ORDER BY DATEPART(YEAR, tweet_datetime) DESC;
YEAR | ツイート総数 | リツイート総数 | いいね総数 | インプレッション総数 |
---|---|---|---|---|
2017 | 18 | 76 | 176 | 45,467 |
2016 | 223 | 1,235 | 2,073 | 749,193 |
2015 | 308 | 1,700 | 2,624 | 863,824 |
2014 | 340 | 2,165 | 3,147 | 307,440 |
入力中の日本語が表示されないなど若干の不自由がありましたが、日本語を含むクエリの実行自体は普通にできました。 レスポンスも良好です。
SQL DatabaseはVisualStudioさえあれば便利なのですが他に良いGUIクライアントがなかなか見つからず…。 特にChromebookや容量が少なくVisualStudioを入れていないWinノートから繋ぐ場合は不便でした。
このクエリエディターあれば、SQL Serverのクライアントが無い環境からでも直接SQLが実行できます。
まどマギのサントラまとめ
『魔法少女まどか☆マギカ』各作品のサウンドトラックを買い揃えていったのですが、予想よりも揃えるのが大変だったためここにまとめます。
- TVアニメシリーズ『魔法少女まどか☆マギカ』
- 劇場版『魔法少女まどか☆マギカ』前編 始まりの物語/後編 永遠の物語
- 劇場版『魔法少女まどか☆マギカ』新編 叛逆の物語
地上波放送版『魔法少女まどか☆マギカ』
TVアニメ版に関しては最も入手難易度が低いです。 CD2枚組の『魔法少女まどか☆マギカ MUSIC COLLECTION』を手に入れるだけで、主題歌を含めたすべての曲が揃います。
DVD/BDの特典としてサウンドトラックがついていますが、こちらには主題歌が含まれていません。
iTunesで配信されているのはこの特典のうち一部の曲の抜粋です。 特にDVD/BD第6巻収録分に相当する後半の楽曲がほとんど収録されていません。
逆に、主題歌『コネクト』『Magia』はどちらもiTunesなどで配信されていますので、DVD/BD版からは補完可能です。
DVD/BDの特典だけでも、配信サービスだけでも、TVアニメ『魔法少女まどか☆マギカ』の全楽曲を揃えることはできません。 実際に、最初はiTunesで揃えようとしたものの楽曲が足りず結局MUSIC COLLECTIONを再度入手することになりました。配信サービスはあまりおすすめできません。
先述のMUSIC COLLECTIONを入手して一括で全曲揃えるのが最も手軽です。
MUSIC COLLECTIONのボーナストラック
このMUSIC COLLECTIONには、TVアニメ本編で使われていない楽曲がいくつか含まれています。
- MUSIC COLLECTIONに含まれていて、TV版で使われていなくて、劇場版で使われているのは『Quamobrem』
- もともとドラマCD用の曲らしいです。
- MUSIC COLLECTIONに含まれていて、TV版で使われていて、劇場版で使われていないのは『Nux Walpurgis』
- TV版で唯一使われていたシーンが劇場版では『Surgam identidem』に差し替えられています。
『また、あした』『and I’m Home』はTV版でも劇場版でも使われておらず、DVD/BD版限定のエンディング曲です(未確認。公式ガイドブックより) バンダイアニメチャンネルやAmazonプライムの配信でも流れないレアな曲です。
『prelude to Act 1』『prelude to Act 2』はサントラのためだけの完全新曲であり、劇中では使用されていません。
劇場版『魔法少女まどか☆マギカ』前編『始まりの物語』/後編『永遠の物語』
劇場版前後編の楽曲は、TVアニメ版の楽曲構成をベースにしつつも多数の曲が書き下ろし・差し替えされています。
劇場版前後編DVD/BD限定版特典としてサウンドトラックが付随しており、劇場版の追加楽曲についてはこちらを入手しなければいけません。 梶浦由記作曲の劇伴BGMについてはこの特典サントラと、先述の『魔法少女まどか☆マギカ MUSIC COLLECTION』で全て揃います。
問題は主題歌・挿入歌です。 結論から言えば、すべて揃えるにはKalafina『ひかりふる』およびClariS『ルミナス』の限定生産盤を手に入れる必要があります。
オープニング『ルミナス』
前編・後編ともにOPとして使われています。 iTunes等の配信で手に入ります。
なおTVアニメ版で『コネクト』が使われていた箇所のうち、第1話相当のCDショップで流れているのは『ルミナス』に差し替えられていますが、第6話相当のゲームセンターで流れているのは『コネクト』のままです。
挿入歌『未来』
『Credens justitiam』(俗に言う『マミさんのテーマ』)のボーカルアレンジです。 TV版で言う第3話相当のシャルロッテの使い魔との戦闘で使われている楽曲です。 Kalafina『ひかりふる』およびアルバム『THE BEST “Blue"』『Consolation』にも収録されており、iTunesなどでも配信されています。
前編ED/後編挿入歌『Magia [quattro]』
TVアニメ版のED『Magia』と同じ曲ですが、劇場版の『Magia [quattro]』はアレンジが結構異なっています。 先述の『未来』と同じくKalafina『ひかりふる』に収録されています。
Kalafina『Magia』には地上波放送時のバージョンしか収録されていません。Kalafina『ひかりふる』に収録されています。
後編挿入歌『コネクト』
TVアニメ版のOPですが、劇場版で使われるのは2種類あります。
ひとつめは後編、第10話EDに相当する場面。 これはTVアニメ版と同じなのでMUSIC COLLECTIONに収録されていますし、iTunes等でも配信されています。
もうひとつが後編EDの『コネクト -Orchestra ver.-』 こちら何に収録されているのか探したのですが、困ったことにClariS『ルミナス』の限定盤にしか収録されておらずiTunes等でも配信されていません。 『ルミナス』限定盤は現在生産終了しており、入手が困難な1曲です。
後編ED『ひかりふる』
TV版12話のクライマックスで流れる『Sagitta luminis』のボーカルアレンジです。 Kalafina『ひかりふる』およびアルバム『THE BEST “Red"』『Consolation』にも収録されており、iTunesなどでも配信されています。
つまり『コネクト -Orchestra ver.-』を諦めるならば、他の主題歌はすべてiTunesなどの配信で簡単に入手することができます。
劇場版『魔法少女まどか☆マギカ』新編『叛逆の物語』
こちらも劇場版前後編と同じく、DVD/BDの限定版特典としてサウンドトラックが付随しております。 自信はないですがTVアニメ版と同じ曲は一切使われていないはずなので、叛逆に限って言えば『MUSIC COLLECTION』を入手する必要はありません。
主題歌である『カラフル』『misterioso』『君の銀の庭』はいずれも通常版シングルに収録されており、iTunes等でも配信されており、入手難易度は低いです。
※ただし『misterioso』の劇中で使われるバージョンは『conturbatio』のメロディをなぞったフルートの間奏が入っていますが、こちらの音源には入っていません。
インスト版について
『Sis puella magica!』
いわゆる営業のテーマで、全編を通して色々なところで使われますがインスト版が流れる場面があります。 7話のさやかちゃんと佐倉杏子の会話シーンの後半(「あたしは人のために祈ったことを後悔してない」)で、コーラスパートの省かれたバージョンが流れます。 このインスト版は入手不可能のようです。
『コネクト』
TVアニメ第6話のゲームセンターのシーンで、インストアレンジが流れます。こちらは『MUSIC COLLECTION』に『コネクト -ゲームインスト-』として収録されています。
『Magia [quattro]』
TVアニメ版のED『Magia』のアレンジ版『Magia [quattoro]』のインスト版『Magia [quattro] ~instrumental~』が、劇場版前編のゲルトルート戦で使用されます。 『ひかりふる』期間生産限定盤で入手可能です。
まとめ
曲 | 入手方法 | TV | 前後編 | 新編 |
---|---|---|---|---|
TV版/前後編共通の多くの楽曲 (『Sis Puella Magica!』『Decretum』等) |
MUSIC COLLECTION 及びDVD/BD特典 |
○ | ○ | |
TV版限定の楽曲 (『Nux Walpurgis』等) |
MUSIC COLLECTION 及びDVD/BD特典 |
○ | ||
劇場版前後編の楽曲 (『Quamobrem』) |
MUSIC COLLECTION 及びDVD/BD特典 |
○ | ||
劇場版前後編の楽曲 (『witch world』『She is a witch』等) |
前後編DVD/BD限定版 | ○ | ||
劇場版新編の予告映像 (『for the next episode』) |
前後編DVD/BD限定版 | |||
劇場版新編の楽曲 (『まだダメよ』『we’re here for you』等) |
新編DVD/BD限定版 | ○ | ||
TV版OP/10,12話ED/後編挿入歌 『コネクト』 |
MUSIC COLLECTION 及びClariS『コネクト』 |
○ | ○ | |
TV版挿入歌 『コネクト -ゲームインスト-』 |
MUSIC COLLECTION 及びDVD/BD特典 |
○ | ○ | |
後編ED 『コネクト -Orchestra ver.-』 |
ClariS『ルミナス』限定版 | ○ | ||
前後編OP 『ルミナス』 |
ClariS『ルミナス』 | ○ | ||
新編OP 『カラフル』 |
ClariS『カラフル』 | ○ | ||
DVD/BD限定1,2話ED 『また あした』 |
MUSIC COLLECTION | ※ | ||
DVD/BD限定9話ED 『and I’m home』 |
MUSIC COLLECTION | ※ | ||
TV版3~8話ED/1,10話挿入歌 『Magia』 |
MUSIC COLLECTION 及びKalafina『Magia』 |
○ | ||
前編ED/後編挿入歌 『Magia [quattro]』 |
Kalafina『ひかりふる』 | ○ | ||
前編挿入歌 『Magia [quattro] ~instrumental~』 |
Kalafina『ひかりふる』限定版 | ○ | ||
前編挿入歌 『未来』 |
Kalafina『ひかりふる』 | ○ | ||
後編ED 『ひかりふる』 |
Kalafina『ひかりふる』 | ○ | ||
新編挿入歌 『misterioso』 |
Kalafina『君の銀の庭』 | ○ | ||
新編ED 『君の銀の庭』 |
Kalafina『君の銀の庭』 | ○ |
わけがわからないよ。