明日はMaker Fair Kyoto
前回の記事です
mozyanari.hatenablog.com
環境が作れたので,キャリブレーションボード(Charuco board)を作りキャリブレーションをします
- キャリブレーション用のボードを作成する
Assets/Scenesの中のCreateMakers.unityを開きます
自分が好きなキャリブレーション用のボードを作ることができますが,手間なのでデフォルトのまま作ります
なので,そのままUnityの実行ボタンを押します
すると,Assets/Imagesフォルダが生成されて,キャリブレーション用のCharuco boardが作れます
使うのは
ArUcoUnity_ChArUcoBoard_Dict4x4_50_X_7_Y_5_SquareSize_200_MarkerSize_120.png
です
これを印刷して厚紙に貼り付けます
- キャリブレーションの設定
Assets/Scenesの中のCalibrateCamera.unityを開きます
まず指定するのは使うカメラです
Aruco WebcamのWebcam Idを設定します
自分はノートPC内蔵カメラが0番,以降接続したUSBカメラの順番に1番...と続きます
Mono Aruco Camera Displayのチェックボックスを消します
キャリブレーション実行時にこれが起動しないようにするためらしいです
次は,ArucoCharucoBoardのArucoCharucoBoardを設定します
変更すべき場所は,Maker Side LengthとSquare Side Lengthです
Maker Side Lengthはマーカの大きさを,Square Side LengthはQRコードの一つのマスの大きさをm単位で指定します
なので,自分が印刷したCharuco boardを定規で測って入力してください
(こうすることで,印刷機が勝手にCharuco boardを拡大したり縮小したりして印刷しても大丈夫になっています)
最後に,PinholeCameraCalibrationのAruco Camera Parameters Controllerを設定します
Camera Parameterに,「自分が好きな名前.xml」を入力してください
キャリブレーションデータの名前を決める部分です
リファレンスには空欄でも勝手に名前を作るよと書いてありますが,空欄だとエラーで書き出してくれませんでした
- キャリブレーションを実行する
設定が終わったらUnityの実行ボタンを押すとキャリブレーションが始まります
カメラにボードを映して「add Image」を押すとキャリブレーション用のデータを取ることができます
様々な角度で撮ってください(自撮りをあんまりしないのでリア充ならうまいことやれるんだろうなと思いながらやっていました)
これを10回程度繰り返して「Calibrate」を押すとキャリブレーションが実行されます
結果は,Assets/StreamingAssetsの中にxml形式で出力されます
「Reset」ボタンを押すと最初から始めることができます
(OpenCVではQRコードなしのキャリブレーション用ボードを用意しますが,今回の方法はQRコードがついています.これによってキャリブレーションボード全体が写っていなくてもキャリブレーションを行うことが出来るようです.ただ,QRコード全体が写っているほうが精度はもちろんいいです)
- キャリブレーションデータを確認
Assets/StreamingAssetsの中のxmlデータを確認します
estimatePoseSingleMarkersで必要なものは,Camera Matrices Value=cameraMatrix,DistCoeffsValues=distCoeffsです
読み方はおそらく今回のデータだと
cameraMatrix=
|578・・, 0 ,319・・|
| 0 ,581..,259・・|
| 0 , 0 , 1 |
distCoeffs=[0.0772,-0.2668,-0.0023,0.0024,-0.1549]
だと思います
これでカメラのキャリブレーションデータを取得することが出来ました
次はこのデータを使って実際にQRコードを認識して距離を取得します