Quantcast
Channel: karaage. [からあげ]
Viewing all 1425 articles
Browse latest View live

自分の周りの複数のクラスタで話題のモバイルバッテリを購入したらやっぱり大満足でした

$
0
0

f:id:karaage:20170712002132j:plain:w640

ネットで話題のモバイルバッテリ

 とあるモバイルバッテリが自分の周りでかなり話題でした。複数の人がブログに取り上げているので「デジャビュかな?」と思っていたのですが、間違いなく同じもの(Anker PowerCore Fusion 5000)でした。

 しかも特定のクラスタでなく、複数のクラスタで同じものが取り上げられているのは、なかなか珍しいです。これは良さそうと直感が働いたので、早速注文してみました。

「Anker PowerCore Fusion 5000」やっぱり便利でした

 詳しいレビューは、紹介したお三方のサイトを参照して下さい。私は雑にレビューします。写真から文章まで何もかもが雑です。

f:id:karaage:20170712002218j:plain:w640
 パッケージ、なかなかおしゃれ

f:id:karaage:20170712002132j:plain:w640
 中身、なかなか良い感じ

f:id:karaage:20170712002204j:plain:w640 いままで持ち歩いていたモバイルバッテリと、USB充電できるACアダプタ。これが1台にまとまるわけです

 2ポート充電できるので、iPhoneとBTイヤフォン同時に充電できるし、USBアダプタ無しでそのまま電源に刺すだけで充電できるし、今まであんまり意識していなかったストレスから解消されて、かなり嬉しくなりました。使っていると思わずニヤニヤしてしまうくらいです(完全に怪しい人)。価格もお安いし、これは本当よいです。

 今は以下のようなケースに、iPhoneの充電ケーブルとmicroUSBケーブル入れて、出かけるときは必ず持ち歩いています。 f:id:karaage:20170712002149j:plain:w640

 ちなみに、このケースはAmazonにやけに評価が高かったので昔買ったやつです。今思えば、ステマのような気がしなくもないですが、丈夫で5年以上使っても全然ほつれもないので特に不満はないかなというところです。

まとめ

 というわけで、ネットでフォローしている複数のクラスタの人が絶賛しているものは、間違いがないなということを改めて実感しました。モバイルバッテリや、USB充電できるACアダプタ、取り返しがつかないほど買ってしまう前に、こいつを1,2台買っておくのがよいかなと個人的には思います。

f:id:karaage:20170712002334j:plain:w640 取り返しがつかないほど買ってしまった例

関連記事


カレー好きの人にオススメ「カレーの恩返し」をカレーにかけると激ウマカレーが誕生

$
0
0

f:id:karaage:20170714005513j:plain:w640

世の中の男性は大体カレー好き(からあげ調べ)

 世の中の大多数の男性がそうであるように、私はカレーが好きです。CoCo壱番屋のカレーも好きですし、謎のインド映画が常に流れている、本格風インド料理店のカレーも好きです。だけど、やっぱり一番好きなのは家族と一緒に家で食べるカレーですね。

 今日はそんなお家庭で食べるカレーに、ひとつまみ加えるだけで劇的にカレーが美味しくなる魔法の調味料をご紹介します。その名も「カレーの恩返し」

カレーの恩返し

 誕生日プレゼントにお友達のがーが。 (id:teddysduck)さんからいただいたものです。私は全然知らなかったのですが、グルメな妻は当然のごとく知っていました。有名みたいですね。

f:id:karaage:20170709133430j:plain:w640
 表から見た図

f:id:karaage:20170709133456j:plain:w640
 裏から見た図

 使い方は、煮込みの直前に適量を加えるだけという親切設計。本当にそれだけで変わるの?と思いますよね。

f:id:karaage:20170714005513j:plain:w640
 ごくり

 食べてビックリ、たしかに美味しいのです。とても風味豊かになります。「神の雫」風に表現するなら、「お… おお…… お…… この風味豊かなスパイス。その味わいの衝撃は、まさにインドの神 ガネーシャに踏まれているかのよう」といったところです!

f:id:karaage:20170709133510j:plain:w640
 アップしてみた様子。黒いつぶつぶが恩返しの中身です(多分)

まとめ

 カレーが美味しくなる魔法の調味料「カレーの恩返し」の紹介でした。もし、気になる男性がいる方は、こっそりカレーにこれを入れれば彼は貴方にメロメロになっちゃうこと間違いなしです。えっ、気づかれなかった?それはダメ男です、次いきましょう!

 ちなみに3人家族の我が家では、袋タイプのサイズで十分です。ただ、袋タイプは、あわせ買い対象商品なのでご注意ください。我が家もAmazonで購入するタイミングを常に見計らっております。

カレーの恩返し

カレーの恩返し

カレーの恩返し 缶タイプ

カレーの恩返し 缶タイプ

はてなニュースに「デジタル写真管理システム」に関する記事を寄稿しました

$
0
0

f:id:karaage:20170603223449p:plain:w640

はてなニュースに寄稿しました

 子育て世代に送る「デジタル写真管理システム」構築のススメという記事を「はてなニュース」に寄稿させていただきました。3度目の寄稿となります。

 今回は、「子育xIT」というテーマをいただいたので、子育てをしている多くの人が悩んでいるのではないかと思う、写真管理に関して書いてみました。書き終わってみれば、子育てがとってつけたような感じになってしまった感は否めませんが、自分の写真管理に関して、改めてまとめて考え直すことができたので、自分にとっても良い機会になったなと思っています。また、以前書いたSynologyのNASの記事で十分書ききれなかった、自分のバックアップに対する考え方もある程度整理することができたかなと思っています。

 デジカメやスマホの写真の管理に困っている人であれば、子育て世代以外の方にも参考になる記事と思いますので。もしよろしければご覧になってください。

関連記事

暑い夏を涼やかにする京都水族館写真

$
0
0

20170718_kyoto_aquarium-13

京都水族館

 京都で仕事の際、会社に戻るには中途半端な時間だったので、午後休をとり京都水族館に寄ってみました。最近はどこへ行くにも子供と一緒だったので、久しぶりに1人でじっくり写真撮れました。京都駅から水族館へは、バスも出ていますが歩ける距離(15分くらい)なのでブラブラ歩いて行きました。

 というわけで、写真をペタペタ貼っていこうかなと思います。

20170718_kyoto_aquarium-1 スプラトゥーンとのコラボイベントやっていました。Nintendo Switch欲しい…

20170718_kyoto_aquarium-5 おしゃれな空間

オオサンショウウオ

 目玉展示(多分)のオオサンショウウオ。

20170718_kyoto_aquarium-2 かなりでかい

20170718_kyoto_aquarium-3 目が小さい。こうやってみるとゴジラっぽい

20170718_kyoto_aquarium-4 うじゃうじゃいる

アシカ

20170718_kyoto_aquarium-8 餌やりタイム

20170718_kyoto_aquarium-9

20170718_kyoto_aquarium-10 むしゃむしゃ

アザラシ

20170718_kyoto_aquarium-11 かわいい表情

20170718_kyoto_aquarium-12 デカ鼻

大水槽

20170718_kyoto_aquarium-13

20170718_kyoto_aquarium-14

ペンギン

 ペンギン大好き。飼育員さんは、餌やりのときペンギン全員をちゃんと見分けて、公平に餌を与えていて凄いなと思いました(小並感)。

20170718_kyoto_aquarium-7 かわいい

20170718_kyoto_aquarium-16

20170718_kyoto_aquarium-17

20170718_kyoto_aquarium-18

20170718_kyoto_aquarium-19 毛が生え代わり中

クラゲ

 いやされるわー

20170718_kyoto_aquarium-22

20170718_kyoto_aquarium-20

20170718_kyoto_aquarium-21

休憩

20170718_kyoto_aquarium-23 男前豆腐の豆乳ソフト。結構好きな味

20170718_kyoto_aquarium-24 庭園っぽい空間もあります

イルカショー

20170718_kyoto_aquarium-26 笛が配られる。ショーに笛を鳴らして観客も参加できるのですが、これがなかなか音を出すのが難しい…

20170718_kyoto_aquarium-25

20170718_kyoto_aquarium-27

20170718_kyoto_aquarium-28 息ピッタリ

20170718_kyoto_aquarium-29

20170718_kyoto_aquarium-30

20170718_kyoto_aquarium-31

水族館周辺

 水族館の隣は、梅小路公園という広い公園。家族で来るのに良さそうなスポットでした。カフェなどの食事処も揃っています。

20170718_kyoto_aquarium-32

20170718_kyoto_aquarium-33

20170718_kyoto_aquarium-34

まとめ

 京都水族館に行ってきました。地元の名古屋港水族館に比べると、おそらくそこまで広くない(半分くらい?)なのですが、空間をうまく使っているのか、とても広く感じられました。水槽の形一つとっても、よく見ると湾曲したガラスを使ったりと、広く見える工夫をしていることがわかります。

 飼育員さんからも、動物への愛情が伝わってきて良かったです。特に、イルカショーは、観客も参加型で飼育員さんとイルカさんの仲の良さが伝わって来る非常に良いショーでした。イルカショーのあと、後ろの席の人が感動で号泣していてビックリしましたが、うまく言えませんが泣いちゃう気持ちわかる気がしました。

 水族館、一人で久しぶりにじっくり見て写真も撮れて楽しかったのですが、やっぱり次はじっくり写真撮れなくても家族と来たいなと思うスポットでした。

関連記事

OpenCVに頼らないでpython+numpy+PILで画像処理のフィルタを1から作って理解する

$
0
0

f:id:karaage:20170724112939j:plain:w640

画像処理を基礎から学ぶ

 私は、カメラが好きなこともあり、画像処理に関しても興味あります。一般的には、RAW現像とかPhotoShopのテクニックなどを身につける人が多いようですが、私の場合は、何故かpythonやOpenCVという便利な画像処理ライブラリを使って画像処理ソフトを自作するところから始めようとしています。

 ただ、OpenCVは便利なのですが、便利さがゆえにブラックスボックス的に使ってしまっているのが気になっていました。やっぱり内部で何をしているかわかっていないと、ちょっとAPIに無い処理をしたいときや、問題が発生したときに何をどうすれば良いのか全然分からないですし、OpenCVを使うまでもない処理にOpenCVを使ってしまうのもよろしく無いなと思います。Open CVインストール手間ですし結構時間かかるので(特にRaspberry Piとかだと)。

 基礎から理解するには、OpenCVのソースを読むのもよいのですが、やはり自分で一度作ってみるのが一番。というわけで、OpenCVに頼らず基礎的な画像処理のライブラリのPILと行列計算のライブラリのnumpyだけを使って、1から簡単な画像処理のフィルタを作って理解してみようかなと思います。

 TOKIO的に言えば

「画像処理のソフトを作ってください」

「それはどういうレベルでつくるの? Open CVから?フルスクラッチで?」

 という感じです。ライブラリは使っているので、フルスクラッチは大げさですかね。今回の記事はMacを想定していますが、Raspberry PiでもOKです。

画像処理のフィルタを1から作る

環境構築

 環境構築は以下記事を参照して下さい。Macの場合、Raspberry Piの場合に分けてセットアップ方法を解説しています。

 Windowsでも色々頑張れば動くと思います。このサイトでは説明しません(私に環境がないので)。すみません。

 セットアップも含め、python2での動作を前提にしていますが、プログラム自体はpython3でも動作します。

画像処理のフィルタの仕組み

 画像処理のフィルタですが、実は多種多様の様々なフィルタがあります。今回はその中でも代表的な、ぼかし処理とかエッジ強調をするための画像フィルタに関して取り上げます。基本的な手法が、画像の全画素に対して、周囲の画素の値に、ある係数を掛け合わせたものを代入するという処理をするというものです。この係数の行列をフィルタ(カーネル)と呼びます。言葉だとうまく説明できないので、10x10の画像を例にして、図と数式で説明すると以下のような感じです。

f:id:karaage:20170724112939j:plain:w640

 右の行列がフィルタです。この処理を(i, j)(0,0)〜(10,10)全ての画素に対して実施するのです。わ、わかる?分からなかったらすみません。以下のサイトとか見てみた方がわかりやすいかもしれません。

コンボリューション(畳み込み処理)を実装してみる - Qiita

画像処理の数式を見て石になった時のための、金の針 - Qiita

 こういった計算のことを畳み込み(畳み込み演算・畳み込み積分)と言います。上記は、モノクロ画像の例ですが、これをRGBの3チャネル分実施すればカラー画像となります。

 仕組みが分かったら、早速実装してみます。ソースは、雑誌Interfaceの2017年5月号を参考にしました。

Interface(インターフェース) 2017年 05 月号

Interface(インターフェース) 2017年 05 月号

 この雑誌は、自分が画像処理のフィルタを1から勉強しようと思ったきっかけになった本で、様々な画像処理の手法とソースコードが惜しげもなく紹介されています。ただし、言語はCで書かれているので、今回pythonに自力で移植した形になります。

 移植に関して、参考にしたサイトは本記事の最後で紹介させていただきます。

入力をそのまま出力するフィルタ

 まずは、以下のようなフィルタを例に、プログラムを書いてみます。 f:id:karaage:20170724112943j:plain:w640

 このフィルタは、自身の画素だけに1をかける。すなわち何も処理をしないフィルタとなります。プログラムは以下のような感じになります。

from PIL import Image
import numpy as np
import sys

filter = [0, 0, 0, 0, 1, 0, 0, 0, 0]

defimage_process(src):
    width, height = src.size
    dst = Image.new('RGB', (width, height))

    img_pixels = np.array([[src.getpixel((x,y)) for y inrange(height)] for x inrange(width)])
    color = np.zeros((len(filter), 3))

    for y inrange(1, height-1):
        for x inrange(1, width-1):
            color[0] = img_pixels[x-1][y-1]
            color[1] = img_pixels[x-1][y]
            color[2] = img_pixels[x-1][y+1]
            color[3] = img_pixels[x][y-1]
            color[4] = img_pixels[x][y]
            color[5] = img_pixels[x][y+1]
            color[6] = img_pixels[x+1][y-1]
            color[7] = img_pixels[x+1][y]
            color[8]= img_pixels[x+1][y+1]

            sum_color = np.zeros(3)
            for num inrange(len(filter)):
                sum_color += color[num] * filter[num]

            r,g,b = map(int, (sum_color))
            r = min([r, 255])
            r = max([r, 0])
            g = min([g, 255])
            g = max([g, 0])
            b = min([b, 255])
            b = max([b, 0])

            dst.putpixel((x,y), (r,g,b))

    return dst

if __name__ == '__main__':
    param = sys.argv
    if (len(param) != 2):
        print ("Usage: $ python " + param[0] + " sample.jpg")
        quit()

    # open image filetry:
        input_img = Image.open(param[1])
    except:
        print ('faild to load %s' % param[1])
        quit()

    if input_img isNone:
        print ('faild to load %s' % param[1])
        quit()

    output_img = image_process(input_img)
    output_img.save("filtered_" + param[1])
    output_img.show()

 5行目の以下がフィルタの配列です。

filter = [0, 0, 0, 0, 1, 0, 0, 0, 0]

 以下のような操作で、画像をnumpyの配列にぶちこむことができますので、後は1画素ごとに操作をしてputpixelで吐き出すだけです。

img_pixels = np.array([[src.getpixel((x,y)) for y in range(height)] for x in range(width)])

 プログラムに関して、詳細は説明しませんが、こんな感じの書き方で読み込んだ画像の全画素に対して、フィルタリング処理ができます。興味がある人は自身で調べてみてください。そんなに難しいことはしていません。

 実行方法は、プログラムをfilter.pyという名前で保存して、と対象の画像sample.jpgを同じフォルダに配置して、以下コマンドを実行するだけです。

$ python filter.py sample.jpg

 百聞は一見に如かずです。いつものフリー素材で試してみましょう。ロンスタさん(id:lonestartx) いつもありがとうございます。

f:id:karaage:20170724130845j:plain:w640 イケメンが

 フィルタを通すと

f:id:karaage:20170724130845j:plain:w640 はいそのまま!

 何も面白くないですね。

ぼかしフィルタ

 次は、以下のようなフィルタを使ってみます。 f:id:karaage:20170724112947j:plain:w640

 周りの画素と平均することになるので、ぼやっとしたフィルタになることが期待できそうですね。

 具体的には、先ほどのプログラムの5行目の配列を以下に修正します(python2)。

filter = [1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0, 1.0/9.0]

 そうすると

f:id:karaage:20170724130845j:plain:w640 イケメンが

f:id:karaage:20170724131821j:plain:w640
 ちょっともやっとした!

 今回は、フィルタの値は全て同じ値の移動平均フィルタ(平滑化フィルタとも呼ばれる)を試しましたが。遠くの画素ほど、指数関数的に値を小さくするような値にすると、ガウシアンフィルタ(Gaussian filter)と呼ばれる代表的なボカシフィルタになります。

平滑化(移動平均、ガウシアン)フィルタ 画像処理ソリューション

エッジフィルタ

 今度は以下のようなフィルタを試してみます。

f:id:karaage:20170724112953j:plain:w640

 なんとなくですが、縦方向の画素だけとっているので、縦方向が強調されそうですね。先ほどの画像で試してみると。

f:id:karaage:20170724132245j:plain:w640 縦が強調された!

 同様に以下のフィルタで試してみましょう。今度はどうなるでしょうか?

f:id:karaage:20170724112957j:plain:w640

 同じように実行すると…

f:id:karaage:20170724132439j:plain:w640
 今度は横が強調された!

 じゃあこれらのフィルタを足し算したような以下のようなフィルタはどうでしょうか? f:id:karaage:20170724113002j:plain:w640

 試してみると…

f:id:karaage:20170724132208j:plain:w640
 両方強調された!

 ちなみに、この縦横両方強調するようなフィルタはラプラシアンフィルタ(Laplacian Filter)と呼ばれます。

 こんな感じで、フィルタの値を色々変えると、画像の様々な特徴を抽出することができることがわかります。

画像のフィルタ処理はディープラーニングにも深い関わりがある

 実は、こういった画像処理の基礎は、最近話題のディープラーニングにも深い関わりがあります。ディープラーニングが得意なのは、画像認識で以下のような特徴があると以前ご紹介しました。

f:id:karaage:20170625212919j:plain:w640

 上図の詳細は以下の記事参照下さい。

 ディープラーニングは、特徴量の抽出を自動でやってくれるのが凄いのですが、ここの部分は具体的に何をやっているかというと、実はまさに先ほど紹介したフィルタの値の設計なのです。

 3x3で縦を強調するという単純な例ならまだしも、例えば画像から猫っぽい特徴を抽出するために、5x5や10x10のサイズのフィルタを2回重ねて…なんて人間には設計できる気がしませんね。そんなフィルタを自動で設計できるのが、ディープラーニングで有名なCNN(Convolutional Neural Network)というニューラルネットワークです。Convolutionalは日本語に訳すと「畳み込み」でまさに先ほどのフィルタの計算のことです。

 また、ディープラーニングにおいて、フィルタ(ニューラルネットワーク)は自動で設計してくれるのですが、そのために必要な入力データの質も重要になってきて、あらかじめ余分な情報のノイズを除去(フィルタリング)することが非常に大切になってくるため、ここにも基礎的なフィルタリングといった画像処理は非常に重要になってくるのです(前処理と呼ばれたりします)。

 余談ですが、ディープラーニングのCNNは囲碁で世界一のプロ棋士に勝ったことで有名なAlphaGoにも使われています。囲碁の黒白の19×19の盤面を、モノクロ画像に見立てて学習しているのです。凄い事考えますね。AlphaGoの詳細は、以下の記事が詳しいです。

Googleが出した囲碁ソフト「AlphaGo」の論文を翻訳して解説してみる。 - 7rpn’s blog: うわああああな日常

 ちなみに将棋は、駒の種類が多いので囲碁に比べるとCNNとの相性はよく無いため、ディープラーニングはまさにこれから使われだしているというところです。今までプロ棋士との勝負に使われている将棋ソフトは、基本的にはディープラーニング以前の機械学習が用いられていると思います(私の知る限り)。将棋のソフトも、ディープラーニングを使うことでこれから更に強くなっていくかもしれませんね。

まとめ

 画像処理のフィルタに関して、簡単にまとめて実際にpythonで実装してみました。ただ、実際に実行してみると分かるのですが、今回のプログラムって物凄い遅いです。numpyってfor文何度も回すような計算って不得意なのですよね…OpenCVだと、そういったところも最適化されていますし、今回紹介したようなフィルタは全て関数として用意されています。じゃあやっぱりOpenCVが良いじゃんとなってしまうわけで、実際そうなのです。こういった基礎的なところを知っておくと良いことあるかもよ、という私の余計なお節介と思って下さい(今更の衝撃的な告白)。

 まあ、OpenCVが使えないと何もできないというのもカッコ悪いですしね。OpenCVが使えない環境や事情がある場合もあると思いますし(今時滅多に無いかな?)。今回のような基礎なら、覚えておくと、どのような環境・言語でも応用がきくと思います。またこういった基礎的な技術が、最先端のディープラーニングでも重要で多用されているというのも中々味わい深いものがあります。用語自体は、Photoshopなどの画像処理でも使われるものたくさんありますしね。何事も基礎は大切ということです。

 今回使用したプログラムは、以下のGitHubのリポジトリにもアップしてあります。参考まで

関連記事

参考記事

初めてのPython画像処理 - Qiita

画像処理の数式を見て石になった時のための、金の針 - Qiita

暑い夏に最適!準備15分・片付け5分の簡単設置ベビープールで子供と遊んだ

$
0
0

f:id:karaage:20170715101624j:plain:w640

暑い夏はベビープールが大活躍

 暑い夏、小さい子供がいるとちょっと外の公園いくのも、大人も大変ですし、子供も熱中症が心配ですよね。そんな時の強い味方がベビープールです!

f:id:karaage:20170715100626j:plain:w640

 実は去年購入していたのですが、娘がまだ1歳でプールを怖がっていたので、全然使っていたなかったのです。もう2歳になりどうかなと思い試してみたのですが、これが大正解でした。

INTEX(インテックス) レクタングラーベビープール 166×100×28cm 57403 [日本正規品]

INTEX(インテックス) レクタングラーベビープール 166×100×28cm 57403 [日本正規品]

 そして、一応最初に書いておきますが、庭やベランダでのプールは結構近所トラブルの可能性があるらしいので、注意して下さい。具体的には以下です。

  • 子供の声が響く。跳ねた水が他の家、部屋に入る
  • マンションやアパートの場合は、規約で禁止されている場合がある
  • 一気に水を流すと排水溝が溢れる場合がある

 ここらへんは個々の環境で気をつけるべきことが大きく違うと思いますので、くれぐれも周囲に迷惑をかけないように気をつけましょう。当たり前ですが、プールに限らず大切なことですね。

ベビープール準備の様子

 準備の様子です。めちゃ簡単です。

 まずはプールをおもむろに庭・ベランダに広げます

f:id:karaage:20170715095115j:plain:w480
 しょぼんとしている様子

 ここで取りいだしたるは、電動ポンプ。これは必需品です。これないと、多分死にます(肺活量的に)。

ドウシシャ 電動ポンプ AC式

ドウシシャ 電動ポンプ AC式

 我が家はベランダに屋外電源があるので(工事してつけました)、そこから電源をとっています。屋内で膨らませて持っていってもよいのですが、片付けで空気抜くとき電動ポンプ使うので、屋外電源があると便利ですね。

f:id:karaage:20170715095402j:plain:w640

 無い場合は、電動ポンプを電池式にするか(上のAmazonリンクのオプション画面で選択できます)、以下のような延長ケーブルで屋外まで電源伸ばしてもよいかなと思います。プールで水使うので、念のため防水だと安心かもですね。

 あとはポンプを以下のように空気入れにさして

f:id:karaage:20170715095425j:plain:w640

 スイッチオン!!

f:id:karaage:20170716153749g:plain:w640
 ※時間圧縮しています、実際は3分ほどかかって膨らみます

 GIF動画だとわかりませんが、ウィィーーーーーン!と結構大きな音がします。子供は怯えてました。2箇所に空気を入れるのですが、電動ポンプなら5分もあれば十分膨らみます。

 後は、水を入れるだけです。屋外ホースがあれば便利なのですが、無いので家族でバケツリレーです(笑)やる前はめちゃくちゃ大変かと思っていたのですが、8Lくらいのバケツであれば5〜7往復もすれば結構水が溜まってきます。

f:id:karaage:20170715100921j:plain:w640
 手伝ってくれる娘

 子供の年齢にもよりますが、水は少なめでもバチャバチャやって十分楽しめます。5往復くらいでも十分と感じました。また、あんまり冷たい水だと、体が冷えてしまうので、場合によっては少し温めておいてもよいかもしれません。実際、少し温めた方が長く楽しめました。

f:id:karaage:20170715101541j:plain:w640
 完成した様子

f:id:karaage:20170715101624j:plain:w640
 別角度

 奥の方にあるのは、我が家の家庭菜園です(笑)

ベビープールで遊ぶ様子

 プールで遊ぶ様子です。

f:id:karaage:20170715102446j:plain:w640

f:id:karaage:20170715102643j:plain:w640

f:id:karaage:20170715103215j:plain:w640

f:id:karaage:20170715103229j:plain:w640
 大人の服もびちょびちょ

 こういうお砂場セットやお風呂でのおもちゃとかあると楽しめるかもしれません。

ワイドバケツセット ピンク No.2193

ワイドバケツセット ピンク No.2193

まとめ

 というわけで、ベランダプールのススメでした。まだ大きいプールには早い小さいお子さんがいる家庭には良いのじゃないかなと思います。私も最後の方はプールでゴロンとしてました(足を折りたためば浸かれる程度のサイズです)。ただ、2日間プールで遊んで気付いたのですが、日陰でも結構日焼けしますね。ヒリヒリします。スキンケアはした方がよいかもしれませんね(笑)

INTEX(インテックス) レクタングラーベビープール 166×100×28cm 57403 [日本正規品]

INTEX(インテックス) レクタングラーベビープール 166×100×28cm 57403 [日本正規品]

ドウシシャ 電動ポンプ AC式

ドウシシャ 電動ポンプ AC式

3年越しの悲願達成!はてなTシャツをついにゲットしました

$
0
0

f:id:karaage:20170729150000j:plain:w640

はてなTシャツをいただきました

 ついに、はてなTシャツをゲットしました。「はてなTシャツ」でブログを検索したら、以下の2014年の記事からTシャツ欲しいと言い続けていました。どれだけ欲しいんだ自分。

 い、一応言っておきますけど、決して、はてなさんに直接「Tシャツ欲しい」と言ったわけじゃないですからね!か、勘違いしないでよね!

 はてなニュースにIoTデバイス「からあげDashボタン」に関して寄稿しました - karaage. [からあげ]の記事で

はてなニュースに寄稿までしましたが、はてなTシャツは貰えてないですから!!

 とか言ってますけど、これはセーフですよね?セフセフですよね?

とりあえず着用しました

f:id:karaage:20170729150242j:plain:w480
 ちょっと曲がっているけど、喜びの表れです

f:id:karaage:20170729150248j:plain:w640
 喜びを逆立ちで表現しようとしたら、妻から「慣れないことはやめなさい」と窘められました。ごもっともなので、全身で喜びを表現しました

f:id:karaage:20170729150600j:plain:w640
 同封されていたステッカーは、とりあえずMac Bookに貼ってみました。典型的なオタクのノートPCになりつつあります

 ところで、このはてなTシャツ、ニューデザインみたいです。やったね!ただ、はてなTシャツとちょっとだけ分かりづらいような気も…ひょっとして、はてなさんに騙されたりとかしてないですよね?

「あいつ、ユニクロのTシャツ送ったら喜んでやがる、プププ」

 とか思われてないですよね!?

名実ともに「はてなの犬」になりました

 はてなブログをしている人には2種類の人間がいるという話を以前しましたが、私はついに持たざる者から、持っている者へとなりました。これで、名実ともに「はてなの犬」に成り下がったわけです。ワンワンワン。はてなの犬だワン。

 早くも2016年の振り返りと2017年にやりたいこと - karaage. [からあげ]で書いた目標のうち1つ「はてなTシャツをゲット」は達成してしまったので、2017年の残りの目標は「はてな本社を襲撃」のみとなりました。うぉぉぉ!待ってろよはてな!!火つけてやるからな!ワンワンワンワン!!

はてなニュースへの寄稿

 ちなみに今回「はてなTシャツ」を頂いた理由ですが、はてなニュースへの寄稿に対するお礼とのことです。はてなニュースさんには、今まで3本の記事を寄稿させていただいています。はてブ数にムラがあり過ぎですね。もし宜しければ読んでみて下さい(さりげない宣伝です、これが全然隠れていないステマです)。

はてなさんに関して思うこと

 はてなさんで、はてなダイアリーのころから数えると10年以上ネットに文章を書き続けていることになります。始めた時は、正直言うと無料で広告が無いという理由だけで選んだのですが、まさか10年以上続けて、ましてや、はてなさんに寄稿をするようなことになるとは夢にも思いませんでした。

 10年かかって分かったのが「はてなって変な会社だな」ということです。

 まずもって、私に寄稿を依頼する時点でどうかしてます。思わず

「それより絵日記サイトのライブドアブログへの流出をなんとかしなくてよいのですか!?」

 という言葉が喉まで出かかりました。大人なので言わなかったですけど。

 色々やりとりするようになっても、「この会社変かも」という気持ちは深まるばかりでした。でもそれは悪い意味ではなく、普通の企業が追い求めるような、わかりやすい単純な指標をそれほど気にしていないということで、それはとても尊いことかもしれないなと思いました。

 私は、結構以前からはてなさんに対しては、はてなフォトライフの不具合をディスったりはてなブログに自動投稿するツール作って12日で1000記事投稿して怒られたりと、ひどいことばかりしてしまっているわけですが、私は嫌いな対象に関しては、基本的に一切近づかないようにするのが常なので、自分からこうやって近づいていくということは、なんだかんだではてなさんのことが凄く好きなのだと思います。これも10年かかってやっと気付きました。

 今後も、はてなさんでブログを書いていきたいなと改めて思いました。でも、はてなフォトライフの不具合は許せないです。

関連記事

モノづくりの祭典「Maker Faire Tokyo 2017」に行ってきました

