福野泰介の一日一創 - create every day

オープンデータ伝道師への出動要請あって、新潟県妙高市へ。

鯖江市などでのオープンデータの活用を事例を交えて紹介、IoTプログラミング体験、地理院マップアプリをベースに避難所一覧2つ星オープンデータのアプリ化、SPARQL!

妙高市役所、上越市役所の皆さんと!5つ星オープンデータで、つなげましょう、上越と鯖江!


妙高市避難所一覧(サンプル)
こちら、研修内にて使った、妙高市オープンデータの避難所一覧を表示するものに、更に、今回の旅写真を加えてみました。避難所データはWordファイルで、緯度経度未記載。緯度経度地図を使って、3点ほど追加してみました。 マップアプリづくりも、IchigoJamのプログラミングを一歩先。(src on GitHub

5つ星オープンデータを手軽に実現する odp で、アプリ作成もとっても簡単に!
災害別避難所案内「ヒナンパス」は、データをいれると、即使えます。


縮小すると、上越妙高駅付近や、名物とん汁ラーメンなどの写真も置いてみました。(addIcon)


妙高市議の村越さんと!(アップいただいた、IoT研修中の動画


月額64円で実現、IchigoSoda(sakura.io x IchigoJam)でかんたんIoTプログラミング!
妙高市役所、オープンデータ担当の池田さん、とても楽しそう!


雪の上越妙高駅!雪は少ないそう。


会場は、妙高市役所。エレベーターで見かけたゆるキャラ「ミョーコーさん
胸元の馬は、雪解けとともに山に現れる、跳ね馬!
跳ね馬(はねうま)・牛形 - haneumas jimdo page!
妙高市役所最寄りの新井駅から上越妙高駅をつなぐ、妙高はねうまラインの名前の由来。


災害相互応援協定を結ぶまち、姉妹都市など、関係ある都市同士を結ぶオープンデータもおもしろそう。


松茶屋のとん汁ラーメン、一見大きなとん汁


でも、らーめんが入ってる!


唐辛子を雪にさらして、3年寝かす、薬味、かんずり!いろいろ付けておいしい!


上越妙高駅近くにあるコンテナを並べた飲食店、FURUSATTO(フルサット)


こちらにも、かんずり!特性中華ソースで食べる、地元の鳥料理が美味!(食堂酒場 酉かつ

その土地ならではの特産物、ローカルチェーンなど、グルメオープンデータ、あるといいですね!

EXIFのGPS、位置情報付き写真から、JSONデータをつくるPython3のプログラムつくりました。お手軽マップづくりがはかどります。

from PIL import Image def toDegree(v): d = float(v[0][0]) / float(v[0][1]) m = float(v[1][0]) / float(v[1][1]) s = float(v[2][0]) / float(v[2][1]) return d + (m / 60.0) + (s / 3600.0) def fixfloat(d, beem): s = str(d) n = s.find('.') if n < 0: return s s += "0000000000" return s[0:n + beem + 1] def fixnum(n, beem): s = "0000000000000" + str(n) return s[-beem:] def getExifGPS(fn): im = Image.open(fn) exif = im._getexif() for id, value in exif.items(): if id == 0x8825: # GPS gps = value lat = toDegree(gps[2]) if gps[1] == 'S': lat = -lat lng = toDegree(gps[4]) if gps[3] == 'W': lng = -lng return fixfloat(lat, 7) + "," + fixfloat(lng, 7) return '' def getExifDate(fn): im = Image.open(fn) exif = im._getexif() for id, value in exif.items(): if id == 0x9003: # DateTimeOriginal s = ''.join(value.split(':')) return ''.join(s.split(' ')) return '' def getImageSize(fn): im = Image.open(fn) h, w, c = im.shape return str(w) + '.' + str(h) import os import sys files = os.listdir('./') list = [] for f in files: if f.endswith('.jpg') or f.endswith('.JPG'): list.append([ f, getExifDate(f) ]) list.sort(key = lambda x: x[1]) if len(sys.argv) > 1: nameprefix = sys.argv[1] n = 0 for i in range(len(list)): f = list[i][0] f2 = nameprefix + '-' + fixnum(n, 2) + ".jpg" os.rename(f, f2) list[i][0] = f2 n += 1 print('[') for item in list: f = item[0] print('{ name: "' + f + '", size: [ ' + getImageSize(f) + ' ], latlng: [ ' + getExifGPS(f) + ' ] },') print(']')

光るIchigoJamバッジができました!

アイロンビーズと光る電子工作は相性、良し!


KidsVenture@児童養護施設のアイロンビーズ部屋で創られたIchigoJamバッジ!


ダイレクトにつないでもOKですが、いろんなものを接続しやすいように、WS2812B付属のコネクターを使って、着脱式にしてみます。


L字ピンヘッダーが壊れにくい。熱収縮チューブを使ってはんだづけ部分を強化しておきます。


IchigoJam側の端子、できあがり。


WS2812B、LEDテープを10コずつ、2つ切り出す。


電線でDOUT-DIN、5V、GND同士をつなぎ、DIN側に接続コネクターをはんだづけ。


ホットボンドで裏面に接着。


あとはIchigoJamでプログラムを打ち込むだけで、光る!
WS2812B x IchigoJamでエモいウェアラブル「イチゴ帽子」プログラミング入門とマシン語、舞鶴x鯖江コラボに向けて
光らせ方、自由自在!いろんな作品作れそうですね!

ブログにアップする写真、EXIFデータを消して軽くする方法 (Python3編)

pip install pillow

画像編集ライブラリ、PILをインストール

import os import PIL.Image dir = './' files = os.listdir(dir) for f in files: if f.endswith('.jpg') or f.endswith('.JPG'): with PIL.Image.open(dir + f) as src: src.thumbnail((1220, 1220), PIL.Image.ANTIALIAS) data = src.getdata() mode = src.mode size = src.size with PIL.Image.new(mode, size) as dst: dst.putdata(data) dst.save(dir + f, 'JPEG', quality=90, optimize=True)

画像サイズを1220にリサイズして、データだけ保存することで、EXIFデータが消えて軽くなる。
ちょっとした手間、プログラミングでどんどん自動化して時間創出!

links
- 広がるプログラミングと電子工作、こども、おじいちゃん、校長、そして、ギャル!見事にちょうどいいカセットテープ x IchigoJam

交流深い、鎌倉と鯖江。
鎌倉に本社を置くカヤック、社長の柳澤さんより届いた新刊「鎌倉新本主義

なんと、帯デビューというスゴイ演出、ありがとうございます!(柳澤さんによる解説

地域内最適をするほどに下がってしまうGDPという20世紀指標に替わる、地域資本のバランスという考え方とその実践が、鎌倉資本主義に詰まってました。

鎌倉資本主義提唱の地域資本を引用しつつ、新指標を勝手に名付けた「NDD」
N - 何をするか? 地域経済資本(財源や生産性) 地域内GDP?
D - 誰とするか? 地域社会資本(人のつながり) 社会的欲求、承認欲求を満たすもの?(自己実現理論より)
D - どこでするか? 地域環境資本(自然と文化) その土地の魅力?

1つ目のDは、地域通貨の流通、2つ目のDは、そこに住む人の幸福度でそれぞれ計測し、バランスと総量で比較するとおもしろそう。


カマコンバレーからカマコンとなって全国へ拡散中!
福井県鯖江市の名前も入れてもらっていました。

課題に対して理由を探るのは縦だとすると、みんなでアイデアを積み重ねるブレストは横。
縦で思考すると、横の思考が鈍るというのはなんとなく思い当たる気がします。
鯖江を楽しくイノベーションする「ブレスト」、「サバコン」としてやってみましょう!

次回、UDトークなど、多言語アプリをテーマにした鯖江市商工会議所でのイベント「あたらしもんずき勉強会 vol.3」でもブレストします。 ご都合つく方、ぜひどうぞ!

イベントの司会進行を多言語かつ自動で進めるスクリプトを作ってみました。
ひとまず、Macの標準搭載の音声合成コマンド「say」を活用したコンソール版。

時間とアナウンスして欲しい言葉を記述言語、アナウンス言語、テキストの順に書くCSVファイルを作ればOK。

0,ja,ja,英語でカップラーメンの作り方をご案内します 10,ja,en,カップラーメンにお湯を注いでください 20,ja,en,3分間の蒸らし時間に入ります 30,ja,en,10秒経過しました 40,ja,en,20秒経過しました 80,ja,en,残り2分です 140,ja,en,残り1分です 190,ja,en,10秒前 200,ja,en,カップラーメンができあがりました。どうぞお召し上がりください。

プログラムは、オープンソース、「tagengo - GitHub」にあります。
多言語翻訳アプリコンテストのアイデアやサンプル実装としてもどうぞ!
webアプリ化できると手軽に使えて便利かも。

イベントがより手軽に楽しくできるようになるツールで、地域資本主義も一歩前進!?

参考までに、多言語翻訳ライブラリを使った、Python3のプログラムはこんな感じ

import sys if len(sys.argv) < 4: print("[client_id] [clint_secret] [script.csv]") exit(0) client_id = sys.argv[1] client_secret = sys.argv[2] csvfn = sys.argv[3] from getAccessToken import getAccessToken access_token = getAccessToken(client_id, client_secret) from datetime import datetime startt = int(datetime.now().strftime('%s')) import csv with open(csvfn, newline = '') as csvfile: reader = csv.reader(csvfile, delimiter = ',') for row in reader: dt = int(row[0]) src = row[1] dst = row[2] text = row[3] if src != dst: from translate import translate text2 = translate(access_token, src, dst, text) print("time " + str(dt) + "sec : " + text + " -> " + text2) else: print("time " + str(dt) + "sec : " + text) text2 = text from time import sleep while 1: sleep(0.1) now = int(datetime.now().strftime('%s')) if now > startt + dt: break from say import say say(dst, text2)

links
- 新刊『鎌倉資本主義』の「はじめに」と第一章を全文無料公開します。 | 面白法人カヤック
- UDトーク | コミュニケーション支援・会話の見える化アプリ

越前がにロボコンなどのイベント会場で便利な会場案内。
音声合成を使って手軽に、翻訳も使えば多言語案内も即時に反映できて便利!


オートアナウンサー(越前がにロボコンデモ)

多言語音声翻訳コンテスト」で無料トライアル可能な音声合成APIを使っています。
GitHub上に、音声合成呼び出し用の Python3 のプログラムを追加したので、参考にどうぞ!
tagengo - GitHub / taisukef

音声合成API、「越前がにロボコン」のイントネーション違いが気になる。
直したいけど直す方法あるのかな?
IchigoJamでも使える、AquesTalk なら自由自在に制御可能だけど、全部設定するのがちょっと大変。
技術は適材適所で使いましょう。

日本国、内閣府の「官民研究開発投資拡大プログラム」PRISM予算で開催「多言語音声翻訳コンテスト
中学生以上の誰でも応募できるアイデア部門に加えて(小学生は残念!)、音声認識翻訳生成APIを使っての試作品コンテストもスタート!

初回で3万回、5回おかわりできる5万回分のAPIアクセス権を使って試作可能!(計28万回)
ということで、早速 Wikipedia を使った英語学習アプリを作ってみました。
英語と日本語で交互に読み上げる辞典を聞き流すことで学習する「DicLearning(ディクラーニング)」


キーワードを英語でいれると、英語版 Wikipedia で検索し、本文を1文ごとに英語で読み上げ、続いて、翻訳APIを使って日本語化した日本語で読み上げ、再度、英語で読み上げます。 関心あるキーワードだと、頭に入りやすく、操作が殆どいらないので、運転などの移動中などでも楽しく勉強できます。

試作なので、APIアクセス権を取得して使ってください。
こちらからサンドボックスサーバーのアクセス権を申請します。
届いた、client_id / client_secret を使って、GitHub "tagengo" からダウンロードしたPython3のプログラムを動かします。

python3 translateWikipedia [client_id] [client_secret] MSX

AccessToken取得、翻訳API、Wikipediaの取得などができるサンプルとしても活用ください!
* 現在、音声読み上げは Mac に付属の say コマンドを使用しています(音声生成API接続への改造もどうぞ)

まだ謎多い「多言語音声翻訳コンテスト
豪華審査員、総務大臣賞、協賛企業賞等の副賞など、どうなるんでしょうね?
それはともかく、自由にAPIが遊べる大チャンス、あれこれ遊んでみましょう!

プログラミング初心者の方には、「万華鏡アプリコンテスト」もどうぞ!

舞鶴高専出身、さくらインターネット田中さんが委員長を務める、CSAJプログラミング教育委員会に初参加、総務省提唱の地域ICTクラブと採択地域の一例として、福井県こどもプログラミング協議会などを情報提供。

いかに次世代を創るか、企業も行政も、国を含む地域を超えて人類共通の課題。MSX世代だったり、BASICからマシン語へと燃えたあの時も共有できてうれしい。(Armマシン語入門 with IchigoJam


こどもの創造と表現の場を2002年から提供し続ける、NPO法人CANVASの理事長で、超教育協会の幹事、石戸奈々子さん with 光るイチゴ帽子

便利なSaaSがあふれる現代、パソコンさえあれば、サーバーの契約など面倒なことをしなくても、オープンデータの公開、解析、人工知能活用までこどもであっても一直線。 ガンガン小中学生が楽しいエンジニアリングの世界の第一線に来れる環境づくりを目指したい。


KI of taisuke fukuno - Ambient」気分によって送信される福野泰介の「気」の値、オープンデータ

BASICでIoT、IchigoJam x sakura.io や、無線LAN MixJuiceを使ったこども簡単IoT。 サーバーがないこども視点で使えるサービス「Ambient」を使ってみました。

メールアドレスがあれば、無料登録でき、チャンネルをとりあえず生成。チャネルIDと書き込み用のライトキーと値を Python で書いたプログラム sendambient.py で送れば、即折れ線グラフ化してくれました。(参考、AmbientDataInc/ambient-python-lib - GitHub

import http.client import json import sys domain = "ambidata.io"; record = { "writeKey": sys.argv[2], "d1": sys.argv[3] } requestJson = json.dumps(record) headers = { "Content-Type": "application/json" } connect = http.client.HTTPConnection(domain) connect.request("POST", "/api/v2/channels/" + sys.argv[1] + "/data", requestJson, headers) response = connect.getresponse() print(response)

呼び出しコマンドはこちら([writekey]は一応秘密、だけど非SSL)

python sendambient.py 6728 [writekey] 15

送ったデータの読み出しは、単純にwebアクセスで JSON で取得ok!
http://ambidata.io/api/v2/channels/6728/data
(callbackパラメータを指定できるとwebアプリで簡単に使えてうれしいところ!)

IchigoJam x MixJuice を使ったサンプルの丁寧な解説もあります!
IchigoJam + MixJuiceで製作するIoTセンサ – Ambient

いろんなサービスとの連携、開発、提案、紹介していきたいと思います!

教育は最大の投資なり

Maker Faire Tokyo 2018、閉幕。今年もいろんな刺激とたくさんの出会いがありました。
ハッシュタグを追いかけ見つけた、見たかった作品はこちら、IoT黒電話!


なんと小学生がラズパイとPythonで作ったとのこと。こどもの活躍、うれしい!


台湾のプログラミング教育のためのWiFiBoy32で、初MicroPythonに挑戦してみました。

WiFiBoy32で、MicroPythonをインストールし、エルチカするまでの手順
1. esp32用ツールにパスを通す

export PATH=$PATH:/Users/[username]/Documents/Arduino/hardware/espressif/esp32/tools/

2. MicroPythonをダウンロード
3. バイナリを WiFiBoy32 に転送(しばし待つ)

esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash -z 0x1000 esp32-20180805-v1.9.4-440-g3bef7bd78.bin

4. シリアルで接続する

screen /dev/tty.SLAB_USBtoUART 115200

5. 記事を参考にLEDを光らせてみる

import machine led = machine.Pin(16, machine.Pin.OUT) led.value(0)

* WiFiBoy32のLED、回路図を見るとGPIO16をOFFで光るように接続されている
6. エルチカ(上キーを押したら光りっぱなし)

import machine import utime up = machine.Pin(33, machine.Pin.IN, machine.Pin.PULL_UP) led = machine.Pin(16, machine.Pin.OUT) while True: if up.value(): led.value(1) utime.sleep_ms(500) led.value(0) utime.sleep_ms(500)

できた!
いつものPythonで動くのは便利!

でも、やっぱり短いコードなら、IchigoJam BASICの方が簡単!

10 LED BTN(UP)=0:WAIT30 20 LED0:WAIT30 30 GOTO10

IchigoJamでいろいろいじって工夫して、物足りなさを感じてからのステップアップがおすすめです。


こどもプログラミングの老舗、LEGOマインドストームは20周年!貴重な初代モデル展示がありました!


子どもプログラミング喫茶、たくさんの感動が生まれました!


大人も体験プログラミング!


訪ねてきてくれたIchigoJamオーナーと記念写真!


USBシリアルと電源の切り替えスイッチを搭載した、自慢のオレンジカムロボを見せてくれました。


IchigoJam、一度教わると、教えられそうかなっと思えるくらいの簡単さが特徴です。
大人にも喜んでもらえるとうれしい!


上級者にはIoT対応IchigoSodaをいろいろいじってもらってメンタリング。どんどん勝手に夢膨らむ感じがステキ!


IchigoJamの初参加!OtOMOの倉本さん、楽しい機会をありがとうございました!


15歳のWiFiBoy創業者、PCNブースにも来てくれました!


供の操縦、楽しそう!タミヤのムカデロボ、すでにサーボでラジコン化されてました。


PCN北千住&PCNブース、おつかれさまでした!


PCNブース、たくさんのご来訪ありがとうございました。子供でもできちゃう手書きPOPメソッド。


花添えた、未就学児でも楽しめるプログラミング環境「IchigonQuest」のエルイー


たくさんのこどもたち!


こどもが作った作品を、こどもが楽しむ!


こどもが開発、笑顔になれるボタン!


高専カンファレンス、おびなたさん!


イスラエルから!


Pimoroni x MagPi


ラズパイユーザーグループ太田さんと!


同時開催のデザフェス、オレンジの作業服が決まってる「紙でできた道路アクセサリー」というレアジャンル!


極小LEDをなんと手半田して作っている光るペンダント。光るアクサリー、来ますね!


大好きなBLAMEのような世界観。


融合するともっと楽しいことになりそう!


Startup Weekend Tokyo @ Maker Faire Tokyo


今回のMaker Faire内開催の発端となった、大田区、スゴイ!沖縄も鯖江市も負けてはられません!


子供の発想による自由な作品が増えるともっとすごいイベントになりそう!
Maker Faire、次は大垣開催

100円コンピューターでも秒回5000万計算。 元々はグラフィックス用に開発されたGPUの汎用利用により、手軽に秒間1兆回という単位の計算をこなせるようになっている現代のパソコン。 普段はその持てる力をほとんど使っていない状態です。

AIの一種、機械学習は脳をモデル化したもの。入力と出力をつなぐ、大量のパラメーターを有り余るコンピューターの計算力を使って、いい感じに求める技。 複雑な脳のモデル化(ディープラーニング)も、現代コンピューターによってなんとかなってしまう時代です。

機械学習に便利なオープンソースなライブラリTensorFlowと触れ合う金曜イベント、TensorFriday#02のテーマは手書き文字認識。 短いPythonのプログラムを動かして、ディープじゃないラーニング(nn)の結果と、ディープラーニング(cnn)の結果を体験しました。

せっかくなら、自分でかいた文字を認識させてみたいところなので、webアプリのお絵かきツール「freepad」を改造してPython用の28x28の配列データを生成するアプリ「fornn」を作成。 見事、パッドで書いた下手な数字「5」を認識してくれました!

テストデータを入れ、5を認識するように改造した nn.py in Python3

次回のTensorFlow#03に向けた、講師やテーマ、募集中!

Code for Japan 地域フィールドラボ、健康と特定健康診断をテーマにしたディスカッション。
人ではとても見きれない健康に関する多量のデータでも、機械学習に突っ込んでみることで、なんとかなりそうな気がします。

links
- Hana道場、若宮さんと学ぶIoTとIchigoJamプログラミングと地域フィールドラボ第5期スタート!
- 地域フィールドラボの募集テーマを大公開! | Code for Japan

元ホワイトハッカーな友達、あみるとペアプログラミング。
得意なwebアプリ&SPARQLと、あまり触らないサーバーサイドの知識。
1台のPCを2人で使う、ペアプログラミング形式でトレード。

無数に存在し、日々世界中の開発者によって進化するソフトウェアという道具。
慣れているがゆえの罠は、ちょっとの不便が日常化してしまうこと。
便利なツールがないかと探す手前で、毎日少しずつ、時間ロスを積み重ねていることになる。

ペアプログラミングという共同作業で、明らかになるちょっと便利。
それならこうするともっと便利、これを使うと楽、こんな方法もあるよ、など。
教わるだけでなく、教えられることもあり、なかなかおもしろい体験。

伝授してもらったエンジアリングツール
軽量仮想環境 docker
便利と噂の iTerm2
高速ウィンドウ整理 ShiftIt
クリップボードマネージャー Flycut
PCパスワードで保存パスワードは確認できちゃう(再発行手間を省く) Chrome
DvorakユーザーとQwertyユーザーがペアプロするためのドングル QIDO

そこまで困ってないからこそ、その場でコミュニケーションしながら最速の学習時間で導入できることにメリットあり。

ちょっとした不満、やり過ごさないために、前々から思っていたすばやく使える手元英和辞書を作成。


dict - コマンドラインから英単語を入れると、ヒットする項目を日本語と共に表示するツール

手元辞書 dict 作り方
1. オープンソースな辞書を検索。(マッシュアップ可能なライセンスの英語辞書(フリー辞書)
2. ライセンスが、CC BY SA EDRDG の辞書に決定
3. ダウンロードしてみる JMdict-EDICT Dictionary Project 内の "JMdict_e.gz - the JMdict file with only English glosses"
4. 中身は巨大な1ファイルのXMLと確認

<entry> <ent_seq>2836190</ent_seq> <k_ele> <keb>北京原人</keb> </k_ele> <r_ele> <reb>ペキンげんじん</reb> </r_ele> <sense> <pos>&n;</pos> <gloss>Peking man (Homo erectus pekinensis)</gloss> </sense> </entry>

5. Python3でプログラムを書く

# coding: utf-8 import sys from xml.etree.ElementTree import * key = sys.argv[1] print("keyword: " + key) tree = parse("JMdict_e") ele = tree.getroot() cnt = 0 hit = 0 for e in ele.getiterator("entry"): s = e.find(".//gloss").text if key in s: ja = e.find(".//keb") if ja != None: print(ja.text) else: ja = e.find(".//reb") if ja != None: print(ja.text) print(s) hit += 1 cnt += 1 print("hit: " + str(hit) + " / " + str(cnt))

6. 使える!便利!
高速化や、辞書を拡充する機能、しゃべらせる機能などは必要に応じてつくる、お楽しみにとっておく。

ペアプログラミング、ハッカソンなどのイベントから実践してみると良さそう。
凄腕ハッカーに、ザザっとアセスメントしてもらうサービスもありかも。

自学は大事、でも、その罠を認識することもまた大事。
うまくハマれば、大いに時間を創り出してくれるのが、ツール。
お気に入りの道具、シェアしましょう!

日本語を(一部)理解する、スマートIchigoJamができました。声でプログラミング!

IchigoJamの基本的な単語(コマンド)と数を聞き分け、代わりにキーボードを打ってくれます。
(正確にはシリアルでIchigoJamへ送っています)


「LEDつけて」と呼びかけても、耳がついてないIchigoJamはやってくれないよ。
と、IchigoJamプログラミング体験の時に紹介しますが、「耳」とそれを聞き分ける「機能」をつければOKです!

スマートIchigoJamの作り方 (for Mac)
オープンソースでフリーな日本語音声認識「Julius」(ジュリアス)を準備する
オフラインでフリーで使える音声認識 Julius、声で操作するロボを自作しよう

認識する辞書をつくる

cat > test.yomi % ACTION 1 いち 2 に 3 さん 4 よん 5 ご 6 ろく 7 なな 7 しち 8 はち 9 きゅう 9 く 10 じゅう LED1 えるいーでぃーつけて LED0 えるいーでぃーけして WAIT60 まって GOTO1 いちえいって RUN らん LIST りすと ESC とめて ENTER えんたー % NS_B [s] silB % NS_E [s] silE

文法をつくる

cat > test.grammar S : NS_B TARGET ACTION NS_E S : NS_B TARGET WO ACTION NS_E

Julius用に変換

iconv -f utf-8 -t eucjp test.yomi | yomi2voca.pl | iconv -f eucjp -t utf-8 > test.voca perl ~/sandbox/julius-kits/grammar-kit-4.3.1/bin/linux/mkdfa.pl test

Juliusをモジュールモードで起動

julius -C ~/sandbox/julius-kits/grammar-kit-4.3.1/hmm_mono.jconf -input mic -gram test -module

Python3で認識したコードをIchigoJamに送る言葉に変換するプログラムをつくる
(XMLパースにElementTree、シリアル接続にpyserialを使用)

cat > julius-client-ichigojam.py #!/usr/bin/env python3 import xml.etree.ElementTree as ET import socket import serial ser = serial.Serial("/dev/tty.SLAB_USBtoUART", 115200, dsrdtr=True) def recog(words): s = "" for w in words: s += w print(s) if s == "1": ser.write(b"1 ") elif s == "2": ser.write(b"2 ") elif s == "3": ser.write(b"3 ") elif s == "4": ser.write(b"4 ") elif s == "5": ser.write(b"5 ") elif s == "LED1": ser.write(b"LED1\n") elif s == "LED0": ser.write(b"LED0\n") elif s == "WAIT60": ser.write(b"WAIT60\n") elif s == "GOTO1": ser.write(b"GOTO1\n") elif s == "RUN": ser.write(b"RUN\n") elif s == "LIST": ser.write(b"LIST\n") elif s == "ESC": ser.write(b"\x1b") elif s == "ENTER": ser.write(b"\x10") client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 10500)) sockfile = client.makefile() data = "" while 1: line = sockfile.readline() if line != ".\n": data += line else: root = ET.fromstring(data) data = "" if root.tag == "RECOGOUT": words = [] for wordtag in root.iter("WHYPO"): words.append(wordtag.attrib["WORD"]) words.pop(0) words.pop() recog(words)

実行!音声コントロールIchigoJamのできあがり!

python3 julius-client-ichigojam.py

pyserialがなければ、pipでインストール(USBシリアルは環境に合わせて書き換えてください)

pip install pyserial

自分なりの「スマート」をプログラミングしちゃいましょう!
ネットワークが不要なので、ラズパイゼロなどに入れて、コンパクトに動かす音声認識モジュールにすると良さそうです。

links
- オフラインでフリーで使える音声認識 Julius、声で操作するロボを自作しよう

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像