@shi3z さんの "Caffeモデル+Selective Search+Chainer"を使ってみる
@shi3z さんが Caffe 使った一般物体認識のスクリプトを書いていたので、試してみた。
元ネタ:
Caffeモデル+Selective Search+Chainerを使って、写真のどの部分に何があるのかなんとなく判定させてみる - shi3zの長文日記
CUDAなしMacで、Chainer使ってCaffeモデルをインポートして画像認識させてみる - shi3zの長文日記
まず、OpenCV 入れていない人はそこから。
PythonでOpenCVを使う@Mac - Qiita
ちなみに僕はうまくリンクが貼れておらず、ここも参考にした。
osx - python cannot import opencv because it can't find libjpeg.8.dylib - Stack Overflow
他にも依存関係があるので、pip で一括インストール。
pip install numpy selectivesearch pip install chainer -U
ちなみに Chainer は upgrade でインストールしないと、CaffeFunction が入らないので、upgrade オプション必須。
googlenetのモデルをインストール + モデルデータを取得
git clone https://github.com/pfnet/chainer.git cd chainer/examples/modelzoo python download_model.py googlenet # これで bvlc_googlenet.caffemodel というモデルがダウンロードされるので、これを取得 python download_mean_file.py
Cuda をセットアップする
CUDA開発環境を構築する~[Mac OSX編] | ヤノラボ:やのしん研究所
この辺を読めばいけるはず。
MBAではさすがにやらなかったけど、、、。
最後に、shi3z さんが
Caffeモデル+Selective Search+Chainerを使って、写真のどの部分に何があるのかなんとなく判定させてみる - shi3zの長文日記
に書いてるスクリプトをコピペして、image.py とか適当にファイルをつくる。
一通り上記をやってから、
python image.py hoge.jpg googlenet bvlc_googlenet.caffemodel
とやると動くはず。
hoge.jpg は適当なイメージファイル名、
bvlc_googlenet.caffemodel は先ほど download_model.py を実行して得られたモデルファイル。
initdb: could not change permissions of directory
postgresql を初期化する際に設定ファイルの権限で詰まった。 ただ純粋に権限系をいじればよい。
sudo mkdir /usr/local/var/postgres sudo chmod 775 /usr/local/var/postgres sudo chown ユーザ名 /usr/local/var/postgres initdb /usr/local/var/postgre
RequireJS + WordPress
以前、こんな記事を書いた。 Bower + RequireJS - Code to Fab
そもそもなんでこんなことをしていたかと言えば、WordPress のテーマ用の開発だったのだが、こんなに準備しても冷静に考えれば WordPress の場合は PHP の方で JavaScript の実行が制御されてしまうから、当然のごとくぽっと置いただけではうまくいかない。 調べてみると、wp_enqueue_scripts() を使って以下のようにすればいいらしい:
JavaScript を呼び出したい WordPress 側:
<?php // WordPress の関数を使って baseUrl のパスを作成 $componentsUri = get_template_directory_uri() . '/js/components'; // wp_enqueue_script を使って require.js を呼び出し wp_enqueue_script('requirejs', $componentsUri.'/requirejs/require.js'); // require.js に baseUrl のパスを渡す wp_localize_script('requirejs', 'require', array( 'baseUrl' => $componentsUri, 'deps' => array( get_template_directory_uri() . '/js/main.js') )); ?>
呼び出される main.js 側:
// 渡された変数を使って baseUrl をセット requirejs.config({ baseUrl: requirejs.toUrl('') });
これだけで OK 。
割とすっきりかける。 Browserify ならもっと楽に書けそう。
PRIMARY KEYがついているカラムをAUTO_INCREMENTに
ある、hoge_tb というテーブルをつくって、しばらく運用してしまった後に、そのカラム ID をAUTO_INCREMENTにしたくなったときにどうしたらよいか、という話。
といあえず思いついた2パターンを試してみる。
mysql> ALTER TABLE hoge_tb CHANGE id INT(11) NOT NULL AUTO_INCREMENT; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT(11) NOT NULL AUTO_INCREMENT' at line 1
mysql> ALTER TABLE hoge_tb CHANGE id id INT(11) NOT NULL AUTO_INCREMENT; ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'
ダメだ、、、。
調べてみると、どうやら sql_mode をいじればよいとのこと。
mysql> SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO'; mysql> ALTER TABLE hoge_tb CHANGE id id INT(11) NOT NULL AUTO_INCREMENT; mysql> SET SESSION sql_mode='';
ちなみに、その後大体テストをすると思うのだが、それはすなわち AUTO_INCREMENT のインデックスが進んでしまうということ。 インデックスをリセットするためには、
ALTER TABLE hoge_tb AUTO_INCREMENT=1000;
とかすればよい。
参考: MySqlでauto_increment を追加しようとしたら、エラー!! | Webridge Tech Blog
JavaScriptの勉強方法
Node やら Socket.io を使うプロジェクトがはじまったので、きちんと JavaScript を勉強しようと思って、二週間ほど記事読んだり、いろいろ見たりしていた。 普段、ブラウザで表示するためのものを書く分には何も気にせず jQuery 使っていればいいのだと思うのだけれど(この時点で異論がある人もいる気がするけれど、僕はフロントエンドフリークじゃないんで、 jQuery ファイルひとつで済むようなことしかしないし、アニメーション描きたい人は Bower や CoffeeScript の達人でも参照してくれ)、サーバサイド書くとなるともう少しいろいろ気にしなければいけないなと思ったので。 結論から言うと、下の三つのサイトがかなり役に立った。
JavaScript をきちんと学ぶ How to Learn JavaScript Properly | JavaScript is Sexy
関数の宣言方法(と使い方) 連載:Ajax時代のJavaScriptプログラミング再入門:第2回 JavaScriptの関数をマスターしよう (4/4) - @IT
コールバックを理解する Understand JavaScript Callback Functions and Use Them | JavaScript is Sexy
補足:コールバックがどう動作しているのかを理解するのはとても重要なことだと思うのだけれど、日本語の記事がまともに存在していない気がする。対処法ばかりではなく、そもそもの動作原理を知ると理解が早い気がする。 Node.jsフロー制御 Part 1 – コールバック地獄 vs. Async vs. Highland | プログラミング | POSTD とかは対処法についての解説として非常によいのだけれど。
JavaScript.isSexy はとても参考になる。 かなりいい記事がある印象。
この reddit のスレッド も随分参考になった。
なんとなく使い方が分かったら、あとは使うだけだと思うんだけれど、 Train with Programming Challenges/Kata | Codewars とか使って、調べつつも書き続けるのが一番上達しそうな気がした。
コールバックの記事とか和訳の価値ある気がするけど、長い、、、。
----- 2015/12/28追記
Qiita 上で年末まとめ記事が大量に出ている中で、keitarou さんがご自身の JavaScript 習得経験をまとめていらっしゃったので、追記: