ブラウザの音声認識と音声合成を使ってなんちゃってiliを作ってみた。
突然ですが、みなさん ili というプロダクトをご存知でしょうか?
iamili.com
このサイトで公開されている動画のイケメン男性が英語で日本人女性を口説く
流れを追ったものなのですが、その便利さとイケメンさが相まって最後には
突然のキスをするというアレな感じの動画ですね。
とはいえこの動画に出てくるiliというプロダクトは言語の壁を破るという点でとても可能性を感じました。
自作してみた。
今のhtml5周りでは音声認識と音声合成がだいぶ使えるようになってきているので
今回はそれとmicrosoftの翻訳apiを利用してなんちゃってiliを作ってみました。
実際の成果物は以下になります。pcでも良いですが、レイアウトをスマホ用に
作り込んでいるのでchromeが使えるスマホでアクセスするのがいいと思います。
talktrans.herokuapp.com
参考にしたサイトは以下です。
qiita.com
システム構成
ソースコード
npmで入れるもの。
- npm install express-generator -g
- npm install --save xml2js
- npm install --save request
- npm install --save express
基本的にexpressコマンド(express-generatorで入る)で作成したプロジェクトをそのまま使っています。
server side
talktrans - server side
サーバーサイドのtranslate.jsにmicrosoft apiのclient_idとclient_secretを入れる必要があるのですが、
これは自分で取得したものを入力してください。
client side
talktrans - client side
まとめ
これで英語圏の美女に対して無双ができるという算段です!
便利な世の中ですね!!
DockerとかWerckerとかPlay使ってネタ募集箱というアプリを作ってみた。
なんとなくサイボウズのブログを見ていたところ、
blog.cybozu.io
こんな記事を見つけました。
この中に出てくるネタ募集箱というのがとても便利そうでいいなーと思って
いろいろと試したかったこともあるので自作してみました。
github.com
このエントリではそこで学んだことをまとめます。
構成
長いので以下の三部に分けています。
- 開発環境
- 動作環境
- 開発言語
秘話
実は公開するつもりなくprivateでスラスラ書いていました。
ところがある程度まで形になったところで「あ、これ公開しよ」とふと思い立ち
公開したんですがその時にある問題が。。。
勘のいい方はお気づきかもしれませんね。
よくやる過ちに名を連ねる、「リポジトリに秘密情報をいれてしまう」ということを
かなりの初期からやらかしてしまっていました。
かなりの初期からなので一つずつ直すのも辛すぎるのでなんかないかと思って
調べていたら「最強のオプション: filter-branch」というのを見つけ、これで
過去の歴史を書き換えて万事解決しました、という話。
Git - 歴史の書き換え
いやー、リポジトリに秘密情報はいれたらダメですね。
こういうのとか
Vault by HashiCorp
こういうのを使ったらいいのかな?
OpenCV 3.1 をsbt / Scala で使ってみた。
今日はいままでやろうやろうと思っていた系の技術、OpenCVを触ってみようと思います。
ここを見るといろいろなことができるんですね、驚きました。
不要なオブジェクト消去とかPhotoshop CCで話題になったアノ機能も作れちゃうんですね!
それでは早速やってみましょう。
基本的に公式のドキュメントに書いてある通りに進めていきます。
OpenCV: Introduction to Java Development
Get proper OpenCV (最新のOpenCVを取得)
まずOpenCVをインストールします。
私はbrew派なので以下のコマンドでまずOpenCVを探します。
brew search opencv
その結果二つのopencvが見つかりました。今回は3.1を使いたいので下の方でいきます。
homebrew/science/opencv homebrew/science/opencv3
Scalaから使いたいので、with-javaオプションをつけてインストールします。
初めはwith-contribオプションは無しでやったんですが、実際に使う時にエラーになってしまったのでつけました。
brew tap homebrew/science brew install opencv3 --with-contrib --with-java
※with-contrib無しで出たエラー。
[error] (run-main-0) java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at DetectFaceDemo$.delayedEndpoint$DetectFaceDemo$1(DetectFaceDemo.scala:7) at DetectFaceDemo$delayedInit$body.apply(DetectFaceDemo.scala:6) at scala.Function0$class.apply$mcV$sp(Function0.scala:34) at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) at scala.App$$anonfun$main$1.apply(App.scala:76) at scala.App$$anonfun$main$1.apply(App.scala:76) at scala.collection.immutable.List.foreach(List.scala:381) at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35) at scala.App$class.main(App.scala:76) at DetectFaceDemo$.main(DetectFaceDemo.scala:6) at DetectFaceDemo.main(DetectFaceDemo.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497)
ビルドなどしてくれているのでしばらく待つと無事インストールできました。
==> Reinstalling homebrew/science/opencv3 with --with-java, --with-contrib ==> Using Homebrew-provided fortran compiler. This may be changed by setting the FC environment variable. ==> Downloading https://github.com/Itseez/opencv/archive/3.1.0.tar.gz Already downloaded: /Library/Caches/Homebrew/opencv3-3.1.0.tar.gz ==> Downloading https://github.com/Itseez/opencv_contrib/archive/3.1.0.tar.gz Already downloaded: /Library/Caches/Homebrew/opencv3--contrib-3.1.0.tar.gz ==> Downloading https://downloads.sourceforge.net/project/opencvlibrary/3rdparty/ippicv/ippicv_macosx_20141027.tgz Already downloaded: /Library/Caches/Homebrew/opencv3--icv-macosx-20141027.tgz ==> cmake .. -DCMAKE_C_FLAGS_RELEASE= -DCMAKE_CXX_FLAGS_RELEASE= -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/opencv3/3.1.0_1 -DCMAKE_BU ==> make ==> make install ==> Caveats This formula is keg-only, which means it was not symlinked into /usr/local. opencv3 and opencv install many of the same files. Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables: LDFLAGS: -L/usr/local/opt/opencv3/lib CPPFLAGS: -I/usr/local/opt/opencv3/include If you need Python to find bindings for this keg-only formula, run: echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth ==> Summary 🍺 /usr/local/Cellar/opencv3/3.1.0_1: 397 files, 134M, built in 14.2 minutes
インストールは「/usr/local/Cellar/opencv3/3.1.0_1/」にされたようです。
SBT project for Java and Scala (Java/Scala向けsbtプロジェクト)
この公式ドキュメントのタイトルが「Introduction to Java Development」なんですが
ここからScalaも登場します。
sbtプロジェクトの作成
もろもろ下の感じで作っていきます。
cd <<src-dir>> # ~/src とか # プロジェクトのディレクトリ作成 mkdir -p opencv31_test && cd opencv31_test # sbtのbuild.propertiesを作成 mkdir project echo "sbt.version=0.13.8" > project/build.properties # OpenCVのライブラリをコピー mkdir lib cp /usr/local/Cellar/opencv3/3.1.0_1/share/OpenCV/java/opencv-310.jar ./lib/opencv-310.jar cp /usr/local/Cellar/opencv3/3.1.0_1/share/OpenCV/java/libopencv_java310.so ./lib/libopencv_java310.dylib # リソース用のディレクトリ作成 mkdir -p ./src/main/resources # OpenCVで顔認識するための検出器データコピー cp /usr/local/Cellar/opencv3/3.1.0_1/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml ./src/main/resources/ # OpenCVで顔認識するための元データ wget http://docs.opencv.org/master/lena.png -P ./src/main/resources # ソース用のディレクトリ作成 mkdir -p ./src/main/scala
※なぜsbtを使っているのにlibディレクトリにライブラリをコピーするということをかというと、
まだmavenリポジトリに3.1が登録されてないんですよね。残念。
- 顔認識するためのデータは顔認識界のマドンナ、レナさんですね。
build.sbtとソースコード
./src/main/scala/DetectFaceDemo.scala に配置してください。
この時点でtreeをすると以下のようになっているはずです。
$ tree . ├── build.sbt ├── lib │ ├── libopencv_java310.dylib │ └── opencv-310.jar ├── project │ └── build.properties └── src └── main ├── resources │ ├── lbpcascade_frontalface.xml │ └── lena.png └── scala └── DetectFaceDemo.scala
いよいよ実行
sbt run
こんな感じのログがでて実行が終了します。
[info] Loading global plugins from /Users/daisuke-shimada/.sbt/0.13/plugins [info] Loading project definition from /Users/daisuke-shimada/src/opencv31_usage_scala/project [info] Set current project to opencv31_usage_scala (in build file:/Users/daisuke-shimada/src/opencv31_usage_scala/) [info] Compiling 1 Scala source to /Users/daisuke-shimada/src/opencv31_usage_scala/target/scala-2.11/classes... [info] Running DetectFaceDemo [info] Detected 1 faces [info] Writing faceDetection.png [success]
画像認識の結果
できました!
まとめ
思ったより簡単にできましたね!
これからいろんなサンプルあそんでみよー
情報科学若手の会 冬の陣 2016に参加してきました。
こんにちはこんにちは。
1/23 (土) に行われた「情報科学若手の会 冬の陣 2016」に参加してきましたのでそのまとめです。
https://atnd.org/events/72653
幅広い議論を生むためにアカデミックに振り切り過ぎていない勉強会です。
Let's Encrypt の紹介
小谷 大祐 (@daisuke_k) さん
要点
- あなたの通信はおそらく見られている。
- NSAは見ている。
- Snowden氏が2013年に告発した。
- 中国も見ている。
- Great FirewallやJavaScriptの改ざんなど。
- NSAは見ている。
- Anti censorship
- Pervasive Monitoring(大規模モニタリング)対策の機運の高まり
- もはやサーバーとクライアントの間の通信は暗号化必須。
- Let's Encryptはなんで無料なの?
- たくさんのスポンサーのおかげ
- https://letsencrypt.org/sponsors/
企業スポンサーの金額
Platinum 年間契約 | $350,000/年 (USD) |
Platinum 三年契約 | $300,000/年 (USD) |
Gold | $150,000/年 (USD) |
Silver (社員1000人以上) | $50,000/年 (USD) |
Silver (社員100〜999人) | $25,000/年 (USD) |
Silver (社員1〜99人) | $10,000/年 (USD) |
次世代コンピューターシステムの妄想と不揮発性メモリを活用したファイルシステム
島津 真人 (@MakotoShimazu) さん
要点
- 次世代不揮発性メモリ (Persistant Memory: PM) すごい。
- これを使って超高速にデータの読み書きできる。
- named_mallocでPersistantな名前付きメモリ空間を確保したりとか。
- ただしPersistantがゆえに、不具合があった場合に再起動でリセットされないとか悲しみもある。
- 詳しくは↑のslideshareから。
最近のインフラ・運用事情
whywaita さん
要点
- タイトルとは違って「@tarama13 事件」についての懺悔ww
- Twitterの釣りアカウントを大量に運用しており、その中の一つに先輩が引っかかってしまった。
- 文字起こしがはばかられるような事態になるww
まとめ
- 大学は特殊な環境なのでTwitterの釣りアカウントにも引っかかりやすい。
- 純粋な心を弄んではいけない。
中高生を騙して儲ける今どきのLINEスパムとその背景
did2memo さん
要点
- いまLineでよくあるスパムは大別すると3種類になる。
- サクラサイト系スパム
- パクツイ@Line系スパム
- 無料プレゼント系スパム
- 今回の話は無料プレゼント系スパム
- 無料プレゼント系スパムの手口
- 友達から突然「本当にコインもらえた! http://xxxxxxxxx 」のようにURL付きメッセージが飛んでくる。
- 友達から来たので本当なのかな?と思ってアクセスする。
- 無料でコインをゲットするには以下の手順を実施する必要がある。
- Step1. まず友達10人に「本当にコインもらえた! http://xxxxxxxxx 」というメッセージを送る。
- Step2. 自分のタイムラインにも同じメッセージを投稿する。
- Step3. とあるアプリをインストールする。
- Step4. お疲れ様でした。コイン配布までしばらくお待ちください。
こんなんで騙されるの?というガバガバ手口だけど中高生は引っかかるらしい。
- 流れで言えばこんな感じ。
「ロボットの耳」作りに必要な音声信号処理技術
qwerty__ さん
まとめ
- 音声信号処理の応用研究
- ドローンからの音源定位
- 音を利用したロボットの自己姿勢推定
- 生物の鳴き声解析
これからどんどん発展していきそう。
プラレール向け自動列車停止装置の開発
内田公太 (@uchan_nos)
要点
- CSアンプラグド (Computer Science Unplugged)
- http://www.csunplugged.jp/
- コンピュータを使わずに情報科学を教えるという取り組み。
発表内容は非公開なので伏せます。 *
まとめ
CSアンプラグドの教えかたはとても面白い!
LT
面白すぎてメモしてませんでした(´・ω・`)
さくらの死活監視の話で出てきたパトライトはとてもよかった!
- パトライト
- 制御用iOSアプリがある。
- プレゼンタイマー機能搭載!
- NHL 3FV1
- https://www.patlitestore.jp/index.php?main_page=product_info&products_id=18077
まとめ
みんなレベル高い発表でとても面白かったです。
僕も懇親会で飲みながら飛び入りで話させてもらいました。
その話はまた別エントリでまとめます。
Chatwork APIを利用するためのScala Libraryをmavenに公開してみた。
こんにちはこんにちは。
みなさんChatwork使ってますか?
私の所属する会社では今Chatworkをコミュニケーションツールとして使っています。
ChatworkはAPIが公開されており、(気になるところはあるけど)使うことができます。
使うことができるなら使ってみよう!ということで、なんか軽いライブラリーないのかなー
と探していたんですがあまり気に入るものがなかったので自分で書いてみて、mavenリポジトリに
追加するまでをやってみたので記事にしてみます。
私のmavenデビューなのでちょっと嬉し恥ずかしな感じです。
chatwork-scala
chatwork-scalaというのが私が公開しているライブラリになります。
mavenリポジトリ
http://search.maven.org/#artifactdetails%7Cnet.cimadai%7Cchatwork-scala_2.11%7C1.0.1%7Cjar
使い方
build.sbtに以下を追記します。
libraryDependencies += "net.cimadai" %% "chatwork-scala" % "1.0.1"
コード例
とまあこんな感じで簡単に使うことができます。
コードの作りはいたってシンプルなので特筆すべきところはないのですが、テストダメ夫です。
【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話 に行ってきた。
ヒカ☆ラボことヒカリエ・ラボラトリー(レバレジーズが運営するイベント)に行ってきました。
最近は随分勉強会から離れてしまっていたので久しぶりの参加でした。
Milkcocoaの裏側 - Technical Rockstars CEO 部谷(ひや) 修平さん
Technical Rockstarsのサービス
開発の裏話
- スタートアップの開発現場あるある
- とにかく早く開発しないといけない。
- 開発できなければ価値があるかどうかわからない。
- 2014/8: 開発開始
- 2015/4: IoTに方針転換 (この時点でサーバーサイドは部谷さん一人)
- 2015/5: リリース
- 開発速度をあげるには
- プロトタイピング力
- 道具の幅を持つこと
- 普段から広げておくことが大事
- 継続的インテグレーション
- 石橋を高速に叩いて渡る
- 心理的負担を減らす
- アーキテクチャ
- コード量を減らす
- 機能追加をしやすくする
- テストを書きやすくする
- プロトタイピング力
- Milkcocoaの初期の開発方針 (優先順位は上から)
- 簡単に機能を追加したい
- ベンダロックインを防ぎたい
- 運用を楽にしたい
- 多人数で開発したい(学習コストを減らしたい)
- 早く動くものを作りたい
- 開発する中でなにが起こるかわからないので、
- 型を決めてテストバリバリした
- Dockerでポータブルに環境構築
- サーバーイメージは全てコード化して構築は自動化(fabric)
- クライアント/サーバーサイドは全てHexe
- サーバーサイドはHexe x node.js
- すると...
- 途中からなにも進まなくなった
- 新しくなにかを追加する時にハードルが劇高になった。
- 途中からなにも進まなくなった
- 最終的な構成
- Node.js + MongoDB の構成を Erlang + Cassandra に変更 (1サーバーあたりの処理量アップ)
- MQTTに対応
- さくらサーバーに変更 (コスト削減)
- 再度、開発方針を立て直し
- Microservicesの利点
- ちゃんとIFが切れていればそこだけ変更しやすい
- 性能や通信が問題な箇所だけ重課金、それ以外はDockerとはHeroku
- とにもかくにもインターフェース重要。
まとめ
- 目的をもって設計する
- 小さいサービスにシステムを分ける
- 細かいことはサービス毎に分ける
- クリティカルな部分は重課金で
*1:milkcocoaと競合らしい。
GitLab 8.2.1でGitLFSを使ってみる
GitLFSの導入
前回の記事でGitLabをインストールしましたが、入れたバージョンは8.2.1だったのでGitLFSが利用できるバージョンです。
利用できるというのであれば是非使ってみましょう。
ということで今回はGitLFSを使えるようにしてみます。
gitとgit-lfsのインストール
% brew install git % brew install git-lfs
はじめはMac標準のgitとbrewで入れたgit-lfs使っていたんですがどうも上手く動かなかったのでどっちもbrewで入れることに。
GitLFSの設定をする
GitLFSの設定を確認
% git lfs track Listing tracked paths *.zip (.gitattributes)
これで以降git addした時にzip拡張子のファイルはGitLFSで管理されます。
試しに確認してみる。
適当にファイルを作ってadd / commitしてから「git lfs ls-files」できちんと認識されているか確認する。
% echo test > test.zip % git add test.zip % git commit -m"Add test.zip" % git lfs ls-files f2ca1bb6c7 * test.zip
ちゃんと認識されているので良さそうです。
認証用のキャッシュ設定(これが無いとpushする時に何度もユーザーID/パスワード聞かれる)
http://doc.gitlab.com/ce/workflow/lfs/manage_large_binaries_with_git_lfs.html
ここを参考に。
% git config --global credential.helper 'cache --timeout=3600'
LFS用のURL設定
同じく上のURLに書いてあるように
# こんな感じでLFS用のURLを登録して、 % git config --add lfs.url "http://192.168.33.10:10080/cimadai/test.git/info/lfs/objects/batch" # おもむろにpush % git push Git LFS: (0 of 1 files) 0 B / 2.57 MB Repository or object not found: http://192.168.33.10:10080/cimadai/test.git/info/lfs/objects/batch/objects Check that it exists and that you have proper access to it error: failed to push some refs to 'ssh://git@192.168.33.10:10022/cimadai/test.git'
あれ?失敗。
Repository or object not foundのURLをよく見ると自分が設定したURLにさらに「objects」が含まれていることに気がつきます。
ぐぐるとこんな記事を発見。
https://secure.phabricator.com/T7789
> For HTTPS URLs, it appends "/info/lfs" to the remote URL
これはもしかすると「info/lfs」まででいいのか?
# 一旦URL削除 % git config --unset lfs.url # もう一度登録しなおし % git config --add lfs.url "http://192.168.33.10:10080/cimadai/test.git/info/lfs" # 再チャレンジ % git push Username for 'http://192.168.33.10:10080': cimadai Password for 'http://cimadai@192.168.33.10:10080': Username for 'http://192.168.33.10:10080': cimadai Password for 'http://cimadai@192.168.33.10:10080': Git LFS: (0 of 1 files) 0 B / 2.57 MB Server supports batch API only, please update your Git LFS client to version 1.0.1 and up. Docs: http://192.168.33.10:10080/help error: failed to push some refs to 'ssh://git@192.168.33.10:10022/cimadai/test.git'
エラーが変わった。URLはこれでいいっぽいけど今度は「Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.」と言われた。
再びググる
batch APIを効にするにはlfs.batchという項目を消せばいいらしい。 *1
cf: https://githb.com/github/git-lfs/blob/master/docs/api/http-v1-batch.md
# 不要な設定を削除 % git config --unset lfs.batch # 3度目の正直 % git push Username for 'http://192.168.33.10:10080': cimadai Password for 'http://cimadai@192.168.33.10:10080': Git LFS: (1 of 1 files) 5 B / 5 B Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 334 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://git@192.168.33.10:10022/cimadai/test.git 6e6d647..b56d977 master -> master
できたー!
*1:そんなの登録した記憶はないのだけど確かに設定されている...