LEDネームバッジの制御方法

趣味TECH祭2019(夏)にて、LEDネームバッジを購入したので、取り扱い方法についてメモを残してみたり。

同類品が幾つか存在している様なのですが、自分はこちらのプログラムで制御出来ました。

Led-Bedge-44×11

https://github.com/jnweiger/led-name-badge-ls32

44×11というのは、LEDのサイズが横44、縦11ドットという意味です。

動作確認はUbuntu 16.04 LTS上のPython3で行いました。

ライブラリの導入は、README.mdに記載されている内容そのままです。

sudo pip install pyhidapi
sudo pip install pillow
sudo apt-get install libhidapi-hidraw0
sudo ln -s /usr/lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 /usr/local/lib/

基本的な使用法は、以下の様になります。

# 例)
sudo python3 ./led-badge-11x44.py "TEST"

送信が完了するとネームバッジの電源が落ちますので、ケーブルの抜き差しをして再度電源を入れてやります。

標準状態では半角英数しか利用できませんが、PNG画像を指定することで任意の二値画像を表示させることが出来ます。

今回は値段を表示させたかったので、以下の様な画像を用意しました。白が点灯する場所となります。

# 例)
sudo python3 ./led-badge-11x44.py ":image.png:"

iPhone/iPad用のポーズ人形

ArtPose, Easy Poserについてのメモ記事。

iPad Air2でキャプチャーを行いました。

ArtPose Pro

http://art-pose.com

ArtPoseには三種類のラインナップがあり、以下の三種類がリリースされています。

  • ArtPose Male Edition
  • ArtPose Female Edition
  • ArtPose Pro

それぞれ700円前後で販売されていますが、ArtPose Pro以外は男性モデル・女性モデル専用版ですので買う必要はないです。

基本画面

モデルは最大で二体まで表示させる事が出来ます。体型については若干の変更が可能です。(痩せ・中・太り(筋肉質)程度の切替)

ポーズ操作

ArtPoseの操作は動かしたい関節をクリックしてから、スワイプする事でその場所を回転させます。このとき一本指か二本指かで回転軸が変わります。

ポーズについては自分でつける以外にプリセットからの選択も可能です。

操作自体は割と直感的ですが、リアルよりな造形です。

手の調整

手の形はプリセットの中からの切替のみとなります。

自分はこれを弄ってポーズを考えて、気に入ったポーズが出来たらスクリーンショットで保存しています。

Easy Poser

https://madcatgames.tistory.com

Easy Poserは広告付きの無料版とアプリ内課金による有料版(600円前後)があります。(画面はPro版)

無料版では操作自体は行えますが、

  • 保存が出来ない
  • 一体しか配置出来ない
  • 選択出来るモデルが少ない
  • プリセットポーズが一部しか選択出来ない

といった制限があります。

ArtPoseはリアルでしたがこちらはマンガ・アニメ向けのモデル構成となっています。モデルには大人・子供の男女が用意されていたり、四頭身のモデル等もあります。

また、小物を持たせたり簡単なボックスを配置したりも出来ます。

ポーズ操作

ポーズの設定は動かしたい場所を選んでから、表示されるスライダーをドラッグする事で行います。ArtPoseに比べるとやや直感的ではないですが、

手の調整

手の形はプリセットから選択する事も出来ますが微調整も可能です。

出来なくはない…といった感じで結構面倒かも。

Taskletのサンプル

Stackless PythonのTasklet実行のサンプルコード。

# -*- coding: utf-8 -*-
import stackless


def task_setup1(name):
    """何らかのセットアップをする関数1
    """
    print("task - %s - prologue" % name)
    for n in range(2):
        print("task - %s - step(%d)" % (name, n))
        # 任意のタイミングで自分の処理を一時停止して他のタスクに切り替える
        stackless.schedule()
    print("task - %s - epilogue" % name)


def task_setup2(name):
    """何らかのセットアップをする関数2
    """
    print("task - %s - prologue" % name)
    for n in range(3):
        print("task - %s - step(%d)" % (name, n))
        # 任意のタイミングで自分の処理を一時停止して他のタスクに切り替える
        stackless.schedule()
    print("task - %s - epilogue" % name)


