OpenCV&Pythonでボールトラッキング→失敗

Python3.5とOpenCV3でオブジェクトトラッキングを試してみた。
参考:
qiita.com
qiita.com
結論から言うと、物体のトラッキングはできるものの、
野球のボールは移動量が人間よりも多い(アルゴリズム的に正反対)のと
小さくて特徴点が検出できなかったので無理ですかね。
映像ソースにもよるとは思います。
gist.github.com
qiita.com
範囲の絞りこみ(画像切り出し)、エッジ検出は試したものの検出率は上がらず。
こういうときのディープラーニングかな。

railsをwindows上に環境構築するとき嵌った話。

railsの勉強しようと思い立って環境構築で色々コケた話を。
このあたりを参考にしつつインストールしていきます。
RubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする

commonmarkerがインストールに失敗する

gemfileがあるディレクトリにcdしてからbundleコマンドを実行すると

An error occurred while installing commonmarker (0.17.6), and Bundler cannot continue.
Make sure that `gem install commonmarker -v '0.17.6'` succeeds before bundling.

ググるとIssueに上がってますね。
Cannot bundle commonmarker due to cmake
これもgemfileでバージョンを指定します。

gem "commonmarker", "0.17.7.1"

再度bundleコマンドを実行。

fast_stackのビルドが通らない

Faststack on windows 7

sorry, not designed to work in windows

gemfileからコメントアウトしてみよう。。。

rmagickのインストールに失敗する

ImageMagickの最新版とRMagickをWindowsにインストールする
これはドツボに嵌りましたが、結論としては
エラーログを読め!何という正論。
windowsならmkmf.logを探せばよいでしょう。
コマンドプロンプト以上に詳細なエラーログが出ています。

stackprofのビルドに失敗する

issueに上がったまま修正できていないようです。
https://github.com/tmm1/stackprof/issues/45 :titile=Doesn't compile on Windows

sys-proctableがインストールされない問題

gemfileから記述漏れしていました。

結論

結局のところ、まだrails環境をwindows上に構築するのは結構ハードルが高いようです。
この機会にvagrantに挑戦してみようかと思います。

AngularJS初心者がハマりがちなこと

ng-repeatで回数を指定する

listSize=$scope.items.listSize;
$rootScope.range = function(listSize) {
    var arr = [];
    for (var i=0; i<listSize; ++i) arr.push(i);
    return arr;
};

listSizeに回数を指定します。

参考リンク:AngularJS tips - ng-repeat で配列ではなく数値で for ループする方法

ng-repeatの罠

ng-repeatを使う場合、ループ内ではinで指定した変数しか参照できません。

<tr ng-repeat="i in range(items.listSize-1)">
  <td>{{i+1}}</td>
  <td ng-if="$parent.items.obpTop10[i].rank == 1" bgcolor="#FC9898">{{$parent.items.obpTop10[i].name}}/{{$parent.items.obpTop10[i].obp | number:4}}</td>
  <td ng-if="$parent.items.obpTop10[i].rank != 1">{{$parent.items.obpTop10[i].name}}/{{$parent.items.obpTop10[i].obp | number:4}}</td>
  <td ng-if="$parent.items.twobaseTop10[i].rank == 1" bgcolor="#FC9898">{{$parent.items.twobaseTop10[i].name}}/{{$parent.items.twobaseTop10[i].twobase}}本</td>
  <td ng-if="$parent.items.twobaseTop10[i].rank != 1">{{$parent.items.twobaseTop10[i].name}}/{{$parent.items.twobaseTop10[i].twobase}}本</td>
  <td ng-if="$parent.items.slgTop10[i].rank == 1" bgcolor="#FC9898">{{$parent.items.slgTop10[i].name}}/{{$parent.items.slgTop10[i].slg | number:4}}</td>
  <td ng-if="$parent.items.slgTop10[i].rank != 1">{{$parent.items.slgTop10[i].name}}/{{$parent.items.slgTop10[i].slg | number:4}}</td>
  <td ng-if="$parent.items.fourBallTop10[i].rank == 1" bgcolor="#FC9898">{{$parent.items.fourBallTop10[i].name}}/{{$parent.items.fourBallTop10[i].fourBall}}個</td>            

$scopeなどの中身を参照する場合は$parentで親のスコープを参照する必要があります。 AngularJS でループ外のスコープにアクセスする ”AngularJS ループ外”→"ng-repeat スコープ"などでググってたどり着きました。

iはインデックス(添え字)です。

前述した回数指定を行ってループさせながらインデックスで配列にアクセスする方法です。

PKIX path building failed:javaにSSL証明書を追加する話。

個人的に開発しているWEBアプリで、
あるWEBサービスAPIを叩きにいくのだが、
最近ドメインが変わった後にどうも(こちら側に)不具合が発生していた模様。
システムエラーが起こった場合はslackに連携するようにしていたのだが、
リダイレクト先が変わったことによって本来の処理まで行っておらず、
結果的にシステムエラーさえ起きなかったという…。

リダイレクト先を修正してローカル環境で動かすと、
com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
REST通信に失敗し、上記エラーメッセージが出ていた。

javaでSSL接続をすると、PKI PATHの構築に失敗となる
なるほど、相手ホストを信頼済みのリストに登録すればよいのか。
InstallCert.javaがリンク切れになってたので探すとgithubにあった。
github.com
qiita.com
keytoolを使ってcacertsに証明書を追加すればよいわけですな。
InstallCertのREADMEが一番わかりやすかった。

とりあえずローカル環境で動くことを確認して本番機に反映。

AnnictAccess安定稼働開始。

アニメ視聴管理サービスannict
annict.com
が公式に提供しているAPIを使って自分のアニメ消化がどれだけ遅れているか
可視化できるWEBアプリを作りました。
AnnictAccessgithub.com
をslack内のユーザに使ってもらって動作テスト、バグ取りなど。

想定していなかったエラーが出ていたが皆さんのおかげで
エラーログを吐かなくなり安定稼働の兆しが見えてきた。

イヤホン修理。

いつもはソフトウェアエンジニア(プログラマ)として働いたり、
趣味でコーディングしたりしていますが、
今回は断線してしまったイヤホンのプラグ交換。
ネットにいくつか交換方法が載ってたので、結構参考になりました。

段ボールに刺して固定するのはナイスアイディアだと思いました。
d.hatena.ne.jp

ページング多すぎてうざかったですけど一番わかりやすかった。
monostudio.jp


f:id:ckoshien:20170202155110j:plain
上から
・半田付け後にボンドで固めたところ
・根本を熱収縮チューブで固定
・付属のカバーをつける
・完成
半田ごてを使うのは中学の技術の授業と
折れた傘の骨を無謀にも半田で接着しようとしたころですかね。
もう15年ぐらい半田ごて触ってなかったです。

広告を非表示にする