OpenCV.jsにWebAssemblyの夢をみた

Mon Apr 9, 2018

スマートフォンを使っていて個人的に感動したことの一つに、クレジットカードの読み取り機能があります。カメラにクレジットカードを写すと、クレジットカード情報の入力をピッとやってくれるやつです。

古来より百聞は一見に如かずというくらいで、人間、視覚から得る情報が何より多いのではないでしょうか。クレジットカードの番号を読み上げるより、タイピングした方が早いけれど、見て理解するのはタイピングよりも圧倒的に早い。つまり、スマートスピーカーよりも、スマートアイの方がかっこいい。(SFっぽい)

昨今、ブラウザの世界でも顔認識、物体認識、etc、これらを手軽に行う方法があります。

OpenCV.jsを使ってみる

動かして基本的な処理をするところまではOpenCV.js Tutorialsを見れば問題ありません。

もう少し込み入ったことをしようとするならば、JS用のドキュメントがないのでC#向けのドキュメントを片手に動かしてみて試すことになるわけですが、現状はjsのbinding.cppが完璧ではないので使えないメソッドや機能があったりします。

例えば、Line Segment Detectorという画像内の直線を検出してベクトル化するアルゴリズムの実装がありますが、OpenCVのドキュメント上ではcv::line_descriptor::LSDDetector Classとして実装されていることになっています。しかし、これをjsから呼び出す手段は(たぶん)ありません。でもLSDに渡るはずのLineSegmentDetectorModesは生えてるんだぜ。完全におかしいので何か呼び出す手段があるのかもしれません。

同じようなことをする方法で現状のOpenCV.jsで利用できるものにハフ変換というものもあるのですが、これはあまり実写に対して精度がよくないという話(OpenCVとVisual C++による画像処理と認識)もあって、用途的にどうしてもLSDを使いたいのですが、これを使いたくなったら、buildスクリプトいじって自分でbinding部分書いてね、ということをする必要があって、ちょっとしんどい感じがします。

諦めが悪いのが取り柄なので、もうしばらく取り組もうと思っています。ズブズブ。