2017年5月20日土曜日

PythonでOpenCVを試してみた

ラボの開発言語も徐々にPythonへと移行の気配で、OpenCVもその餌食になりそうです。で、試してみました。

OpenCVのバージョンの確認
現在、OpenCVはバージョン3になっていますが、パッケージ名はcv2のままです。まず、自分のPythonの環境でOpenCV3がインストールされているのかを確認しておきましょう。pythonのコンソールにて、下記の2行を打ちこむとバージョンが出力されるはずです。でなかれば環境がおかしいです。
import cv2
cv2.__version__
Out[6]: '3.2.0-dev'  ← これが出力
サンプルを動かしてみる
下記の通りのサンプルを動かしてみましょう。これは、C#版の記事と同じ内容です。見比べてみたらわかりますが、表現が違っていたりします。そのキモですが、、、
  • OpenCVの関数を使うというより、numpyの関数を使っているということが多々ありそう。
ということ。例えば下記の例では、
  • Matのコピー
  • Matのトリミング
は、Matの処理というより、numpyの行列処理のようです。OpenCVの関数については、他の言語(C++,C#)とほぼ同じ感じですが、その切り分け方に注意ですね。


2017年5月16日火曜日

Python:Anacondaの環境でOpenCVをインストールする

Python初心者(私)が躓くところなので作業メモ。(Anacondaの環境が前提です)
Pythonで各種ライブラリをインストールするには、基本的にAnacondaのコマンドを利用します。OpenCVも同様です。

OpenCVのパッケージを収録しているあるレポジトリを探す
まず、パッケージを探します。
  • anaconda search -t conda opencv3
というコマンドを入力して、OpenCV3のライブラリを探します。するとリストの中で
     ver228/opencv3            |    3.2.0 | conda           | linux-64, osx-64, win-64
というのが見つかりました。唯一3.2.0に対応してるようなので(2017.5.16現在)これにします。まだ続きがあります。今度はこのパッケージがどのレポジトリにあるかを探します。
  • anaconda show  ver228/opencv3
とコマンドを打ちます。すると、

To install this package with conda run:
     conda install --channel https://conda.anaconda.org/ver228 opencv3

という出力が出ますので、ここに書いてあるとおり、
  • conda install --channel https://conda.anaconda.org/ver228 opencv3
と打てばインストールは成功です。





2017年3月31日金曜日

GAS: スプレッドシートに画像を埋め込む場合のノウハウ

Google App Script(GAS)にて画像を埋め込む際のノウハウです。GASには、SpreadSheetの画像埋め込みAPIとして、
  • sheet.insertImage(URL)
があります。これ自体は有効に機能するのですが、実はこのメソッドで埋め込まれた画像を削除する関数がありません。これはちょっと問題、、というときには、もっとスマートなやり方があります。それは、スプレッドシートの関数である
  • image(URL,[モード])関数
を式としてセルに代入することで同等の事ができます。削除はセルの書き換えか、クリアで行えます。注意点は、
  • 画像サイズはセルサイズと同じ
ということです。大きめの画像を貼り付けたい場合は、適切なサイズになるようにセルの結合(merge)をしておきましょう。

2017年3月25日土曜日

H28年度卒業生を送り出して


卒業・修了おめでとうございます。本年度は、学部7名、院生0名が巣立ちました。今年は大学院進学者が2名です。今年は、ゼミ生の吉村くんが、成績面を評価され、学科同窓会賞を受賞しました。おめでとうございます。

今年の4年生は、マイペース型。特に研究室に籠もることなく、提示帰宅するときが多かったですね。昨今、サラリーマンの過度な勤務時間超過が話題になっていますが、そういった点では今年はホワイト研究室でした。なにか物足りない気がしないまでもないんですが、研究成果的には例年と決して引けをとるようなことはなく、また終盤にドタバタするようなこともなく、計画的に進めてきた学年だったかなぁ。特にうちはプログラミングの時間が多いので、長時間コードを書けるわけでもないですし、長時間いることが必ずしも成果に結びつくとは限らないかな。。。と思いつつ、もっと良い成果が出来たのではないかと思いもあったり。。。

とりあえず今年も、授与式等であった学科長の式辞の内容をネタにしながら、個人的にアレンジした贈る言葉を書いてみようかと思います。

(1)想定外の対応せよ
昨年度も同じ話をされましたが、1年前よりもさらに世の中の動向は不透明になってきた気がします。そういうわけで、仕事のバリエーションを増やすというのは1つの戦略かと思います。多芸は無芸といったようにマイナスなイメージがあったりしますが、想定外のことに対応するには、様々なことを視野にいれて行動することが大切かもしれません。だから、どんな仕事の内容であっても、躊躇せず、とりあえずやってみる、、、という姿勢が大切で、それができるポテンシャルを持っているのが近大生の強みなのかもしれません。

(2)挑戦し続ける
守りに入らず、挑戦し続ける。。これは大切ですね。守りを完全否定するわけではないですが、移り変わる社会の動向に対応するのは、守りではなく攻めの姿勢でしょう。

(3)よい失敗をしてよい経験をする
若いうちはどんどん失敗してよいかと。もちろん、無責任な失敗は駄目ですが、信念を持った失敗には学びがあります。まあ、ホントは学生時代に(卒論で)どんどん失敗すべきなんですけどね。社会人になると、失敗は個人レベルではなく会社や他者に結びつくので、失敗推奨というわけにはいかないと思いますが、失敗を恐れると何もできないですから。

(4)健康第一
 学科長の話にはなかったですが、「健康第一」これは大切なことです。そのためには自分の限界を知っておきましょう。仕事をすすめる上で、残業等でアクセル全開の状態が続くことは少なからずあると思います。しかし、ずっと踏み続ける必要はありませんし、そうなればそれは異常な状態です。最初のうちはいいかもしれませんが、だんだんとおかしくなってきます。ちょっとこのままだと自分はパンクする、、とか、これは行き過ぎと感じたら、アクセルを緩めましょう。もちろん仕事は大切です。仕事は個人の問題ではありませんから、一人アクセルを緩めると皆の足並みが乱れるかもしれません。しかしそれは一時的なものであり、それをフォローできるのが会社という組織のはずです。人の命より価値のある大切な仕事というのもは存在しません。フォローできない会社、社員の命(健康、幸せ)を大切にしない会社であれば、そこにとどまる正当性はないのです。何事も体が資本です。

以上、みなさん、お元気で。卒業おめでとうございます。

2017年3月16日木曜日

Python:UnicodeDecodeError: 'cp932' codec can't decode byte 0x93: illegal multibyte sequence

Pythonにて表題のようなエラーが出てきた場合、読んでのとおり文字コードの違いが原因になっています。このエラーには、ファイルオープン時に文字コード指定の記述をすればOK。
open('sample_text.txt', 'r'')
→ open('sample_text.txt', 'r',encoding='UTF-8')
既存のコード(サンプルコード)を動かす時にこのエラーによく遭遇するので、環境の問題を疑う前に、コードも疑ってみて下さい。

2017年2月4日土曜日

OpenCVSharpでテンプレートマッチング処理(OpenCV3.0対応)

OpenCVSharpでテンプレートマッチング処理。OpenCV3.0対応の記述です。
前バージョンとは若干の記述(クラス)が違いますが、基本的には同じですね。



OpenCVSharp:Mat変数の渡し方に注意

ちょっと初歩的なところで躓いたのでメモ書き。OpenCVSharpのプログラムで、
Mat mat = new Mat()
methodA(mat);
methodB(mat);
みたいなことをしました。各メソッドはほぼ同じことしてます。が、後者のメソッドが思ったように動かないケースに遭遇し、ちょっと格闘しました。

Matは基本参照渡し
結論(解決策)は、Matは基本参照渡しだということ。つまり、methodA内で変数matを処理したら、呼び出し元でも反映されているということ。つまり、上記の例では、Aに渡されるmatとBに渡されるmatは別物です。
もし、同じmatを渡したいなら、closeメソッドでコピーを作ってそれを渡しましょう。

2017年2月3日金曜日

XAML の UI デバッグツールを無効にする


最近、やっとVisual Studio2015を使い始めたのですが、実行するとなにやら変な物が出ます。上の画像みたいな黒いやつです。これは、
  • 実行中の WPF アプリケーションのビジュアル ツリーやツリー内の任意の要素のプロパティを検査することができます(Visual Studio日本チームBLOGより
という優れものらしいですが、とりあえず今の私には不要なので、邪魔。。。

というわけで、消し方ですが、
  • デバッグ > オプション メニューより、デバッグ > 全般 > XAML のUI デバッグツールを有効にするのチェックを外す
で解決です。

ホントは、使いこなせたほうがいいんでしょうけど、とりあえず。



2017年1月28日土曜日

いつのまにかGWTもJava 8 対応になっていたようです

おちラボでは、現在でもGWTを使い続けていますが、GWTの最新リリースである2.8 では、Java8に対応していたようです。正確にいうとRC1の頃から対応していたようです。対応状況は、下記のリンクを参照のこと。
なお、現在の最新版はRCがとれています。RC1は昨年の7月下旬、RCが取れた正式版は10月にリリースされてますのでちょっとネタが古かったですかね。


2017年1月25日水曜日

Java:nekoHTMLParserを使っていてうまくパーズできない場合の対処メモ

JavaでのHTMLファイルをParseする時は、nekoHTMLParserを使っています。このパーザーはある意味柔軟なところがあり、使い勝手がいいんですが、エラーを全く吐かないまま、正しくParseできないことがあったので、メモ書きです。

【挙動】
  • aタグを検索して hrefの属性値をとってくるプログラムを実行
  • プログラムはエラーなく動作。しかし、hrefの値がとれていないところがところどころある(全てではなく、ところどころ、、というのが厄介)。
  • 正確に言えば、文書中のaタグは漏れなく見つけられているが、値のとれていない(値のない)aタグがところどころ存在する。
【原因と対処法対処法】
  • 文字コードが原因。今回のケースでは、諸事情によりHTMLファイルをコピペで取得し作成したため、文字はUTF-8、メタタグの指定がShift-JISという齟齬が発生していた
  • メタタグの指定をUTF-8に変更
エラーが出ないからうまく動いているだろう、、と気づきにくいところなので要注意です。


2017年1月19日木曜日

C#からPythonを呼ぶ(非同期処理)

先のC#からPythonを呼ぶサンプルコードは、一度実行したら終わりというケースです。実行中のPythonプログラムに標準入出力を利用してデータの授受をするのは、下記のコードがベターです。



2017年1月18日水曜日

C#からPythonを呼ぶ

C#からPythonを呼ぶサンプルコードです。実行結果(コンソール出力)を受け取れます。



TensorFlow for Windowsをインストールしてみた

TensorFlowはバージョン0.12からWindowsをサポートするようになりましたので、そのインストールのメモ書きです。ちなみに、個人的にPythonはよくわかってないレベルです。

Anacondaのインストール
TensorFlowを動かすには各種数値計算系のライブラリが必要になるのですが、Anacondaというライブラリ?を入れれば関係するライブラリが一括してインストールされるらしいので、これをインストールします。Pythonのバージョンは3.5で64bit版にしました。
Anaconda Promptを起動
コマンドプロンプトではなく、Anacondaプロンプトを起動して下さい(Anacondaのインストールで入ります)。以後、このプロンプトでの動作です。

pipでインストール
Pythonではpipというパッケージ管理システムがあります。TensorFlowもこれを利用します。
TensorFlowのインストールの前に、次のおまじないのコマンド2つ入力しておきましょう。pipとsetuptoolsのアップグレードをしているんだと思います。
python -m pip install --upgrade pip
pip install --upgrade -I setuptools
上のおまじないが終わったら、下記の通り入力しましょう。
C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-win_amd64.whl
インストールするバージョンやによってURLは変わってきますので注意です。ここの記述の詳細は、公式サイトの Pip installation on Windowsを確認して下さい。

動作確認
下記のコマンドでバージョンが表示されたらインストール成功です。
python -c "import tensorflow; print(tensorflow.__version__);"