$
0
0

f:id:karaage:20170805122806j:plain:w640

Maker Faire Tokyo 2017

 Maker Faire Tokyo 2017(以下MFT2017)に行ってきました。Maker Faireというのは、モノづくりの祭典で、電子工作のコミケみたいなものと思ってもらえれば良いかなと思います。実際は、電子工作以外にも色々あって、カオスなのですが簡単に説明するのは難しいです。

 MFTの地方版である、近場の岐阜県の大垣市で行われる「Ogaki Mini Maker Faire」には2010年の初回(そのころは Make:Ogaki Meetingという名前だった)から毎年参加していて、去年は出展までさせていただきました。

MFT本体への参加は今回が初めてとなります。東京までの往復は、地方からはお金的にも時間的にも厳しくて、どこかお金出してくれるスポンサーはいないかと金策をいくつか画策したのですが、全てあえなく撃沈しました。最終手段として、会社のお金という手も無くはなかったのですが、会社のお金で行くとブログで好きに書くことができなくなるので、意を決して全て自腹で行くことにしました。ちなみに全く回収の目処はありません!まあ、好きでやっていることですので気にしないでください。私も読者のこととか気にしてないのでお互い様です(笑)

MFT2017 動画ダイジェスト

 動画のダイジェストです。4分程度です。なんとなく会場の雰囲気が分かるかもしれません。

MFT2017 写真ダイジェスト

 会場の写真です。雰囲気重視

f:id:karaage:20170805123609j:plain:w640

f:id:karaage:20170805123759j:plain:w640
 入り口は30分くらいたっても大行列でした

f:id:karaage:20170805130036j:plain:w640

f:id:karaage:20170805130144j:plain:w640

f:id:karaage:20170805133339j:plain:w640
 プロレスするロボット

f:id:karaage:20170805135343j:plain:w640
 畳でできたミクギターをもたせてもらいました

f:id:karaage:20170805135640j:plain:w640
 1絃ベース。これめちゃカッコ良いです(ダイジェスト動画参照)

f:id:karaage:20170805140038j:plain:w640 始めてウダー演奏しました!大人の科学の付録になるという話に関してそっと聞いて見たら苦笑いされてしまいました。ちょっと苦しい状況みたいですね。

f:id:karaage:20170805140032j:plain:w640
 宇田さんの作ったもの。ポケット・ミクにはお世話になりました。話題のFM音源は一瞬で完売していました…

YAMAHAのFM音源チップ、YMF825がMAKE市場向けに登場。Maker Faireで先行発売が決定だ! : 藤本健の“DTMステーション”

f:id:karaage:20170805140723j:plain:w640

f:id:karaage:20170805140624j:plain:w640

f:id:karaage:20170805140936j:plain:w640

f:id:karaage:20170805140958j:plain:w640 サーキットベンディングのところは、量も内容もすごかったです。ここの音もヤバかったです(動画参照)。クロックラインに、今あるクロックはおかまいなしに外部からクロック突っ込んでるとか言ってたので完全に頭可笑しいです(褒め言葉)。勘で改造していると言っていたのですが、よく勘でここまでできるなぁ

f:id:karaage:20170805144646j:plain:w640
 全自動メガネ洗浄機。私のメガネを洗ってもらうとしたら止められました

f:id:karaage:20170805145320j:plain:w640
 実際の魚をモデルにしたロボット。こういうタコが実際にいるらしいです(最初宇宙人かとおもった)。

f:id:karaage:20170805162206j:plain:w640
 タチコマ

f:id:karaage:20170805173826j:plain:w640
 Raspberry Piを使った家庭菜園監視システム。私のやつよりずっと本格的

f:id:karaage:20170805174340j:plain:w640
 話題のAIを使ったキュウリの自動判別。ちょっと見にくいのですが、下のディスプレイにリアルタイムに判別結果が表示されています。Tensor Flowを使ってGoogleのTutorialベースのCNN(入力は32x32程度)。教師画像は合計3万枚くらい(反転でN増ししている)。学習はクラウド(AWS)で、判別はRaspberry Piで実施。最近、これに影響受けてRaspberry Piでのディープラーニングに再度挑戦しています。

f:id:karaage:20170805185516j:plain:w640
 タミヤのロボット。これ、Raspberry Piを乗っけるロボットにピッタリ。他にもArduinoやichigo jam、micro:bitを乗せたバージョンのロボットが動いていました。買おうと思ったら完売…

 このロボットの詳細は以下参照下さい

Make: Japan | タミヤ「カムプログラムロボット工作キット」は3,456円という価格でロボットプログラミングを普及させるきっかけになるか

f:id:karaage:20170806170714p:plain:w640
 戦利品です。他にも買いたいものあったのですが、売り切れ多数でした…無念

まとめ

 Maker Faire Tokyo、もの凄い規模に圧倒されました。1つ1つもしっかり話を聞いたりデモ体験すると10分程度すぐ経ってしまうので、全部見るのは不可能ですね、最初の1時間くらいで若干絶望しました。自分の出展も無いので1日で十分と思っていましたが、泊まりで2日間にしても良かったかもという気もしました。あとは、人気商品は予想以上に売れるのが早くてビックリしました。ディズニーランド並みの開演ラッシュが必要でしたね…情弱でした。もし次回があればしっかり反省を生かしたいと思います。

 というわけで、今回の記事はダイジェスト版でしたが、MFT2017で見た展示の中で興味深いものに関しては、それぞれ掘り下げていくつか紹介したいと思っています。1週間に1回くらいのペースで3つくらい取り上げる予定ですので、興味ある人はお楽しみに!

 

参考リンク

Make: Japan | Maker Faire Tokyo 2017開幕 ― 恒例の初日フォトレポート

国内最大のMaker系フェス「Maker Faire Tokyo 2017」がお台場で開催中 | fabcross

関連記事


NATURA CLASSICA + NATURA 1600フィルム写真

$
0
0

f:id:karaage:20170724011847j:plain:w640

久しぶりのフィルム写真(NATURA CLASSICA + NATURA 1600)

 前回が1月。なんとフィルム1本撮り切って現像まで半年かかっている…

 フィルムは、今回もNATURA1600です。そしてNATURA1600生産終了が決定してしまいました…切ない

フィルム写真

 もう桜とかいつの写真だよって感じですね。でもそれが味わい深いかも。

f:id:karaage:20170724011838j:plain:w640

f:id:karaage:20170724011832j:plain:w640

f:id:karaage:20170724011808j:plain:w640

f:id:karaage:20170724011744j:plain:w640

f:id:karaage:20170724011719j:plain:w640

感想

 現像出したとき、カメラ屋さんの女性店員から

「ナチュラ クラシカ、今メルカリで価格が高騰してますよ!」

 という悪魔の囁きをうけました。

 どんなもんかと調べて見ると…

f:id:karaage:20170725233058p:plain:w640

 6から8万!確かに高い!最近あんまり撮ってないし、とちょっとグラついてしまいましたが、少なくともNATURA1600が買えなくなるまでは、手放さないつもりです。お金だけじゃないですからね。

リンク:Amazonで「NATURA CLASSICA」を探す

関連記事

関連サイト

Raspberry PiとTensorFlowを使ったディープラーニングの開発環境構築

$
0
0

f:id:karaage:20170726015040j:plain:w640

Raspberry PiとTensorFlowでディープラーニング

 最近、人工知能とかディープラーニングに関して興味を持っていて、以下のような記事でまとめたりしました。

 ただ、本やネットの記事を見ただけだと、あまり頭の良くない自分には全然ピンとこないというのが正直なところです。そこで、今までChainerという日本製のディープラーニングのフレームワークを使って色々実験してみたのですが、サンプルを動かすことはできても、それ以上のことが何もできなくて中身の理解も進まないという歯がゆい状況が続いていました。そんな中Chainerがガンガン後方互換性を捨ててバージョンアップをしていくので、ついていくこともできない状況でした。

 そんな中、ちょっと前に話題になったディープラーニングを使った「きゅうりの仕分け」の記事

 なんとRaspberry Pi上でTensorFlowを動かして、ディープラーニングでリアルタイムにきゅうりの判別を行っているというではありませんか。自分もRaspberry PiとChainerで画像認識試したことあるのですが、そのときは1枚の画像の判別に30秒くらいかかっていて「Raspberry Piではディープラーニングは無理かな」と勝手に見切りをつけてしまっていました。

 自分の理解不足を棚に上げて、勝手にできないないと思い込んでいた自分が恥ずかしいです。そもそも、Raspberry Piは安価で小型なLinux機である上に、高性能なカメラモジュールもあるので、ディープラーニングのプラットフォームとしてはうってつけなハードウェアです。いい機会なのでまた1から勉強し直すために、Raspberry PiとTensorflowをベースに、ディープラーニングの実験ができる環境を構築して、また勉強し直してみることにしました。

f:id:karaage:20170726015040j:plain:w640
 Raspberry Pi + TensorFlow。この中にディープラーニングの環境がつまっています

 結論から言うと、この組み合わせかなり良いです。TensorFlowの公式チュートリアルはちゃんと動きますし。自前の画像データを学習から、学習済みのネットワークとRaspberry Piのカメラを使って画像判別までできるようになりました。今回は、環境の構築方法をまずご紹介しようと思います。

f:id:karaage:20170725234118p:plain:w640
 Raspberry Pi上で自前データを学習している様子

f:id:karaage:20170725234109p:plain:w640
 TensorFlowに付属のTensor Boardという可視化ソフトも動きます。ただかなり重いです

 ちなみに、もちろんRaspberry PiとTensorFlowを使ってディープラーニングしている人は、世の中にごまんといます。ごまんは言い過ぎかな、Raspberry Piが1000万台くらい売れてるらしいので、1000人くらいはいるでしょう(笑)。公開している人の例をいくつか参考リンクとして本記事の最後にリンク貼りました。人それぞれ前提が異なると思いますので、この記事が合わない方はそちらも参考にしてみて下さい。

Raspberry Pi +TensorFlowでのディープラーニング環境セットアップ

Raspberry Piセットアップ

 ハードウェアはRaspberry Pi 3が良いと思います。Raspberry Pi Zeroなどではまだ未確認です。

 以下記事参照に、Raspbian Jessieの基本的なセットアップまでを実施しましょう

 次に、以下のパッケージをインストールします。TensorFlow以外は必須ではありませんが、入れておくと便利だったり、色々応用ができます。

  • TensorFlow
  • Open CV/PIL
  • pandas/matplotlib
  • keras

TensorFlowインストール

 Raspberry PiへのTensorFlowのインストールです。ソースからビルドすると大変そうですが、Raspberry Pi用にバイナリパッケージを用意して下さる神のような方がいるので、ありがたく利用させていただきます(非公式な点には注意下さい)。

 上記サイトのREADMEの通りインストールしましょう。具体的には、以下のコマンドを実行します。今回はpython2を前提にインストールしています。

$ sudo apt-get install python-pip python-dev
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl
$ sudo pip uninstall mock
$ sudo pip install mock

Open CV・PILのインストール

 画像処理に使用するOpenCV・PILというライブラリをインストールします。学習に使用する画像データの前処理等に使用します。以下コマンドでインストールできます。

$ sudo apt-get update
$ sudo apt-get install python-imaging
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv

 Open CVに関しては以下参照ください

グラフ可視化関係(pandas/matplotlib)

 matplotlibで簡単なグラフを描けると色々便利なのでインストールします。

$ sudo apt-get install python-pandas
$ sudo apt-get install python-matplotlib

 matplotlibの使い方は以下参照ください

keras

 kerasは、TensorFlowを便利に使うことができるようになるラッパープログラムです。TensorFlow ver1.2からはTensorFlow内部に取り込まれるのでインストールは不要らしいのですが、Raspberry Pi用のバイナリのTensorFlowはまだv1.1.0なのでインストールします。

 以下のコマンドを実行ください。いきなりsudo pip install kerasをしても(多分)よいのですが、最初の2行実行しておいた方がインストールの時間短縮になります。

$ sudo apt-get install python-scipy
$ sudo apt-get install python-h5py
$ sudo pip install keras

Mac/Linux機へのTensorflowインストール

 ディープラーニングの学習は、ネットワークの規模が大きくなるとRaspberry Piでは時間やメモリの関係で辛くなってきます。その場合、学習をPC(若しくはクラウド)上で実施して、Raspberry Pi(+カメラモモジュール)で判別するのがよいでしょう(キュウリの仕分けもそのような構成をとっています)。

 Mac/LinuxへのTensorflowのインストールに関しては、下記記事を参照下さい。

公式サイトのGET STARTED TUTORIALSが最強

 いよいよ環境がととったら、最初に何をすべきかですが、地道にGoogle公式のTensorflowのチュートリアルを順にこなしていくのが一番よいかなというのが、私の結論です。

Getting Started  |  TensorFlow

 実際に1文字ずつ打っていく(写経する)のが一番ですが、pythonを起動して、チュートリアルを1文ずつコピペしていくだけでもかなり違うかなと思います。

 どうしても英語が辛かったら、Google翻訳で日本語訳したものを読めば良いかなと思いますが、ほとんど専門用語なのでそんなに変わらないかなと思います。

日本語訳

本で理論を補完

 チュートリアルだけやっても、よくわからない単語が出てきたり、そもそもTensorflowの中で何をやっているのかさっぱりイメージできないこともあります。そんな頭パッパラパーな状態の方は、本で理論を補完してやるのがよいです。

 オススメは、以下2冊くらいです。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 これは色々なところで勧められていますが、間違いなく名書です。しっかりやれば陳腐化しない10年は使える知識が身につくと思います。逆に、即効性(すぐこれを読むとディープラーニングで凄いことができる)という本ではないです。

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

 理論と実践面の両方に関してバランス良く書かれた本です。pythonの基礎や理論的な話は、「ゼロから作るディープラーニング」と重複する箇所もあるのですが、TensorFlowの詳しい解説もあるので、公式のチュートリアルを補完する意味合いであった方がよいかなと思います。

 その他、ディープラーニングといえば、花形のアプリケーションは画像認識です。画像認識をしたい場合は、画像処理関係の知識も欲しいところですね。特にディープラーニングで頻出するCNN(Convolutional Neural Network)に関しては、画像フィルタそのものだったりします。画像フィルタに関しては、以下の記事でまとめていますので、興味のある方は参考にしてみて下さい。

自前データの学習・評価・判別

 一通りチュートリアルを終えたら、やってみたくなるのが自前データを学習させて判別ですね。チュートリアルは動かせても、自前データの学習は実際にやろうとすると、結構色々大変だった りします。参考記事に挙げた先人達の知見を参考に、Tensorflowのチュートリアルのニューラルネットワークをベースとした、自前のデータを学習から、評価・判別までできるソフトを作ってみました。GitHubで以下のリポジトリにあげてあります。

 これを使えば、自前の様々な画像データを学習させて、実際にRaspberry Piのカメラを使って判別するということが誰でも簡単にできるようになります。使い方はREADMEに書いてありますが、多分これだけではイマイチわからない人が多数と思いますので、これを使って実際どのように自前のデータを学習して、構築したネットワークをどう使えばよいのかを、別の記事で実例を交えて詳しく解説したいなと思います。来週くらいに公開しようかな。気が向いたら。

