sgunji’s blog

ものづくりやプログラミングなど…最近はXamarinを少々

Raspberry Pi 3 ver.2で Google Assistant SDK を試してみる(日本語で)。その2

前回以下の記事のとおり、
sgunji.hatenablog.jp

{
  "error": {
    "code": 403,
    "message": "The request is missing a valid API key.",
    "status": "PERMISSION_DENIED"
  }
}

で止まってしまっていたのですが、
色々周りに聞きながら試行錯誤(ほとんど自分は何もしていない)していたら、

googlesamples-assistant-hotword --project_id my-dev-project --device_model_id my-model

ではなく、

googlesamples-assistant-hotword --device_model_id my-model

とすることで無事認識してくれました。

このままだとhotwordは日本語に対応していないので、
Googleアシスタントから直接設定してやる必要があります。

Googleアシスタントを開き設定を押します。
f:id:sgunji:20180110221713p:plain

バイス作成時に付けた名前のデバイスを選択します。
f:id:sgunji:20180110221754p:plain

アシスタントの言語を選択し、日本語にします。
f:id:sgunji:20180110221849p:plain

住所とかも登録しておくと、天気とかを現在地で調べてくれます!

動いて良かった!

Excelのシート保護やブック保護のパスワードを忘れた場合の対処方法

シート保護やブック保護したあとにパスワードを忘れてしまったことはありませんか。

Office 2007以降ですが,パスワードを無理矢理解除する方法があります。

Office 2007以降でExcelやWordではOffice Open XMLというものが採用されています。

詳しくは以下から
Office Open XML - Wikipedia

拡張子が.xlsxという最後にxやmがついたものはこの形式ファイルになります。
もともとがzipファイルなので,拡張子をzipに変更すればある程度見れるようになります。

まず,拡張子を変更します。
f:id:sgunji:20180110123249p:plain

f:id:sgunji:20180110123252p:plain

後ろに.zipを付けます。
f:id:sgunji:20180110123254p:plain

当方の環境はWindows 7ですので,
このままダブルクリックしてzipファイルの中を覗きます。

f:id:sgunji:20180110123832p:plain

f:id:sgunji:20180110123841p:plain

f:id:sgunji:20180110123850p:plain

シートの保護を解除したいシート名.xmlを右クリックしてコピーして
f:id:sgunji:20180110123858p:plain

適当な別のフォルダに貼り付けします。


そのファイルをメモ帳か何かで開いて

<sheetProtection ・・・・・/>

の部分を削除します。

f:id:sgunji:20180110124204p:plain

↓削除
f:id:sgunji:20180110124303p:plain

このxmlを上書きしてエディタを閉じます。

あとは逆手順で,出来上がったxmlファイルをコピーして
貼り付けします。(上書きするかどうかの警告メッセージが出ますが無視してOK)
f:id:sgunji:20180110123850p:plain

あとは,後ろの.zipを消して
f:id:sgunji:20180110123254p:plain

元に戻すだけ。
f:id:sgunji:20180110123252p:plain

ブック保護を解除する場合は,
f:id:sgunji:20180110124655p:plain
のworkbook.xmlをどこか適当なとこにコピーして
エディタで開き,

<workbookProtection ・・・・・/>

を消せばOKです。

ただ,上記方法は間違うとファイルが開けなくなる恐れがありますので,自己責任でお願いしたいのと,言うまでもありませんがバックアップは必ず取りましょう!

Raspberry Pi 3 ver.2で Google Assistant SDK を試してみる(日本語で)。

12月20日 Google Assistant SDKのブログで日本語に対応したと情報があったことから試してみることに。

developers.googleblog.com

基本的には以下の通り。
Set Up Hardware and Network Access  |  Google Assistant SDK  |  Google Developers


自分は以下から落としてきたRASPBIANを使っています。
www.raspberrypi.org

imgファイルをSDに書き込むには
https://sourceforge.net/projects/win32diskimager/sourceforge.net
を使ってます。

f:id:sgunji:20171228154832p:plain
こんなかんじで、Writeを選択してもらえれば、警告文がでますので、YESを選択します。

イメージをSDに書き込んでいる間にGoogle側の設定を行います。
cloud.google.com

右上のログインを選択します。
f:id:sgunji:20171228155537p:plain
ログインをしたら、その隣のコンソールを選択します。

上の検索窓にassistantと入力すれば、Google Assistant APIでてきます。
f:id:sgunji:20171228155928p:plain

順番に進みます。
f:id:sgunji:20171228161635p:plain

プロジェクト未作成のまま有効と押すと、プロジェクトを作るよう促されます。
f:id:sgunji:20171228161703p:plain

