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

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

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

Alfrescoでの拡張方法

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

アクションクラスの実装

アクションを利用するには、まずはそのアクションの実体をアクションクラスに実装します。これは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 2022年8月号

2022年7月15日発売
B5判/176ページ
定価1,342円
(本体1,220円+税10%)

  • 第1特集
    設計・開発のイメージが湧く!
    Web APIの作り方
  • 第2特集
    WebエンジニアのためのDNS速習講座
    名前解決のしくみを説明できますか?
  • 特別企画
    「Interop Tokyo 2022」現地レポート
    進化を続けるインターネット技術の最前線をのぞく
  • 特別企画
    MySQL×機械学習 HeatWave MLが変えるデータ活用のかたち
    [後編]HeatWave MLで機械学習のモデル作成・予測・検証を行う
  • 短期連載
    MySQLで学ぶ文字コード
    [2]COLLATIONを正しく理解する
  • 短期連載
    新生「Ansible」徹底解説
    [3]Ansibleの使い方

おすすめ記事

記事・ニュース一覧