def main():

    # 処理すべきタスクを必要なだけ登録
    task1 = stackless.tasklet(task_setup1)
    task1.setup("task1")
    task2 = stackless.tasklet(task_setup2)
    task2.setup("task2")

    # メイン側では何か処理をしつつタスクの終了を待つ
    while any([task1.alive, task2.alive]):
        print("main ----------")
        # タスクを1ステップ呼び出し
        stackless.schedule()
        print("")

    # タスク終了後は次の処理へ
    print("tasklet - complete")


if __name__ == "__main__":
    main()

実行結果

taskletは、登録した順番に呼び出されて処理される。

実行するTaskは常に一つとなる為、同期オブジェクトは不要となります。

main ----------
task - task1 - prologue
task - task1 - step(0)
task - task2 - prologue
task - task2 - step(0)

main ----------
task - task1 - step(1)
task - task2 - step(1)

main ----------
task - task1 - epilogue
task - task2 - step(2)

main ----------
task - task2 - epilogue

tasklet - complete

こういった処理は、microthread, Fiber, coroutineといった名称で呼ばれます。(Stackless Pythonではtaskletです)

audulus

つくってみたもの
添付のサンプルデータ

モジュラーシンセのaudulusを使ってみました。

結構使いやすい。いまのところ使う予定はないですけど…

pixivPayをインストールしてみました

うちのサークルは商品点数が多いので、少しでもレジの負荷を緩和できないかなと思っていたところ、pixivPayのレジ機能が使えるかも…ということでインストールしてみました。

pixivPayで出来ること

pixivPayは販売(店側)と購入(客側)の両方を兼ねているアプリとなります。

 トップ画面

利用するにはpixivアカウントと携帯電話番号(番号を登録するとSMSで番号が通知されてくるタイプの認証が初回にあります)が必要です。

QRコードを読み込んで決済する場合は「支払う」を選択する事でQRコード読み取り画面になります。

今回はレジとして利用するので下部メニューからマイページを選択します。

 マイページ

マイページを開くと取引一覧を管理する画面が表示されます。

レジなので商品の管理を選択します。

 商品管理画面

(上図では既に商品一覧が表示されています)新しく商品を登録する場合は、下部メニューの商品を登録から、編集する場合は商品をタップします。

  登録と編集画面

商品は「写真」「商品名」「値段」「成人向けか」の4項目を設定出来るのですが、全てが設定されていないと登録出来ません。

その場で写真を撮影するのでなければ、事前に問題のない画像(例えば単なる白画像)を用意しておくのが良いです。

 マイページ

登録が終わったらマイページに戻って、今度は販売を開始するをタップします。

 レジ画面1  レジ画面2

先ほど登録した商品画像が表示されます。

タップすると左上に数字が表示されて、現在の合計金額が下部に表示されます。誤って選択してしまったりした場合は、画面を下にスワイプしてから戻すとリセット出来ます。

個別にキャンセルする場合は、後述のお会計するをタップした画面で行います。

商品が全て決まったら、お会計するボタンをタップします。

 お会計画面

決済方法は現金とQRコードが選択出来ます。

商品リスト横にある×ボタンを押すと、リストから削除出来ます。

現金ボタンをタップとその時点で「確定」となってしまいますので、商品やお釣り等諸々を渡した後で押すのが良いです。

ただ、レジシステムとして考えると「お預かり」という段階がない為、おつり計算は自分でやるしかありません。

電子決済にする事で「お預かり」や「釣り銭計算」という手間を省くのが目的なので、そう言うものかもしれません。

ただ、現金 -> お預かり(受け取った金額の記入画面と釣銭表示画面) -> 確定といったフェイズがあると嬉しいなと思いました。

 マイページ

マイページから販売したものを選ぶと販売した商品の履歴を管理する事が出来ます。

  

テストで購入した情報や誤操作で登録されてしまったものはここから削除が可能です。

表示できるのは

  • 取引単位の時系列履歴
  • 商品別の販売数
  • CSV出力

その他1

 ひとまず設定画面からユーザー設定を開いて

 pixivプロフィールを公開するをオフ

購入してくれた人にpixivのプロフィール情報を公開するかを設定出来るのですが、私はひとまずオフにしておきました。(現金決済の時はそもそも関係ないですけど)

その他2

 アシスタント機能

この機能を使用すると他の端末同士で同じ商品リストが共有出来ます。試してませんが複数人でレジをやる際には個別設定の手間が省けそうです。

