自己紹介
じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。
HAL大阪の2回生です👍 (2016.9.12現在)
よくstart up系イベントに行くので、大阪らへんの方は会いましょう!
OpenCVとは
OpenCVとは、Intelによって開発された、画像認識に関連する機能のライブラリのことである。 OpenCVは、コンピュータビジョンと呼ばれる、画像認識・解析に関するコンピューティング技術が主な用途として想定されている。
画像認証・解析ができるライブラリです!
まず、本体にインストールしなければいけません。
以下の記事を参考にインストールしてください。
Dissimilarity
今回は、OpenCVで2枚の画像がどれだけ似ているかを数値化できるものを使います。
ファイルの構成は
- app.js
- images/
- image files...
- package.json
開発
先ほどのOpenCVをNode.jsから扱えるように、npmでnode-opencv
をインストールします。
npm install opencv
これで開発環境は整いました!
早速app.jsを書いていきましょう。
今回はimages/
に僕のアイコンを用意しました!
この2枚はどれぐらい似ているんでしょうか!
var cv = require('opencv');
if (cv.ImageSimilarity === undefined) {
console.log('TODO: Please port Features2d.cc to OpenCV 3')
process.exit(0);
}
cv.readImage("./images/icon.jpg",function(err,im){
if (err) throw err;
cv.readImage("./images/icon2.jpg",function(err,im1){
if (err) throw err;
cv.ImageSimilarity(im,im1,function(err,dissimilarity){
if(err) throw err;
console.log(`Similarity: ${100 - Math.round(dissimilarity)}`);
})
});
});
まず、cvにopencvを読み込みます。
このcvのreadImage
メソッドを使い画像を読み込み、matrixを返します。
それを2つ用意し、ImageSimilarity
メソッドを使い二つの画像の相違を数値化します。
その数は、callbackのdissimilarity
に入っています。
ここで帰ってくる値は相違の数値なことに気をつけてください。
つまりここでかえってくる数が多い→相違点が多い→似ていない。となります。
ではこれを大雑把ですが四捨五入して100から引いてどれだけ似ているか。に変えてあげる必要があります。
(100から引いているのは、上限が100くさいぞ...ってだけなので玄人の方、間違っている場合コメント欄で指摘ください。。)
dissimilarity
を四捨五入して100から引くので
100 - Math.round(dissimilarity)
となります。
最後に
今回、初めてNodeでOpenCVを触ってみました。
いくつもメソッドがあるので、やりたいことを実現するのに方法を選定していかないとな〜と思いました。
参考にした記事
のびすけさんの記事は、参考になるものが多いです...さすがすぎる...
Twitter是非フォローしてね! @konojunya