適当にプロジェクト名をつけて作成します。
f:id:sgunji:20171228161649p:plain

次に認証情報を作成します。
f:id:sgunji:20171228161718p:plain

OAuthという仕組みでGoogleのサービスにログインするので、同意画面を作成しておきます。
f:id:sgunji:20171228161734p:plain

認証情報を作成します。OAuthクライアントIDを選択します。
f:id:sgunji:20171228161750p:plain

その他を選択して、適当に名前をつけます。
f:id:sgunji:20171228161809p:plain

下矢印を選択してjsonファイルをダウンロードしておいてください。
f:id:sgunji:20171228162122p:plain

ここまでくるとたぶんSDへの書き込みを終わっているので、ラズパイにさしてラズパイ側を起動します。

日本語入力する場合は、

sudo apt-get install ibus-anthy

または、

sudo apt-get install ibus-mozc

vncを使う方は、
(最近のPi3はRealVNCが最初から入っていたような)

sudo apt-get install tightvncserver

Google Assistant のために Python3をいれます。
SDカードへのイメージ書き込み時にもとのイメージがfullだったらいりません。

sudo apt-get install python3-dev
python -m pip install --upgrade pip setuptools

マイク情報を取得するには、

arecord -l

スピーカー情報を取得するには

aplay -l

設定ファイルを作ります。
[.asoundrc]でディレクトリは/home/pi/に保存します。

pcm.!default {
  type asym
  capture.pcm "mic"
  playback.pcm "speaker"
}
pcm.mic {
  type plug
  slave {
    pcm "hw:<card number>,<device number>"
  }
}
pcm.speaker {
  type plug
  slave {
    pcm "hw:<card number>,<device number>"
  }
}

あんまりいないかもしれませんが、
ラズパイに直接HDMIをつないでいる場合は、
別で用意したスピーカーから出力できるよう設定する必要があります。

sudo raspi-config

Advanced options から Audio を選択して3.5mm ジャックの方を選べればOKだと思います。
ご自身の環境に合わせて設定してください。

Googleのガイドに従ってPython3 が動く仮想環境を構築します。

sudo apt-get update
sudo apt-get install python3-dev python3-venv # Use python3.4-venv if the package cannot be found.
python3 -m venv env
env/bin/python -m pip install --upgrade pip setuptools
source env/bin/activate

パッケージをインストールします。

python -m pip install --upgrade google-assistant-library
python -m pip install --upgrade google-assistant-sdk[samples]

資格証明書を作成します。
まず作成するためのライブラリを落としてきます。

python -m pip install --upgrade google-auth-oauthlib[tool]

下記のように/path/to/に自分の環境にあったように入力し、ダウンロードしたjsonファイルのファイル名を合わせます。
ちょうど下記のような[client_id]のところに自分が落としてきた部分を書き換えます。

google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless --client-secrets /path/to/client_secret_client-id.json

画像を忘れましたが、

Please visit this URL to authorize this application: 

以降にかかれたURIにアクセスするようにします。

Googleに自分のアカウントでログインして、
4/で始まるコードが表示されるのでそれをコピーして
ターミナルが

Enter the authorization code:

と出ているので、この後ろに貼り付けします。
すると、

credentials saved: /path/to/.config/google-oauthlib-tool/credentials.json

と表示され、資格証明書が作成できました。

あとは、[my-model]の部分を自分の好きな名前に変えて
GoogleはプロジェクトIDを頭に加えることを推奨しているよう?)

googlesamples-assistant-devicetool register-model --manufacturer "Assistant SDK developer" --product-name "Assistant SDK light" --type LIGHT --model my-model

[my-dev-project]を自分のプロジェクト名に書き換えて、
[my-model]を上で決めたモデル名に書き換えるだけで

googlesamples-assistant-hotword --project_id my-dev-project --device_model_id my-model

できるはずなのですが、

{
  "error": {
    "code": 403,
    "message": "The request is missing a valid API key.",
    "status": "PERMISSION_DENIED"
  }
}

と出てしまいました。
パーミッションに問題があるようなので、
一応、アクティビティコントロールを見て確認しましたが、
https://myaccount.google.com/activitycontrols

ウェブとアプリのアクティビティ
端末情報
音声アクティビティ

すべてアクティブにしているのですが、
このエラー・・・。

誰か教えてください・・・。



解決しました!
sgunji.hatenablog.jp

IDE0006エラー

Xamarinを使っていてエラーが出たので備忘録として・・・

〇重大度レベル
警告
〇コード
IDE0006
〇説明
プロジェクトの読み込み中にエラーが発生しました。失敗したプロジェクトとそれに依存するプロジェクトの完全なソリューション解析など、一部のプロジェクト機能が使用できなくなりました。
〇プロジェクト***** ファイル
〇行1
〇抑制状態
アクティブ
〇詳細の説明
この問題の原因を確認するには、次をお試しください。