なお、自分のアカウントで複数台を使い分ける場合は、特に何もしなくても情報が共有されている状態です。

気になった事とか

全体的に可もなく不可もなく、といったところ。

釣銭の計算が出来なかったり、在庫管理がない為、「限定5個」とか「現品のみ」といった形態を取りづらいというのがあります。

一時的に非表示にしたり「完売」といったラベルが付けられると嬉しいかも。

Tweetのリアルタイム取得

Twitter APIのstatuses/filterを使用して、リアルタイム取得を擬似的に行えます。

動作確認はPython 3.6で行いました。

# -*- coding: utf-8 -*-
import sys
import json
import twitter


TWITTER_SCREEN_NAME = "(screen_name)"


def display_tweet(dict_tweet):
    try:
        print("--------")
        print("%s %s" % (dict_tweet["user"]["name"], dict_tweet["user"]["id_str"]))
        print("%s" % (dict_tweet["text"],))
        if "entities" in dict_tweet:
            if "media" in dict_tweet["entities"]:
                for dict_media in dict_tweet["entities"]["media"]:
                    print(dict_media)
        print()
    except KeyError:
        if "delete" not in dict_tweet:
            print(dict_tweet)
            sys.exit()


def main():

    with open("config.json", "r") as h_json_r:
        dict_json = json.load(h_json_r)
        o_twitter = twitter.Api(**dict_json)

    # フォローユーザーの取得
    list_raw_friend = o_twitter.GetFriends(screen_name=TWITTER_SCREEN_NAME)

    dict_friend = {}
    for r in list_raw_friend:
        dict_friend[r.id_str] = r
        print("%s %s" % (r.name, r.id_str))

    # ツイートの取得
    iter_tweet = o_twitter.GetStreamFilter(follow=dict_friend.keys())

    for r in iter_tweet:
        display_tweet(r)


if __name__ == "__main__":
    main()

# [EOF]

config.jsonにはTwitterの認証キーを設定します。

{
    "consumer_key": "****",
    "consumer_secret": "****",
    "access_token_key": "****",
    "access_token_secret": "****"
}

 

三年ぶりにPotrace GUIを更新

GitHubで公開している Potrace GUI を久しぶりに更新しました。

Potrace GUIを簡単に説明すると、コマンドラインから使用する二値画像のベクトル化ライブラリである、 potrace をPyQT5でGUI化したものです。

プログラム自体はオリジナルのpotraceをそのまま使用していますので、動作には別途 potrace が必要です。

Windows版(amd64)のみ、potraceのバイナリを同梱しています。

 さりげなくUIも修正していたり。

 ツールバーのボタンで変換前と変換後を切り替えられます。

もう少し判りやすい図を。

主に不具合の修正をしているのですが、幾つか機能追加をしています。

  • 実行時にpotraceを確認し、見つからない場合はダイアログ表示を行うようになりました。
  • BMP以外の画像形式(jpegやPNG、TGA)に対応しました。
  • 別途インストールが必要だったpotraceを同梱しています。(x86_64 Windows版のみ)
  • 現在の変換設定を使用しての、複数ファイル変換が可能になりました。
  • 変換元と変換後の画像を切り替えが可能になりました。
  • リアルタイムプレビューの更新頻度を下げる事で、UIの応答性を向上させました。

Windows版(amd64)は、以下からダウンロード可能です。

https://github.com/MizunagiKB/potrace_gui/releases/tag/v0.2.0

キャラクターの類似傾向

久しぶりのニューラルネットワークネタ。

某ゲーム向けにアップロードされている、キャラクターの性格付けが設定されたカテゴリとどの程度関係しているかを調べてみました。

ニューラルネットワークの作成はSONY NeuralNetworkConsoleを使用しました。

学習データは1カテゴリあたり350件づつ、評価用には100件づつ使用しています。

学習は10000エポック行いました。

 分類表

10件以上になっている場所を赤色にしています。

10件以上なので正解率10%というわりと甘い閾値ですが、綺麗に分類されれば、左上から右下に向けて赤い線になるはずです。

でもそううまく行くこともなく…

 誤判定をならべてみたもの

誤判定したカテゴリを並べてみました。

なんとなく類似傾向があるようなないような…

なお今回の学習には髪型や髪の色は含めませんでした。

某ゲームでキャラエディット

18歳未満の方は遊べないゲーム、コイカツ!を使用して3Dキャラクターを作ってみました。