まとめ

 Raspberry PiとTensorFlowを使ったディープラーニングの開発環境を構築しました。これを使って色々な実験をしていけたらと考えています。今のところ、先人の試みをキャッチアップするだけで精一杯ですが、そのうち少しでも独自の要素を盛り込んでいければと思っています。

関連記事

 キュウリの仕分けに関しては、つい先日行ったMFT2017でも展示されていました。Raspberry Piでリアルタイムに判別していました。

参考記事

Raspberry Pi 人工知能ツールをインストール【Python3】 - Qiita

Raspberry Pi でディープラーニング環境構築 - ゼロから始める機械学習

raspberry pi 3にTensorFlowを入れて画像認識させる - ようこそシャチクパーク!

Raspberry Pi 深層学習ライブラリで物体認識(Keras with TensorFlow・Open CV) - Qiita

8/10発売の書籍「自分で動かす人工知能」に名前がクレジットされました

$
0
0

f:id:karaage:20170804221856j:plain

「自分で動かす人工知能」に名前がクレジットされました

 8/10に発売の「自分で動かす人工知能」という本に私の名前がクレジットされています。

パソコンで楽しむ 自分で動かす人工知能

パソコンで楽しむ 自分で動かす人工知能

f:id:karaage:20170804221833j:plain ジャーン

 協力したのが1人だけなので、なんだか全面協力したみたいに見えてしまいますが、文章は1文字も書いていませんし、インプレス社様から献本いただいた本で、始めて文章を読みました。

 今回は、本の中で以下のブログ記事を参考にしたということで、クレジットいただけることになりました(事前にクレジットする旨の連絡ありましたので了承しました)。

 具体的には、3-4章の部分になります。ただ、ちょっと誤解されやすい表現になっていてまずいなと思ったのが、紹介されているTextGeneratorというソフトウェア、私が全部作ったみたいに読めてしまうことです。このソフト元々、ともっくす (id:o_tomox)さんが作ったソフトをベースに作った(GitHubでforkした)もので、私が開発した部分はプログラムを使いやすくしたのと、はてなブログに投稿するプログラムを付け加えただけです。私だけがクレジットされるとは知らなかったので、かなり申し訳ない気持ちになってしまいました…。ともっくすさんには、メールで一報させていただきました。

 しかし、ブログを長くやっていると、本を出さないかとか、本でブログを紹介するかもという話は何度かきたりするものだったりします。大抵すぐポシャってしまうものなのですが、今回のように出版まで行くケースは珍しく驚きました。最初話を聞いたときは、この本も50%くらいの確率でポシャるのじゃ無いかなと思ってました、すみません(笑)

「自分で動かす人工知能」の感想

 本を読んで見て、良かったところと、あまり良く無かったとことです。

良かったところ

説明がとても丁寧

 説明がわかりやすく、とても丁寧でした。最近は様々な人工知能本が出ていますが、しっかり実例を挙げながら具体的に説明しているので、納得感が強いです。人工知能の定義自体もしっかり定まっていなくて、本によってはひどい説明(と自分が思うこと)書いてあることも良くあるのですが、この本の人工知能の定義は、自分にとっても凄く納得いくものでした。正直、ちょっと自分の考え方も改めさせられました。

初心者でも簡単にプログラムを実行できる環境が用意されている

 Linuxのバーチャル環境を構築することで、WindowsでもMacでも今の環境を壊さずに試すことができます(もちろんLinuxならそのまま動かせます)。また、ある程度環境をセットアップしたイメージファイルを以下のWebサイトで提供することで、本の通りにやって動かないというリスクを極力減らしているのが、丁寧な仕事だなと思いました。

広く色々なことを試せる

 実際に本を読んで試せることが、文章の自動生成、画像認識、自動作曲と幅広く、それに伴い、使用するツールやサービスも、バーチャルマシン(Virtual Box)、Linux、Chainer、TensorFlow、Python(Anaconda)はてはDockerまでと多岐に渡ります。人工知能関連のソフト開発に必要な知識を一通り習得したいという人には非常に良いなと思いました。使用するソフトやサービスも、ほぼ全てがフリーのものなので、ネット環境さえあれば手軽に試せてしまうのが良いですね。

良くなかったところ

動かないソフトがある

 これは特にディープラーニング系の本の宿命でもあるのですが、バージョンアップ激しいためすぐ動かなくなってしまうのですよね。ちょっと試して見ましたが、例えばChainerのプログラムは既に最新のバージョンでは動かないです。コマンドをバージョン固定にするか、専用のサポートサイトを用意して案内するなどの配慮があると良かったかなと思います(売り切りの本で中々辛いとは思いますが)。

色々詰め込みすぎ感がある

 これは、良いところの背反なのですが、色々試せるが故に詰め込み感は否めないです。かなり多くのソフトを多用するのと、それぞれのツールに詳しい説明があるわけではないので、自分で調べる方法が分からない完全な初心者はついていけないのじゃないかなという気がします。また一つの分野だけ深く知りたいという人にも物足りない内容にはなると思います(元々そういう本ではあるのですが)。

まとめ

 色々書きましたが、人工知能に関して興味あって、趣味で実際に手を動かして試してみたいけど、どこから始めてよいか分からないという人にはかなりオススメできる本なのではないかなと思いました。正直、実践の部分に関しては、本の内容はネットを調べればほとんど出てくる情報ではあるのですが、日本語でちゃんと動くサンプルがこれだけまとまっているというのは、それだけで価値があるのではないのかなと思います。やってみると分かるのですが、ネットの情報って玉石混合(特に有用な情報は大半は英語)ですし、環境や前提がバラバラなので、初心者が読んで試してもまずそのままで動きません。この本は、割と環境構築に気を使っているので、本の通りにやれば、大半は動くのじゃ無いかなと思います(先ほど言ったように、バージョンの関係で全部動かすのは難しいかもしれません)。

 良く無かったところも色々書いてしまいましたが、どれも実践的な人工知能の本では宿命と言える問題ではあるので、しょうがない点はあります。文句だけ言うのもあれですし、協力者として名前も載せていただいているので、私も及ばずながらこの本を補足するような情報を発信しようかなと思います。具体的には、本の通りにやって動かない箇所の対応とかRaspberry Piで動かす方法とかを紹介していこうと思います。ざっと見た感じ、本の8割以上はRaspberry Piでも動かせそうです。というか半分くらいは既に試している内容ですね(笑)今週末に公開予定です。

 というわけで、私の名前も載っていますので、人工知能に興味ある方は、もしよろしければ買ってみてくださいね。ただ、どれだけ買っても私には、印税は一銭も入ってこないので別に無理して買わなくても良いです(笑)

パソコンで楽しむ 自分で動かす人工知能

パソコンで楽しむ 自分で動かす人工知能

関連記事

iMac 2017を便利にするために購入した周辺機器3選

$
0
0

f:id:karaage:20170802234933j:plain:w640

iMac 2017買いました

 iMac買いました。元々妻がノートPCが欲しいという話をしていて、新たに買うPCを探していたのですが、妻もそうそう使うわけじゃないので、むしろ新しいPCを買った方がよいかも。と思っていたところ、タイミング悪くロンスタ (id:lonestartx)さんが、iMacを買ってレビュー記事とかガンガンアップしているじゃありませんか。

 買うしか、ないよね…というわけで、深く考えずロンスタさんの買った仕様のまんま購入してしまいました。だって、ロンスタさんよりスペック低かったらなんか…悔しいじゃん!

iMacを買ってから続けざまに買った周辺機器

 iMacと合わせて、色々周辺機器も購入買いました。

f:id:karaage:20170804002210j:plain:w640
 見事にANKER製品

 まあ、はっきり言ってiMacと同じように周辺機器もほとんどロンスタさんと同じものを買ったんですけどね。

USB HubとSDカードリーダ

 以下のロンスタさんの記事で勧められていたものそのまま買いました。

f:id:karaage:20170802222351j:plain:w640
 ジャーン、見事に同じ組み合わせ

 なので、詳しくはロンスタさんの記事をみて下さい。もう正にその通りです。何も問題ないです。バッチグーです。

ディスプレイケーブルでデュアルディスプレイ

 続いては、ディスプレイケーブルです。ディスプレイが1つ余っていたので、折角なのでデュアルディスプレイにしてみました(広いディスプレイは正義です)。

f:id:karaage:20170802223623j:plain:w640

 当たり前ですが、ケーブル繋ぐだけで簡単にできました。iMac 2017はUSB Type-Cのコネクタから変換することに注意ください。間違えて、Mini DisplayPortのケーブルなんて買ってはいけませんよ!はい、すみませんトチ狂って間違えました。泣く泣く会社のMac Bookに使うことに…無駄に会社のディスプレイがトリプルディスプレイになったよ!やったね!

 というわけで今回買ったのはこちらです。

 iMac 2017で動作確認のレビューがあるものが他に見当たらなかったのでこちらにしました。SDスロットやHubと一体になっているやつも良さそうだなと思ったのですが、以下3点の理由で今回は見送りました。

  • iMac 2017での動作確認例が無かった
  • 若干取り回しが悪くなりそう
  • 若干お高い(ディスプレイ動かなかった時のショックが大きい)

 今回は、無駄にもう一つのディスプレイを縦置きにしてみました。最初、ディスプレイの回転の設定が出てこなくて焦ったのですが、セカンドディスプレイ側に出てくる設定画面に設定項目が出てました。

f:id:karaage:20170802222954j:plain:w640
 同じディスプレイ設定画面でも、どちらのディスプレイで開くかで上図のように異なる設定画面になります

f:id:karaage:20170803014601p:plain:w640
 上記の画面の変更をクリックすると、回転角度を選択できました

f:id:karaage:20170803005958j:plain:w640
 ブログ書くときとか、プレビューを縦長で表示すると便利…かな?

 デュアルディスプレイ、セカンドディスプレイとiMacのディスプレイの差が大きすぎるのがちょっと気になるところです(調整したけど、元からの違いが大きすぎてダメでした)。まあでも無いよりはあった方が便利ですね。もし余っているディスプレイがあるのでしたら、ディスプレイケーブルは最高にコスパ良い投資だと思います。

 ただ、もう一台良いディスプレイ買っても良いかなとか思い始めるので危険です。

USBアクティブスピーカ

 これは、前から持っていたものですね。

 iMacのスピーカもそんなに悪く無い気がしますが、どうせ背面のUSBポートも余っているし、デザインも割とマッチしているしということで使ってみました。普通におすすめです。

f:id:karaage:20170802234933j:plain:w640

LOGICOOL ステレオスピーカー Z120BW

LOGICOOL ステレオスピーカー Z120BW

まとめ

 iMac購入に合わせて、周辺機器を色々買ってみました。最近は、信頼している人が選んだものは、わりと考えずに買うようにしています。Amazonのレビューより全然信じられます。自分で探す手間も省けますしね

 しかし、色々買ったらせっかくワイヤレスですっきりしていたのに、ちょっとゴチャゴチャしてしまいましたね。ロンスタさんに至っては、キーボードやマウスまで買い変えてますからね。ここらへんも、ちょっとクラっときそうになってしまいますが、そこまでマウスやキーボードに拘りがあるわけではないので、私はこのままで良いかな。もし拘りある人は、ロンスタさんの下記の記事を参考にしてみて、どんどん沼にハマっていくと良いと思います(笑)

 あ、ちなみにiMacは最高でしたよー!めちゃめちゃ気に入ってます。買ってよかった!

関連記事

「パソコンで楽しむ 自分で動かす人工知能」非公式サポートページ

$
0
0

f:id:karaage:20170804221856j:plain

「自分で動かす人工知能」に関して

 以下で書いた通り、協力としてクレジットさせていただいている本「パソコンで楽しむ 自分で動かす人工知能」の補足記事を書きます。

 基本的には、本の内容でうまくいかない箇所を補足するような位置付けです。あとは、Raspberry Piでの動かし方を一部紹介していこうかなと思います。あくまで私が自主的にやっている非公式の補足ページですので、動く保証とかはありませんのであしからず。書籍のプログラム動かないことに対する文句はインプレス社さんに言って下さい。また、この記事に関しては動かなくても文句は言わないようにしてください(笑)

 本記事は、以下の本を買っていることを前提に書いていますが、買わなくてもそんなに問題無いので、別に無理して買わなくても大丈夫です。何故なら何度も言うように、私には印税は一銭も入らないからです(笑)

パソコンで楽しむ 自分で動かす人工知能

パソコンで楽しむ 自分で動かす人工知能

「パソコンで楽しむ 自分で動かす人工知能」補足

 以下PCで実践する内容に関して、本のままでは動かない箇所を補足したり、Raspberry Piで動かす方法に関して紹介します。本のチャプターに沿って補足していきます。

2-2 顔検出の準備をしよう

 本ではバーチャルマシン上のUbuntuにインストールしているdlibを、Raspberry PiにインストールすればRaspberry Piでも2章の内容を試すことができます。ちなみに、私はdlibのインストールまでしか実施していませんので、説明するのはそこまでです。

 まずは、Raspberry Pi 3を以下の記事を参考に基本的なセットアップを完了させます

 あとは、以下コマンド実行して必要なパッケージをインストールします。

$ sudo apt-get install -y cmake gfortran graphicsmagick libgraphicsmagick1-dev libatlas-dev libavcodec-dev libavformat-dev libboost-all-dev libgtk2.0-dev libjpeg-dev liblapack-dev libswscale-dev python-dev python-protobuf software-properties-common

 次はdlibのビルドなのですが、ここでこけやすいようなので(自分もRaspberry Pi 3でこけました)、スワップファイルを増やしてやるのがよいみたいです。

$ sudo vim /etc/dphys-swapfile

 以下の箇所を

CONF_SWAPSIZE=100

 以下に変更して下さい

CONF_SWAPSIZE=1024

 参考サイトには、dphys-swapfileサービスを再起動しろとあったのですが、私の場合うまくいかなかったので、以下コマンドで再起動しました。

$ sudo shutdown -r now

 確認は、以下のコマンドで実施します。

$ free -m

 以下のようにSwap1023になっていればOKです。

             total       used       free     shared    buffers     cached
Mem:           862        818         43         15         19        643
-/+ buffers/cache:        156        705
Swap:         1023          0       1023

 ここまでお膳立てすれば、以下コマンドでdlibがインストールできます。

$ sudo pip install dlib

 参考にしたのは、以下サイトです。2-3、2-4の顔検出やその他の物体の検出までは面倒くさいのでやりませんが(主に教師データ集め)、以下サイトを読んで頑張れば、多分できるんじゃないかなと思います(投げっぱなし)。

HOG特徴とSVMによる物体検出

dlibで機械学習して物体検出する - Qiita

Install dlib on the Raspberry Pi - PyImageSearch

3-4 コンピュータに文章を書かせよう

 ここは、私の記事が参考にされているところなので楽勝ですね。というより、以下記事で、既にRaspberry Piで試す方法に関しては説明しているので、もしRaspberry Piで試したい人は参照してみて下さい。

4-2 Chainerとchainer-goghをインストールしよう

 ここらへんも、既に過去に試しています。Chainerで気をつけないといけないのは、バージョンアップが激しく、後方互換もないことです。本の通りセットアップすると多分うまく動きません。

 具体的には、本の以下の箇所を

