PHPでAWS AIを使う

PHPでAWSのAIサービスを呼び出すには、AWS SDK for PHPを使うのが良い。

これから作業する過程でいくつかのファイルができるので、適当な作業用ディレクトリを作って、その配下で作業すると良い。

mkdir awsai-php
cd awsai-php

SDKのインストール

SDKのインストールにはComposerが必要なので、公式サイトの説明に従い先にインストールしておく。composer.pharというファイルが1つ、作業ディレクトリの直下に作成される。このcomposer.pharがComposerのすべて。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

次に、SDKのインストールを行う。SDKは作業ディレクトリ直下のvendorというディレクトリに配置される。

php composer.phar require aws/aws-sdk-php

認証

AWSコンソールで使用したいサービスの権限を含むIAMユーザーを作成し、認証情報を取得する。
認証の方法はいろいろあるが、ひとまずPHPファイル内に認証情報を書いてしまう方法が手っ取り早い。

<?php
require 'vendor/autoload.php';
use Aws\Rekognition\RekognitionClient;

$credentials = new Aws\Credentials\Credentials('<アクセスキーID>', '<シークレットキー>');

Rekognitionを使用する

HTMLフォームから画像をアップロードし、Rekognitionで分類を行うには、下記のようにする。(先ほどの認証情報のPHPコードの下に続けて書く。)

$options = [
    'region'      => 'ap-northeast-1',
    'version'     => 'latest',
    'credentials' => $credentials,
];

if (!empty($_FILES)) {
    try {
        // Rekognitionインスタンスを得る
        $rekognition = new RekognitionClient($options);
        // detectLabelを行う
        $result = $rekognition->detectLabels([
            'Image' => [
                'Bytes' => file_get_contents($_FILES['image']['tmp_name']),
            ],
        ]);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    // 結果の出力
    var_dump($result["Labels"]);
}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AWS Rekognition Sample</title>
</head>
<body>
    <h1>AWS Rekognition Sample</h1>
    <form method="post" enctype="multipart/form-data">
        <div>
            <p>画像ファイル</p>
            <input type="file" name="image" id="">
        </div>
        <div style="margin-top: 2em;">
            <input type="submit" value="送信">
        </div>
    </form>
</body>
</html>