Alfresco Image Recognition with AI Services を使って Alfresco に保存した画像に自動でタグ付けを行う方法

## AWS もしくは IBM Cloud の準備
Watson の画像認識サービスを使うことにします。IBM Cloud のアカウントが必要になります。

ライトアカウントというクレジットカード登録なしのアカウントが登録できます。。

Visual Recognition-dxのリソースを追加して使えるようにします。

<img width="762" alt="SnapCrab_NoName_2019-3-19_19-54-46_No-00.png" src="https://qiita-image-store.s3.amazonaws.com/0/16728/38e5e8b0-a49a-880f-fba9-738fa32fd314.png">


APIキーとエンドポイントを確認します。

<img width="697" alt="SnapCrab_NoName_2019-3-19_19-55-3_No-00.png" src="https://qiita-image-store.s3.amazonaws.com/0/16728/8d02ea7d-2b90-ce46-4291-06bd402d4e2f.png">



## Alfresco Image Recognition with AI Services のビルド

Mavenが入ってなかったので、 PackageManagement で 3.6.0 を入れました（これは本筋と外れるので省略。Windowsユーザはパッケージマネージャを使うと良いです）

「Alfresco Image Recognition with AI Services 」のソースコードを[GitHubリポジトリ](https://github.com/Ricksoft-OSS/imgRecognition)からクローンします。

./run.sh をたたく（git-bashで叩いたのでbatではなくshのほう）ライブラリインストールにめっちゃ時間がかかりました。ビルドできたら

`imgRecognition-platform-jar/target/imgRecognition-platform-jar-1.2-20190116.amp`

を取り出します。

## AMPのインストール

AMPのインストールについては[こちら](http://docs.alfresco.com/6.1/tasks/amp-install.html)を参考にします。古いドキュメントだと少し違いますね。

このインストール手順どおりの作業を docker 上で行うように、既存の Alfresco の docker-comopse.yaml を改造します。

いちおう単独で動かしておいて、どこのパスに amp を入れればよいか見ておきます。

```
$ docker ps
CONTAINER ID        IMAGE                                                     COMMAND                  CREATED             STATUS              PORTS
                                                                                 NAMES
b808bafeef79        alfresco/alfresco-activemq:5.15.6                         "/bin/sh -c './init.…"   4 hours ago         Up 3 hours          0.0.0.0:5672->5672/
tcp, 0.0.0.0:8161->8161/tcp, 0.0.0.0:61613->61613/tcp, 0.0.0.0:61616->61616/tcp   docker-compose_activemq_1
069928fbd8f6        postgres:10.1                                             "docker-entrypoint.s…"   4 hours ago         Up 3 hours          0.0.0.0:5432->5432/
tcp                                                                               docker-compose_postgres_1
657c7af798ce        alfresco/alfresco-share:6.1.0-RC3                         "/usr/local/tomcat/s…"   4 hours ago         Up 3 hours          8000/tcp, 0.0.0.0:8
080->8080/tcp                                                                     docker-compose_share_1
bd116bf43f75        alfresco/alfresco-search-services:1.3.0-RC2               "/bin/sh -c '$DIST_D…"   4 hours ago         Up 3 hours          0.0.0.0:8083->8983/
tcp                                                                               docker-compose_solr6_1
6e84dd427d73        alfresco/alfresco-content-repository-community:6.1.2-ga   "catalina.sh run -se…"   4 hours ago         Up 3 hours          0.0.0.0:8082->8080/
tcp                                                                               docker-compose_alfresco_1
```

```
$ docker exec -it 657c7af798ce //bin/bash
```

```
[root@6e84dd427d73 tomcat]# ls
alf_data      alfresco-mmt  bin           conf             include  LICENSE  native-jni-lib  README.md      RUNNING.txt  temp     work
alfresco.log  amps          BUILDING.txt  CONTRIBUTING.md  lib      logs     NOTICE          RELEASE-NOTES  shared       webapps
```

ということで、 `/usr/local/tomcat/alfresco-mmt/alfresco-mmt.jar` があることがわかったので Dockerfile 内でこのjarを使ってインストールすることを試みます。

### AMP を入れた状態の Alfresco の Dockerfile を作成

Dockerfile はこんな感じになりました。

```
FROM alfresco/alfresco-content-repository-community:6.1.2-ga

RUN echo "aws.accessKey=hoge" >> /usr/local/tomcat/shared/classes/alfresco-global.properties && \
    echo "aws.secretKey=fuga" >> /usr/local/tomcat/shared/classes/alfresco-global.properties && \
    echo "aws.maxNumberOfLabels=5" >> /usr/local/tomcat/shared/classes/alfresco-global.properties && \
    echo "aws.confidentLevel=90.0F" >> /usr/local/tomcat/shared/classes/alfresco-global.properties && \
    echo "bluemix.version=2018-03-19" >> /usr/local/tomcat/shared/classes/alfresco-global.properties && \
    echo "bluemix.apikey=cT0mZAGP4DHiT7ez9M2tDw3ASE2egl_5IdZV1222-h3W" >> /usr/local/tomcat/shared/classes/alfresco-global.properties && \
    echo "bluemix.confidentLevel=0.55" >> /usr/local/tomcat/shared/classes/alfresco-global.properties

COPY imgRecognition-platform-jar-1.2-20190116.amp /usr/local/tomcat/amps/

RUN java -jar /usr/local/tomcat/alfresco-mmt/alfresco-mmt.jar install \
              /usr/local/tomcat/amps/imgRecognition-platform-jar-1.2-20190116.amp \
              /usr/local/tomcat/webapps/alfresco -nobackup -force
```

これを動かす……と、なぜかうまくいきませんでした。Share は動くのですが、ログインするとすごく待たされた後でタイムアウトになります。リポジトリにつなごうとしてタイムアウトで落ちてしまっているようです。リポジトリのコンテナ内での呼び方は alfresco なので、これで呼ぶように設定されているハズなんですが……

……調べてみたところ、これはどうも、Docker のメモリが少ないせいだったようです。ホストの Docker マシンそのものの利用メモリを増やすことで問題なく起動して、連携できるようになりました。

### Alfresco で画像タグ付けを行うルールを作成してテスト

フォルダを作成し、処理したことが分かるようにfromというフォルダにしました。ルールを追加します。

条件に「MIMEタイプ」を「JPEG Image」にします。
実行するアクションで「画像認識タグ付け」というルールができてると思いますのでこれを選択、さらにアクションの追加（＋ボタン）で「移動」を選び、移動先を「to」というフォルダに指定しました。

こんな感じになりました。

<img width="678" alt="SnapCrab_NoName_2019-4-4_12-49-12_No-00.png" src="https://qiita-image-store.s3.amazonaws.com/0/16728/4b712a3a-6f25-ca5f-8bc4-db0928bc4de9.png">


さっそく from フォルダに画像ファイルを入れてみます。アドベンチャーワールドにいるジャイアントパンダ 結浜ちゃんの画像（http://www.aws-s.com/attractions/detail?id=att077 ）を入れてみました。

結果はこんな感じ。

<img width="535" alt="SnapCrab_NoName_2019-4-4_12-46-14_No-00.png" src="https://qiita-image-store.s3.amazonaws.com/0/16728/385ebf60-9a3c-cd09-4a6e-5413682dd2a0.png">

見事、画像にタグ付けできました！