とある石の顕微鏡写真を撮りたいと思い立ち、色々やって見ました。

まずは簡単かつ安価な方法からやってみた。
現在持っている双眼の実体顕微鏡の片眼にUSBカメラを突っ込む方法です。
買ったのは、こんな感じのセットで1万円弱の投資でした。(USBカメラは500万画素)

box-l-wfif3sw57jeitboxbwf6exvmwi-1001.jpeg

しかし、これで撮れたのは、こんな感じの写真で、期待を大きく外しました。

20171231164042525.jpg

絵にかいたような、安物買いの銭失いだった。
ツイッター仲間の方から、もっと画素数の大きいミラーレスのカメラで撮った方が良い
とのご助言により、以下を購入しました。
上が、持っていたオリンパス E-M1 MK2を顕微鏡に付ける「4/3-Cマウントアダプター」(302円)で、
下が 「Cマウント⇒30φ変換アダプター」(3546円)です。

CM43.jpeg
314xnYohNEL.jpg

ただし、これだけではだめで、オリンパス E-M1 MK2を顕微鏡に付けるアダプタには
Cマウントへの変換アダプタが必要でした。(これは、たまたま手持ちが有った)
また、どうせならと「ズーム双眼実体顕微鏡 三眼 写真鏡筒 リング照明付」も購入(これは高かった)。
そして、撮れたのが、以下の写真です。ちっとはましになったが・・・・期待には遠いなあ。

P1270002のコピー

先日の閃亜鉛鉱もついでに撮って見たが、TG-4の方が良く見えるのは私だけか?
(こっちは、トリミングしてないので、四隅がケラレてます)

P1270005のコピー

ちなみに、オリンパスの
E-M1 Mark II
E-M1 F/W version 2.0 以降
E-M5 Mark II
にだけ使える、OLYMPUS Capture で撮って見ました。
PCを見ながら色々調整できるし、シャッターも切れるので良いです。

顕微鏡にカメラを付けっぱなしにしたいのですが、今持っている E-M1 Mark II は高いのです。
このソフトが、安いE-M10でも動けばなあ。戦略がせこいと思うぞ!
売ってしまったE-M1を買い戻すか?



 2018_01_27


結局、「ゴミの日」は「ダイヤモンド」にしました。
皆さん、ピンと来たと思いますが、鉱物名はユニークな固有名詞です。
別名や宝石名等も含めて約7000種もありますし、
英名と和名が別の発音になっている場合も沢山有ります。
他のスキル名等と間違えられないように、長めの名前を選ぶと良いでしょう。

そう言えば、昔、セーラームーンに、英語の鉱物名の戦士が出ていたらしい
のですが、ご存知でしょうか?


アレクサへの指示は、以下の感じになります。

私:アレクサ、「ダイヤモンド」を開いて、新宿(行き)

うーん、他人から見て、何だか判らない指示ですが、
どうせ公開しないので、「ゴミの日」よりは良いかと思います。



 2018_01_26


何とか、動作するところまで来ました。
しかし、問題が2つあります。
1つ目の問題は、スキルのキーワードに普通の言葉や交通機関名を使うと、
自作のスキル関数に繋がらない事です。使うと、「そのスキルは、まだ
サポートしていません」とか言って終わります。
仕方ないので、前回のURLで参考にした「ゴミの日」を使っています。
使い方は、以下の感じになります。

私   :アレクサ、「ゴミの日」を開いて、新宿
アレクサ:新宿行きの平日ダイヤは、10時16分、10時30分、10時39分、です。
     新宿行きの平日ダイヤは、10時16分、10時30分、10時39分、です。
(注:聞き逃すので2回繰り返している)

まあ、「ゴミの日」をユニークな固有名詞にすれば良いように思います。

2つ目の問題は、このスキルを公開できない事です。(本質的な問題)
現在は、テスト者に自分だけを登録していますが、90日の期限が有ります。
テスト期間を更新すれば良いような気がしますが、どうなんだろう?
このあたりが、まだ未完成な感じがしますね。

