旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【アイトラッキング】 I-DTアルゴリズムの実装

Salvucci & Goldberg著 "Identifying Fixations and Saccades in Eye-Tracking Protocols"に記述されているI-DTアルゴリズムの実装メモになります。 まずは視線データを保存するためのクラスを定義します。 public class GazePoint { public double X; // 視…

【料理】 ゴーヤチャンプルー

ここを元に作成。 www.sirogohan.com 材料(二人分) ゴーヤ 1/2本 木綿豆腐 300g 豚バラ肉 100g 卵 1個 塩コショウ 適量 サラダ油/ごま油 醤油 作り方 1. 木綿豆腐をキッチンペーパーでくるんで水切りする 2. 卵1個をといておく 3. ゴーヤを縦半分に切る 4…

【数学】 フィッシャーの線形判別を理解するのに有効なサイトのメモ

フィッシャーの線形判別について調べていたのですが、分かりやすく書いてくれているサイトを見つけたのでメモします。 理論についてはこちらが分かりやすいです。 s0sem0y.hatenablog.com コードが必要であればこちらにコード付きで記事を書かれています。 a…

【Python】 LSTMによる時系列データの予測

前回SimpleRNNによる時系列データの予測を行いましたが、今回はLSTMを用いて時系列データの予測を行ってみます。 ni4muraano.hatenablog.com LSTMはSimpleRNNと比較すると長期依存性の高いデータに有効とのことなので、50回に一回パルスが発生する信号に対す…

【Python】 SimpleRNNで月平均気温を予測する

画像だけでなく時系列データにも手を出してみたい、ということで書籍「詳解ディープラーニング」を購入しました。書籍第5章から時系列データを扱っているのですが、そこで紹介されているSimpleRNNの例を写経します。書籍ではノイズの入ったサイン波の予測を…

【料理】 たらこパスタの実装

下記を参考に作りました。 cookpad.com 用意するもの(二名分) たらこ 2腹 バター 30g 牛乳 大さじ4 醤油 大さじ1 きざみのり 適量 パスタ 180g 1 お湯を沸かす 2 ボールにたらこ、バター、牛乳、醤油を入れてソースを作る 3 パスタを茹でる 4 お湯…

【アイトラッキング】 オンラインスムージングフィルタの実装

アイトラッカーから取得したデータにオンラインでスムージングフィルタをかけようとしています。Manu Kumar著 “GUIDe SACCADE DETECTION AND SMOOTHING ALGORITHM"に書いてある疑似コードを参考に実装しました。プログラムの注意点としては論文の疑似コード…

【ディープラーニング】 不均衡データへの対処法

ディープラーニングというより、機械学習全般で起こりうる問題として不均衡データ問題があります。例えばラベル0のデータが99個あり、ラベル1のデータが1個しかない、といったように教師データのバランスが悪い場合、モデルは「とりあえず0と回答すれば99%の…

【WPF】 Contentに改行付きのテキストを書く

Contentに改行を付けたくて、その方法がここ(【WPF】コントロールのContentプロパティにテキストを改行して表示する - Microsoft.NET WPF - Project Group )で分かったのでメモします。 <Button Content="Hello World&#10;\(^o^)/" IsHitTestVisible="False"/></button>

【OpenCV】 画像を合成する(アルファブレンディング)

// 画像を読み込む Mat lenna; imread("lenna.jpg").copyTo(lenna); if (lenna.empty()) { throw runtime_error("Failed to open image"); } // 画像を読み込む Mat clock; imread("clock.jpg").copyTo(clock); if (clock.empty()) { throw runtime_error("F…

【Python】 ndarrayのインデキシング

書籍「科学技術計算のためのPYTHON入門」のメモです。ndarrayのインデキシングについて今まで何も意識せず使っていたのですが、書籍にまとめられていたのでメモします。 基本インデキシング(ビューが生成される) # ndarray_viewの変更がndarrayにも影響を…

【OpenCV】 照明ムラがある環境での二値化

照明ムラがある環境下で二値化を行い対象物を抽出しようとする場合、普通に二値化処理を行うと大抵上手く抽出できません。 下の画像はその例で、画像上部が明るめ、画像下部が暗めのになっています。この画像から米粒を抜き出そうとして大津の方法を適用する…

【料理】 鶏肉のカリカリ焼き・ネギ塩レモンソース

たまに料理を作るのですが、また作る事があるかもしれないのでメモしておきます。 recipe.rakuten.co.jp 材料(2人分) 鶏もも肉 2枚 ⇒ 1枚(350~400g、小食なので二枚は多い) ネギ 1本 ごま油 大さじ2 塩 小さじ1/2 こしょう 適量 レモン汁 大さじ1 ⇒ 大…

【OpenCV】 forループを使わずに指定した色を別の色に変更する

ディープラーニングの前処理として、画像のある色を別の色に変更しようとしていました。ただ、NumPyではforループをなるべく使用しないことが推奨されているため、どうやって実現すれば良いのか悩んでいましたが、ここ(Replace a range of colors with a sp…

【Python】 行列積の演算子

行列積はNumPyのdotメソッドを利用しますが、Python3.5/NumPy1.10からは@演算子でも行列積を表現できると知ったのでメモします。 import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # a_dot_bとa_at_bは同じ結果になります…

【Python】 csv数値データファイルの読み書き

csv数値データファイルの読み書きはnumpyを使うと簡単にできます。 import numpy as np # csvファイルの読み込み(ヘッダがある場合はskiprowsを1にする) data = np.loadtxt('file.csv', delimiter=',', skiprows=0) # csvファイルへの書き込み(%0.2fで小…

【OpenCV】 バイラテラルフィルタの引数について

輪郭をぼかさずにノイズを除去する方法としてバイラテラルフィルタを紹介されたのですが、今一つパラメータの意味が理解できていませんでした。 void bilateralFilter(const Mat& src, Mat& dst, int d, double sigmaColor, // 何これ? double sigmaSpace, …

【Python】 "Deep Learning Prerequisites: The Numpy Stack in Python" Lecture13のメモ

udemyで無料オンラインコースがいくつかあるのですが、Numpyの無料講座を受講中です。その中で知らなかった事をメモしておきます。 www.udemy.com レクチャー13からPandasの話になるのですが、Pandasは使えた方が良いのでしょうか。。。今のところ特に困って…

【Python】 "Deep Learning Prerequisites: The Numpy Stack in Python" Lecture10のメモ

udemyで無料オンラインコースがいくつかあるのですが、Numpyの無料講座を受講中です。その中で知らなかった事をメモしておきます。 www.udemy.com 1. 線形方程式はnp.linalg.solveで解ける import numpy as np A = np.array([[1,2], [3,4]]) b = np.array([3…

【Python】 "Deep Learning Prerequisites: The Numpy Stack in Python" Lecture4のメモ

udemyで無料オンラインコースがいくつかあるのですが、Numpyの無料講座を受講中です。その中で知らなかった事をメモしておきます。 www.udemy.com 1. ベクトルのユークリッドノルムの計算はnp.linalg.normで出来る import numpy as np vec = np.array([1, 2,…

【WPF】 RadioButtonをユーザーが触れないようにする

IsHitTestVisibleとIsTabStopをFalseに設定します。IsHitTestVisibleのみをFalseにした場合、Tabキーを押してRadioButtonに移動し、スペースキーを押すとRadioButtonをチェックできてしまうため、両方Falseにする必要があります。 <RadioButton Content="ReadOnlyRadioButton" IsHitTestVisible="False" IsTabStop="False"/></radiobutton>

【OpenCvSharp】 ポインタを利用してMatクラスの画素にアクセスする

OpenCvSharpのMatクラスを走査する時、いつもAtメソッドを利用していたのですが、ポインタを使って走査する方法を見つけたのでメモします。 gist.github.com リンク先はカラー画像に対して走査していますが、自分はグレースケール画像を走査したかったので、…

【OpenCV】 画像に傾いた四角形を書き込む

RotatedRectは直線を利用して描くしかないようです。。。 // 画像を読み込む Mat source; imread("lenna.jpg").copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // RotatedRectを描画する Mat destination; source.c…

【OpenCV】 画像に楕円を書き込む

ellipseというメソッドを利用すると画像に楕円を書き込めますよ、というメモです。 // 画像を読み込む Mat source; imread("lenna.jpg").copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } Mat destination; source.co…

【WPF】 時間のかかる処理を実行する時にアニメーションを表示する

アプリケーションで時間のかかる処理を実行している時に「今処理を実行中ですよ」とユーザーに知らせたい時、実行中に表示するアニメーションがあると便利です。幸いアニメーション自体は既に作成してくれている人がいるので、それを拝借します。 www.trilli…

【C#】 平滑化スプラインを実装する

波形に乗ったノイズを取り除く方法はいくつかあるのですが、今回は平滑化スプラインを実装します。ソースはどこかの論文に書いてあったものをC#に移植したものです。まずは平滑化スプラインを行うSplineSmoothingクラスを作成します。 public class SplineSm…

【Python】 OSに依存しないフォルダ・ファイルパスの書き方

ディープラーニング関連の論文あるネットワークを試してみたい時、誰かが既に作成してくれていることが多くて助かります。ただ、ソースを自分の環境に落として動かそうとするとエラーになることも多く、原因の一部はOSに依存した書き方があったため、という…

【OpenCV】 輪郭を強調する

先鋭化フィルタを適用して輪郭を強調する例をメモします。OpenCVには用意されていない関数ですが、フィルタを自作して適用することで簡単に作成することが出来ます。作成するフィルタは以下の通りです(http://www.wakayama-u.ac.jp/~chen/education/image/2…

【WPF】 二次元配列をWriteableBitmapに変換する

二次元配列をWriteableBitmapに変換する方法をメモします。グレースケール画像をbyteの二次元配列で表現しており、これをImageクラスに表示するためWriteableBitmapに変換したかった、というのが動機になります。 using System.Windows.Media; using System.…

【C#】 二次元配列を一次元配列に変換する

C#

タイトルの通り二次元配列を一次元配列に変換する方法です。 using System.Linq; var array2dim = new byte[,] { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } }; // array1dimは{0, 1, 2, 3, 4, 5, 6, 7, 8}となる byte[] array1dim = array2dim.Cast<byte>().ToArray(</byte>…

【OpenCV】 穴を塗りつぶす

learnopencv.comのブログ(Filling holes in an image using OpenCV ( Python / C++ ) | Learn OpenCV)のメモになります。タイトルにあるように、OpenCVを使って穴を塗りつぶす方法についてブログに書かれており、MATLABにはimfillという関数があるけど、Op…

【Python】 KerasでResNet等のショートカット構造を実装する

Kerasでは学習済みのResNetが利用できるため、ResNetを自分で作ることは無いと思います。ただ、ResNet以外にも下の写真のようなショートカット構造を持つネットワークがあり、これらを実装したい時にどのように作成するかをメモします。 単純なネットワーク…

【WPF】 画像の差分を計算してWPFのImageに表示したい

タイトルの通り画像の差分を計算してWPFのImageに表示する必要があったためメモします。画像の差分を取るためにはOpenCvのC#用ラッパーであるOpenCvSharpを利用すればすぐに済むため、結局OpenCvSharpのMatクラスをWPFのImage.Sourceにどう入れるか、という…

【Python】 二次元データを一次元データに変換する

import numpy as np # one_dimの変更はtwo_dimに影響を与えない two_dim = np.array([[1, 2], [3, 4]]) one_dim = two_dim.flatten() import numpy as np # one_dimの変更はtwo_dimに影響を与える two_dim = np.array([[1, 2], [3, 4]]) one_dim = two_dim.r…

【Python】 リストの初期サイズを指定する

意外と知らなかった。。。 # リストのサイズを1000確保する y = [0.0]*1000

【Docker】 コンテナ管理用サブコマンド

コンテナにホストのディレクトリをマウントする $ docker run -it -v ホストのディレクトリ:コンテナのディレクトリ イメージ名 -vがマウントするためのオプション 使用例:$ docker run -it -v /root/data:/tmp/data ubuntu:14.04 コンテナとクライアント環…

【Docker】 ローカル環境でのイメージ管理サブコマンド

書籍「Docker入門」のChapter3-03とChapter3-04で紹介されているサブコマンドのメモです。 既存イメージを別名でコピーする $ docker tag 既存イメージ名 変更後イメージ名 イメージやコンテナの詳細情報を表示する $ docker inspect コンテナ名またはイメー…

【Docker】 Docker Quick Start Terminal起動時のエラー(Looks like something went wrong)のメモ

Dockerコンテナ内のUbuntuからapt-get出来なくなったので、「とりあえずDocker再インストールするか」と思い再インストール後にDocker Quick Start Terminalを起動しようとすると、表題のエラーが出て起動すらできなくなりました。何度Docker Toolboxをアン…

【Docker】 Docker Quick Start Terminal起動時のエラー(Looks like something went wrong)のメモ

Dockerコンテナ内のUbuntuからapt-get出来なくなったので、「とりあえずDocker再インストールするか」と思い再インストール後にDocker Quick Start Terminalを起動しようとすると、表題のエラーが出て起動すらできなくなりました。何度Docker Toolboxをアン…

【Docker】基本コマンドのメモ

書籍「Docker入門」のChapter3-02で紹介されている、「まず覚えた方が良いサブコマンド」のメモです。 $ docker run イメージ名 ローカル環境に取得済みのイメージから新たなコンテナを作成して実行する。指定したイメージが無い場合、Docker Hubからイメー…

Eye Tracking The User Experienceのまとめ - Chapter11

データの可視化 グラフの種類 グラフの種類 対象 形式 データタイプ Gaze Plot / Scanpath 個人 静止画 空間/時間 Gaze Video 個人 動画 空間/時間 Bee Swarm 個人/集計 動画 空間/時間 Heatmap 集計 静止画 空間 Focus Map / Gaze Opacity Map 集計 静…

Eye Tracking The User Experienceのまとめ - Chapter9

テスト環境の構築 照明 照明がアイトラッカーに干渉しないことを確認しておく 白熱電球や太陽光は赤外光を含んでおりアイトラッカーの精度に影響を与える可能性がある 窓が無い、もしくはブラインドがあり、蛍光灯が使われている部屋がベスト 干渉 被験者の…

Eye Tracking The User Experienceのまとめ - Chapter10

データ分析までの手順 固視と見なす基準を決める AOIを決める 測定値を取り出す データクレンジングを行う データを分析する 固視を特定する方法 位置基準と速度基準がある 位置基準の場合、最大偏差(0.5~1.5°)、最小固視時間(70~100msec)を設定する …

Eye Tracking The User Experienceのまとめ - Chapter7

データの解釈は目的と見るものに依存する 「被験者がある対象物を長時間見ていた場合、それは何を意味するの?」と聞かれることがあるが、「何を何故見ていたのかによる」としか答えることができない 例えば「固視が発生した回数が多かった」という観察結果…

Eye Tracking The User Experienceのまとめ - Chapter5

アイトラッキングは全ての質問に答えれるわけではない… 行動に関する質問 被験者は正しいリンクを選んだ?被験者は冊子から必要な情報を見つけた? 容認に関する質問 被験者は新しいデザインは既存のデザインより改善されたと思っている?そしてその理由は何…

Eye Tracking The User Experienceのまとめ - Chapter4

質問を決めておく リサーチの目的から更に具体的な質問に落とし込んでおく必要がある 例1:ホームページのリニューアル 全体の目的 新しいウェブサイトがどのように改善できるか知りたい 考えられる質問 ユーザーはホームページを見ることでウェブサイトの…

【WPF】Ellipseの外側と内側に異なる透明度を指定する

WPFのEllipseの外側(Stroke)と内側(Fill)に異なる透明度を適用する方法をメモします。具体的には内側だけある透明度を適用したかったのですが、EllipseのOpacityを設定すると、StrokeもFillも透明になってしまいます。この問題はStrokeとFillに異なるBru…

【C#】 配列の中身ををシャッフルする

C#

using System.Linq; int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int[] shuffledArray = ary.OrderBy(i => Guid.NewGuid()).ToArray(); 参考サイト: 配列やコレクションをシャッフルする(ランダムに並び替える): .NET Tips: C#, VB.NET

【Python】ファイル名と拡張子を分ける

import os.path file_name, extension = os.path.splitext(file_name_with_extension)

Eye Tracking The User Experienceのまとめ - Chapter3

アイトラッカーのタイプ アイトラッカーにはリモートタイプとウェアラブルタイプがある リモートタイプは非接触で、被験者の前に固定して置かれる ウェアラブルタイプは被験者の頭に装着して使う リモート ウェアラブル セットアップ 被験者の前に固定して置…