Asterisk 13 FAX受信

Asterisk のFAX受信機能を使ってみます。

参考:http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/Fax_id290275.html

Asterisk はFAXを受信してTIFF画像へ保存します。FAXを受信するためにはspandspライブラリが必要になります。

Spandspライブラリのインストール

spandsp をビルドするためには libtiff ライブラリが必要です。

# yum install libtiff libtiff-devel

続いて、spandsp のビルド

# wget https://www.soft-switch.org/downloads/spandsp/spandsp-0.0.6.tgz
# tar zxvf spandsp-0.0.6.tgz
# cd spandsp-0.0.6
# ./configure
# make
# make install
# cat >> /etc/ld.so.conf.d/usrlocallib.conf   ※ ここで Enter タイプして、次行に続く
/usr/local/lib
ここで CTRL+d をタイプして保存します。
# ldconfig

Asterisk を Spandspライブラリとリビルド

spandsp をインストール後、Asteriskをリビルドしまし。

# cd /usr/local/src/asterisk-13.13.1    ※ ダウンロードした Asterisk のビルドによります
# ./configure
# make menuselect     ※ make menuselect で res_fax_spandsp を選択
Resource Modules / [*] res_fax_spandsp 
[Save & Exit]
# make
# make install
# service asterisk restart

FAX受信処理

extensions.conf で受信したFAXを TIFF 画像で保存します。

[faxin]
exten => _03XXXXXXX,1,NoOp(Faxin-${EXTEN})
 same => n,Set(FAXOPT(ecm)=yes)
 same => n,Set(FAXOPT(maxrate)=14400)
 same => n,Set(FAXOPT(minrate)=2400)
 same => n,Set(FAXOPT(modem)=v17,v27,v29)
 same => n,Set(TIFF=${EXTEN}-${UNIQUEID}.tif)
 same => n,ReceiveFax(/tmp/${TIFF})
 same => n,Hangup()
; Hangup.
exten => h,1,NoOp(Hangup in-fax)
 same => n,NoOp(FAX Status: ${FAXSTATUS})
 same => n,NoOp(FAXOPT(ecm): ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(filename): ${FAXOPT(filename)})
 same => n,NoOp(FAXOPT(headerinfo): ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid): ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate): ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate): ${FAXOPT(minrate)})
 same => n,NoOp(FAXOPT(pages): ${FAXOPT(pages)})
 same => n,NoOp(FAXOPT(rate): ${FAXOPT(rate)})
 same => n,NoOp(FAXOPT(remotestationid): ${FAXOPT(remotestationid)})
 same => n,NoOp(FAXOPT(resolution): ${FAXOPT(resolution)})
 same => n,NoOp(FAXOPT(status): ${FAXOPT(status)})
 same => n,NoOp(FAXOPT(statusstr): ${FAXOPT(statusstr)})
 same => n,NoOp(FAXOPT(error): ${FAXOPT(error)})

CentOS6 にMariaDB をインストール

CentOS 6.9/MySQL5.1 で動いているシステムを CentOS6.9/MariaDB 10.2 での動作検証を行うため、VMware 上でゲストOSとしてCentOS6.9 用意、MySQL はインストールせず、MariaDB をリポジトリでインストールします。

1. MariaDB のリポジトリ生成
こちらのサイトから「Downloads Setting up MariaDB Repositories」から以下の3ステップでリポジトリの内容が生成されます。

1. Choose a Distro
  => CentOS
2. Choose a Release
  -> CentOS 6 (x86_64)
3. Choose a Version
  -> 10.2 [Stable]

# MariaDB 10.2 CentOS repository list - created 2017-09-18 08:06 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

上記内容を /etc/yum.repos.d/MariaDB.repo というファイル名で保存します。

2. MariaDB のインストール
yum コマンドでインストール出来ます。

# yum install MariaDB-client MariaDB-server
# mysql -V
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for Linux (x86_64) using readline 5.1

以上です。

Microsoft ファイル チェックサム整合性検証ユーティリティ

ファイルをダウンロードして使用する際にチェックサムをチェックする習慣をつけるべく Windows 7 でチェックサムの算出できるツールを入手しました。

MSIV ユーティリティのダウンロード(英語):
https://www.microsoft.com/en-us/download/confirmation.aspx?id=11533

