2014年2月11日火曜日

リクルーターが来た時の心構え

OB訪問をした。

今年は集まってくれた学生さんの数が少なく一人ひとりの顔がよく見えた。
僕も数年前は学生だったけど、その時はリクルーターがどういうことを思っているのか、リクルーターにどんな存在なのかをあまり考えてなかった。リクルートする側に立ってみて初めて分かったことがある。結構当たり前のことに今更気がつく。でも振り返ると第一希望の会社には自然とできていたことかもしれない。
僕は技術系で社会人経験も浅く、すべての人にこれが当てはまるかは定かではない。思ったことを書いてみる。



1.スーツは意味が無い。むしろ逆効果な場合もあった。

当日少し会社説明をしたけど、その時スーツで来ている人がいた。気合が入っていることは分かった。でも、本当に積極性が見えない場合は、逆に上辺だけ繕っているように見えてしまう

例えば、プレゼンを聞く態度。姿勢よくして目を見て話を聞くようにしよう。悪く思われたくない、とりあえずスーツ着とけば悪い印象は与えないだろう、って感じに見えて、中身がないように見えてしまう。



2.具体的にやりたいことが決まっている人のほうがよい。


会社説明をした後に質疑応答の時間を設けたけど、なぜうちの会社を志望するのかが見えたほうが好印象だ。「○○がやりたいのですが、御社での強みは何ですか」から始まって、更には「だから○○がやりたいです!」まで熱く語れるとモチベーションの高さを感じられて良い。こういう学生がいると、他の学生はもう眼中にない。

ダメな例はただ漠然と「研究開発がしたい」だ。研究が本当にやりたいならドクターやNTTの基礎研を目指せば良い。学歴で比べれば他大学にはもっとできそうな人がいるので、それを覆すだけの成果やモチベーションを見せなくては行けない。



3.もっとOBを活用し、自分の思いを伝えよう。


人事部や技術系の面接でも所詮は1時間程度しかない。それで人の良さが本当に伝わるとは思わない。人事部もそれを分かっていてOBを投入するのだと思う。OBに人事権はないけど、何かの力が動くかもしれない。

たとえ上のようにやりたいことが決まっていなくたってよい。本当にその会社を志望しているなら、自分が興味をもっていることをもっとOBにアピールすべきだ。特に技術系の採用なら技術全般に興味をもっていることは大歓迎だ。私生活も気になるところだとは思うけど、もっと技術的に興味のある話をしたい。推薦枠のある企業なら学歴はもはや関係ない。話べたでも構わない。技術に対して積極的であること」を存分にアピールしよう。




おまけ。

こんなピンポイントな話が役に立つかはわからんけど、僕の配属されたところはプログラムをする人があまりいない。学生の時(専攻は情報でない)は周りにプログラムができる人がいたので、自分は完全に趣味でしかなかったけど、配属されたところでは僕でもかなりできる部類になった。

そんなわけでGUIとか作って業務を効率化すると、評判が良い。業務は意外と効率化されていないし、外部に委託すると手間がかかって仕方がない。情報系以外、特に理学部の出身が多いところではプログラミングのスキルを押してもいいかもしれない(僕のところは物理系が多い)。

OBに現場のプログラミングのリテラシーを聞いてみてもいいかもしれない。こういうのはインパクトなさげに見えてアピールしにくと思うかもしれないけど、自力があるというのは評価されると思う。

しかし、企業研究って大事だーってことに今更気がつく…こういう経験は転職とかにも役立つかなー

2014年2月3日月曜日

opencvでステレオカメラのキャリブレーションを行う1

カメラの内部、外部パラメータを計測するプログラムをC++とOpenCVで組んでみた。
参考にしたサイトはこのチュートリアル
OpenCVの関数を組み合わせて行けば簡単にできるはずだけど、上のチュートリアルはいろいろと手が混んでちょっと分かりにくかった。
今回は以下の2つの手順を踏んた。

  1. チェスボードの検出とそのコーナーの保存
  2. 検出したコーナーを使ってカメラの内部パラメータを求める。
1はfindChessboardCorners()を2はcalibrateCamera()を使えばよい。生成物はyaml形式でファイルに保存しとく。findChessboardCorners()は3500x2000の画像で1分くらいかかったので数が多いと何度も回すのは結構時間がかかる。yamlでの保存はFileStorageというクラスが準備されているので、これを使うと簡単にファイルでのやり取りができることがわかった。ここを参考にした。

まずはチェスボードの検出。findChessboardCornersの後にcornerSubPixを実行。これを行えば精度が上がるらしい。上がcornerSubPixを行わなかった場合。下が行った場合。確かに精度は良くなっている。時間も全然かからないのでやって損はないだろう。



ソースはこんな感じになった。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;

int main() {
        
    Size patternsize(9, 6);
    vector<Point2f> corners;
    Mat src = imread("chessboard/image.JPG");

    //find chessboard corners
    std::cout << "finding chessboard corners..." << std::endl;
    bool found = findChessboardCorners(src, patternsize, corners, 
        CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE 
        + CALIB_CB_FAST_CHECK);

    //find more precise corners.
    if(found) {
        std::cout << "found. finding corners in sub-pixel accuracy..." << std::endl;
        Mat gray;
        cvtColor(src, gray, CV_BGR2GRAY);
        cornerSubPix(gray, corners, Size(9, 6), Size(-1, -1),
                    TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
        drawChessboardCorners(src, Size(9,6), corners, found);
    } else {
        std::cout << "not found." << std::endl;
    }
    std::cout << "done." << std::endl;
}

2へ続く。