Cloud Vision API 完全に理解した3〜色々検出させてみたよ〜

Cloud Vision API 完全に理解した3〜色々検出させてみたよ〜

(本当に必要だったかは定かでない)長い道のりを経て、
やっと認識させるためにnode.jsを書いてみます。

読み込ませる画像はこちら。
私が使ってるクレンジング『MT メタトロン』の成分表です。※画像は拾い画

コード

'use strict';
async function setEndpoint() {
const vision = require('@google-cloud/vision');
const clientOptions = {apiEndpoint: 'eu-vision.googleapis.com'};
const client = new vision.ImageAnnotatorClient(clientOptions);
const [result] = await client.textDetection('検出したい画像のパス');
const labels = result.textAnnotations;
console.log('Text:');
labels.forEach(label => console.log(label.description));
}
setEndpoint().catch(console.error);

で、ターミナルで

node node.js

をターン!

検出結果

Text:
-[配合成分]一
水、グリセリン、ヤシ油脂訪酸PEG-7グリセリル、
DPG、エタノール、酒石酸ジメチルエタノールアミン、
カルノシン、ジメチルスルホン、パルミチン酸アスコ
ルビル、BG、ボタンエキス、アルテア根エキス、フ
ユボダイジュ花エキス、アルニカ花エキス、セイヨウ
オトギリソウ花/業/茎エキス、カミツレ花エキス、
トウキンセンカ花エキス、ヤグルマギク花エキス、
ローマカミツレ花エキス、グリチルリチン酸2K、カ
ルポマー、水酸化K、フェノキシエタノール、1,2ー
ヘキサンジオール

出てきた・・・!
今回すごく画質が荒いので「葉」が「業」になってしまっていますが、
普通の画質のものであれば、きちんと認識してくれるはずです。

せっかくなので、ロゴ認識にも挑戦。

大手回転寿司チェーン『スシロー』を認識してもらいましょう。

コード

async function quickstart() {
const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient();
const [result] = await client.logoDetection('images.jpeg');
const logos = result.logoAnnotations;
console.log('Logos:');
logos.forEach(logo => console.log(logo));
}
quickstart().then( value => console.log(value));

検出結果

Logos:
{
locations: [],
properties: [],
mid: '/m/0c_x_g',
locale: '',
description: 'BOGESTRA',
score: 0.6733461022377014,
confidence: 0,
topicality: 0,
boundingPoly: {
vertices: [ [Object], [Object], [Object], [Object] ],
normalizedVertices: []
}
}

文字が‘BOGESTRA’…?え、これスシローだよ…?

気になったので’BOGESTRA’をググってみると、

いや似ているけども・・・!
パッと見で判断されてしまいました。ショック。
一人陣内智則ごっこ不可避。

ちなみに”BOGESTRA”はドイツの路面電車の会社らしいです。
これ、もっと活用すればロゴ等の盗作発見機も作れるのでは?

アルファベットのロゴであれば、このコードでもきちんと認識してくれるのですが(Amazon やgoogleなど海外の企業)、反対に日本語の認識が少し弱いみたいです。

最後に、ラベル認識にも挑戦してみました。

あいみょんのマリーゴールドのジャケットでチャレンジ。

コード

async function quickstart() {
const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient();
const [result] = await client.labelDetection('マリーゴールド.jpg');
const labels = result.labelAnnotations;
console.log('Labels:');
labels.forEach(label => console.log(label.description));
}
quickstart().then( value => console.log(value));

検証結果

Labels:
Flowerpot(植木鉢)
Hand(手)
Plant(植物)
Houseplant(観葉植物)
Ceramic(陶磁器)
Mortar and pestle

(???)

Mortar and pestleとは..?
と思い、早速ググってみると

丸い何かに棒が入ってるみたいなシルエットは似てます。

似てますけども、えらいざっくりとした認識ですね。

上記3種類コードを書きましたが、
textDetection,logoDetection,labelDetection
の部分を赤字で書きました。

  • textDetection:画像の中の文字を認識
  • logoDetection:ロゴの認識
  • labelDetection:その画像に写ってる物体やランドマークの検出

ができるんだそう。

最後に

Cloud Vision API、少しいじってみるだけでも様々な発見があり、すごく楽しかったです。快感。

Cloud Vision API は上記3種類の検出の他にもかなり多様性に富んでいて、色々と遊べるみたいです。興味がある方はぜひ試してみてください。

では、この辺りで。

marimo