以下のキャラクターはオフィシャルのアップローダーにも投稿してあるのですが、検索するのが大変なのでダウンロードデータの配布ページを別途用意しました。

以降の更新は以下のページで行います。

コイカツ!・キャラクターデータ

 優莉 祐里香 / 純真無垢で陸上部

 美影 瀬里華 / 大和撫子で茶道部

 祈里 アイラ / 野性的でチアリーディング部

 茜 美咲 / ミステリアスで帰宅部

 MODEL XH01F / 無口で帰宅部

自由にパーツを組み合わせてキャラクターを作れるのですが、エディットしている本人の絵柄の傾向が出てしまうのか、結局は手癖で描いたときに生み出さそうな容姿になってしまいました。

同じソフトを使っているのに、自分の作ったキャラクターが今風にならないというのは面白いのですが、なんだか自分の想像力の限界みたいな物を思い知ったり。

 

髪よりも手前に目を描画する設定が出来るのはちょっと嬉しかったり。

.

おまけ

http://www.illusion.jp

StructureSynthによるビル生成(2)

ヒント(道や建設して欲しくないところ)を指定してあげると、そこに考慮してビルを建ててくれるようにしてみました。

 こんな感じで与えます。

輝度でビル密度を与えようかな…と思っていますが、現在は黒い場所しか考慮していません。

 ビルが建設されます。

 ビルのディティールは低い…

.

試しに生成してみたスクリプト(そのままStructure Synthに貼り付けられます)

build_20180610.es

StructureSynthによるビル生成(1)

StructureSynthによる生成。

Sunflowでのレンダリング

こちらはShadeでレンダリングしたものをCLIP STUIO Paintで加工。

.

こんなスクリプトで生成しました。

set background #eee