とりあえず、以下に基本的な情報を書き留めておきます。
まずは、Amazon 開発者コンソールのスキル側の設定です。
<2018/02/10 16:00:コピーミス等があったので修正>
インテントスキーマ
{
  "intents": [
    {
      "slots": [
        {
          "name": "Destination",
          "type": "LIST_OF_DEST"
        }
      ],
      "intent": "GetNewFactIntent"
    }
  ]
}

カスタムスロットタイプ
タイプ:
LIST_OF_DEST

値:
新宿
しんじゅく
小田原
おだわら

サンプル発話
GetNewFactIntent {Destination} ゴミの日
GetNewFactIntent {Destination} ごみの日

続いて、AWSのLambda側のスキル関数(Python3.6)です。
これだけの規模のスキルはWebに無かったのですが、特に問題なく動作しました。
<2018/01/27 9:00:休日ダイヤの処理にケアレスミスが有ったので修正>
<2018/01/28 21:00:同様処理を共通化してコードを縮小>
<2018/01/31 9:30:再度、同様処理を共通化してコードを縮小>
import datetime

list_holiday = [101,108,211,212,321,429,430,503,504,505,
                716,811,917,923,924,1008,1103,1123,1223,1224]

list_sinjuku_h = [528,
                  601,612,621,630,641,650,659,
                  710,720,730,739,759,
                  806,819,831,840,848,859,
                                   省略
                  1910,1922,1931,1949,1956,
                  2017,2029,2040,
                  2101,2110,2118,2131,2140,
                  2207,2227]

list_sinjuku_w = [524,538,548,558,
                  612,620,633,641,648,659,
                  707,713,720,727,734,749,754,
                  808,816,825,836,844,852,
                                    省略
                  1905,1914,1938,1948,
                  2008,2016,2036,2048,2059,
                  2118,2133,2143,
                  2208,2221,2236,
                  2320]

list_odawara_h = [603,620,644,657,
                  713,731,743,755,
                  808,818,830,837,845,854,
                                   省略
                  2113,2120,2133,2141,2148,2159,
                  2211,2220,2232,2246,2256,
                  2307,2327,2348,
                  2418,2447]

list_odawara_w = [539,
                  604,616,641,656,
                  712,728,742,753,
                  802,814,824,833,844,856,
                                   省略
                  2109,2121,2134,2150,
                  2207,2222,2236,2249,
                  2308,2331,2349,
                  2429,2448]

def henkan(time):
    time_str = "0000" + str(time)
    time_str = time_str[-4:]
    answer = "、" + time_str[0:2] + "時" + time_str[2:4] + "分"
    return answer

def search(jikan, list):
    flag = False
    for x in range(0, len(list)):
        densha = list[x]
        if densha > jikan :
            flag = True
            break
       
    if x <= (len(list)-1):
        answer = henkan(list[x])
    if x <= (len(list)-2):
        answer = answer + henkan(list[x+1])
    if x <= (len(list)-3):
        answer = answer + henkan(list[x+2])
    if flag:
        answer = answer + "です。"
    else:
        answer = "、でんしゃがありません。"
    return answer

def lambda_handler(event, context):
    intent = event['request']['intent']
    value = intent['slots']['Destination']['value']

    gmtTime = datetime.datetime.today()
    dt0 = gmtTime + datetime.timedelta(hours=9)
    date = dt0.month * 100 + dt0.day
    if (date in list_holiday) or (dt0.weekday() > 4):
        holiday = True
    else:
        holiday = False

    dt1 = gmtTime + datetime.timedelta(hours=9) + datetime.timedelta(minutes=14)
    jikan = dt1.hour * 100 + dt1.minute

    if (value == '新宿') or (value == 'しんじゅく'):
        if holiday:
            result = "新宿行きの休日ダイヤは" + search(jikan, list_sinjuku_h)
        else:
            result = "新宿行きの平日ダイヤは" + search(jikan, list_sinjuku_w)
        result = result + result
    elif (value == '小田原') or (value == 'おだわら'):
        if holiday:
            result = "小田原行きの休日ダイヤは" + search(jikan, list_odawara_h)
        else:
            result = "小田原行きの平日ダイヤは" + search(jikan, list_odawara_w)
        result = result + result
    else:
        result = "行き先を指定してください。"

    response = {
        'version': '1.0',
        'response': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': result
            }
        }
    }
    return response


 2018_01_26


