トップ 最新 追記

kaztomo日記


2017/08/01

_ [Python]IPython notebook に画像を貼り付けてスライダーで切り替えしたい

と思って色々とググって見ているものの良い解が見つからない (-_-)

  • 手元に沢山の GIF 連番ファイルがあり、ファイル名は時間を基準としている。
  • ある指定した時刻を中心として、前後数時間のファイルを抽出し、notebook に表示してスライダーで切り替えたい

最初に考えたのは、ファイル群を ImageMagick の convert を使って Animation GIF 化し、 それを notebook に貼り付けてスライダー操作でコマ送り出来ないかというもの。

なんだか Animation GIF を表示しても最後の 1枚の画像しか表示されない (+_+)

続いて、matplotlib.animation を使って GIF画像をリストに appendし、最後に show() できないかやってみた。

スライダーを追加するよりも以前の問題で、パラパラアニメーションさえ出来ない (>_<)

最後に、notebook の extention である ipywidget を使うというもの。 プログラム能力が乏しいので未だ組めていないけど、期待の動作が実現出来そうな気がしている。

勉強して実現してみたい (^-^)/


参考にさせて頂いたサイト:


2017/08/03

_ [Python]IPython notebook で複数画像ファイルをスライダーを使って切り替える

結構悩んだけど、やってみたら簡単だった (^-^)/

%matplotlib nbagg
import glob
from PIL import Image
from ipywidgets import interact

def pimage(i):
    return ims[i]

# GIF画像ファイルの一覧を取得
picList = glob.glob("*.gif")
picList.sort()

# 空のリストを作る
ims = []

# GIF画像ファイルを順々にリストへ追加
for i in range(len(picList)):
    #1枚1枚のグラフを描き、appendしていく
    ims.append( Image.open(picList[i]) )

# notebook にスライダーを表示。スライダーの値を使って GIF画像の Imageデータを呼び出す
interact(pimage, i=5)

参考にさせて頂いたサイト:


2017/08/10