$ pip install chainer

 以下のように書き換えてやることで、バージョン固定してインストールすることができます。

$ pip install chainer==1.8.1

 また、ChainerをMac(バーチャルマシン無し)やRaspberry Piで試したいときは、以下を参考にしてみて下さい。

 chainer-goghに関しては、以下で使い方書いていますが、ここは本の内容を読んでもさして変わらないと思います(本家のチュートリアル通りやっているだけなので)。

5-1 TensorFlowを使ってみよう

 TensorFlowをRaspberry Piで動かす方法に関しては、以下参照下さい。

 5-2章のMNISTのチュートリアルも、Raspberry Piでそのまま動きます。

付録 -1 仮想マシンのセットアップ

 VirtualBoxの使い方は以前私もまとめていますので、もしよければ参照下さい。

まとめ

 「パソコンで楽しむ 自分で動かす人工知能」の非公式サポートページを作成しました。本の全部はカバーしていないので、気になる方は是非買ってみてください。約2000円の本ですが、人工知能に関する概要やコラムだけでも十分価値ある本と思います。足りない分は私への感謝の気持ちということで(笑)。

 しかしこれで、私も人工知能の本を出したと言っても、過言ではないかもしれませんね(だいぶ言い過ぎ)。頑張れば自分にも本を書けそうな気もしてきました(多分勘違い)。ただ、出版不況の今でも、ベストセラは1〜2万冊なので、マニアックな分野でそれだけ売るのは難しそうですね。「Raspberry PiとTensorFlowで始める人工知能入門」とかだと売れても1000冊くらいでしょうか。多分赤字ですね。赤字でもいいという出版社さんは是非私に声かけて下さい(笑)

パソコンで楽しむ 自分で動かす人工知能

パソコンで楽しむ 自分で動かす人工知能

関連記事

ましかく写真を簡単に作れる「SquareHolic」をProcessingで1日で作ってリリースしました

$
0
0

f:id:karaage:20170811234504j:plain:w640

真四角写真を作るソフト「SquareHolic」作りました

 簡単に真四角写真を作るソフトです。

 例えば以下のような写真から… f:id:karaage:20170811234613j:plain:w640

 以下のような、ましかく写真が簡単に作れます。

f:id:karaage:20170811234504j:plain:w640

 背景は、好きな色に調整できます。また、写真は簡単なガンマとゲインの調整ができます。

 逆にいうと、それ以外は何もできません。

 ちなみに「Holicシリーズ」(と勝手に名付けた)画像処理ソフトはこれが4作目ですが、技術的には一番簡単なソフトです(笑)。

「SquareHolic」に関して

作った経緯

 いつもお世話になっているロンスタ (id:lonestartx)さんが、ある日Twitterで困っていました。

 これは人肌脱がないといけない!と思い、全裸になって1日でソフト作って送ってみました(実質作業したのは1時間くらい)。

 「ふぅ、いい仕事をした」と思っていたら、なんとバグが発覚。

 あ、画素数が奇数の時のこと考えてなかった…というわけで、勘で直して修正しました。正確にはちょっとおかしくなっているところありそうだけど、まあ見た目わからないから良いかなと言う適当具合です。

「SquareHolic」の使い方

 ロンスタさんが、なんと使い方を、変デジ研究所という超有名ブログで紹介してくれました!(半分お願いしました!)なので、ここでは省略します。以下のページみてください(凄い手抜き)

 ロンスタさんはMacで使っていますが、一応Windows用のバイナリファイルも用意しました。誰も動作確認はしていませんが、勇気ある人は試してみてください(笑)

 そして、変デジ研究所から、このブログの宣伝もしていただきました。嬉しい!

アプリ制作や人工知能、Raspberry Piなどに興味がある方はからあげ先生のブログも要チェックです!

 そんなやつ、いるのか(笑)

アイコンが超おしゃれ!

 このアプリのポイントは、なんといっても、おしゃれなアイコン! f:id:karaage:20170813084942j:plain:w420

 このアプリ、ロンスタさんに作っていただきました(これもお願いしちゃいました!)。なんと10分で描いていただきました。

 こういうのは、自分には作れないので羨ましいです。こうやってちょっとしたコラボして、一人じゃ作れないものが作れるのと楽しいですね!

Processingはちょっとした画像処理ソフトを作るのに超便利

 多分このくらいの画像処理なら、ちょっと高機能な画像処理ソフトで手間をかけたり、ソフトを探せばできるかもしれないのですが、調べるより作った方が早そうなので作ってしまいました。個人的にも、これだけのために重いソフトを起動するのも牛刀割鶏な感じがあるので、このような小さめの専用ツールの方が好きだったりします。

 自分だけが使うのであれば、pythonとかで作った方が楽なのですが、今回は人に使ってもらう必要があったこともあり、Processingというプログラミング言語で作りました。GUIがついた、マルチプラットフォーム(WindowsでもMacでも使える)の簡単な画像処理ソフトを作るのに、これほど最適なプログラミング言語は他にないのじゃないかなと個人的には思っています。

 ソースコードも公開していますので、もし興味ある方は是非自分でもちょっとした画像処理ソフト作成にチャレンジして見てください。Processingの始め方は、以下とかを参考にしてみて下さい。第4回でめでたく打ち切りになった超人気連載です。

まとめ

 久しぶりにProcessing使ってアプリを作ってリリースしました。こうやって、ちょいちょいと小さいアプリを短期間で作るのも、ちょっとした頭の体操にもなって良いですね。やっぱりProcessingは便利だなと改めて思いました。簡単にマルチプラットフォームのアプリ作れるので、もっと気軽にちょっとしたツールを作って公開してくれる人が増えたら良いなと思ったりします。Raspberry Piでも動きますしね(笑)

関連記事

karaage.hatenadiary.jp

某楽器メーカのモノ作り同好会が本気で遊ぶ「R-Mono Lab」(MFT2017展示紹介その1)

$
0
0

f:id:karaage:20170805153931j:plain:w640

某楽器メーカのモノ作り同好会「R-Mono Lab」

 先日行われたMaker Faire Tokyo 2017(以降MFT2017、詳細は以下記事を参照下さい)。

 今週から、何回かMFT2017で見た展示を詳しく紹介していきたいと思います。第一弾は某楽器メーカのモノ作り同好会の「R-Mono Lab」さんです。「R-Mono Lab」さんに関しては、Make: Japanさんの以下のインタビュー記事を見ていただくのが分かりやすいと思います。

 ちなみにインタビュー記事では、もろに会社名出ていますが一応、某楽器メーカのR社らしいです(笑)いやー、学生時代はバンドやってたから、某R社さんのジャズコーラス、スタジオで良くお世話になったわー(白々しい)

 ちなみに、「R-Mono Lab」さんとはtwitterで2年くらい前から何故か、絡むようになり。「Ogaki Mini Maker Faire2016」で始めて直接お会いすることができました。

 今回お話を伺ったのは、「R-Mono Lab」代表の山本さん(twitterの中の人)及び「R-Mono Lab」メンバーの方々です。 f:id:karaage:20170805153931j:plain:w640

 最初会ったとき、どう見てもサーファーだったのでビックリしました(笑)

リコーダ・パイプオルガン「RP-09G」

 「R-Mono Lab」の代表作品です。上の写真の山本さんの後ろにあるやつがそうです。

 演奏するために、毎回山本さんが足踏みポンプで必死に空気を送っています(笑)

f:id:karaage:20170805152327j:plain:w640

 実際に買おうとすると数千万とかかかってしまうパイプオルガンをリコーダで作ってしまうという画期的製品です。詳しくは以下動画参照ください。

 動画改めてみると、山本さんの演技がめちゃめちゃ笑えました(笑)

自走するタワシ

 楽器メーカなのに何故か動くタワシです。キットを購入させていただきました(笑) f:id:karaage:20170805152142j:plain:w640

 作り方がネットにあるのですが、メチャメチャ丁寧です!子供が作れるように、半田付けはあえて使わなかったり、組み立てのポイントがしっかり書かれていて、ちょっと感激ものでした。流石ユーザに直接販売する製品を作っているメーカだけあるなと感心してしまいました。

 動く姿がめちゃめちゃ可愛いです。



 私も早速作ってみました。ホットメルトが無かったのでテープで仮止めして動作確認しています。不器用な私でも1時間くらいで作れました。

DR-55 MIDI Sync Board Version 2

f:id:karaage:20170805152544j:plain:w640

 歴史的アナログ・リズムマシンDR-55をハックした意欲品です。本来MIDI入力無い機器にMIDIで同期できるように改造したそうです。本来は出せないはずの、オープンハイハットの音もハックにより出せるようになっていました。ビックリ。製作者自身も「作ったもののこんなものに需要あるのか?」と思っていたそうですが、未だ愛用している人が何人か購入していったそうです。「R-Mono Lab」さんの活動だからこそ作れた、R社のファンを増やす素晴らしい作品(もはや製品かも)だなと思いました。

けものエフェクター

f:id:karaage:20170805152947j:plain:w640

 人気アニメの「けものフレンズ」を題材にしたエフェクターです。私はアニメは見ていないのですが、作品にトキという音痴なキャラクターがいるらしいのですが、そのトキのように音痴になるエフェクターとのことです。たしかにどう歌っても音痴になりました(笑)凄い。製品化に向けての壁は、版権の関係だけなそうなので関係者の方は是非「R-Mono Lab」さんにご一報を!

 実際に歌っている様子は以下となります

 技術的には、アナログ・デバイセズという半導体メーカのBlackfinというプロセッサを使用しているとのことでした。アナデバさんは本業でお世話になったなぁ(遠い目)。一般でもキットは買えるみたいです。マルツさんでそれらしいキットが売っていました。面白そうだけど、これはかなり奥が深そう。

音遊び!Blackfin DSP基板でディジタル信号処理の部屋 | マルツセレクト

顔MIDIコントローラー

f:id:karaage:20170805153205j:plain:w640

 Raspberry Piとカメラモジュールで撮影した、人間の顔の位置と感情を元に曲を演奏する機器(正確にはMIDIのコントローラ)です。顔検出自体は、Raspberry Piで行なっているそうですが、感情の判定にAWSを使っているので、デモをするたびに製作者のクレジットカードへの請求が発生する従量課金MIDIコントローラーとのこと斬新過ぎる(笑)

 課金は大したことないのですが、AWSとの通信にどうしてもタイムラグが出てしまうそうです。製作者の方には、「Raspberry Pi上でディープラーニング使えば多分ほぼリアルタイムで感情判定できますよー」という話をしていましたが、AWSを使って見たかったのと、そこには時間をかけれない(かけたくない)との話でした。

 今、Raspberry Pi上でディープラーニング試しているので、感情判定するモデル作って見てうまく行ったら送りつけてみようかな(笑)。

ラズパイ・シンセ「S³-6R」(シンセ仙人・シンセTシャツ)

f:id:karaage:20170805154703j:plain:w640

 シンセ仙人が作る、ラズパイ・シンセ

 シンセサイザを知っている人なら、上の動画を見ればそのヤバさが伝わるはずです。こんなヤバい音がラズパイから出ているの訳が分かりません。

 ちなみに、シンセ仙人はシンセの音を聞くと、大体どうやって作ればよいか分かるそうです。FM音源なら、2段のフィルタまでなら瞬時にわかるとか…仙人ヤバすぎ。海外のミュージシャンからも、シンセ買いたいとオファーが来たそうです。

 肝心の製品化に関しては、計画中だけど詳細は秘密だそうです。

 ちなみに、今回シンセ仙人のTシャツが限定で売られるということで、勢いで買ってしまいました(笑)

f:id:karaage:20170806100754j:plain:w640
 着てみた絵

 メッシュでかなり良い素材でした!問題はこれをいつ着るかですね(笑)大事に使います!

まとめ

 「R-Mono Lab」さんを紹介しました。大企業で働くエンジニアとして、会社と個人で相互によいフィードバックができるこのような活動は非常に素晴らしいなと感じました。「R-Mono Lab」さんの活動に関して興味を持たれた方は、以下のWebサイト(なんとTumblr)と、twitterアカウントをフォローしましょう。

 また、「R-Mono Lab」さんのような、メーカの同好会活動に関しては、以前に以下の記事にまとめました。

 MFT2017では、他にも企業の部活動チームが多く出展していました。こういう活動が色々な企業で増えてくるのは、嬉しいしワクワクしますね。ちなみに私の会社でも似たような活動をやっているらしいのです。ただ、ここまで言っておいてなんなのですが、私は仕事とプラベートは分けるタイプなので関わらないようにしています。Maker Faireにも今回から出始めたらしいので、次回出展するときは変装していかなければ…


Raspberry Pi上でTensorFlowで簡単にディープラーニングを試せるツール「tensorflow-pi」でロボホンの幻の顔認識機能に挑戦してみた

$
0
0

f:id:karaage:20170726015040j:plain:w640

Raspberry PiとTensorFlowを使ったディープラーニング開発環境

 以下の記事でRaspberry PiとTensorFlowを使ったディープラーニングの開発環境の構築方法を紹介しました。

 記事の最後の方に、自前データの学習から、学習したニューラルネットワークで判別まで実施できる自前のパッケージ「tensorflow-pi」を紹介させていただきました。

 ただ、READMEだけ見ても、意味不明な英語で良くわからないと思いますので、今回は実例を交えながらこのソフトの使い方を紹介しようと思います。

 例題ですが、以前ネットで話題になった「ロボホン」の幻の顔認識機能があります。詳しくは以下参照下さい。

 開発決定!というニュースは話題になったものの、その後続報がとんと聞かれません。そもそも技術的に不可能なんじゃという噂も聞こえてきたりしました。

 奇しくもロボホンとRaspberry Piは、ARMベースの1.2GHzのクアッドコアCPU、カメラ 800万画素と性能的には似通っています。ロボホンのOS(Android)上で、TensorFlowの学習データも扱えるらしいので、Raspberry Piで実現できれば、ロボホンで同じことができる可能性は高そうです。ということで、Raspberry Piで顔認識機能開発して、ロボホンで顔認識が実現できるかどうかをRaspberry Piでプロトタイピングして事前検証してみることにしました。そんなわけでロボホンは使いません、タイトルで期待した方はすみません!(もしロボホン手に入ったらハックしてみたい!)。

 そして、一応最初に書いておきますが、私は機械学習やディープラーニングの専門家でも何でも無く、趣味でやっているだけですので、内容に不正確な箇所が含まれる可能性あることはご容赦下さい(自分なりには頑張っているつもりですが)。勉強中の身ですので、もし気づかれた方は、優しく教えていただけたら嬉しく思います。

 あと、たいした結果得られなかった割に、長くてマニアックなので興味ある方のみご覧下さい。これほんと。

顔認識機能の開発

仕様定義

 ここらへんは、詳しい仕様が決まっているわけではないのと、ここではあくまでディープラーニングの実験が目的なので、以下のざっくり仕様とします

  • ハードウェアはRaspberry Piと専用カメラモジュールを使用
  • 学習する対象は、とりあえず家族3人(増やすことは可能にしておく)
  • カメラで定期的に撮影し、人の顔が撮影されたら誰かを判別して教えてくれる
  • 学習、判別は基本Raspberry Pi上で行う
  • 顔写真の収集及び前処理は手動でやる(ここの自動化は後で考える)

 製品のことを考えると、本当はここが一番大切なんですけどね。