前回、現在時間が得られないと書きましたが、1時間?位経つと時間が変化しました。
しかし、次の電車時間を知りたいので、これでは使えません。

あれこれ探していると、WebにPython3.6でスキル関数を書いたという、以下が有りました。
http://tech.mof-mof.co.jp/blog/amazon-echo-alexa-skill-trash-day.html

これを参考にすると、私の環境でもPython3.6が、あっさり動作しました。
Python3.6での現在時間は、以下のコードで得られます。

import datetime
gmtTime = datetime.datetime.today()
dt = gmtTime + datetime.timedelta(hours=9)
jikan = str(dt.hour) + '時' + str(dt.minute) + '分'

これを実行すると、リアルな現在時間が得られました。
あともう少しです。


 2018_01_25


その後の状況を備忘録として残します。
まず、最近以下の本が出版されたので、入手しました。

AIspeaker.jpeg

しかし、今のところ、あまり役に立っていません。
唯一、自分のPCにデバッグ環境を構築する手順が参考になりました。

ただし、プログラミング言語はPythonでしたので、Pythonのサンプルを探してみると、
以下が有りました。
https://qiita.com/osa9/items/e2cc6318b7ed736ac6ff

以前のはJavaScript?をNode.js環境で動作?させていたが、これはPythonだけで動作するらしい?
ちなみに、このURLは、近くのバス停にバスが到着するまでの時間を発話する処理が
書かれています。
これを、自分のPC環境で動作させようとしましたが、うまくいきません。
結局、以下のおまじないで動作できました。

①本には、Python2.xをインストールせよと有ったが、バス停サンプルは
  Python3.xでないと動かなかった。
②Python3.xのインストールだけではだめで、「pip3 install beautifulsoup4」も必要だった。
③プログラムの実行は、以下の手順。
 ・Python3.xのShellを立ち上げ
 ・バス停サンプルの本体「alexa_bus.py」をOpenすると、「alexa_bus.py」の編集画面表示
 ・「alexa_bus.py」の編集画面で、Run⇒Run Module (F5でも可)

実行結果は、以下のようになりました。
alexa_bus.jpg


問題なのは、これをアレクサ君に発話させる方法が不明な事で、
まだ、サーバー上で動作するスキルの関数をPythonで構築できていません。
購入した本には、サーバーを有料でレンタルする必要があるらしいのだが、
AmazonのAWSコンソールを使うと出来る様に見える。

なお、前回以下の処理を入れれば完成と思ったけれど、
①電車時間をテキストから配列に格納する
②現在時間を求める
③現在時間+所要時間を求める
④③の時間以降の新宿行き電車時間を3つ発話する

肝心の②が出来ない。
正確に言うと、以下で出来たのだけど、時間が変化しない。
何故か、常にプログラム更新時間が返って来るようです。
var dt = new Date();
var hours = dt.getHours();
var newhours = hours.toString();

うーん、ここ数日の作業は、3年近くやっていた仕事に似ているなあ。



 2018_01_23



01  « 2018_02 »  03

SUN MON TUE WED THU FRI SAT
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 - - -

アクセスカウンタ

プロフィール

WG管理人

Author:WG管理人
鉱物結晶研究家

検索フォーム

ブロとも申請フォーム

QRコード

QR




pagetop