Friday, December 16, 2011

AlfrescoとTesseract OCR

こんにちは!aegifの大谷です。
今回は、AlfrescoのOCR連携についてお話ししたいと思います。

私自身、営業に同行してお客様から直接お話しを伺う機会が少なくないのですが、その中でOCR連携というトピックが話題にのぼり、実際にデモを行うこともあります。弊社ではOCR連携のデモ環境を構築する際に、googleが提供するオープンソースのOCRエンジンであるTesseract OCRをよく利用しています。
以下ではAlfrescoとTesseract OCRを連携させる方法の一例を紹介しますので、参考にしていただければと思います。

1. Alfrescoをインストールし、基本的な設定を行います(こちらのスライドが参考になると思います)

2. Tesseract OCRをインストールします(こちらのサイトからダウンロードできます。インストール時にjapanese language dataにチェックを入れてください)

3. Tesseract OCRをキックするためのスクリプトを作成します(以下はWindowsでtiff形式のファイルをOCR処理する例。ファイル名はocr.batとしておきます。tmpディレクトリの作成も忘れずに!)

@echo off
if "%1" == "" goto end
if "%2" == "" goto end
set tmpdir=c:\alfresco\tmp\
set ocrfilename=%tmpdir%%~n1.tif
copy /B /Y %1 "%ocrfilename%"
tesseract "%ocrfilename%" %~dpn2 -l jpn
del "%ocrfilename%"
:end

4. <tomcat_dir>/shared/classes/alfresco/extension/ に以下の内容のファイル ocrtiff-transform-context.xml を作成します

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
  <bean id="transformer.worker.ocr.tiff" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
    <property name="mimetypeService">
      <ref bean="mimetypeService" />
    </property>
    <property name="checkCommand">
      <bean class="org.alfresco.util.exec.RuntimeExec">
        <property name="commandsAndArguments">
          <map>
            <entry key=".*">
              <list>
                <value>C:/alfresco/ocr.bat</value>
              </list>
            </entry>
          </map>
        </property>
        <property name="errorCodes">
          <value>1</value>
        </property>
      </bean>
    </property>
    <property name="transformCommand">
      <bean class="org.alfresco.util.exec.RuntimeExec">
        <property name="commandsAndArguments">
          <map>
            <entry key=".*">
              <list>
                <value>C:/alfresco/ocr.bat</value>
                <value>${source}</value>
                <value>${target}</value>
              </list>
            </entry>
          </map>
        </property>
        <property name="errorCodes">
          <value>1</value>
        </property>
      </bean>
    </property>
    <property name="explicitTransformations">
      <list>
        <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
          <property name="sourceMimetype"><value>image/tiff</value></property>
          <property name="targetMimetype"><value>text/plain</value></property>
        </bean>
      </list>
    </property>
  </bean>

  <bean id="transformer.ocr.tiff" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
    <property name="worker">
      <ref bean="transformer.worker.ocr.tiff" />
    </property>
  </bean>
</beans>

5. Alfrescoを起動します

6.  http://<hostname>:<port>/alfresco/service/mimetypes にアクセスし、image/tiffからtext/plainへの変換が利用可能になっていることを確認します

7. 適当なフォルダを作成し、tiff画像からテキスト形式へのコンテンツ変換のルールを設定します

以上で設定は終わりです。正しく設定されていると、ルールを設定したフォルダにtiffファイルをアップロードしたタイミングでOCR処理が自動実行され、同名のテキストファイルが作成されます。


今回は、Alfrescoが用意するコンテンツ変換フレームワークと外部コマンド実行フレームワークを利用し、xmlベースの設定のみでOCRと連携するサンプルを紹介しました。ここでは詳しく説明しませんが、簡単なスクリプトを書くことで、OCRで抽出したテキストデータを元のtiffコンテンツの属性として登録するなど、さらに実用的な連携を行うことも可能です。

このように、Alfrescoはカスタマイズを容易にするために(もちろんAlfresco自体の開発を容易にするためでもありますが)様々な仕組みを用意しています。それらについては今後折を見て、具体的な例を交えつつ触れていきたいと思いますので、引き続きよろしくお願いいたします。

(2012/07/25追記:新しい記事「AlfrescoとTesseract OCR その2 (メタデータ抽出機能を使ってみた編) 」 を公開しました。こちらでは、OCRで抽出したテキストデータを元のtiffコンテンツの「説明」属性に格納するサンプルを紹介していますので、こちらも見てみてください。)

No comments: