LoginSignup
6
3

More than 5 years have passed since last update.

tegaki.ai API v2 / PHPによるOCRを検証する(色んな意味で)最低なプログラム

Last updated at Posted at 2018-07-25

悪戦苦闘したOCR検証
すごい人には簡単な接続でしょうが、素人の私が実現するのには気が狂いそうでした。
私レベル向けに、汚いコードだったり、サーバー側に迷惑かけるような手抜きですが
ご参考になれば…

※ 尊敬するコージェントラボさん、こういうツール作ってください

参照ってかほぼコピー
1.「Tegaki」をPHPで実装
これをまんま雛形にしてますが、v1であることと
リンク先はフォーム単位の読み取り(POST /form)に対し、
今回はフィールド単位の読み取り処理(POST /field)です。
よって、テンプレートイメージデータの準備は不要。
認識はフォーム単位では無いためか、二列とか多分🙅ですね

2.ignore_errorsについて
3.jsonあたり一部参考

<?php
// APIキー
$apiKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX";

// 画像ファイル名
$imageNm = $argv[1] ;

//Tegaki.aiのAPI / POST /field
$url = 'https://api.tegaki.ai/hwr/v2/field';
$key = $apiKey;

//画像データをbase64エンコード
$data64 = base64_encode(file_get_contents($imageNm));

// リクエスト用json作成
$json = json_encode(array(
    "version" => "v2",
    "fields" => array(
      array(
//        "name" => "amount",
        "singleLine" => array(
          "imageData" => json_encode(mb_convert_encoding($data64, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN')),
          "characterType" => array(
            "hiragana"=> false,
            "katakana"=> false,
            "kanji"=> false,
            "digits"=> true,            ///数字や特殊文字に限定
            "upperCaseLatin"=> false,
            "lowerCaseLatin"=> false,
            "punctuation"=> false,
          ),
          "configuration" => array(
            "languageModel"=>false,     //数字や特殊文字に限定した場合、言語モデルは選択不可
          ),
          //"masks" => 10, トリミング
        ),
      ),
    ),
));

//ヘッダー情報を設定
$headers = array(
  'Authorization: apikey '.$key,          // APIキーを使った認証
  'Content-Type: application/json',       // json形式のデータをpostするので必要
  'Accept: application/json',             // 利用可能なアプリケーションタイプ
);

//コンテキストのオプションを生成
$options = array(
  'http' => array(
    'method'  => 'POST',                        // POSTで送信
    'header'=>  implode(PHP_EOL, $headers),     // ヘッダー情報を連結
    'content' => $json,                         // テンプレートデータ・画像データ
    'ignore_errors' => true,
  )
);

$context  = stream_context_create( $options );          // コンテキストの生成
$result = file_get_contents( $url, false, $context );   // コンテキストを指定してTegaki.aiのURLへ送信

//成功した時
if ($result != false)
{
  //連想配列にする
  $result = json_decode($result,true);
  //fields項目を追加(画像の位置等がふくまれる)
  $json = json_decode($json, true);
//$result['fields'] = $json;
  //JSON形式に戻す
  $result = json_encode($result);
  //文字コードをUTF8にエンコード
  $result = mb_convert_encoding($result, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
}

//ここで一旦POSTに対するレスポンスを取得
//var_dump(json_decode($result,true));

//--------------------------------------------

//get
// リクエストID
$requestID=json_decode($result,true)["requestId"];

///Tegaki.aiのAPI / GET /request アドレスの最後にリクエストIDを加えます。
$url = 'https://api.tegaki.ai/hwr/v2/request/' . $requestID;

//ヘッダー情報を設定
$headers = array(
  'Authorization: apikey '.$key,                // APIキーを使った認証
  'Content-Type: application/x-www-form-urlencoded'     // URLエンコード(既定値)
);


$options = array(
  'http' => array(
    'method'  => 'GET',                    // GET送信
    'header'=>  implode(PHP_EOL, $headers),          // ヘッダー情報を連結
  )
);

$context  = stream_context_create( $options );        // コンテキストの生成

//サーバーに負荷がかかるのでwait入れてください
do{
        $result = file_get_contents( $url, false, $context );    // コンテキストを指定してTegaki.aiのURLへ送信
        $arr_result=json_decode( $result,true);
        echo $arr_result["state"];
}while($arr_result["state"]=="RUNNING");

var_dump(json_decode( $result,true));
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3