LoginSignup
6
9

More than 5 years have passed since last update.

PHPでOCR(Google Cloud Vision APIを使って)

Last updated at Posted at 2018-12-02

画像から文字列を読み取る、OCRの処理をアプリに実装させたいというニーズは、よくあるでしょうが、割と手っ取り早いのはGoogleのCloud Vision APIを使うやり方かな、と思います。
PHPでの例を紹介します。

Cloud Vision APIとは? 使うには? 注意事項は?

こちらに大変よくまとめてくださっているので、ご覧ください。
Cloud Vision APIをPHPから使ってみた。その① | TECH Projin
https://tech.pjin.jp/blog/2017/07/31/cloud-vision-api-from-php-1/

PHPでcURLを使えるようにする

環境によって様々のようなので、ここでは詳細は割愛。
Ubuntu 16.04の場合、
$ sudo apt-get update
$ sudo apt-get install php-curl
のみでOKでした。

PHPでの実装

こちらから大部分を借用させていただきました。

コピペで動くGoogle Cloud Vision API!!サンプルコード有! | ただの備忘録ブログですよ
http://bibouroku.blog/2018/01/04/api_google_cloud_vision_api/

ocr.php
<?PHP

// APIキー
$api_key = "あなたのAPIキーを入力ください。" ;

//画像のPATHを入力してください(URLでいいですよ)
$image_path = "画像のURL";

// リクエスト用のJSONを作成
$json = json_encode( array(
        "requests" => array(
                array(
                        "image" => array(
                                "content" => base64_encode( file_get_contents( $image_path ) ) ,
                        ) ,
                        "features" => array(
                                array(
                                        "type" => "TEXT_DETECTION" ,
                                        "maxResults" => 10 ,
                                ) ,
                        ) ,
                ) ,
        ) ,
) ) ;

// リクエストを実行
$curl = curl_init() ;
curl_setopt( $curl, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key=" . $api_key ) ;
curl_setopt( $curl, CURLOPT_HEADER, true ) ;
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, "POST" ) ;
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( "Content-Type: application/json" ) ) ;
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ) ;
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ) ;
if( isset($referer) && !empty($referer) ) curl_setopt( $curl, CURLOPT_REFERER, $referer ) ;
curl_setopt( $curl, CURLOPT_TIMEOUT, 15 ) ;
curl_setopt( $curl, CURLOPT_POSTFIELDS, $json ) ;
$res1 = curl_exec( $curl ) ;
$res2 = curl_getinfo( $curl ) ;
curl_close( $curl ) ;

// 取得したデータ
$json = substr( $res1, $res2["header_size"] ) ;
$array_json=json_decode($json, true);

$text=$array_json["responses"]["0"]["textAnnotations"]["0"]["description"];

echo $text;
?>

実行

php -f ocr.php
さすがはGoogle、という精度。

注意点

生のAPIキーを記述したソースコードを、リモートリポジトリに直接pushしないように!
特にGitHubの公開リポジトリに上げてしまったりしようものなら、途端にAPIキーを不正利用される危険があります。

例えばPythonの場合、dotenv等を使って、APIキーを環境変数に持たせて、実際にAPIを叩くコードでは、環境変数からAPIキーの値を取得するようにするやり方があります。
PHPは不勉強にして事情を存じ上げないのですが、たぶん同じようなことができると思います。

他のやり方

Googleに限らず、APIを利用する場合は課金が発生したり、仕様が変わったり、サービスが終了したりする可能性があります。
(Clould Vision APIの利用料金は、2018年12月現在、月あたり1,000ユニットまでであれば無料のようですが)
他のやり方としては、Tesseract OCRというオープンソースのOCRライブラリがあるそうですが、未確認です。

6
9
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
9