ブログ プログラミング

【簡単】LINE botで画像認識AIに挑戦!IBM Watson Visual Recognition編

 

悩んでいる人
LINEでAIを利用したサービスを作りたい。IBM Watsonとの連携方法を教えてほしい!

 

こんな疑問にお答えします。

 

LINE BOOT AWARDS 2018で賞を頂いてから、LINE BOT サービスを運用しています。

LINE botは、文字だけではなく画像も扱えます。

また、簡単にIBM Watsonのサービスと連携することができます。

 

筆者の紹介

この記事を書いている僕は、SE歴8年、ITコンサルタント歴3年。
2018年にフリーランスに転身。
現在は、Web・アプリの開発やITコンサルタントとして月250万円以上を稼ぎながら暮らしています。

 

この記事では、LINE botとWatson Visual Recognitionを連携させて、画像から物体検出するサービスを紹介します。

 


LINE bot概要

以下の記事で作成したLINE botをベースに、物体検出部分の処理を追加していきます。

【超簡単】JavaでLINE Messaging APIを動かす【プログラム公開中】

続きを見る

 

赤枠部分が今回の実装範囲です。

 

Watson Visual Recognition

IBMが提供している画像認識AI「Watson Visual Recognition」を使って物体検出を行います。

Watson SDKで「Visual Recognition」へ接続するためには、APIキーが必要です。

アクセスキー 取得の流れ

  1. Visual Recognitionリソース作成
  2. APIキーを取得

 

Visual Recognitionリソース作成

IBM Cloudにログインします。

 

リソース・リスト画面:リソース作成ボタンをクリック

 

「Visual Recognition」選択すると、リソース作成画面が表示されます。

リソース作成画面:料金プラン「ライト」を選び、作成ボタンをクリック

 

APIキーを取得

作成完了後、管理画面にAPIキーとURLが表示されます。

APIキーとURLをコピーしてください。この後、Herokuの環境変数に登録します。

 

更新箇所

ソースコードとHerokuの更新箇所を紹介します。

 

ソースコード

Watson SDK追加

dependencies {
	compile "org.springframework.boot:spring-boot-starter-web"
	compile "com.linecorp.bot:line-bot-spring-boot:2.1.0"
	compile "com.ibm.watson:ibm-watson:8.5.0"
	compileOnly "org.projectlombok:lombok"
	testCompile "org.springframework.boot:spring-boot-starter-test"
}

 

Visual Recognition APIキー設定

ibm:
  apiKey: ${IBM_API_KEY}
  url: ${IBM_URL}

 

Watson Visual Recognition接続サービスクラス追加

src/main/java/com/sample/bot/line/service/RecognitionService.java

 

Watson Visual Recognition接続サービスクラス呼出元追加

import com.sample.bot.line.service.RecognitionService;

-----
省略
-----

	@Autowired
	private RecognitionService recognitionService;

-----
省略
-----

	/**
	 * 画像
	 * @param event
	 * @return
	 * @throws Exception
	 */
	@EventMapping
	public void handleImageMessageEvent(MessageEvent<ImageMessageContent> event) throws Exception {

		String messageId = event.getMessage().getId();
		InputStream is = lineMessagingClient.getMessageContent(messageId).get().getStream();
		String result = recognitionService.detect(is);

		lineMessagingClient.replyMessage(
				new ReplyMessage(
						event.getReplyToken(),
						Arrays.asList(new TextMessage(result))
				)
		);
	}

 

ソースはGitHubあります。

 

Heroku

Herokuの環境変数に、Visual RecognitionのAPIキーとURLを設定します。

[Settings] - [Reveal Config Vars]

IBM_API_KEY:APIキー
IBM_URL:URL

 

deploy設定

注意ポイント

新規リポジトリを使う場合は、deployのリポジトリも変更してください。

 

LINEで動作確認

スマホから、写真を送信してみましょう。

物体検出の結果が表示されます。

(物体:適合率)

 

まとめ

AWS Rekognitionは、英語でしたが、Watson Visual Recognitionは日本語に対応しています。
LINE Botで物体検出結果を表示するなら、日本語の方が使いやすいかもしれません。

IBM Watsonには、機械学習や深層学習を使った様々なサービスがあります。

よかったら、他の機能も試してみてください。

 

リファレンスと、以下の書籍が参考になると思います。

IBM Cloud公式 API & SDK リファレンス

 

AWS Rekognition編はこちらの記事をご覧ください。

【簡単】LINE botで画像認識AIに挑戦!AWS Rekognition編

続きを見る

 



-ブログ, プログラミング

© 2021 もくもくブログ Powered by AFFINGER5