non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

Tensorflowのclassify_image.pyにElectronでGUIを被せてみた

こんにちは、最近次男は保育園の帰り道、自分で走って帰るといって聞かず、自宅までの走って帰る日々です。長男も同じような時期にそういうことがあったので、そういうもんなんだと諦めて、次男の走りに付き合ってます。@kjunichiです。

GPUを使えるTensorflowをWin,Macに入れたものの

tensorflowを入れたものの、動かし方が、実はよくわからず、Python APIのみの pipで入れても、実はサンプルコードがsite-lib配下にインストールされてることすら 最近まで知りませんでしたw。

classify_image.pyにElectronでGUIをつけてみた。

Linux,Windowsで画像ファイルをドロップすると、classify_image.pyで画像分類できるように してみた。

これで、子供たちと、簡単に画像ファイルを選んで、人工知能にどんな写真かを調べてもらうことが できました。

f:id:kjw_junichi:20170205134019p:plain

pipでいれたTensorflowのサンプルコードのありか

import site
print(site.getsitepackages())

これで、pipでインストールされるインストール先のディレクトリ一覧が取得できる。 環境によって、複数のパスが返されるので、この中からtensorflowディレクトリを探す。

画像ファイルをドロップして読み込む

大昔、HTML5の修業であれこれ作った

jsdo.it

から持ってきた。

iphoneの写真だとEXIFを考慮する必要ありだった

これまた大昔、

jsdo.it

を作ったが、この知識が役に立った。

Exifでカメラの回転情報を保持しているので、 これ考慮してclassify_image.pyに渡さないと分類結果に影響が出た。

もっとも、オリジナルのJPEGファイルをそのまま、classify_image.pyに渡せばこの辺り、Tensorflow側で 処理してくれたのかもしれないが。。

成果物

github.com

Windowsの場合はCondaのPython3を優先して動かすようにしてます。 その他のプラットフォームではパスに登録されてるPython3を優先して、そこにtensorflowがあれば、 それを使う感じにしてます。

関連記事

12年前の記事

5年前の記事

WindowsでDocker ToolboxとMSのOpenSSHのサーバーと共存するには

こんばんは、熱の引いた長男ですが、顔やそのほか体のあちこちに発疹が出てきて、週明けは通院が確定の@kjunichiです。

背景

だいぶ前からMS公式のOpenSSHでWindowssshdサーバーがたてられることを知っていいたので、 先日、chocolatey経由でやってみたが、どうもDOSの内部コマンド的なdir等は実行できるものの、mirb等の外部コマンドが 使えず、実行してもなにも起こらず、プロンプトが返ってきました。

現状、ほんとにDocker Toolboxsshd的なサービスをインストール時に設定しているのか確証はありませんが、 そのほか気になるソフトもないので、疑っている状況です。

対策

Docker Toolboxは触らず、ChocolateyでいれるOpenSSHのポートを変更することで対応できました。

choco install openssh -params "/SSHServerFeature /SSHServerPort:20022"

変更したポートに別のマシンからsshでログインして、無事mirb等の外部コマンドも使えるようになりました。

関連記事

12年前の記事

11年前の記事

3年前の記事

1年後の記事

Windows(MSVC)でmrubyからGPU対応のTensorflowを動かせた

こんにちは、長男が高熱をだし、時期が時期なので、インフルエンザを疑ったのですが、陰性で、その後もしばらく高熱がつづいたのですが、今では熱が下がり、大好きなYouTubeを見てます。@kjunichiです。

やったこと

タイトルの通りですが、以前このブログでも話題にしたmrubyかJuliaを呼び出せるmruby-juliaをWindowsのMSVC環境で動かせるようにして、 そこからJuliaからPythonを呼び出せるPyCallを経由して、すでにセットアップ済みのGPU対応のTensorflowを動かせました

JuliaをMSVC環境で動かそうとして分かったこと

.libファイルが必要

JuliaのWindows版はMinGWでビルドされているので、MSVCで動かすには.libファイルを作る必要がりました。

MSVCではCではJuliaを組み込めない

さらに、CからJuliaを呼び出すことは出来ず、C++からでないと、ダメでした。 そのため、mruby-juliaは元々Cオンリーであったのを、JuliaのAPIを叩く箇所をC++化して対応しました。 (mrubyでC++を使ったmrbgemを使うとちょっと問題があるのですが、これは別の記事で書く予定)

mrubyからTensorflowを呼び出す

事前準備

Juliaであらかじめ環境変数PYTHONGPUが有効なTensorflowが使えるPythonに設定した状態で、

Pkb.add("PyCall")

もしくは、

Pkb.build("PyCall")

しておく。

サンプルコード

j=Julia.new
j.eval("using PyCall")
j.eval("string(@pyimport tensorflow as tf)")
j.eval('sess = tf.Session()')
j.eval('a = tf.constant(10)')
j.eval('b = tf.constant(32)')
j.eval('sess[:run](pyeval("a + b", a=a, b=b))')
p j.eval('string(sess[:run](pyeval("a + b", a=a, b=b)))')

成果物

関連記事

12年前の記事

11年前の記事

2年前の記事

1年前の記事