お金とか色々気にせずに翻訳させたい!

Pythonから無料で気兼ねなく翻訳できる方法をいくつか調べてみた。

検証環境

MacBook Pro (16インチ, 2019)
プロセッサ:2.3GHz 8コア Intel Core i9
メモリ:16 GB 2667 MHz DDR4

Argos Translate

  • モデルデータをダウンロード済みならオフラインで動かせる
  • 軽量でレスポンスも早いが、精度はイマイチ
  • 日本語は英語にしか対応してない
  • 商用利用もOK(MIT-License)

FuguMT

解説通りにやっても動かない(モデルデータがダウンロードされない)ので、未検証

NLLB-200

  • モデルデータをダウンロード済みならオフラインで動かせる
  • 多言語対応
  • モデルが複数あるので環境に合ったモノを選べる
  • 商用利用不可(CC-BY-NC 4.0)

M2M-100

  • 上記NLLBのオープンソース版
  • モデルデータをダウンロード済みならオフラインで動かせる
  • 多言語対応
  • モデルが複数あるので環境に合ったモノを選べる
  • NLLB-200より少し精度は落ちる
  • 商用利用もOK(MIT-License)

みんなの自動翻訳@TexTra®

  • APIを叩く形式なので、オンライン環境は必須
  • 100近い言語に対応
  • 利用登録や申請などの面倒な手続き不要
  • 商用利用には、専用のライセンス契約が必要

…という事でインテルマックでも遅くない!オフラインでも動く!中国語対応!商用利用可!無料!と、目的が全て網羅された「M2M-100」を使ってみる。
なお、ラズパイ4でも動くらしいので、「Argos Translate」は再検証の予定!

Google謹製Androidエミュレータを単体起動させるまで for Mac

Xcodeに入ってるiPhoneエミュレータみたいに、Androidエミュレータも単体起動させたかったので、色々調べた結果のメモ。
(2020.12.16修正)

  1. Android SDKをインストール
  2. なんでも良いので、適当に空プロジェクトを作って、プロジェクトウィンドを開く。
  3. ToolからAVD Managerを起動する。
  4. 任意のエミュレータイメージを作成する。(かなり時間がかかる)
  5. イメージができたら、一応起動テスト
  6. Android SDKを終了
  7. コマンドプロンプトを起動
  8. 「emulator -list-avds」で作成したエミュレータイメージ名を確認
    /Users/ユーザー名/Library/Android/sdk/emulator/emulator -list-avds
  9. 「emulator -avd」で上記で調べたエミュレータ名を指定すると、エミュレータが起動
    /Users/ユーザー名/Library/Android/sdk/emulator/emulator -avd エミュレータイメージ名
  10. Automaterで上記コマンドをシェルアプリ化。
参考サイト:
Android Emulator 上でアプリを実行する
コマンドラインからのエミュレータの起動

“Missing emulator engine program for ‘x86’ CPU”が発生する場合の対処法

DialogflowでGoogle Home用アプリを作ってみた結果報告

Google Home miniが事務所に来たので、色々な参考サイトを見ながら、Dialogflowで早速アプリを作ってみた。
が、実際の画面と参考サイトの説明にズレが出てたので、苦労した点をメモ。

●intents作成画面に、「User Says」って項目が無い!
「Training phrases」って項目に変更になった模様。
●Integrations画面に「Google Assistant」のon/offボタンがない
デフォルトでon状態になってて、切り替え不要になった模様。
●intents作成画面の「FulfilIntent」項目に、「Use webhook」ってチェックボックスが無い!
“Enable webhook call for this intent”って表記に変更になった模様。
●FulfilIntentのinline Editorにサンプルスクリプト入れても、エラーで動かない!
インスタンスの作成方法やパラメータの取得方法が、かなり変わってる模様。
とりあえず、シンプルなテンプレソースはこんな感じ。(オレンジの部分は、良くわからんのでそのまま使う。)

'use strict'; const functions = require('firebase-functions'); const {WebhookClient} = require('dialogflow-fulfillment'); const {Card, Suggestion} = require('dialogflow-fulfillment'); process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => { const agent = new WebhookClient({ request, response });
function yourFunctionHandler(agent) { //Actionで取得したパラメータを取得 let paramVal = agent.parameters['PARAMETER NAME']; //ログにトレースする console.log("PARAMETER NAME = " + paramVal); //結果を喋らせる agent.add(paramVal + 'です'); } let intentMap = new Map(); //ファンクションをintentに登録する intentMap.set('INTENT_NAME', yourFunctionHandler); agent.handleRequest(intentMap); });