悪戦苦闘した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));