200 * {x 1} 100 * {y 1 color #fff } random_box

rule random_box w 10
{
    box
    { s 2 1 1 } building
}

rule random_box w 6
{
    box
    { s 1 2 1 } building
}

rule random_box w 4
{
    box
    { s 1 1 1 } building
}

rule random_box w 1
{
    box
    { s 3 3 1 } building
}

// ----

rule building w 5 { building_1 }
rule building w 5 { building_2 }
rule building w 5 { building_3 }
rule building w 5 { building_4 }


rule building_1 w 1 {}
rule building_1 w 2
{
    { s 1 1 0.8 } box
    { s 0.8 0.8 1 }box
    { z 1 } building_1
}

rule building_2 w 1 {}
rule building_2 w 2
{
    { s 1 1 0.8 } box
    { s 0.8 0.8 1 }box
    { z 1 rz 5 } building_2
}

rule building_3 w 1 {}
rule building_3 w 2
{
    { s 1 1 0.5 } box
    { z 0.5 } building_3
}

rule building_4 w 1 {}
rule building_4 w 1
{
    { s 1 1 0.2 } box
    { s 1 1 0.5 } box
    { z 0.5 s 0.9 } building_4
}

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。

同人マンガ原稿用紙を生成するウェブアプリ

微妙な便利さを求めて作成してみました。

 ウェブアプリである必要はあんまりなかったりして。

http://www.mizunagi-works.com/gadgets/mangasheet/mangasheet.html

.

600dpi, 300dpi, 150dpi, 96dpiの解像度でA4サイズのマンガ原稿用紙を生成します。

CLIP Studioなんかを使用している場合は、全く不要なアプリケーションだと思うのですが、自分が使用しているソフト(ArtRage)はマンガ作成向けでは無いため、微妙に便利な感じ…かも。

フォルダ内の重複画像を取り除きたい(2)

NNC Utilsで指定可能なハッシュ方法の説明を追記しておきます。

Hash方法

Average hash

画像を縮小した後に全画素の平均値を取得します。縮小画像の画素が求めた平均値よりも明るい(1)か暗い(0)かを元にハッシュ値を生成します。

画像の全体的な輝度や若干の色調補正が加わっていても、同じ画像と見なすことが出来ますが、縮小した結果が似たような画像だと適切な区別ができなくなります。

Perceptual hash

画像を縮小した後にDCT(離散コサイン変換)をかけます。求めた結果から低周波成分を取り出し、中央値を取得します。高周波成分を取り除くという事は、画像からノイズ(小さな差異)を取り除くという事になります。

求めた低周波成分領域から中央値よりも大きい(1)か小さい(0)かを元にハッシュ値を求めます。

一旦周波数に変換すると、直接の画素的な位置情報が失われてしまいますが、全体的に似ている(同じ様な周波数を含んでいるか)かどうかを区別する際に使用します。

Perceptual hash (simple)

Perceptual hashと同じですが、DCTの計算を一回、中央値を使わずに平均値を使用しています。

Difference hash

画像を縮小した後に、左右の画素同士を比較して、どちらが明るいかを求めます。

Average hashは画素全体の輝度から平均を求めるため、細かな差異が埋もれてしまう場合がありますが、こちらを使用するとうまく拾い出せる場合があります。

画像の一部分部分だけが異なっているものを区別したい場合に有効ですが、比率が異なる画像を違うものとみなしてしまう場合や、ノイズを有効な画素と見なしてしまう場合があります。

ある画像と同じ画像をJPEGで圧縮して劣化させた画像を同じものと見なしたい場合には良い結果が得られません。

Difference hash (vertical)

Difference hashと同じですが、画像比較を上下で行います。

Wavelet hash

画像を縮小した後に輝度情報を0.0〜1.0の範囲に変換し、wavelet変換(haar)を行います。変換結果から低周波成分の結果を取得し、中央値を求めます。

求めた低周波成分領域から中央値よりも大きい(1)か小さい(0)かを元にハッシュ値を求めます。

Perceptual hashと似たような処理ですが、waveletはDCTに比べてより適切な分解を行うことが出来るため、Perceptualよりも適切な区別が期待できます。

imagehashが使用できるアルゴリズムで最も重い処理となります。

.

フォルダ内の重複画像を取り除きたい(1)

「あるフォルダ内に保存されている画像が重複しているかを確認する」といった用途の場合、sha1等のハッシュを計算する事で重複を除外する事が出来ます。

この方法はどの様なファイルに対しても上手く動作してくれるのですが、ファイルのバイナリが完全に一致していなければ同一ファイルと認識されません。

特に画像ファイルの場合ですと、

  • 画像自体は完全に同じだがEXIF等のタグ情報が異なる。
  • 画像としては同じように見えるが、解像度が異なる。

といった画像は「同じ(似ている)」だと認識して欲しい時があります。

imagehash

そんな要求に対応するためにimagehashというものがあります。

Pythonではimagehashというモジュールがあり、Pillowと組み合わせることで容易にimagehashを計算する事が出来ます。

実際にハッシュを取得してみる

 いろんなフーちゃん

わりとうまくいっているみたい。

NNC Utils

まだ完成していない部分もありますが、ひとまずGitHubで公開しました。

ついでにGUIもつけてみたりして。

 PyQt5(画像はMac版)を使用しています。

.

Windows用バイナリ

NNC Utils

OneDriveからGitHubに移動させました。

簡単な使用方法

インストール方法

圧縮されたファイルをデスクトップ以外の場所に展開してください。

実行方法

実行は以下の三通りの方法があります。

なお、どちらの方法を使用してもファイルの自動削除等は行いませんので、結果が保存されたファイルを頼りに処理を行ってください。

(使用方法1)

コマンドプロントからchk_image_dup.exeを引数付きで実行します。

REM 使い方
chk_image_dup.exe -s 調べたいフォルダ名

結果はchk_image_dup.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

(使用方法2)

同梱されているimage_dc.batのショートカットを好きな場所(例えばデスクトップ)に作成します。

作成したショートカットに検索したいファイルをドロップすると、そのフォルダ以下に対して重複確認を行ってくれます。

結果はchk_image_dup.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

(使用方法3)

nnc_utils.exeを実行するとGUIモードで立ち上がります。

結果は、ウィンドウ内のテキストボックスとnn_utils.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

image_dc_result.tsvについて

重複ファイルが見つかるとimage_dc_result.tsvに重複したファイル名が保存されます。

ファイルはタブ区切りのテキストファイルで、それぞれのカラムは以下の内容となっています。

  • イメージハッシュ値(値が同じ物は同じ(或いは似ている)内容の画像ファイル)
  • ファイル名称
  • 画像の幅
  • 画像の高さ
  • 画像形式
  • ファイルフォーマット

対応している画像形式はPillowがサポートしているものとなります。(こちらで動作確認をしているわけではありません)

アンインストール方法

設定ファイル等は生成しませんので、展開したファイルを全て削除してください。

.

shellをfishにしてみました

長年使用していた(デフォルトだけど)bashからfishへと環境を切り替えてみました。

OSX環境でfishを呼び出すと、conda activateが出来なくなりましたが、 ~/.config/fish/config.fish に

source (conda info --root)/etc/fish/conf.d/conda.fish

と、一行追加すると使用できるようになります。

ニューラルネットワークで要素抽出

Autoencoder

ニューラルネットワークは画像を認識させる際に、元情報よりも低次元で表現するようにネットワークを構成することが出来ます。

そのような低次元で表現された空間には、学習に使用した情報の要素が詰まっているとも言えます。

要素が詰まっているのですから、その情報を抜き出して再び画像にすれば、ニューラルネットワークが思っている物の片鱗を見ることが出来る…かもしれません。

技法的にはオートエンコーダと呼ばれるものなのですが、画像認識に使用しているヴィヴィオ達の画像を使用して計算させてみました。

Autoencoderを通したヴィヴィオ達

結果は以下のような感じです。

   

多分、リリカルなのはVividをよく知っている人であれば、誰か答えられるのではないかと思います。

今回は100次元で表現してみましたが、多分もっと少ない要素で表現出来そうで、ヴィヴィオ達は見た目だけでもかなり分類しやすそうに感じます。(…ってプロの方がそうなる様にデザインされているわけですから、そりゃそうなりますね。)

次元数を下げるほどぼやけた画像になっていき、極端に下げると「黄色っぽい」「みどりっぽい」だけの画像になります。

学習結果の応用

この学習は、

  • 「ヴィヴィオの絵」 + 「ヴィヴィオ」
  • 「アインハルトの絵」 + 「アインハルト」
  • 「リオの絵」 + 「リオ」
  • 「コロナの絵」 + 「コロナ」

という入力で学習させましたので、以下の様な入力を受け付けます。

  • 「ヴィヴィオの絵」 + 「アインハルト」
  • 「写真」 + 「ヴィヴィオ」

これを使えば、入力された画像をヴィヴィオっぽくしたり、アインハルトっぽくしたりする事が出来そうです。

試しに自分の絵を使って実行してみたものがこちら。

  •  =  + ヴィヴィオ
  •  =  + アインハルト
  •  =  + リオ
  •  =  + コロナ

…心の目で見ればなっているような、なっていないような。

今回やったことを図にすると、以下の様になります。

 学習させます。

 学習結果とヒントを使い、絵を加工。

Azure上でnnablaを動かしてみました

現在使用しているAzure環境にnnablaをインストールして、ウェブアプリを作成してみました。

nnablaはSONY Neural Network Consoleでも使用されているもので、比較的簡単にニューラルネットワークを利用出来るのですけど、学習した結果をどう使うかがなかったので、サンプルを兼ねて作ってみました。

VE Detect

https://www.mizunagi-works.com/gadgets/ve_detect/index.html

 しょっぱなから誤判定するデータを与えていたりして

言い訳っぽいのですけど、これは学習データが少ないのと「アインハルトかヴィヴィオのどちらか」を判定させるように学習させた結果となります。

例えばおにぎりの画像を与えたときでも必ずどちらかという判定します。(どちらでもないという回答を出すようには学習させていません)

Azureへの導入

ニューラルネットワークというと、強力なGPUを使用する負荷の高いアプリケーションに感じられるかもしれません。

確かに計算量は多いのですが、処理が重たいのは学習をする時で、学習済み結果を利用するのはそんなに重くありません。

(今回作成したニューラルネットワークの構成が単純というのもあります)

自分が使用しているAzure上のVMはA1 Basicでかなり非力(下から2番目)なのですが、学習結果を利用するにあたってはそこまで負荷はありませんでした。

SONY NNCによるネットワークの作成と学習

こんなネットワークにしてみました。

10,000回ほど学習させました。

プログラムの作成

学習が完了すると、学習結果が保存されたフォルダにparameters.h5というファイルが生成されています。

学習済みモデルを利用するにはこのh5ファイルと、NNCからエクスポートしたPythonスクリプトが必要となります。

スクリプトはちょっと長めですのでGitHubに置いておきました。

bottleを使用していますので、ローカルでこっそり楽しむことが可能です。

.