使用PHP调用腾讯云OCR实现图片文字识别

                           
2020年06月01日

一、开通文字识别服务

1、登陆腾讯云账号并访问控制台。

2、点击云产品-通用文字识别

3、点击立即开通

二、配置需要的相关环境

1、点击右上角的接口文档

2、滑动到下面点击 API 3.0 Explorer

3、点击右上角的 PHP SDK使用说明

4、 安装 Composer

在网站根目录下执行以下命令。

sudo su
curl -sS https://getcomposer.org/installer | php

执行成功后,网站根目录下会出现 composer.phar 文件。

5、在网站根目录下新建 composer.json 文件,并配置加速镜像源站

{
	"require":
	{
		"tencentcloud/tencentcloud-sdk-php": "3.0.181"
	},
	"repositories": {
		"packagist": {
			"type": "composer",
			"url": "https://mirrors.aliyun.com/composer/"
		}
	}
}

【注意】版本号3.0.181是在  Packagist  中查到的。

6、运行 composer install 下载安装 PHP SDK。

sudo su
composer install
composer update

composer install 执行成功后会出现以下提示

Updating to version 1.10.6 (stable channel).
   Downloading (100%)
Use composer self-update --rollback to return to version 
e3a23c0047b462f1a443cdb56d3c310a9e4c3b37

composer update 执行成功后会出现以下提示,同时在网站根目录下出现 vendor 文件夹。

【注意】如果出现下图错误,则执行以下命令。

/usr/bin/composer self-update
【错误提示】Warning: This development build of composer is over 60 days old.
 It is recommended to update it by running "/usr/bin/composer self-update" 
to get the latest version.

【注意】在执行之前需要允许使用PHP的 putenv 函数,否则会弹警告。

【错误提示】Warning: putenv() has been disabled for security reasons in 
phar:///usr/bin/composer/bin/composer on line 50

三、获取代码

1、打开 API 3.0 Explorer

2、在左侧填入个人密钥

个人密钥在 访问密钥 中获取。

3、填入输入参数

通用印刷体识别 中有相关的填写说明。

示例如下

下图为 1.jpg 文件

4、点击右侧在线调用

5、点击发送请求,当能够正常识别图片中的文字时,证明输入的信息正确。

6、点击代码生成-PHP,将显示的代码全部复制。

7、在网站根目录下创建 GeneralBasicOCRRequest.php ,将代码粘贴进去。

四、修改、调试代码( GeneralBasicOCRRequest.php )

1、由于使用 composer ,需要将以下代码注释掉。

require_once '../../../TCloudAutoLoader.php'; 

2、在第三行添加以下代码

require 'vendor/autoload.php';

3、将第22行代码改为以下代码。

原因不清楚,如果不改调用php的时候会报错。

$params = '{"ImageUrl":"http://123.123.123.123/1.jpg"}';

更改后如下图

3、访问 123.123.123.123/GeneralBasicOCRRequest .php,如果图片转换文字正常则代码正确。

{"TextDetections":[{"DetectedText":"(2)比例积分调节的调节规
律","Confidence":99,"Polygon":[{"X":163,"Y":27},{"X":803,"Y":27},
{"X":803,"Y":77},{"X":163,"Y":77}],"AdvancedInfo":"{\"Parag\":
{\"ParagNo\":1}}"},{"DetectedText":"比例积分调节(PI)综合了比例调节(P)和
积","Confidence":96,"Polygon":[{"X":45,"Y":180},{"X":918,"Y":180},
{"X":918,"Y":225},{"X":45,"Y":225}],"AdvancedInfo":"{\"Parag\":
{\"ParagNo\":2}}"},{"DetectedText":"分调节(I)两者的优点,利用了比例调节
来","Confidence":99,"Polygon":[{"X":42,"Y":259},{"X":918,"Y":259},
{"X":918,"Y":304},{"X":42,"Y":304}],"AdvancedInfo":"{\"Parag\":
{\"ParagNo\":2}}"},{"DetectedText":"快速抵消干扰的影响,同时又利用积分
调","Confidence":99,"Polygon":[{"X":42,"Y":335},{"X":918,"Y":335},
{"X":918,"Y":382},{"X":42,"Y":382}],"AdvancedInfo":"{\"Parag\":
{\"ParagNo\":2}}"},{"DetectedText":"节来消除了调节最终的残差。因此
有:","Confidence":98,"Polygon":[{"X":47,"Y":412},{"X":796,"Y":412},
{"X":796,"Y":456},{"X":47,"Y":456}],"AdvancedInfo":"{\"Parag\":
{\"ParagNo\":2}}"}],"Language":"zh","RequestId":"cc9f27d1-613c-4890-a552-
932c3a777771"}

4、进行正则匹配,实现仅提取图中的文字内容

(1)注释掉以下代码

print_r($resp->toJsonString());

(2)在约第28行附近添加以下代码

$resp1 = $resp->toJsonString();
$isMatched1 = preg_match_all('/(?<="DetectedText":").*?(?=")/', $resp1, $matches1);//正则匹配
foreach($matches1 as $color);//只能输出数组的值value,不输出key
$str = implode("<p></p>",$color);//数组拼接成字符串并输出
echo $str.'<br>';//打印输出

(3)重新访问 123.123.123.123/GeneralBasicOCRRequest .php ,可以看到成功提取出了图中的信息,识别结果准确率较高。

【参考文章】

1、腾讯云PHP SDK之Windows PHP Composer

2、【已解决】Content-Length mismatch, received 15988 bytes out of the 问题

3、人脸识别之人脸检测PHP接口使用

4、【玩转腾讯云】使用API快速构建文字识别小工具之唐诗识别

5、匹配两个字符串之间的内容(正则表达式)

6、正则表达式匹配引号中间的内容怎么写?

7、PHP中echo(),print(),print_r()的区别及打印函数

8、PHP implode():数组转字符串

9、正则表达式在线测试

冷场莹