MSIV ユーティリティの説明:
https://support.microsoft.com/ja-jp/kb/841290

PHP で複数ページのTIFFファイルをJPGに変換

ひとつのファイルに複数のページを格納したTIFFフォーマットの画像ファイルをそれぞれのページごとにJPGファイルとして保存する方法をPHPで実現します。

$path = "./src/foo.tif";
$dest = "./dst/";
$type = "jpg";

# ファイル名の取得
$extract = pathinfo($path);
$file = $extract['filename'];

# TIFF画像ファイルを読み込み
$images = new Imagick($path);

foreach($images as $i => $image) {
    $n = $i + 1;
    $image->writeImage("{$dest}{$file}_page{$n}.{$type}");
}
$images->clear(); 

例:

ソースファイル: foo.tif
出力ファイル: foo_page1.jpg  foo_page2.jpg foo_page3.jpg

以上です。

Composer – PHP 依存関係管理

Composerは、PHPの依存性管理のためのツールです。プロジェクトが依存するライブラリを管理することができます。ライブラリの管理をプロジェクトごと行うことができるので、システム全体に影響することなく利用できます。

Composer のシステム要件は PHP 5.3.2以上ですが、PHP 5.3.4 以上を推奨しています。古いバージョンではエッジケースがあるかもしれないと注意事項があります。

1. インストール

Composer の公式ページのダウンロードのやり方を紹介します。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

インストールを確認してみます。

# which composer
/usr/local/bin/composer

これで composer がコマンドラインから使えるようになりました。

2. パッケージリスト

composer で利用できるパッケージは何があるのしょうか?
https://packagist.org/explore/ で確認できます。

私は ocr 関連のライブラリが必要なので “ocr” で検索しみるとたくさんできてきました。
今回は、”thiagoalessio/tesseract_ocr” を利用してみます。

3. パッケージのインストール

パッケージのインストールには、”composer.json” というファイルに依存関係を記述してインストールフォルダに配置する必要があります。(https://packagist.org/ 参照)

今回利用する “thiagoalessio/tesseract_ocr” に composer.json の依存関係の記述があります。バージョンを “1.0.0-RC” から “0.2.1” に変更して使用します。
(追記:実は後でわかったことですが、1.0.0-RC のtesseract_ocr をインストールすると PHP 5.3.3 では文法エラーになる構文が使われています。)

# vi /project/lib/composer.json
--- 以下の内容を記述して保存 ---
{
    "require": {
        "thiagoalessio/tesseract_ocr": "0.2.1"
    }
}

そして、次に以下のコマンドを実行します。

# composer install
Your version of PHP, 5.3.3, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing thiagoalessio/tesseract_ocr (0.2.1)
    Downloading: 100%         

Writing lock file
Generating autoload files

「使用しているPHPのバージョンが 5.3.3 なのでCVE-2013-6420の影響があるので安全に証明書の確認ができないためアップグレードすることを強くお勧めします。」と注意されました。さっそくエッジケースに出くわしましたね。
取り急ぎ、影響ないので無視します。
(追記:xdebug を有効にして composer を実行しています。。。という注意は /etc/php.d/xdebug.ini の zend_extension=/usr/lib64/php/modules/xdebug.so の行頭に ; セミコロンを付けてコメントアウトすると xdebug が無効になります。)

インストールフォルダをみると以下のファイルとフォルダが出来ています。

composer.json
composer.lock
vendor
 - autoload.php

これがあればインストールは成功です。

5. PHPからパッケージの利用

インストールした “tesseract_ocr” は TesseractOCR のラッパーライブラリなので TesseractOCR をインストールします。

# yum install tesseract

https://packagist.org/packages/thiagoalessio/tesseract_ocr を参考にして画像をOCRしてみます。
画像はこちらを使用させていただきます。

# vi test.php
--- 以下の内容を記述して保存 ---
<?php
include "lib/vendor/autoload.php";

$tocr = new TesseractOCR("./text.jpeg");
$tocr-<setLanguage("eng");
$text = $tocr->recognize();

cho "Output ==>".PHP_EOL;
echo $text;
?>

さっそく実行してみます。

# php test.php
Tesseract Open Source OCR Engine v3.04.00 with Leptonica
Output ==>
The quick brown fox
jumps over the lazy
dog,

しっかり認識できています!

以上です。