顔認識機能の概要

 顔認識機能の概要に関しては、下図のようになります。 f:id:karaage:20170811163405j:plain:w640

 大きく、学習と認識の2つのフローに分かれます。学習フローでは、認識したい人の顔が含まれた大量の写真を、顔検出して切り抜くソフトで顔写真を切り出します。そして、集めた顔写真を誰の写真か分類(ラベル付け)してやった上で、学習を行い学習モデル(ニューラルネットワーク)を得ます。学習フェイズの作業は、1部を除くとほぼ手動の作業になります。

 認識のフローでは、Raspberry Piで撮影した写真を、学習のときと同じ要領で顔検出+切り抜きを行い、切り出した顔写真を学習したニューラルネットワークを使い判別します。認識に関しては、プログラムを開始したら、基本的に自動で繰り返し行われます。

Raspberry PiとTensorFlowの環境構築

 まずは、以下記事を参考にRaspberry PiにTensorFlowの環境を構築します。

 次に、自前データの学習から判別までできる自作ソフトtensorflow-piを、以下のGitHubのリポジトリからダウンロード(clone)します。

 具体的には、Raspberry Pi上のターミナルで以下コマンドを実行してダウンロード下さい

$ cd
$ git clone https://github.com/karaage0703/tensorflow-pi
$ cd tensorflow_pi

 GitHubって何?って人は、以下を参照して下さい。

サンプルデータ(入力写真)取得

 自分と愛する妻と娘と自分の顔写真が入ったサンプルデータを集めます。ここは、Raspberry Piで撮影して集めてもよかったのですが、色んな条件のものがあった方がよいだろうということで、過去写真などを活用することにしました。

 バックアップに使用していたflickrやGoogleフォトから探してみます。それぞれのサービスとも顔写真を自動で検出する機能を持っています。詳細は以下参照ください。

 flickrはカメラロールのmagic viewから、複数選択して一括ダウンロードできます。

 GoogleフォトはGoogle フォトのアルバム->人物で、一つずつShift+Dでダウンロードできます。

 使ってみた感触としては、Googleフォトが個別の人物まで識別してくれるので一番良い感じでした。flickrは一括ダウンロードがあるのは良いのですが、ダウンロードが死ぬほど重いです(タイミングによっても変わるかも)。

 Googleフォトは、サイズを制限すれば容量は無制限なので、Googleへのアップロードに抵抗がなければ、手持ちの画像を全部アップロードしてGoogleフォトに分類してもらうのが、一番手軽な顔写真をゲットする方法かなと感じました。

 こうして大量のフリー素材が集まりました。

f:id:karaage:20170701103525p:plain:w640 サンプルはイメージです

 今回の記事、ネット非公開の私の家族写真の代わりに、イメージ画像として、フリー素材のロンスタ(id:lonestartx) さんの写真を使わさせていただいております。いつもありがとうございます。

顔の切り出し

 顔写真を収集したら、次は顔の部分に限定して切り出してやる必要があります。以前作った顔検出のプログラムをベースに顔を切り出すソフトを作成しました。顔検出に関しては、以下参照下さい。

 今回は、上記のプログラムのままでは、あまりに検出精度が悪かったので、色々なサイトを参考にして目の位置などを判定に加える等して精度向上し、以下のpythonの画像処理プログラム集のリポジトリにface_crop.pyという名前で追加しました。参考にさせていただいたサイトは、本記事の末尾からリンクを貼っています。

 使い方は、READMEにも書いてありますが簡単に解説します。以下は、MacかLinux(Raspberry Pi含む)のターミナルでの操作を前提として記載していますのでご注意下さい。

 環境準備は以下参照にセットアップして下さい。

 次に、顔を切り出したい画像のあるフォルダに移動したあと、ターミナルで以下コマンドを実行してプログラムをコピーします。

$ wget https://raw.githubusercontent.com/karaage0703/python-image-processing/master/face_crop_simple.py https://raw.githubusercontent.com/karaage0703/python-image-processing/master/face_crop_simple-all.sh
$ chmod755 face_crop_simple-all.sh

 あとは、以下を実行すれば、顔写真がface_imagesディレクトリに自動的に切り出されて行きます。

$ ./face_crop_simple-all.sh

 以下のような感じです。

f:id:karaage:20170701110114g:plain:w640
 ※最新の顔切り出しソフトでは、多少表示が異なります

 切り出した顔は、カテゴリ(今回だと人毎)にフォルダ分けして、Raspberry Piのtensorflow-pi/data/以下にまとめていきます。例えば karaagelemonnecogistaだと以下のように配置します。

tensorflow-pi
 |- data/
     image_data/
       |--- etc/face_etc_01.jpg, face_etc_02.jpg, ...
       |--- karaage/face_karaage_01.jpg, face_karaage_02.jpg, ...
       |--- lemon/face_lemon_01.jpg, face_lemon_02.jpg, ...
       |--- necogista/face_necogista_01.jpg, face_necogista_02.jpg, ...

 フォルダ名、ファイル名は何でもOKです(ただし、日本語とか特殊な記号はダメかも)。

 PC上でみると以下のようなイメージです。 f:id:karaage:20170809143523p:plain:w640

 ちなみに、etcというのは、顔以外のものが検出された画像(ノイズ)を入れています。これを入れることで、実際に使う際、顔検出に失敗したとき無理やり誰かに当てはめることなく、etc(顔以外のもの)として判定することで、誤認識を減らす効果を期待しています。  以下はetcカテゴリの写真の1例です。

f:id:karaage:20170809144716j:plain:w480

f:id:karaage:20170809144725j:plain:w480

 全然顔じゃないですね。

 今回は、それぞれのクラスに30枚程度の写真、合計120枚程度の写真を集めました。

データのN増し

 ディープラーニングで学習させる際は、データをN増し(水増し)した方がよいという話をよく聞くので、N増しするソフトもtensorflow-piに用意しました。ソフトは、自作しようかと思ったのですが、すでに便利なソフトを作っている人が多数いたので、以下のサイトなどを参考にさせていただきました。ありがたやありがたや。

機械学習のデータセット画像枚数を増やす方法 - Qiita

 ただ、実は今回の場合はN増し前の120枚程度の画像で学習わりとうまくいったので、最終的にはN増ししませんでした。N増しの効果は、もっとクラスが多いと必要になってきそうなので、別の課題で改めて検証したいなと思っています。

 N増しをする方法は、N増ししたいフォルダに移動して、コマンドを実行するだけです。例えば、~/tensorflow-pi/data/image_data/karaageのデータをN増ししたい場合は以下です。

$ cd ~/tensorflow-pi/data/image_data/panda
$ ../../increase_picture-all.sh

 実行するとtrans_...というN増しデータが大量に生成されていきます。

 これをN増ししたい全てのフォルダで行います。イメージ的には、この1つの写真が

f:id:karaage:20170709220722j:plain:w640

 以下のようにN増しされます。

f:id:karaage:20170808151956p:plain:w640 まさに地獄!!

 ちなみに、TensorFlowでは、プログラム上で画像を簡単にN増ししてくれるような機能も用意されているので、それを使うのも簡単ですが、TensorFlow以外のフレームワークを使いたいときのことを考慮したのと、極力前処理で何をやっているか、自分で把握しておきたかったので、あえて独立したスクリプトを用意しました。

 TensorFlowのN増しに関して知りたい方は、以下のTensorFlowのcifar10という画像認識のサンプルプログラムのdistorted_inputsあたりの関数が参考になると思います。

ラベル作成

 次に面倒なラベル付けですが、これも一括でできるスクリプトを用意しています。以下実行するだけです。

$ cd ~/tensorflow-pi/data
$ python make_train_data.py image_data

 これで /tmp/tensorflow_pi/以下に labels.txt , train.txtといったファイルが生成されます。また、最後にclass number= 4といった表示がされます。これは、分類するクラスの数です。今回は、3人の顔 + その他の合計4クラスに分類されるので4が表示されます。

 ~/tensorflow-pi直下のcnn.pyというプログラムは、分類するクラスの数を直接入力してやる必要があります。5行目をみるとNUM_CLASSES = 4となっているので、今回は変更不要ですが、もしクラスの数が4以外だったらその数に書き換えてやって下さい(できればここは自動でやりたいので、誰かこっそり良い方法教えていただくか、GitHubにPRいただけると助かります)。

 make_train_data.pyは、id:shi3zさんのdeelというChainerのラッパープログラムのツールの一部を活用させていただきました。Chainer用のツールではありますが、TensorFlowにも活用できる素晴らしいツールです。めちゃめちゃ感謝です。

GitHub - uei/deel: Deel; A High level deep learning description language

学習

 いよいよ学習です。といっても、ディレクトリ移動してコマンド1発です、簡単。具体的には以下です。

$ cd ~/tensorflow-pi
$ python train.py

 しばらく待つと、学習が進んでいきます。

step 0, training accuracy 0.144286, loss 39156.7
step 1, training accuracy 0.158571, loss 24045.2
step 2, training accuracy 0.200714, loss 16943.1
step 3, training accuracy 0.330357, loss 11338.4

 lossが下がってaccuracyが上がっていけばOKです。lossnanになった場合は、学習失敗していますので、やり直してください。

 今回は、3人+その他(etc)の4カテゴリで約120枚の画像で学習しました。このくらいだと、Raspberry Piでも30分程度で学習できました。step 200まで行くと学習が終わります。最後にかかった時間と認識率が出てきます。

結果は以下です。

step 198, training accuracy 0.988095, loss 3.84672
step 199, training accuracy 0.988095, loss 3.51081
elapsed_time:1472.91347504[sec]
test accuracy 0.961538

 最終的に認識率は96%と言っていますね。良すぎじゃない?本当!?

 30分も待ちきれないというせっかちな人は、MacやLinuxマシンを使って同じことをしましょう。MacやLinuxでの環境の構築方法は以下参照下さい。

 参考までに、以下くらいのスペックのCorei5を積んだMac Book Proで実行すると 3分程度でした。

$ system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro12,1
      Processor Name: Intel Core i5
      Processor Speed: 2.7 GHz
      Number of Processors: 1
      Total Number of Cores: 2
      L2 Cache (per Core): 256 KB
      L3 Cache: 3 MB
      Memory: 16 GB

 他、XeonのCPUとNVIDIA Quadro積んだ以下程度のスペックのワークステーションを借りて試してみたのですが、CPUで1.5分、CUDA入れてGPU使うとなんと20秒でした。というか、GPUとか何も意識してプログラム組んでないのにちゃんと早くなるんですね、TensorFlow凄い。並列化とかしたら、もっと早くなるんでしょうかね。

$ lscpu
Architecture:          x86_64
CPU 操作モード:   32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
コアあたりのスレッド数:2
ソケットあたりのコア数:4
Socket(s):             1
NUMA ノード数:     1
ベンダー ID:       GenuineIntel
CPU ファミリー:   6
モデル:             94
Model name:            Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz

 学習にかかる速度差は、Raspberry Piと一般的なマシンのCPUだと10倍、ちょっとしたGPU積んだマシンだったら100倍くらい違うという印象ですね(もちろん条件によって変わってきますのであくまで目安です)。

Tensor Boardによる可視化

 TensorFlowにはTensor Boardという可視化ソフトが付属していて、学習の様子やニューラルネットワークの構造などを可視化することが可能です。Raspberry Pi上で学習している場合は、Raspberry Piで以下コマンドを実行して下さい。

$ tensorboard --logdir=/tmp/tensorflow_pi/

 あとは、ifconfig等で自分のIPアドレスを調べて、ブラウザで<ip address>:6006にアクセスすれば可視化情報が見れます。例えばIPアドレスが192.168.0.10だったら192.168.0.10:6006のアドレスにアクセスしましょう。

 ブラウザはRaspberry Pi上のChromeブラウザでアクセスしてもOKですし、ネットワークに繋がっている他のマシンのブラウザでアクセスしてもOKです。ただ、MacのSafariは私の環境ではうまく表示されなかったので、ブラウザはFireFoxかChromeがよいかもしれません。

f:id:karaage:20170725234109p:plain:w640
 Raspberry Pi上でTensor Boardを動かしている様子

 ただ、Tensor BoardはRaspberry Pi上で動かすとかなり重いので、あまり実用的ではないかもしれません。その場合は、matplotlibで可視化するのが軽くて便利です。

matplotlib/pandas による可視化

 train.pyを使って学習すると、学習の様子が/tmp/tensorflow_pi/train_graph.csvというファイルに書き出されています。これを可視化するには、以下コマンドを実行して下さい。

$ cd ~/tensorflow-pi
$ python plot_graph.py

 以下のように、学習の様子が表示されます。このようにlossが下がりaccurarcyが上がっていると、正常に学習できていることになります。

f:id:karaage:20170813010936p:plain:w640

 matplotlib/pandasの可視化に関しては、以下の記事を参照下さい。

 matplotlibがどうしてもよく分からない、苦手という人は、/tmp/tensorflow_pi/train_graph.csvをエクセルなどの表計算ソフトで好きにグラフにしてもOKです。

判別テスト

 これで90%くらいの精度で認識できることが分かったわけですが、なんか嘘くさいですよね。信じられますか?(私は信じられません)。ほんとにちゃんと学習できているか、新しく撮影した顔写真でテストしてみたいですよね。もちろんそんなテスト用のプログラムも用意しています。

 まずは、テストしたい顔写真を、顔の切り出しのところで行ったのと同じ要領で顔を切り出します。写真は、今回は~/tensorflow-pi以下にtest.jpgというファイル名でおきます。後は、以下コマンドで判別できます。今回は私の写真を使いました。

$ cd ~/tensorflow-pi
$ python predict.py test.jpg 

 実行すると、以下のように表示されます。

2017-08-09 22:01:12.554877: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-09 22:01:12.554923: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-08-09 22:01:12.554936: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-09 22:01:12.554946: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
karaage

 ちゃんと最後にkaraageって出ている!凄い!賢い!

 判別されるまでの時間、マシンによってはそこそこ時間かかるかもしれませんが、ほとんどはTensorFlowの読み出しにかかる時間のはずです。今回使用したくらいの学習モデルであれば、Raspberry Piでも実時間(1,2秒程度)で認識できるはずです。

顔認識実験

 テストできたら、いよいよRaspberry Pi上のカメラで顔認識をさせてみましょう。Raspberry Pi以外のマシンで学習した場合は、学習したモデルのデータとラベルデータをRaspberry Piにコピーしておいて下さい。

 具体的には、~/tensorflow-pi/data/model以下のすべてのファイル(checkpoint , model.ckpt.data-00000-of-00001, model.ckpt.index, model.ckpt.meta, labels.txt)となります。コピーしたら、Raspberry Piにカメラモジュールを接続して、カメラを撮影できる状態にしておいて以下を実行しましょう(Raspberry Piでカメラ撮影する方法は、ここでは詳細は省略しますのでご自身で調べて下さい)

 準備ができたら、以下コマンドを実行するだけです。

$ cd ~/tensorflow-pi
$ python face_recog_pi.py

 このプログラムでは、Raspberry Piのカメラで撮影して、顔検出を実施し顔検出に成功したら顔を切り出し、顔認識を行うということを、ほぼリアルタイムで実施してくれます。以下が実行の様子です。

f:id:karaage:20170810133738g:plain:w640

 Raspberry Piのカメラで、私(karaage)の顔と、娘(lemon)の顔を交互に見せると、ちゃんとそれっぽくリアルタイムに認識してくれます。

 ただ、結構誤認識は多い感じでした。カメラにアップで顔をうつすと割とうまくいくのですが、カメラからの距離が離れるほど間違えてしまうようです。感覚的には精度は6〜8割といったところでしょうか。こういった実際のカメラに組み込んだときの精度の評価は難しいですね。誤認識の要因は色々考えられます。

  • 学習したデータと実際にテストしたデータの違い(Raspberry Piカメラとそれ以外のカメラ、撮影場所)
  • 写真の解像度不足(リアルタイムで顔検出するため、解像度落として保存している)
  • データ不足 or 過学習
  • プログラムにバグがある

 実用段階にもっていくためには、上記の要因を1個1個つぶしていく必要がありますね。もちろん他にも問題は山積みと思います。

ロボホンの幻の顔認識機能は実現できるのか?

 はっきり言ってしまえば、この実験だけでは良く分かりませんでした(しょうもない結論ですみません…)。ただ、少なくとも実際に一般ユーザーが使えるようなものを作るには、大きな課題が沢山ありそうだなということは分かりました。具体的には以下です。

  • 教師データの集め方
  • 性能の問題
  • 学習の問題

 教師データは、一般ユーザに顔を切り出して用意してもらうわけにはいかないので、色々なパターンの顔写真をロボホンに撮らせるような工夫が必要なのですが、学習に耐えれる沢山の写真をユーザに撮影してもらうというのは、中々難しいかなと思います。

 また、性能の問題として、認識率以外の問題として、顔が正面を向いていないとうまく検出できなかったりもします。解決策として、検出までディープラニングにやらせる方法もありそうですね(そういう技術はある)。ただ、それはそれで色々大変そうです。

 逆に、実験する前に懸念していた学習時間は、とりあえず家族分くらいなら思ったほどかかりませんでした。ただ、10人、20人と増えていくと計算量が比例して増えていくのと、ネットワークを変えないとうまく学習できないといった問題が出てきそうです。実際、101クラスに分類するCaltech101という有名なデータセットでの学習を試してみたのですが、ニューラルネットの構造を変更しないとうまく学習できませんでした。Caltech101はtensorflow-piを使って以下コマンドでダウンロードできるので興味がある方はネットワークを変えて色々試してみてください。

$ cd ~/tensorflow-pi/data
$ ./getCaltech101.sh

まとめ

 ロボホンの幻の顔認識機能にディープラーニングで挑戦してみました。わざわざ私がやるまでもなく、シャープの優秀なエンジニアさんなら既にこのくらいの実験はとっくに済ませていると思います。そして、あまりの難易度に絶望しているのじゃないかな、と勝手に同情しています(笑)もしこの機能が高い性能で実現したら、開発したシャープさんのエンジニアには惜しみない賞賛を送りたいなと思います。

 ディープラーニングというと、なんでもできるような気がしてしまいますが、限られたリソースで有用なアプリケーションを作ろうとするとまだまだ課題があることがわかります。今後は、そういった実用的な部分の技術の発展も重要になっていくのかもしれませんね。

 最後に、今回実際に実験してみてわかったことのまとめです。

  • 教師データ集めるのが大変。とにかく大変
  • ハイパーパラメータは重要(特に学習率)
  • ディープラーニングのフレームワークは色々あるが、自前データの活用するには、結構自分で作らないといけないものが多い
  • Raspberry Piでディープラーニング結構色々できそうだけど、モンスターマシンは欲しい

 教師データ集めは、実際にやっている人に聞くと誰しもが言うのですが、これが本当に大変です。前処理まで含めて言うならこれがほぼ全てかもしれません。今回だと、まず顔検出して切り出すソフトから作り始めましたからね。

 もちろんニューラルネットワークの構造だったり、学習率といったハイパーパラメータも重要です。最初、全然学習がうまくいかなかったのですが、学習率を変えるだけで学習が収束するようになったりして、なかなか面白かったです。学習率の値は、train.pyの18行目のlearning_rateを変えることで変更できますので、興味あれば色々試してみて下さい。

flags.DEFINE_float('learning_rate', 1e-5, 'Initial learning rate.')

 クラスの数だったり、解く問題によって最適なネットワークが変わってくるのは、先ほど述べた通りですね。

 最後に、Raspberry Piでディープラーニングですが、個人的には結構可能性を感じました。世の中にあるディープラーニングのstate-of-artなモデルは、とにかく多くのクラスに正確に分類することを目指して、馬鹿でかいニューラルネットワークになっていることが多いのですが、Raspberry Piで動くような小さなニューラルネットワークでも、用途によっては十分な精度を出せそうなので、工夫すればもの凄い安く身近な問題を解決する超小型な人工知能が作れてしまうかもしれません(キュウリの仕分け機もその一例ですね)。

 一方で、本格的にディープラーニングのパラメータチューニングや、ニューラルネットワークの設計をしたいとなると、どれだけ試行錯誤できるかが勝負になってくるので、Raspberry Piで物足りなくなったら、入門は卒業してGPU積んだマシンの購入やクラウドなどが必要になってくるのかなと感じました。ちなみに大量のデータ学習させようとするとGPUのメモリも重要ですね(Caltech101のデータを2GBのGPUで学習させようとしたらメモリが溢れてエラーになりました)。

Raspberry Pi + Chainerで同じようなことを試したい人へ

 今回私はRaspberry PiとTensorFlowの組み合わせで顔認識を試しましたが、Raspberry PiとChainerの組み合わせで同じようなことを、私よりずっと前に試している人がいました。実際のアプリケーションは以下のような感じです。ChainerでもTensorFlowと同様に、小さめのニューラルネットワークならリアルタイムな認識はできるようですね。

IoT司書育成 中間報告

 顔認識のソフトのリポジトリは以下になります。

 コードの書き方、再学習の仕方、レポートのまとめ、ドキュメントの書き方など全てが参考になりました。オススメです。

関連記事

参考リンク

TensorFlowでアニメゆるゆりの制作会社を識別する - kivantium活動日記

tensorflow/mnist_deep.py at r1.2 · tensorflow/tensorflow · GitHub

TensorFlow の "AttributeError: 'module' object has no attribute 'xxxx'" エラーでつまづいてしまう人のための移行ガイド - Qiita

新しくMacを買ったときの初期設定まとめ(なんちゃってエンジニア向け)

$
0
0

f:id:karaage:20170729160028j:plain:w640

新しいMacを買ったら1からセットアップをしたくなる

 iMac買いました。

 iMacが手に入ったら、地獄のセットアップの始まりですね。Macには、移行アシスタントツールというものがあって、古いMacと新しいMacをWiFiかEtherケーブルで接続すれば、一気に全ての環境を移行できるのですが、今回はあえて移行ツールは使わず、1からセットアップすることにしました。これを機会に環境設定を見直したかったのと、、最初のセットアップちまちまするのが結構好きだったりするんですよね(これって自分だけ?)。

 次に再セットアップするときのために、手順を自分のメモとして残しておきます。ひょっとしたら、私以外でも以下のような方だと参考になるかもしれません。

  • ターミナルは一通り使える
  • ちょっとしたソフト開発やプロトタイピングをする
  • ハードウェアもやる(興味ある)
  • Mac OSをデフォルトから大きくカスタムしない
  • ラズパイ芸人

 逆に対象としていないのは以下の方々です。

  • ガチのソフトウェアエンジニア(特にフロントエンド・インフラ系)
  • DockerとかAnsibleとか使いこなしている人
  • Macを初めて買った人

 あくまで、ハードもソフトも中途半端な、私のような「なんちゃってエンジニア」向けの設定なので、ガチの人の厳しいツッコミはご容赦下さい。あと、当然ですが本内容には何も保証はありませんので、自己責任でお願いいたします。

 iMacでセットアップしましたが、Mac Book等でも基本的にやることは同じなので、参考になるかとは思います。

基本的な設定

 以下は個人的な好みです。デフォルトで違和感が無いなら特に気にしなくてよいと思います。

  • 設定 ->キーボード ->ライブ変換 OFF(ライブ変換の漢字変換だと、うまくタイピングできないので)
  • Splotlightの起動と入力ソースの切り替えのキーショートカットを入れ替える(昔からの慣れ)

データファイルの移行

 基本的にデータは、NASに置くか、ネットのサービス(GitHub等)にアップしているので、ファイル自体のPCからPCへのコピーはほとんど実施しませんでした。NASに関しては以下記事参照ください。

 どうしても必要なファイルは、AirDropで移動するのが便利です。Mac PC同士でも使えますし、Mac、iPhone間でも使えます。私は、iPhoneからMacに写真を送るのにAirDropをよく使います。

 使い方は、お互いAirDropをオンするだけです。Macからだと、Finderの左上から選択できます。他のMacやiPhoneの自分のアイコンが出てきたら、移動したいファイルをドラッグアンドドロップするだけです。

f:id:karaage:20170731230416p:plain:w640

 iPhoneからでもAirDrop有効にすると、以下のように写真だったり、サイトのURLだったりと色々なものを送ることができます。

f:id:karaage:20170731230523p:plain:w480

 意外に知らない人多いのじゃないかなと思うので紹介しました(知らないとずっと気づかないですよね)。

詳しくは以下Appleの公式サイト参照下さい。

iPhone、iPad、iPod touch で AirDrop を使ってコンテンツを共有する - Apple サポート

AirDrop を使って Mac からコンテンツを送信する - Apple サポート

Safariの設定

スペルの自動修正のオフ

 勝手にスペルを修正して腹がたつのでオフにします。具体的には以下です。

  • Safariの編集 ->スペルと文法 ->入力中にスペルチェックをオフ
  • システム環境設定 ->キーボード ->ユーザ辞書 ->英字入力中にスペルを自動変換をオフ

 オフにしたいだけなのに、めちゃ分かりづらい…

Pocketの拡張機能(エクステンション)インストール

 以下からPocketというサービスのエクステンションを追加しています。ちょっとURLをメモりたいというときに、クリック一発なので便利です。

 Pocketというサービス自体に関しては、他サイトですが以下記事が参考になります。

Chromeをメインに使うなら後で読む機能「Pocket」が必須 – ノラの雑食ブログ

ダウンロードした後zipファイルを勝手に解凍しないようにする

 勝手に解凍されると困るケースが多いため設定しています。

 Safariのメニューの環境設定 ->一般 ->一番下の「ダウンロード後、安全なファイルを開く」のチェックを外すだけです。

iTunesの外部ライブラリを設定

 私はNASに音楽ファイルを全て保存しているので、iTunesにNASに置いたライブラリファイルを読み込ませています。Alt(Option)キーを押しながら、iTunesを起動すると読み込むライブラリファイルを選択できます。

f:id:karaage:20170729164022p:plain:w640

参考:別の iTunes ライブラリファイルを開くか、新しいライブラリファイルを作成する - Apple サポート

 NASのライブラリファイルを読み込む場合の注意点として、複数のMacから同時にiTunesを起動すると、ライブラリファイルがロックしてしまうので気を付けましょう。ロックしてしまった場合は、ライブラリファイルを右クリック ->プロパティ ->属性の「読み取り専用」のチェックを外して治すことができます(一回ハマりました)。

参考:itunesを開こうとすると「itunes libraryファイルがロックされているか、... - Yahoo!知恵袋

リモートログインの設定

 sshやVNCでログインできるように設定します。システム環境設定 ->共有 から設定します。

f:id:karaage:20170814163554p:plain:w640

 私は、画面共有とリモートログインを有効にしました。画面共有は、「Command + k」で以下のようにサーバへ接続が表示されるので、IPアドレスかホスト名を入力して接続します

f:id:karaage:20170815124628p:plain:w640

 以下のようにMac BookからiMacがリモートデスクトップ制御できます f:id:karaage:20170815122315p:plain:w640

参考:MacにSSHログインする方法 - リモートログインの設定 - PC設定のカルマ

App Storeからソフトインストール

 App Store起動して、購入済みのソフトから、必要そうなものをポチポチ落としていきましょう

f:id:karaage:20170729165812p:plain:w640
 こんな感じ

 Xcodeは、他の開発ツールと依存しているので(gitとか)、使わなくても入れておいて一度起動しておいた方が何かと良いかなと思います。

Macの基本的なセットアップ

 ここからターミナルを使っていきます。また、ターミナルを使った作業の多くは自動化して以下のリポジトリで公開しています。

 以下5行くらいを実行すると、勝手に色々なソフトがインストールされて、設定ファイル(.bashrc等)がコピーされてセットアップが完了します。

$ /usr/bin/ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ cd
$ git clone https://github.com/karaage0703/mac-dotfiles.git
$ cd ~/mac-dotfiles
$ ./defaults.sh
$ ./homebrew.sh
$ ./sync.sh

 ただ、よく知らないスクリプトをいきなり実行するのも怖いと思いますので、スクリプトでやっていることは、以下で解説していきます。以下を参照にして、必要な項目を1行1行コピペして実行していくのも良いかなと思います。

更新の自動チェックをOff

 以下コマンドで更新の自動チェックをオフします。

$ sudo softwareupdate --schedule off

ファインダーのカスタマイズ

 以下コマンドでファインダーをカスタマイズします。

$ defaults write NSGlobalDomain AppleShowAllExtensions -booltrue
$ defaults write com.apple.finder ShowPathbar -booltrue
$ defaults write com.apple.finder ShowStatusBar -booltrue
$ killall Finder

f:id:karaage:20170729223714p:plain:w640
 実行前

f:id:karaage:20170729223748p:plain:w640
 実行後

 truefalseに変えれば元どおりになります(多分)

スクリーンショットのファイル名から日本語を削除

 以下コマンド実行でOKです。お好みで

$ defaults write com.apple.screencapture name ""

Homebrew/Homebrew Caskでソフトインストール

 Homebrewというパッケージ管理ソフトを使って、ソフトをインストールしてきます。Homebrewに関しては以下参照ください。

 インストールしているソフトに関しては、以下参照ください。

 上記の記事から気になったものをインストールしていけば良いと思います。

pythonの設定

 pyenv/pyenv-virtualenv/Anacondaを使ってpythonの環境を設定しています。以下参照下さい。

 ディープラーニングの主要なパッケージも合わせてインストールしています

Vimエディタ設定

 エディタはVimエディタを使っています。Vimエディタに関しては、以下参照ください。

 以下GitHubのリポジトリで設定ファイル(dotfile)を公開しています。

 使い方はREAMEを参照下さい。詳細を日本語で知りたい場合は、以下あたりを参照ください。

ターミナルとVimの配色(カラースキーム)を変更

 目に優しそうな見やすい配色に変更します。私はSolarized Lightを好んで使っています。詳細は以下記事参照下さい。

Adobe Lightroomの設定

 ダウンロード版を購入した場合は、ダウンロード版のAmazonの購入ページからダウンロードができます。シリアル番号もダンロードページに表示されていますので親切ですね。

Adobe Photoshop Lightroom 6(写真現像ソフト)|ダウンロード版|Mac対応

Adobe Photoshop Lightroom 6(写真現像ソフト)|ダウンロード版|Mac対応

 2台のPCにインストールするのはライセンス的にどうなのだろうと思って調べたら、Adobeのライセンスは、2台まではインストールOK(1台はサブorバックアップという位置付け)で、同時に起動しなければ問題ないようです。もう1個買わずに済んでよかった!

複数のマシンへのインストール

 また写真管理に関しては、基本的にNASに写真を置いて、自動的にクラウドにバックアップするような仕組みを構築しています。寄稿した記事ですが、詳しくは以下参照下さい。

 ただ、Lightroomのカタログファイルに関しては、NASに置くとうまく動作しないので、ローカルに置いてSynologyのCloud Station Driveというソフトを使って、NASと同期させています。これによって、例えばデスクトップPCとノートPCにCloud Station Driveを入れておけば、両方のPCから、同じカタログファイルを参照することができるようになります。ちゃんとロックファイルで制御されるので、同時に起動しても保護されるため安心です(ファイル的にもライセンス的にも)。

 この設定は、以下の記事を参考にさせていただきました。

【カメラマンのためのNAS入門】NASを使った“快適写真保存術”|第4回:Lightroom活用編 - デジカメ Watch

ディスプレイだけをオフする方法

 最後は、ちょっとしたTipsです。iMacの場合ディスプレイの電源ボタンがないですが、「Ctrl + Shift + Eject(一番右上の△ボタン)」を押すとディスプレイをオフできます。ただ、このままだとスリープしてしまうので、バックグラウンドで何か作業をやらせたい場合は、「設定 ->省エネルギー ->ディスプレイがオフのときにコンピュータを自動でスリープさせない」にチェックを入れておきましょう。

 Mac Bookの場合は、蓋を閉じればよいですね。蓋を閉めた時にスリープさせたくない場合は、以下のNoSleepというアプリをインストールしましょう。

まとめ

 iCloudでブックマークやパスワードなどが同期されるのと、データは基本NASやクラウドサービス上(GitHub等)に保存して、簡単に同期できる上にアプリのインストールも自動化しているので、めんどくさいところの設定はほとんど不要でした。ただ、アプリ自体が開発停止しているものなどがあり、代替アプリを探したりするのに結構手間取ってしまい結局1日がかりでした。

 ただ、こうやって改めてみると、半分くらいはRaspberry Piのセットアップとやること一緒かも(笑)やっぱりターミナルが標準で使えるOSはよいですね。

関連記事

参考リンク

【Mac】Safariで入力した文字が勝手に修正されないようにする方法 | コトノバ

Mac初期設定まとめ - MyEnigma

夏休みに近場の愛知県蒲郡に旅行行ってきたのでしおり置いておきます

$
0
0

f:id:karaage:20170815122338p:plain:w480

しおり置いときますね

 旅行行ってきたので、しおり置いておきますね。

蒲郡旅行しおり!

 読みたい人は読めばよいし、読みたくない人は読まない方がよいと思います。

 詳しくは…そのうち気が向いたら書きます。いつもは秒単位で予定に合わせていくのですが、今回は天気と娘の機嫌で多少予定が変わりました。1日目と2日目は完全に入れ替わっています。

 そして、しおりGitHubで管理してみたのですが、バイナリファイルだとcommitするたびにガンガン容量が増えていくのでよろしくない感じですね。

 行程さんとか使うのも良さそうだなとか思ったのですが、自分の場合イラストとか入れたいし、好き勝手に書きたいこと多いので、フォーマット決まっていると凄い書きづらいのですよね(ちなみに、私はiBooksAuthorでしおり書いてます)。

 なんか良い方法はないものでしょうか。

関連記事

頭脳集団「白金鉱業」さんの「MSゴシック絶対許さんマン」が凄かった(MFT2017展示紹介その2)

$
0
0

f:id:karaage:20170805143029j:plain:w640

「MSゴシック絶対許さんマン」とは

 Maker Faire Tokyo2017(以降 MFT2017)で気になった展示第2弾です。MFT2017に関しては、以下参照して下さい。

 前回紹介した「R-Mono Lab」さんと同様、企業の部活動として活動している「白金鉱業」さんの展示です。実は、この展示はMTF2017が始まる前から、そのぶっ飛んだコンセプト的にも技術的にも気になっていた展示でした。

 そしたら、MFT2017の前日に自分のTwitterのTLに以下のツイートが流れてきたではありませんか!?

 なんと「MSゴシック絶対許さんマン」作っている中心人物の@yutatatatataさんが、Twitter上でのお知り合いでした!というか前日(というか当日)の夜中に動くってすごすぎ!企業の底力を見た気がしました。

 こりゃ会いにいくしかないでしょというわけで、行ってきました。

f:id:karaage:20170805143346j:plain:w640
 当日お話伺った@yutatatatataさん。ありがとうございました!

「MSゴシック絶対許さんマン」のデモ

 「MSゴシック絶対許さんマン」の動画です(@yutatatatataさんのYoutubeより)。MSゴシックだけを選び出して、ポイっと捨てるというデモです。

 MFT2017でのデモでは、USBカメラの画像を、予めディープラーニングで学習させたモデルを用いてMac Mini上で判別して、Dobot Magicianというロボットアームを制御しているとのことでした。ソフトウェアはGitHubの以下リポジトリで順次公開予定とのことでしたので、期待して待っていましょう!(と@yutatatatataさんにプレッシャーをかけてみるテスト)。

技術的なこと・ディープラーニングに関して

 48パターンのフォントが印字されているフォントかるたから、MSゴシックをディープラーニングを用いて判別しています。画像は、合計で数万枚学習させているそうです(反転などのN増しを含む)。ディープラーニングのフレームワークは、TensorFlow+kerasを使用しているとのことでした。

 面白いなと思ったのが、使われていた「Grad-CAM」という技術です。「Grad-CAM」という技術を使うと、ディープラーニングで学習したニューラルネットワークが、画像のどこを見て判別しているのかを人間にわかりやすく可視化してくれるのです。詳細は、以下のブレインパッドさんという会社の記事を参照下さい。

 フォントかるたの可視化の様子は、以下スライドを参照下さい。

CNNは絵札のどの部分に注目してフォントを見分けているか

 ディープラーニングって、ブラックボックスというイメージだったのですが、こうやって可視化する技術が発展してくると、結構直感的に理解できるようになってくるのかもしれませんね。

 他にも「Spatial Pyramid Pooling(SPP)」層といった、ちょっと変わったプーリング層を使うことで、精度を高めているようです。うーむ、自分も試して見たい。SPPは以下のブログ記事がわかりやすかったです。

フォントかるた、フォントTシャツ

 フォントかるたとフォントTシャツは、作ったわけではなく、たまたま見つけたものを使ったとのことでした。そんな奇跡あるのですね!

f:id:karaage:20170805143124j:plain:w640

f:id:karaage:20170805143326j:plain:w640

 ちなみに、MFT2017の隣で、デザインフェスティバル(通称デザフェス)というイベントがやっていたのですが、このフォントかるた製作者も出展していたとのことです。多分MFT2017とデザフェスの初のコラボではないかと思っています(笑)

 そして、このフォントかるた、てっきりジョークグッズと思っていたのですが、普通にAmazonで買えます!

フォントかるた

フォントかるた

 私がよくブログをチェックしている作家の架神さんもプレイしてブログに感想を書いているのですが、普通に面白そう!

【8/9-12】なぞのゲーム、フォントかるた - カガミ・ドット・ネット

 Amazonのレビューも好評だし、買ってみたくなりました(笑)

まとめ

 「白金鉱業」さんの「MSゴシック絶対許さんマン」を紹介しました。「白金鉱業」さんのチームは、ディープラーニング、ロボット制御等役割を分担して取り組んでいたそうですが、これだけのシステムをきちんと仕上げて2日間デモをやり切るのは、並大抵のことではないです(結構ロボットコンテストとか、調整が間に合わず本番ボロボロとか企業参加でもざらにあります)。「白金鉱業」さんの高い技術力とチームワークを強く感じました。

 @yutatatatataさんには、「Raspberry PiでTensorFlowとkeras動きますよー」という話をしたら、かなり興味を持っていたので、次はRaspberry Piで動く「MSゴシック絶対許さんマン」とか、もっと凄いものが見られるかもしれません。期待ですね!ちなみに、@yutatatatataさんは、id:kskbytというIDではてなブログもしていますので、こちらも要チェックです!

関連記事

 Raspberry PiでTensorFlow動かす方法

スクレイピング初心者がpythonでかわいい猫ちゃん画像をコマンド一発でネットから収集してみた

$
0
0

f:id:karaage:20170814144955j:plain:w640

注:この猫ちゃん画像は昔私が撮影した猫ちゃんで、ネットから落とした画像ではありません

ネットから画像収集しようとしたら意外に大変だった

 最近、以下で書いているように機械学習に興味津々だったりします。

 機械学習やディープラーニングを試していると、やっぱり試したくなるのが、チュートリアルで使用しているデータセット以外のデータにも同じ手法が適用できるかどうかですね。

 とりあえず画像をネットから収集しようかなと思い、googleの画像検索の結果を一つ一つ右クリックで落とし始めたのですが、どう考えても非人間的過ぎます。たしかこういう作業を自動化するのをスクレイピングと言って、pythonのサンプルがたくさんあった記憶があります。

 ネットで調べたら沢山例が出てきました。「これは楽勝だわー」と思いコピペして実行…動かん…。よくあることよくあること、と次へ行くと登録が沢山必要…パス。次は有料サービス…と、いっこうに動きません。

 コピペしてコマンド一発で画像がダウンロードできるスクリプトを探しているだけなのに…最終的にはできたのですが、結構大変だったので、メモしておきます。

pythonで好きな画像をネットからダウンロードする方法

 以下の3ステップでOKです。コピペと実行は一瞬なので、ほとんど環境構築が全てですね。

  • pythonの環境構築
  • プログラムのコピペ
  • プログラム実行

pythonの環境構築

 色々調べたら、スクレイピングするときは日本語とかの関係でpyhthon3が良いらしいので、python3に科学技術関係の代表的なパッケージが付属している anaconda3 の仮想環境を構築します。詳細は、下記記事参照下さい。

 上記記事でpyenvのインストールまで実施したら、具体的には以下コマンドで仮想環境を構築します。

$ pyenv install anaconda3-4.4.0 
$ pyenv global anaconda3-4.4.0
$ conda create -n scraping python
$ pyenv global anaconda3-4.4.0/envs/scraping

 後は、beautiful soupというスクレイピングに使われるライブラリを以下コマンドでインストールしましょう

$ pip install bs4

 これで環境構築は完了です。

画像をダウンロードするソフトのコード

 結局探し回った結果、自分が一番簡単に使えたのは以下のnknytkさんのGitHubのリポジトリの中のソフトでした。

 上記のリポジトリ自体は、ディープラーニングによる顔分類のツールで、そこに付属しているpythonのダウンローダを使わせてもらっているという形です。最初ライセンスが不明だったのと、jpegの拡張子がjpeになっちゃうのが気になったのでPull Requestしつつ、それとなく再配布に関して聞いてみたら、Pull Requestマージいただくと共に、快くMITライセンスにしていただけました、めちゃ感謝です!

 nknytkさんのソフトをベースに、今回簡単に画像をダウンロードすることに特化したpythonのコードが以下になります。

# coding: utf-8import os
import sys
import traceback
from mimetypes import guess_extension
from time import time, sleep
from urllib.request import urlopen, Request
from urllib.parse import quote
from bs4 import BeautifulSoup

MY_EMAIL_ADDR = ''classFetcher:
    def__init__(self, ua=''):
        self.ua = ua

    deffetch(self, url):
        req = Request(url, headers={'User-Agent': self.ua})
        try:
            with urlopen(req, timeout=3) as p:
                b_content = p.read()
                mime = p.getheader('Content-Type')
        except:
            sys.stderr.write('Error in fetching {}\n'.format(url))
            sys.stderr.write(traceback.format_exc())
            returnNone, Nonereturn b_content, mime

fetcher = Fetcher(MY_EMAIL_ADDR)

deffetch_and_save_img(word):
    data_dir = 'data/'ifnot os.path.exists(data_dir):
        os.makedirs(data_dir)

    for i, img_url inenumerate(img_url_list(word)):
        sleep(0.1)
        img, mime = fetcher.fetch(img_url)
        ifnot mime ornot img:
            continue
        ext = guess_extension(mime.split(';')[0])
        if ext in ('.jpe', '.jpeg'):
            ext = '.jpg'ifnot ext:
            continue
        result_file = os.path.join(data_dir, str(i) + ext)
        withopen(result_file, mode='wb') as f:
            f.write(img)
        print('fetched', img_url)


defimg_url_list(word):
    """    using yahoo (this script can't use at google)"""
    url = 'http://image.search.yahoo.co.jp/search?n=60&p={}&search.x=1'.format(quote(word))
    byte_content, _ = fetcher.fetch(url)
    structured_page = BeautifulSoup(byte_content.decode('UTF-8'), 'html.parser')
    img_link_elems = structured_page.find_all('a', attrs={'target': 'imagewin'})
    img_urls = [e.get('href') for e in img_link_elems if e.get('href').startswith('http')]
    img_urls = list(set(img_urls))
    return img_urls

if __name__ == '__main__':
    word = sys.argv[1]
    fetch_and_save_img(word)

 上記のプログラムの、以下のMY_EMAIL_ADDRには、以下のように自分のアドレスを入れましょう。これはUser Agentとして使われます。ツールを使ってダウンロードするときのマナーなので、必ず守るようにしましょう。ちなみに下記のアドレスは、架空のアドレスなのでメール送らないようにね。

MY_EMAIL_ADDR = 'karaage@karaage.net'

ソフトの使い方

 使い方は、上記のファイルをget_images_yahoo.pyという名前で保存して、例えば以下コマンド実行すれば、かわいい猫ちゃんの画像を一気にダウンロードできます

$ python get_images_yahoo.py "かわいい猫"

 簡単ですね!今回は手軽なYahooの画像検索からダウンロードする方法です。Googleの場合は、コマンドで一気に大量に画像をダウンロードするには有料サービスへの登録が必要なのですが、nknytkさんはGoogle Chromeのextensionを組み合わせることで、ある程度自動でダウンロードできるツールを開発されていました。私は試していないのでここでは紹介しませんが、興味ある方は以下READMEなどを参考に試してみるとよいかなと思います。

まとめ

 初めてpythonでスクレイピング的なことをしてみました。意外にネット情報がそのまま使えなくて苦戦しました。どうも、サービス側の方の仕様が変更したり、スクレイピング対策をしているのが原因みたいのようです。Googleとか、ちゃっかり有料化しているの全然知りませんでした。スクレイピングは、かなり奥深そうです。

 ただ、特にスクレイピング自体に興味があるわけじゃないので、あんまり深みにハマらないように気をつけたいなと思います。最後に、せっかく(?)なので、かわいい猫ちゃん画像を申し訳程度に載っけておきます(笑)。ネットから落としたやつだと、ちょっと問題ありそうなので、昔私が撮影した猫ちゃん写真です。

f:id:karaage:20170814145131j:plain:w640

f:id:karaage:20170814145132j:plain:w640

関連記事

Viewing all 1425 articles
Browse latest View live