_ 俺の不始末のため、5000円を救済するために 2600円掛けてみた (@_@;;


2017/08/20

_ [Python]OpenCV を使ったテストの続き

顔認識させるにはテストデータの準備が必要なのよね (-_-;

はてさてどこから調達しようかなぁと色々と ググ ってみると、 動画からピックアップするという手段を見つけた。 これだと、同じ人が動き回れば色んな角度の顔写真が手に入るよなぁ、 と感心しつつ、そのネタ(動画)をどこから調達するか悩みどころ (+_+)

まぁ適当に mp4動画ファイルを探しつつプログラム組んでみたがエラー orz

原因

  1. OpenCV3 の VideoCapture はデフォルトでは mp4は読み込めない。aviファイルだけ (@_@;
  2. python2.7 + OpenCV3 ではうまく動画が読み込めない (>_<)。

1.については、ffmpegを使ってファイル変換すれば良い。

ffmpeg -i filename.mp4 filename.avi

2.の解決については、もう少しググってみるか。


参考にさせて頂いたサイト:


2017/08/21

_ [Python]デスクトップPCの Anaconda3 に OpenCV3 を入れようとして

Anaconda2(python2.7) での動作確認しながらも、Anaconda3(python3.5) でも OpenCV3 を試して見たいと思い立ち、 Anaconda prompt からインストールしようとしたら良く解らないエラー (>_<)

(C:\Anaconda3) C:\home>conda install -c https://conda.binstar.org/menpo opencv3

Fetching package metadata ...ERROR requests.packages.urllib3.connection:_match_h
ostname(360): Certificate did not match expected hostname: conda.binstar.org. Ce
rtificate: {'subject': ((('commonName', 'anaconda.com'),),), 'subjectAltName': [
('DNS', 'anaconda.com'), ('DNS', 'anacondacloud.com'), ('DNS', 'anacondacloud.or
g'), ('DNS', 'binstar.org'), ('DNS', 'wakari.io')]}

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.binstar.org/me
npo/win-64/repodata.json>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.

SSLError(SSLError(CertificateError("hostname 'conda.binstar.org' doesn't match e
ither of 'anaconda.com', 'anacondacloud.com', 'anacondacloud.org', 'binstar.org'
, 'wakari.io'",),),)

もちろん

conda update conda
conda update anaconda

は実施済み。

色々とググってみると、どうやら SSL接続の証明書を(適切に?!)確認しているらしい。 その解決方法は、ベリファイをやめる (^^;;

(C:\Anaconda3) C:\home>set CONDA_SSL_VERIFY=false

これで無事 OpenCV3 のインストールが完了しました。\(^o^)/


2017/08/22

_ 気になるタイトルの技術書がありまして

ゲットし、家に着いて本棚に整理しようとしたら、2ヶ月前にゲットしていたでござる (>_<)


2017/08/23

_ [FreeBSD][Python]FreeBSD-10.3R + Python3.5 + numpy

pkg の latestであっても py27-numpy は有れど、py35 向けには用意されていない。 そのため今までは numpy が使いたかったら python2.7 で。python3 の勉強をしたかったら numpy 使わないようにしてきた。

でも、python3 + numpy 使いたいよなぁと思い、 それなら自前で ports から make してみようとやってみたら敢え無くエラー (>_<)

# make PYTHON_VERSION=3.5
# make PYTHON_VERSION=3.5 install
...(snip)...
===>   Registering installation for py35-numpy-1.13.1_1,1
pkg-static: Unable to access file /usr/ports/math/py-numpy/work/stage/usr/local/lib/python3.5/site-
packages/numpy/__pycache__/__config__.opt-1.cpython-35.pyc:No such file or directory
pkg-static: Unable to access file /usr/ports/math/py-numpy/work/stage/usr/local/lib/python3.5/site-
packages/numpy/__pycache__/__init__.opt-1.cpython-35.pyc:No such file or directory
...(snip)...

と、大量の "No such file" エラー (+_+)

  • .pyc ファイルが出来ていないのかと find してみたら、ファイル名の一部にある "opt-1" の位置が違うじゃないの (@_@;;

色々とググってみると、どうやら

NG: version.opt-1.cpython-35.pyc
OK: version.cpython-35.opt-1.pyc

のようだ。

更にググってみると FreeBSD Bugzillaに報告 が上がっていた。

その報告の通り /usr/ports/Mk/Uses/python.mk を書き換えた。

--- /usr/ports/Mk/Uses/python.mk.org
+++ /usr/ports/Mk/Uses/python.mk
@@ -549 +549,3 @@
-               /\.py[co]$$/ && !($$0 ~ "/" pc "/") {id = match($$0, /\/[^\/]+\.py[co]$$/); if (id != 0) {d = substr($$0, 1, RSTART - 1); dirs[d] = 1}; sub(/\.pyc$$/,  "." mt "&"); sub(/\.pyo$$/, "." mt "." pyo); sub(/[^\/]+\.py[co]$$/, pc "/&"); print; next} \
+               /\.py[co]$$/ && !($$0 ~ "/" pc "/") {id = match($$0, /\/[^\/]+\.py[co]$$/); if (id != 0) {d = substr($$0, 1, RSTART - 1); dirs[d] = 1}; od = match($$0, /opt-1/);\
+               if ( od != 0 ) sub(/\.opt-1\./, "." mt "&"); else \
+               sub(/\.pyc$$/,  "." mt "&");  sub(/[^\/]+\.py[co]$$/, pc "/&"); print; next} \

再度 make し直したところ、無事 py35-numpy-1.13.1 がインストール出来た \(^o^)/


2017/08/24

_ [FreeBSD][Python]py35-numpy を速くしたい

numpy の勉強を始めたばかりで、 本に載っているソースを打ち込んで実行するだけでは特に困っているわけではないけれど、 将来バリバリ使うならば numpyを高速化できないものかと考えた。

何も config 設定を変えずに py35-numpy をインストールすると netlib に対応するようだ。

% pkg info py35-numpy
Name           : py35-numpy
Version        : 1.13.1_1,1
...(snip)...
Architecture   : FreeBSD:10:amd64
Options        :
       ATLAS          : off
       DOCS           : on
       NETLIB         : on
       OPENBLAS       : off
       SUITESPARSE    : on
       TESTS          : off
Shared Libs required:
       libblas.so.2
       libcblas.so.2
       libgcc_s.so.1
       libquadmath.so.0
       libpython3.5m.so.1.0
       liblapack.so.4
       libgfortran.so.3
...(snip)...

netlib がどれほど速いのか判ってないけど、OpenBlas のほうが速いよね?と思い込んでいるので、 openblas をインストール。色々と悪戦苦闘しながらようやく完成 (^o^)V

% cd /usr/ports/math/openblas
% sudo make config
  AVX,AVX2 を設定
% sudo make BINARY=64 FC=gfortran USE_THREAD=1
% sudo make PREFIX=/path/to/openblas install

なぜか指定した PREFIX フォルダにインストールされず、直下の work フォルダ内にインストールしている (?_?) が、まぁ気にせず /usr/local/lib へライブラリを install した

% pkg info openblas
Name           : openblas
Version        : 0.2.19_1,1
...(snip)...
Options        :
       AVX            : on
       AVX2           : on
       DYNAMIC_ARCH   : off
       INTERFACE64    : off
       OPENMP         : off
Shared Libs required:
       libquadmath.so.0
       libgfortran.so.3
Shared Libs provided:
       libopenblas.so.0
       libopenblasp.so.0

ここで /usr/ports/math/py-numpy に戻って make config から OPENBLAS を指定するとエラーのオンパレード (>_<) 色々とググってはみたものの解決には至らず orz


参考にさせて頂いたサイト:


2017/08/25

_ [FreeBSD][Python]なんとか py35-numpy with openblas をインストールできたが

なんとかインストールできたが残念な結果 (>_<)

  • インストール
# cd /usr/ports/math/py-numpy
# make PYTHON_VERSION=3.5 extract patch
# cd work/numpy-1.13.1
# python3 setup.py build --fcompiler=gfortran
# export OMP_NUM_THREADS=8 python3 setup.py install
  • 1000x1000 の乱数行列を計算
BLAS info:
* define_macros [('HAVE_CBLAS', None), ('ATLAS_INFO', '"\\"None\\""')]
* language c
* libraries ['openblas', 'openblas']
* library_dirs ['/usr/local/lib']
* include_dirs ['/usr/local/include']

dot: 4.691030 sec

一方で、openblas を使わない場合(config ではデフォルトで netlib が指定されている)

BLAS info:
* libraries ['blas', 'cblas']
* language c
* library_dirs ['/usr/local/lib']
* define_macros [('HAVE_CBLAS', None), ('ATLAS_INFO', '"\\"None\\""')]
* include_dirs ['/usr/local/include']

dot: 0.612193 sec

netlib のほうが 6倍以上速い orz


参考にさせて頂いたサイト:


2017/08/26

_ 人との交流が、自分を奮い立たせる。

独学でプログラミングしていると、自分のペースで進められるけど、それと同じくらい遅らせることも出来る。

でも外に出て、同じテーマ、同じ対象に興味がある人に出会って、そこから刺激を受けるとまた新しい視点や気づきを得られるんだなと、改めて感じて良かった。

こういう事を続けていきたいなぁ。


2017/08/30

_ [Python][FX]Tickデータを保存するプログラムが不調

2017年4月19日の日記 の頃から、OANDA REST API を使って stream な Tickデータを取得し、 自前で OHLC 化して DBに保存し続けるプログラムを稼働させてきた。

でも、数時間から数日ごとに不定期に例外が発生して処理が中断されてしまう (>_<)

長らくアレコレ試してみたけど、例外の発生箇所を調べてみるとこんな感じ。

Traceback (most recent call last):
 File "/path/myprogram.py", line xxx, in <module>
    demo(displayHeartbeat)
 File "/path/myprogram.py", line yyy, in demo
    for line in rilines:
 ...(snip)...
 File "/usr/local/lib/python2.7/site-packages/requests/utils.py", line 435, in stream_decode_response_unicode
    for item in iterator:
 File "/usr/local/lib/python2.7/site-packages/requests/models.py", line 750, in generate
    raise ChunkedEncodingError(e)
ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))

で、ChunkedEncodingError でググってみても良さげな解決方法が見当たらず、 どうせ IncompleteRead なのであれば、この例外が発生したら再接続する! ということにした。

これで暫く様子見だな。


参考にさせて頂いたサイト: