業務を改善する情報共有の仕掛け~DevOpsの実現,RPAの導入に向けて~

第9回 Alfrescoと機械学習サービスの連携で画像の検索効率を向上(前編)

この記事を読むのに必要な時間:およそ 3 分

さまざまなクラウドサービスが充実している現在,アプリケーションがそれらを利用して,自らの機能を簡単に拡張できるしくみを持つことは,ビジネスに対する柔軟性を持たせる意味でも重要です。企業で利用するアプリケーションは,こうした他のサービスとのインテグレーションが簡単に実現できるものを選定すべきでしょう。今回は,コンテンツ管理製品であるAlfresco Content Services(以下Alfresco)で画像データを保存する際に,その画像データをクラウドサービスで解析し,その解析結果を画像にタグ付けする例を紹介します。これによって,保存された画像をファイル名や作成者名からだけでなく,セマンティックに検索できるようになります。その結果,必要な情報を発見しやすくなり,生産性も向上します。

Alfrescoでの拡張方法

Alfrescoのリポジトリは,Spring Frameworkがベースとなっており,実装を変更したり,処理を追加することが容易になっています。この設計が,Alfrescoの機能拡張ポイントの充実につながっており,オリジナルのソースに手を入れなくても,作法に従って機能を拡張できるようになっています。Alfrescoの機能拡張ポイントの1つである「アクション」は,コンテンツに対する振る舞いを追加することができます。たとえば,コンテンツが登録されたとか,更新されたとかのタイミングで,何かのアクションを行わせたり,UIの操作から動作を関連付けたりすることができます。今回はこのアクションを使ってAIサービスを呼び出し,画像にタグ付けを行い,画像を検索可能にする例を紹介します注1)⁠

注1)
誌面の関係上,すべてのソースは掲載できませんが,今回利用しましたソースファイルはhttps://github.com/Ricksoft-OSS/imgRecognitionよりダウンロードできますのでご参照ください。

アクションクラスの実装

アクションを利用するには,まずはそのアクションの実体をアクションクラスに実装します。これはorg.alfresco.repo.action.executer.ActionExecuterAbstractBaseを継承したexecuteImpl()内に記載します。リスト1のコード例では,imgRecognitionServiceのsetTagsを呼び出し,タグ付けをしています。

リスト1 ImageRecognitionAction.java

package jp.ricksoft.alfresco.image.recognition;

import java.util.List;

import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.repository.NodeRef;

public class ImageRecognitionAction extends ActionExecuterAbstractBase {
 private ImageRecognitionServices imgRecognitionService;

 // ここに実行したいアクションを実装する。nodeRefは処理対象のファイルを指している。
 @Override
 protected void executeImpl(Action action, NodeRef nodeRef) {
  imgRecognitionService.setTags(nodeRef);
 }

 public ImageRecognitionServices getImgRecognitionService() {
  return imgRecognitionService;
 }

 public void setImgRecognitionService(ImageRecognitionServices imgRecognitionService) {
  this.imgRecognitionService = imgRecognitionService;
 }

 @Override
 protected void addParameterDefinitions(List<ParameterDefinition> paramList) {

 }
}

作成したアクションをAlfresco内で使うために,beanとして登録します。リスト2の例では,IBM WatsonのVisual Recognitionを使って画像を認識しています。

リスト2 service-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


 <bean id="blueMixVisionApiService" 
  class="jp.ricksoft.alfresco.image.recognition.BluemixImageRecognitionServices"
  init-method="initialize">
  <property name="apiKey" value="${bluemix.apikey}" />
  <property name="taggingService" ref="taggingService" />
  <property name="contentService" ref="ContentService" />
  <property name="nodeService" ref="nodeService" />
  <property name="confidentLevel">
    <value>${bluemix.confidentLevel}</value>
  </property>
  <property name="version">
   <value>${bluemix.version}</value>
  </property>
 </bean>

 <bean id="imgRecognitionAction" ュ
class="jp.ricksoft.alfresco.image.recognition.ImageRecognitionAction" parent="action-executer">
  <property name="imgRecognitionService" ref="blueMixVisionApiService"/>
 </bean>


    <!-- アクションのラベルに対するリソース指定 -->
 <bean id="imgRecognitionActionResource" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
  <property name="resourceBundles">
   <list>
    <value>alfresco/module/${project.artifactId}/messages/imgRecognition-action</value>
   </list>
  </property>
 </bean>
</beans>

以上の設定が済んだら,ビルドします。ビルドして作成したampファイルを,Alfrescoに適用したあとAlfrescoを再起動します。

フォルダルールの設定

アクションを利用する簡単な方法の1つは,フォルダルールから利用することです。ここではフォルダルールで,画像がフォルダに入ったタイミングで,作成したアクションが呼び出されるように設定してみます。

まずは,フォルダの右側のメニューから「ルールの管理」を選択します図1)⁠まだフォルダにルールがないので,⁠ルールを作成する」を選択します図2)⁠

図1 フォルダから「ルールの管理」を選択

図1 フォルダから「ルールの管理」を選択

図2 新しいルールの作成

図2 新しいルールの作成

新しいルールとして,図3のように,ルールに対する名前,説明,実行条件を設定します。実行条件には,

  • トリガーとなる条件(アイテムがこのフォルダに作成または入力されたとき,アイテムが更新されたとき,アイテムがこのフォルダから削除または送り出されたとき)
  • プロパティ値の条件(名前,MIMEタイプ,作成者,作成日付などのプロパティ値)

を設定することができます。実行するアクションに,作成したアクションクラス「画像認識タグ付け」が見えます(service-context.xmlの中でラベルを付ける設定をしています)⁠これを設定し,⁠作成」ボタンを押すと,ルールが作成されます。

図3 ルールの設定

図3 ルールの設定

後編では,作成したルールが機能し,画像へのタグ付けができるかを試してみましょう。

米国Atlassianから,2年連続で
「Top new business APAC」を受賞。
Atlassianセールスパートナーとして
アジアパシフィックで1位の証

米国Atlassianから,2年連続で「Top new business APAC」を受賞。Atlassianセールスパートナーとしてアジアパシフィックで1位の証

日本だけでなく,アジア圏でもアトラシアン製品販売のトップエキスパートであるリックソフトのWebサイトでは,各アトラシアン製品の体験版を提供しているほか,アトラシアン製品専用のコミュニティも運営しています。まずはアクセスしてみては!

リックソフトJIRAデモ環境
https://www.ricksoft.jp/demo/
Software Design

本誌最新号をチェック!
Software Design 2019年10月号

2019年9月18日発売
B5判/176ページ
定価(本体1,220円+税)

  • 第1特集
    “速い”Webアプリケーションの作り方[フロントエンド編]
    レンダリングのしくみからHTML/CSS/JavaScriptの書き方まで
  • 第2特集
    わかりやすい絵文字の講座
    絵文字をきっかけに振り返る文字コードの歴史
  • 特別企画
    快適な朝を創りあげる
    Ejectコマンド工作――職人の朝を支える技術の巻

著者プロフィール

青地芳彦(あおちよしひこ)

Alfresco製品を担当

プリセールスから,開発,サポートまで一通りなんでもやりつつ,お客様との会話の中での新たな発見を得ることが仕事のモチベーション。

はしごのだんだん麺と,くるみそばが長年のお気に入り。