2017/03/11

MOOV Now Swimming Stroke Recognition

Laps recognition results:

 Laps Recognized As…
Bu Ba Br Fr NA
Actual Stroke Bu 2 0 0 3 0
Ba 0 5 0 0 0
Br 0 6 6 0 1
Fr 0 0 0 49 0
500m kicks were completely ignored and recorded as 18min. rest... orz.

2017/03/08

Moov Now が来た

MOOV NOW が来た。注文は 2/26 (土) 夜、到着は 3/6.

Ordered 2.

There is only one sport that supports two moov's, but I found that that is enjoyable. I hope swimming kick will be detected by another moov on the ankle.

https://welcome.moov.cc/moovnow/

Knowledge base
https://moov.zendesk.com/hc/en-us

2017/03/03

ポイントの価値を計算する ヨドバシ編

ポイントの価値を計算する

ポイントのルールを整理する
  • z 円の品物をヨドバシカードで購入すると、品物に加えて 0.11z ポイントがついてくる。
  • z 円の品物をポイントで購入すると、品物だけ手に入る。
つまり、品物 A を介して次の 2 つの関係式が成立する:
  z [yen] = 品物A + 0.11z [pt] 
  z [pt]  = 品物A
品物A を消去して
  z [yen] - z[pt] = 0.11z [pt]
<=>
  (1+0.11)z [pt] = z[yen]
従って
  1 [pt] = 1/(1.11)[yen] = 0.9009009... [yen].

ヨドバシでの支払いは、カード、ポイントのどちらが得なのか?

y円の品を購入した場合の収支を円建で計算する

ポイントで支払い

支出 y [pt] = (1/1.11) y[yen] = 0.9009...y [yen]
収入 0 [yen]
総支払額 y [pt] = (1/1.11) y[yen]

カードで支払い (11%還元商品の場合)

支出 y [yen]
収入 0.11y [pt] = 0.11x(1/1.11)y [yen] = 0.099099...y [yen]
総支払額 = y [yen] - 0.11y [pt] = (1-0.11/1.11)y [yen] = 1/1.11 y [yen] 
ポイントで支払った場合と最終的な収支は同じである。
ここまでの議論を一般化すると、ヨドバシ方式の場合、平均還元率 a でためたポイントを持っている場合、 品物 A の還元率がちょうど a の場合、 支払いはカードでもポイントでも同じである。

カードで支払い (6%還元商品の場合)

支出 y [yen]
収入 0.06y [pt] = 0.06x(1/1.11)y [yen] = 0.05405...y [yen]
総支払額 = y [yen] - 0.06y [pt] = (1-0.06/1.11)y [yen] = 1.05/1.11 y [yen] > 1/1.11y[yen]
ポイントで支払うよりも、総支払額が多くなる。
一般化すると、平均還元率 a でためたポイントを持っている場合、 品物 A の還元率が a を超える場合は、カードで支払ったほうが得で、 還元率が a を下回る場合、ポイントで支払ったほうが得である。

2017/02/28

jupyter nbextensions

 まずはインストール
  • pip install jupyter_nbextensions_configurator
  • pip install https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tarball/master
jupyter 起動前に enable
"C:\opt\IntelPython35\Scripts\jupyter.exe" nbextensions_configurator enable --user
"C:\opt\IntelPython35\Scripts\jupyter.exe" contrib nbextension install --user

2017/02/27

simpy on jupyter


from sympy import *
init_printing() # to print with mathjax on jupyter notebook
a=Symbol('a');
b=Symbol('b');
c=Symbol('c');
x=Symbol('x');
y=Symbol('y');
expr = a*x**2 + b*x + c;
solve(expr, x)

2017/02/26

Reading a multipage tiff file

Reading 16-bit grayscale multipage TIFF file with python scikit-image:

Python code:

import skimage.io as skiio
matMOV = skiio.imread("movie.tif");
print("Pages:%i, Height: %i, Width: %i"\
      %(  matMOV.shape[0]\
        , matMOV.shape[1]\
        , matMOV.shape[2]))
Result:
Pages:631, Height: 875, Width: 748


Keywords: TIFF TIF file multipage multi-page

2017/02/25

コマンドプロンプトの結果をクリップボードに

Windows
  • パイプ + clip コマンド.
  • e.g. % dir | clip
  • e.g. % echo %path% | clip
従来下記のようにしてきたが、 dir.txt ができてしまうのが難点だった.
% dir > dir.txt & start dir.txt
Keywords: pipe, clip, clipboard, command prompt, redirect

2017/02/24

matplotlib 日本語タイトルなど

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
fp = FontProperties(fname=r'C:\WINDOWS\Fonts\YuGothic.ttf', size=14)
X = np.linspace(0, 2*np.pi, 100);
C = np.cos(X);
plt.plot(X, C);
plt.title(u"余弦関数", fontproperties=fp)
plt.xlabel(u"位相", fontproperties=fp)

2017/02/23

Python で CSV 読み込み. 一行目を読み飛ばす

import numpy as np;
data = np.loadtxt("out.csv",delimiter=",", skiprows=1);

2017/02/22

Jupyter notebook を pdf 化

  • 日本語がなければ export でできる.
  • 日本語が入る場合
  • 中間ファイルとして .tex ファイルと画像ファイルたちが残っているので、気に入らない場合は直接手を加える
    • 一行のソースが長いとセルの幅不足で右端が切れてしまう問題には、事前の手動改行で対処。TeX 上は verbatim を使っているので何ともしようがない。
      • listings を使うように変更すれば何とかなるかも.
    • タイトル(\title) には元ファイル名が使われてしまう。

2017/02/20

OpenCV の Python Binding ビルド

主訴:
BUILD_opencv_python3 が出てこない
原因:
PythonLibs が見つからない
対処法:
もし レジストリ HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\InstallPath の既定値(string) がなければ
  • libs/Python35.lib
の直上フォルダ名を入れる。

Keywords: Windows, python, build, opencv, binging, Intel python distribution,

2017/02/19

pip の proxy 越え

Intel Python 35 に Scikit-Image をインストール

  • proxy 環境内
  • Intel Python 3.5
  • Scikit-image をインストールしたい
  • Windows 8.1 Pro 日本語 x64
whl でインストール
普通は依存関係を自動で解決(不足分をダウンロード&インストール)してくれるようだが、proxy 環境内だとダウンロードに失敗する. 手動で解決する.目的のものをブラウザでダウンロードし、下記コマンドでインストールを試みて、ダウンロードできないというエラーが出たら、 そのパッケージについて、ブラウザでダウンロードして・・・という作業を繰り返す。有限回で終了するはずである。
  • whl ファイルのダウンロード
  • インストールコマンド
    • python.exe -m pip install [path/to/file.whl]
  • IntelPython35 に Scikit-image をインストールするのに必要な whl
    • scikit_image-0.12.3-cp35-cp35m-win_amd64.whl
      • Pillow-4.0.0-cp35-cp35m-win_amd64.whl
        • olefile-0.44-py2.py3-none-any.whl
      • toolz-0.8.2-py2.py3-none-any.whl
      • dask-0.13.0-py2.py3-none-any.whl
      • networkx-1.9.1-py2.py3-none-any.whl

2017/2/24 追記

以下でよかった

 python.exe -m pip install packagename --proxy=user@proxy.hoge.jp:port

2017/02/18

CMake の printf のようなもの

hoge と表示する
message(STATUS,”hoge”)
変数 PARAMNAME の値を表示する
message(STATUS, “PARAMNAME = ${PARAMNAME}”)

2017/02/17

OpenCV - Python 参考 URL

2017/02/16

Python から OpenCV を使う

ビルド手順

  1. OpenCV のソースをダウンロード (git)
  2. CMake で Configure する
    • 出力ディレクトリは適当でよい。A とする.
    • BUILD_OpenCV_python にチェックを入れる.
    • PYTHON3_* に適切なパスが入っていることを確認する.
      • 特に PYTHON3_PACKAGES_PATH にはビルドの成果物 pyr が INSTALL される
  3. Configure できたら、 Generate する。
  4. A\OpenCV.sln を開いて、 BUILD_ALL をリビルドする。
  5. 成功したら、INSTALL をビルドする。
  6. A\install ディレクトリに bin ファイルたちが出来上がるので、これを適切な場所 c:\opt\OpenCV などに移動する。
    • dll には PATH を通しておく.
    • OpenCV.dll が使用するであろう DLL (TBB.dll など) は同じフォルダにコピーするかパスを通しておく.
    • PYTHON3_PACKAGES_PATH に pyr がコピーされているはず。
  7. python を起動して import cv2 を実行する。 dll が読み込まれるはず。

確認。例

>>> import cv2
>>> cv2.__version__
'3.2.0-dev'
>>> 

パスが設定できていない場合のエラー

例えば TBB を使用してコンパイルした場合、 TBB.dll を見つけられるようパスが通っている必要がある。
>>> import cv2
Traceback (most recent call last):
  File "", line 1, in 
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

オプション設定

  • 全部入りの DLL を作るには Build_opencv_world にチェックする
    • C++ でプログラムを書いたとき、link する lib ファイルが 1 つで済むので楽.
  • Build_opencv_world と Build_Python3 は両立しないようである。

2017/02/15

Jupyter python で inline で matplotlib の plot を表示するには
   %matplotlib inline
をスクリプトに入れる.