1. Visual Studio を閉じる
2. Visual Studio 開発者コマンド プロンプトを開く
3. 環境変数 "TraceDesignTime" を true に設定する (set TraceDesignTime=true)
4. .vs directory/.suo ファイルを削除する
5. 環境変数 (devenv) を設定したコマンド プロンプトから VS を再起動する
6. ソリューションを開く
7. 'C:\Users\******\AppData\Local\Temp\\******_*.designtime.log' を確認し、失敗したタスク (FAILED) を探す

Googleマップ マイプレイスの自分以外が所有する地図について

マイプレイスの地図の中で自分以外が所有する地図はマップ側からは消せません。

ただ、自分以外が所有するマップは、ドライブと連携されているようなので、ドライブ側からアプローチしてみたところ、消えました!!

手順としては、
1.ドライブを開く
2.共有アイテムを開く
3.消したい地図をドライブから削除する

とすると、
一定時間後、マップから削除されます!


-スマホからの投稿-

Xamarin.FormsのMasterDetailPageのテンプレートについて

Xamarinのテンプレートを見ているとデフォルトでDetailPageを発見!

PCLプロジェクトを右クリックして,【新しい項目を追加】から
f:id:sgunji:20170325130719p:plain

適当に名前を付けて追加しますと,必要なものが勝手にできてしまう!!

  • (適当につけた名前).xaml
  • (適当につけた名前)Detail.xaml
  • (適当につけた名前)Master.xaml
  • (適当につけた名前)MenuItem.cs

が自動生成されます。

f:id:sgunji:20170325131115p:plain

App.Xaml.csを修正して,

public App()
{
     InitializeComponent();
     //MainPage = new NavigationPage( new App8_PCL.MainPage());
     MainPage = new DetailPage1();
}

ビルドすると・・・

CS0101エラーが発生し,名前空間が重複しているといわれます。

下記リンクによると,これはテンプレートのバグらしい。

forums.xamarin.com

優秀な世界のプログラマーに従って修正が必要です。

まず,作成された

  • DetailPage1.xaml.cs
  • DetailPage1Detail.xaml.cs
  • DetailPage1Master.xaml.cs
  • DetailPage1MenuItem.cs

名前空間を直します。

それぞれのソースの名前空間
(プロジェクト名).(適当につけた名前)
となっているので,
(プロジェクト名)のみに直します。

修正前・・・

namespace (プロジェクト名).DetailPage1

修正後・・・

namespace (プロジェクト名)

また,.DetailPage1Master.xaml.cs

class DetailPage1MasterViewModel : INotifyPropertyChanged
{
   public ObservableCollection<DetailPage1MenuItem> MenuItems { get; }
   public DetailPage1MasterViewModel()
   {
      DetailPage1MenuItems = new ObservableCollection<DetailPage1MenuItem>(new[]
      {
          new DetailPage1MenuItem { Id = 0, Title = "Page 1" },
          new DetailPage1MenuItem { Id = 1, Title = "Page 2" },
          new DetailPage1MenuItem { Id = 2, Title = "Page 3" },
          new DetailPage1MenuItem { Id = 3, Title = "Page 4" },
          new DetailPage1MenuItem { Id = 4, Title = "Page 5" },
          });
      }
      public event PropertyChangedEventHandler PropertyChanged;
      void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));


}

の部分の

DetailPage1MenuItems = new ObservableCollection<DetailPage1MenuItem>(new[]{...}

ObservableCollection<DetailPage1MenuItem> DetailPage1MenuItems = new ObservableCollection<DetailPage1MenuItem>(new[]{...}

に修正します。

これで修正完了です。
ビルドしてみましょう。

f:id:sgunji:20170325135607g:plain

ただし,このままだとAndroid版はbackキーを押したときエラーで落ちます。

forums.xamarin.com

Xamarin.Formsのバージョンを2.3.4系に上げるといいようなので,
一番(投稿時)新しいのは2.3.4.214-pre5なので,これをインストール
ソリューションをクリーンした後,ビルドするとbackキーエラーも回避できるようです。

VisualStudi2017リリース その2

個人的に興味があったのでCommunityをインストールしてみたところ,VS2015のXamarinと共存できている模様。しばらく2丁拳銃状態でやってみようと思う。

インストールは10分とはいかなかったがそれでも30分くらいで終わったような気がする。
その前にオフラインでインストールできるようにしたんだけども。

IDE自体も2015と比べると軽いような気もしなくもない。

インストールが早いのは助かります。

www.visualstudio.com