LoginSignup
2
1

More than 5 years have passed since last update.

FlashAirのLuaスクリプトでMS Translator APIを使ってみた

Last updated at Posted at 2016-08-20

 先日、FlashAirのLuaスクリプトで、Microsoft Cognitive ServicesのComputer Vision APIを使ってみた記事を公開した後、さらにBing Speech APIを使ってComputer Vision APIで付与したキャプションを合成音声でしゃべらせた「しゃべるデジカメ」を製作し、FlashAir Developersサイトのユーザーチュートリアルとして公開していただきました。
 この「しゃべるデジカメ」は、Computer Vision APIのキャプションが、現状、英語しか対応していないので、当然、英語でしゃべるわけですが、日本語対応したいなと思ったので、今回は、FlashAirのLuaスクリプトから、Microsoft Translator APIを使ってみることにしました。FlashAirでは音声再生できないため、今回はSpeech Translation APIではなく、Text Translation APIを使います。

サブスクリプションキーの取得

 まず、Microsoft Translator APIを利用するためのサブスクリプションキーを入手します。現時点では、月間200万文字までは無料で利用できます。
 Microsoft Translator - Text Translationに、自分のMicrosoftアカウント(もし、お持ちでなければ無料で作成できます)でログインします。すると、以下のページが表示されるので、右上の月額¥0の「サインアップ」をクリックして有効化します。
AzureMarketPlace05.png

 つぎに、開発者ページを開き、これから製作する自分のアプリケーションを登録します。以下のページの「登録」ボタンをクリックします。
AzureMarketPlace06.png

 以下のページでは、必要事項を記入して、最後に「作成」ボタンをクリックします。
- クライアントID……適当な自分のアプリケーションの名前をつけます。識別子であるので、一意になるように留意します。この文字列を後ほどプログラムコードで使用します。
- 名前……好きな名前をつけます。
- 顧客の秘密……変更不要。この文字列を後ほどプログラムコードで使用します。
- リダイレクトURI……Microsoft Translator APIでは不要ですが、無効なURLを入力しておきます。(http://flashair/など)
- サブドメインアクセスを有効にする……オフのまま
- 説明……省略可能ですが、アプリケーションの簡単な概要を記載します。

AzureMarketPlace04.png

Luaスクリプトファイル

 FlashAirのルートフォルダに以下のコードを記述したテキストファイル(translator_sample.lua)をコピーします。
 ポイントは、Translator Text APIを呼び出す前に、アクセストークンを取得し、このアクセストークンを用いてTranslator Text APIを呼び出すことです。アクセストークンの有効期限は600秒に設定されているため、10分に1回取得すれば良いのですが、今回は、毎回取得することで処理を簡略化しています。

translator_sample.lua
local cjson = require "cjson"
function encodeURIComponent(str)
  str = string.gsub (str, "\n", "\r\n")
  str = string.gsub (str, "([^0-9a-zA-Z ])", -- locale independent
  function (c) return string.format ("%%%02X", string.byte(c)) end)
  str = string.gsub (str, " ", "+")
  return str
end

function getAccessToken()
  local token = ""
  local clientId     = "ここにクライアントIDを記述する"
  local clientSecret = "ここに顧客の秘密を記述する"
  local mes = "grant_type=client_credentials&client_id=" .. encodeURIComponent(clientId) .. "&client_secret=" + encodeURIComponent(clientSecret) + "&scope=http://api.microsofttranslator.com"
  local AccessTokenUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"
  local len = string.len(mes)
  local b, c, h = fa.request{url = AccessTokenUri,
    method = "POST",
    headers = {
      ["Content-Length"] = tostring(len),
      ["Content-Type"]   = "application/x-www-form-urlencoded",
    },
    body = mes
  }
  if(c == 200) then
    res = cjson.decode(b)
    token = "Bearer " .. res.access_token
  end
  return token
end

function getTransratedString(str, fromlang, tolang)
  local translated_str = ""
  local token = getAccessToken()
  local encstr = encodeURIComponent(str)
  local requri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" .. encstr .. "&from=" .. fromlang .. "&to=" .. tolang
  local b, c, h = fa.request{url = requri,
    headers = {
      ["Authorization"] = token
    },
  }
  if(c == 200) then
    translated_str = b
  end
  return translated_str
end

--呼び出し例
translatedStr = getTransratedString("翻訳したい文字列", "en", "ja")

呼び出し方

 サンプルコードのgetTransratedString("翻訳したい文字列", "en", "ja")では、英語から日本語に翻訳するように、第2、第3引数で指示しています。第2引数には第1引数に指定した文字列の言語を指定し、第3引数には翻訳先の言語を指定します。指定できる言語は、Translator Language Codesを参照してください。

まとめ

 これで、FlashAirで翻訳サービスを簡単に使えることがわかりました。これで「しゃべるデジカメ」を日本語対応することができますね。
 また、応用次第では、FlashAirで撮影した写真にComputer Vision APIでタグやキャプションを自動付与して、これをTranslator APIで日本語化して、日本語タグで自動分類するようなこともできるかもしれませんね。

参考資料

 Microsoft Translator API
 Getting started using the Translator API
 so-zou.jp Webアプリケーション開発の技術情報 - Microsoft Translator API
 Lua Memo - string.gsub ... パターンを置き換え

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