2012/06/29

テレビロガー

以前載せたプログラムを動作させてみたのですが、たまにコアダンプで落ちます。。。(^^;)
エラー内容をググってみると、opencvのバグが未改修であることが書いてあり、
素晴らしいことに修正内容も載っているサイトもあります。
では、私はというと、、、、とりあえず、もう少しこのまま使用してみようと思います。(^^;)
何度も試してみると、早々に落ちる時と、中々落ちない時とあるので、もう少し様子をみるつもりです。

2012/06/27

javascriptの処理の順番

javascriptの勉強している中で、geolocationで自分の位置を調べて座標を表示するサンプルに、
google mapを表示する機能を追加しようとしたのですが、javascriptの処理の順番を
気にせず機能を挿入したため、表示されないという事が起きました。
geolocationのサンプルは下のようなつくりになっていました。
function a(){
  navigator.geolocation.getCurrentPosition(callback)
 ..snip..
}
function callback(position){
  座標表示処理
..snip..
}

そこで、function a()の getCurrentPosition 以降にgoogle mapを表示する処理を追加しました。
そこで実行してみると、地図が表示されない。。。
座標が取得されない?と思い、function callback()内に座標を表示するようにしてみたところ、取得されているようでした。
んんん?と思い、google map処理部分をfunction callback()に移動したところ、問題なく表示されました。
私はてっきり、geolocationの関数を処理した後、google map部分を処理してくれると思っていたのですが。。。
というわけでjavascriptについて、まだまだ分かっていないことを痛切に感じました。。。orz

2012/06/21

続テレビロガー

うーん、題名に違和感を感じつつも、続編です。
opencvの顔検出とROIの部分保存の2つのサンプルを糊でくっつけたようなものなので、あまり参考になりません。(^^;)ゞ
とりあえず、評価環境です。
・Ubuntu 12.04
・OpenCV 2.3.1 (apt-getでインストールしました)
・PC: sotec C101
・Camera: Qcam E3500
ROIを保存するファイル名が手抜きになっています。。。
 int
main(int argc, char *argv[])
{
  const char *imagename = argc > 1 ? argv[1] : "../../image/lenna.png";
  cv::Mat img;

  //Capture routine
  cv::VideoCapture cap(0);
  cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
  cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
  if(!cap.isOpened()) return -1;
//  cv::namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  cv::namedWindow("result", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);

  double scale = 4.0;

 while(1) {
  cap >> img;
//  cv::imshow("Capture", img); //output capture image

  cv::Mat gray, smallImg(cv::saturate_cast<int>(img.rows/scale), cv::saturate_cast<int>(img.cols/scale), CV_8UC1);
  // translation grayscale
  cv::cvtColor(img, gray, CV_BGR2GRAY);
  // Reduce the image in order to reduce processing time
  cv::resize(gray, smallImg, smallImg.size(), 0, 0, cv::INTER_LINEAR);
  cv::equalizeHist( smallImg, smallImg);

  // Reading of the classifier
  std::string cascadeName = "./haarcascade_frontalface_alt.xml"; // v2 Haar-like
//  std::string cascadeName = "./haarcascade_frontalface_default.xml"; // v1 Haar-like
  //std::string cascadeName = "./lbpcascade_frontalface.xml"; // LBP
  cv::CascadeClassifier cascade;
  if(!cascade.load(cascadeName))
    return -1;

  std::vector<cv::Rect> faces;
  cascade.detectMultiScale(smallImg, faces,
                           1.1, 2,
                           CV_HAAR_SCALE_IMAGE,
                           cv::Size(10, 10));

  // Rendering the result
  std::vector<cv::Rect>::const_iterator r = faces.begin();
  for(; r != faces.end(); ++r) {
    struct timeval tv;
    char clipout[200];
    cv::Point pt1, pt2; //draw rectangle
    int radius; //draw circle
    pt1.x = cv::saturate_cast<int>(r->x*3); //draw rectangle
    pt1.y = cv::saturate_cast<int>(r->y*3); //draw rectangle
    pt2.x = cv::saturate_cast<int>((r->x + r->width)*5); //draw rectangle
    pt2.y = cv::saturate_cast<int>((r->y + r->height)*5); //draw rectangle
    cv::rectangle( img, pt1, pt2, cv::Scalar(80,80,255), 3, 8, 0 ); //draw rectangle

    gettimeofday(&tv, NULL);
    sprintf(clipout,"./result/%d.%d.jpg",tv.tv_sec,tv.tv_usec);
    cv::Mat roi_img(img, cv::Rect(pt1.x, pt1.y, r->width*7, r->height*7));
    cv::imwrite(clipout,roi_img);
  }

  cv::imshow( "result", img );   
  cv::waitKey(66);
 }
}

2012/06/20

テレビロガー

テレビを特にそれほど見るタイプではないと思うのですが、たまにバラエティーなど見ていると
「誰?」という人物が出演している時がある。
新聞のテレビ欄を見たり、番組情報を見てみても出演者全員が書かれているわけでもなく、
dメニューも同様だったりします。
複数人で見ていれば、「あの人だれ?」と聞ける機会もあるのですが、コーナーが変わって
誰かを聞くタイミングを逃してしまっても、後で「この人誰?」って聞けるようなロガーみたい
なものがあると嬉しいなぁ、とたまに思っていました。

以前、OpenCVというIntelが開発した画像処理のライブラリ群が公開されて、触ってみた
こともあったので、これを使って私の欲求を満たすプログラムができないか検討し、
一通りできあがりました。
次回、ソースを公開します!!

2012/06/07

ASUS Eee Pad TF101

ようやく、ICS(Android 4.0.3)にアップデートするニュースが流れました。

http://pc.watch.impress.co.jp/docs/news/20120607_538376.html

いっそのこと、カスタムファームに手を出そうかと悩みましたが、待っていて良かった(か?)。
とにかく、明日が楽しみです。
3.xの時のように、バッテリーの持ちをベンチしなくてもいい状態になっていますように。。。