Deviseでサインイン後に新しいsession idを取得する
deviseのcontrollerでログイン処理を書く時、
sign_in(user)
しても、sessionのidは更新されません。
actionの処理を抜けると初めて更新されます。
調べてるとこれが出てきました。
stackoverflow.com
で、この記事が参照してるのがこちら。
stackoverflow.com
2つの記事をまとめるとこんな感じ
class SessionsController < Devise::SessionsController def create self.resource = warden.authenticate! sign_in(resource_name, resource) commit_session_now! render json: { session_id: session.id } end private def commit_session_now! return unless request.session_options[:renew] session_data = session.to_hash.delete_if { |_k, v| v.nil? } session_store.send(:set_session, env, session_id, session_data, request.session_options) request.session_options[:renew] = false request.session_options[:id] = session_id end def session_store @session_store ||= request.session_options.instance_variable_get('@by') end def env @env ||= request.session_options.instance_variable_get('@env') end def session_id @session_id ||= session_store.send(:destroy_session, env, session.id || session_store.generate_sid, request.session_options) end end
採用すべきでないやり方ですが、こんなのもありました。
319ring.net
おまけ
Railsガイドのセキュリティ対策に関するページ。
読み応えありますね。
Railsのセキュリティ | Rails日本語ドキュメント | Ruby STUDIO
【OpenCV バグ】i2 >= 0 && i2 < static_cast<int>(keypoints2.size()) in function drawMatches
動画からリアルタイムでBruteForceMatcherでオブジェクトを検出しようとしていて、
cv::drawMatchesで以下のエラーが出て困り果てていました。
i2 >= 0 && i2 < static_cast<int>(keypoints2.size()) in function drawMatches
バグとのことでした。 answers.opencv.org
検出対象画像とカメラ画像の順番を入れ替えるとうまくいくとのこと。
私の環境でも無事動きました。
XCode 7.3で黒背景の時でもカーソルを見やすく
7.3からbetter-xcode-ibeam-cursorが使えなくなってしまいました。
カーソルファイルの位置が変わったのが原因のようです。
以下のパスにあるファイルを、以下のファイルAssets.car に差し替えればOKです!
/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Assets.car
https://github.com/egold/better-xcode-ibeam-cursor/files/185722/Assets.car.zip
参考
iOSで局所特徴量AKAZEを使うまとめ
AKAZEを使って局所特徴量抽出、記述、マッチングをやってみます。
そのための勉強記事まとめ。
iOSでのAKAZE最適化
GitHub - pablofdezalc/akaze: Accelerated-KAZE Features
AKAZEで取得したのをfindHomographyでゆがみ取得する
[おまけ]ORBだとこちらが参考になる
OpenCV3.0のtraincascadeコマンドでLBP指定できない問題
分類器を作ろうとして./opencv_traincascadeコマンドに -featureType LBP を渡すと、永遠にプロセスが進まない問題。
こちらに解決策が。 github.com
openCVインストール時に、コードを並列実行するためのtbbも一緒にインストールしないといけなかったみたい。
一度OpenCVをアンインストールして、以下で再度インストール。
brew install opencv3 --with-tbb
これでOK。
LBPは学習速度がHAARに比べて非常に早く、ありがたいです。
【OpenCV3】複数の正解画像を自分で集めて物体検出器を作る(Mac)
精度の高い物体検出器の作成をしたくて、色々試しております。
前回の記事
前回は一枚の正解画像から検出器を作成しましたが、
今回は対象を数枚写真に撮り、そちらで検出器をつくります。
また、createsampleやtraincascadeコマンドの別のオプションも試してみます。
複数の正解画像をテキストファイルに書き出す
find pos/ts1 -name '*.png' -exec identify -format '%i 1 0 0 %w %h\n' {} \; > pos_ts1.txt
サンプルファイルの作成
./opencv_createsamples -info pos_ts1.txt -vec vec/ts1.vec -num 6 -w 40 -h 40
分類器の作成
./opencv_traincascade -data cascade/ts1/ -vec vec/ts1.vec -bg nglist.txt -numPos 5 -numNeg 2900 -w 40 -h 40
OpenCV3を使って1枚の正解画像から物体検出器を作成する(Mac)
前回のOpenCV3.0インストールに引き続き、
今回はOpen CV 3を使って物体検出器を作っていきます。
以下の記事を参考にさせていただきました。ありがとうございます。
www.pro-s.co.jp
使用しているのが古いバージョンのようで、OpenCV3と比べてパスなどが異なる箇所があったため備忘録としてメモしていきます。
1. 作業ディレクトリを作る
どこでもいいので作業ディレクトリを作ります。
Users/username/Desktop/traincascade/
さらにこの中に以下のディレクトリを作ります。
- pos(正解画像を保存するフォルダ)
- vec(正解画像ベクトルファイル用フォルダ)
- neg(不正解画像を保存するフォルダ)
- cascade
- cascade/trained_data (分類器用フォルダ)
2. 必要なファイルをディレクトリに入れる
- pos/ の中に正解データ画像を入れます。
pos/image.png
- neg/ の中に不正解画像を入れます。
neg/1.png neg/2.png neg/3png ...
3. opencv_createsamples コマンドでベクトルデータ作成
3000枚の画像を作ってみます。
$ ./opencv_createsamples -img ./pos/image.png -vec ./vec/image.vec -num 3000 -bgcolor 255 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5
4. 不正解画像一覧ファイルの作成
$ ls neg | xargs -I {} echo neg/{} > nglist.txt
5. 分類器ファイル作成
./opencv_traincascade -data ./cascade/trained_data/ -vec ./vec/image.vec -bg nglist.txt -numPos 2400 -numNeg 100
-numPosにはcreatesamplesで作成した枚数の8割の数を指定。
-numNegにはneg/ に入っている画像の枚数を指定。
以下のデータが分類器になります!
cascade/trained_data/cascade.xml
ちなみに公式ドキュメントはこちらです。
Cascade Classifier Training — OpenCV 3.0.0-dev documentation
より精度の高い分類器を求めて
次回はこちらのスライドを参考に、より精度の高い分類器を作っていきます。
ちなみにこちらを使えば精度が測れるとのこと。 OpenCV Computer Vision Library ()