Raspberry Pi ZERO を使った虹彩認証セキュリティロックシステムです。
スパイ映画に登場する様な虹彩認証(眼紋認証)により、定距離で撮影した目の画像を取得し、登録者と虹彩パターンが認識した場合に物理ロックを解除します。
使用したパーツ:
・Raspberry Pi ZERO
・ソニー製カメラ「IU233」モノクロVer.、USB 接続
・Zero4U (4-Port USB Hub For Raspberry Pi Zero)(無くても作成可能)
・赤外 LED 1 個 (ZERO の GPIO から給電)
・デジタル・マイクロサーボ SG90(ZERO の GPIO から給電)
・スマートホンマイクロ USB ケーブル(Raspberry Pi に給電)
使用したプログラム:
Python 2.7
サーボモーターを使い、小物入れのフタにロックをする機構を作成しました。
サーボモーターは Raspberry Pi zero の GPIO から wiringpi を使ったハードウェア PWMで制御しています。
動画 URL: https://www.youtube.com/watch?v=dcoO9wYTe-w
動画 URL: https://www.youtube.com/watch?v=6I1cbWPPFN0
虹彩認証は撮影距離により精度が変化してしまうため、洗眼液のキャップ内にカメラを取り付け、このキャップを目に当てることで毎回一定の距離での撮影が出来る工夫をしました。
クリアに瞳孔を撮る必要があった為、キャップ内部に赤外 LED を取り付け、撮影の光源としています。アルミホイルを内部に貼り付け、照度を上げるのと同時にキャップ外からの環境光を防いでいます。カメラはソニーセミコンダクタソリューションズ「IU233」を使用しています。小型で焦点距離が広い為、軽く安定して撮影することが出来ます。
撮影した写真は、画像処理ライブラリの OpenCV のハフ検出で処理しました。
OpenCV の円検出の設定例:
cv2.HoughCircles(hough,cv.CV_HOUGH_GRADIENT,1,100,param1=80,param2=20, minRadius=10,maxRadius=80)
minDist = 検出される円と円の最小距離
param1 = エッジ検出の閾値
param2 = 中心検出の閾値
minRadius = 最小半径
maxRadius = 最大半径
円の検出レベルを厳しくした状態で、ハフ変換で瞳孔(緑円)を検出し、 その円の2倍の大きさの円(青円)を虹彩検出エリアとします。
この青色エリア内を探索領域として、再度検出レベルを甘くして円の検出(水色)を行います。
人によって瞳孔を含めた円の検出数、そのX,Y座標が異なりますので、この数をプログラムに登録しておき、使用者の特定に使います。
使用時には「撮影→探索エリア抽出→エリア内の円検出→円の個数分のX,Y座標の合計値±誤差値がマッチすればサーボロック解除」をループで繰り返すプログラムを起動しておきます。
キャップを目に当て、数秒待つとロックが解除されます。
以上で完成です。
当初は機械学習を行うつもりでしたが、他人の眼球画像を集めることが出来なかったため、機械学習は断念し、OpenCV の円検出みで出来る方法を取りました。
結果として初心者にも作成が容易で認識処理も早い、オフラインで動くシステムが出来ました。
日本人の虹彩は黒いので瞳孔との差別化に苦労しましたが、モノクロカメラと赤外 LED を組み合わせると上手くいきました。
Raspberry Pi を使った視線追従にも可能性を感じましたので、目を使った関連作品を作成していきたいと思っています。https://www.youtube.com/watch?v=3r8f6kLIRWs
追記:
この作品は日経BP社 「みんなのラズパイコンテスト2017」で優秀賞を受賞しました。
https://project.nikkeibp.co.jp/pc/atcl/column/17/062900102/080600029/