ブログ プログラミング

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

 

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

 

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

 

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

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

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

 

筆者の紹介

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

 

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

 


LINE bot概要

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

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

続きを見る

 

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

 

AWS Rekognition

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

AWS SDKで「Rekognition」へ接続するためには、アクセスキーが必要です。

アクセスキー 取得の流れ

  1. IAMポリシーを作成
  2. IAMポリシーをアタッチしたユーザーを作成
  3. ユーザーのアクセスキーを取得

 

IAMポリシーを作成

RekognitionのDetectLabelsアクションに読み込み権限を持ったポリシーを作ります。

 

ポリシー名は「Rekognition-DetectLabels」にしました。

 

IAMポリシーをアタッチしたユーザーを作成

新規ユーザーを作成します。

 

ポリシー「Rekognition-DetectLabels」をアタッチします。

 

ユーザー作成完了です。

 

後ほど「アクセスキー ID」と「シークレットアクセスキー」をHerokuの環境変数に設定します。csvをダウンロードしておいてください。

 

更新箇所

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

 

ソースコード

AWS SDK追加

dependencies {
	compile "org.springframework.boot:spring-boot-starter-web"
	compile "com.linecorp.bot:line-bot-spring-boot:2.1.0"
	compile "com.amazonaws:aws-java-sdk:1.11.414"
	compileOnly "org.projectlombok:lombok"
	testCompile "org.springframework.boot:spring-boot-starter-test"
}

 

AWSアクセスキー設定

aws:
  accessKey: ${AWS_ACCESS_KEY}
  secretKey: ${AWS_SECRET_KEY}

 

AWS Rekognition接続サービスクラス追加

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

 

AWS Rekognition接続サービスクラス呼出元追加

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

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

	@Autowired
	private RekognitionService rekognitionService;

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

	/**
	 * 画像
	 * @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 = rekognitionService.detect(is);

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

 

ソースはGitHubにあります。

 

Heroku

Herokuの環境変数に、AWSのアクセスキーを設定します。

[Settings] - [Reveal Config Vars」

AWS_ACCESS_KEY:アクセスキー ID
AWS_SECRET_KEY:シークレットアクセスキー

 

deploy設定

注意ポイント

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

 

LINEで動作確認

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

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

(物体:適合率)

 

まとめ

AWSには、様々なサービスが用意されています。

実際に手を動かして、最新の技術をキャッチアップすることは非常に重要です。

各サービスに触れて、アイデアを膨らませてみてください。

 

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

AWS SDK for Java 2.x リファレンス

 

IBM Watson Visual Recognition編はこちらの記事をご覧ください。

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

続きを見る



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

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