thinkphp5对接腾讯云文字识别ocr试卷切题
thinkphp5对接腾讯云文字识别试卷切题
提示:切题使用的是api:QuestionSplitOCR
以下是基于 ThinkPHP5.14 框架调用阿里云 QuestionSplitOCR 接口的详细实现步骤和代码示例。
文章目录
- thinkphp5对接腾讯云文字识别试卷切题
- @[TOC](文章目录)
- 前言
- 1、前置准备
- 2、 配置文件
- 3、控制器直接引用使用
- 4、返回参数处理
- 5、特定场景识别相关接口
- RecognizeEduPaperStruct
- 7、关于费用
文章目录
- thinkphp5对接腾讯云文字识别试卷切题
- @[TOC](文章目录)
- 前言
- 1、前置准备
- 2、 配置文件
- 3、控制器直接引用使用
- 4、返回参数处理
- 5、特定场景识别相关接口
- RecognizeEduPaperStruct
- 7、关于费用
前言
1、前置准备
在开始开发之前,请确保完成以下准备工作:
1、开通服务:在腾讯云云控制台文字识别-特定场景识别相关接口-试卷切题,并购买相关资源包。 这里也可以按量付费,用多少月底出账单即可,开通后可免费使用1000次
2、获取凭证:获取腾讯云 SecretId 和 SecretKey,用于接口调用的身份验证。
3、安装依赖:通过 Composer 安装腾讯云 SDK。运行以下命令安装:
composer require tencentcloud/ocr
2、 配置文件
在 ThinkPHP5 的配置文件中(如 config/tencent.php),添加腾讯云的相关配置信息:
return [
'SecretId' => '*********************',
'SecretKey' => '**********************'
];
3、控制器直接引用使用
<?php
namespace app\index\controller;
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Ocr\V20181119\OcrClient;
use TencentCloud\Ocr\V20181119\Models\QuestionSplitOCRRequest;
class Tencent
{
public function index()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V5.1<br/><span style="font-size:30px">12载初心不改(2006-2018) - 你值得信赖的PHP框架</span></p></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="eab4b9f840753f8e7"></think>';
}
public function main($imgurl)
{
try {
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
$SecretId = config('tencent.SecretId');
$SecretKey = config('tencent.SecretKey');
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
$cred = new Credential($SecretId, $SecretKey);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
$httpProfile = new HttpProfile();
$httpProfile->setEndpoint("ocr.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
$clientProfile = new ClientProfile();
$clientProfile->setHttpProfile($httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
$client = new OcrClient($cred, "", $clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
$req = new QuestionSplitOCRRequest();
$params = array(
'ImageUrl'=>$imgurl,
);
$req->fromJsonString(json_encode($params));
// 返回的resp是一个QuestionSplitOCRResponse的实例,与请求对象对应
$resp = $client->QuestionSplitOCR($req);
// 输出json格式的字符串回包
print_r($resp->toJsonString());
}
catch(TencentCloudSDKException $e) {
echo $e;
}
}
//调用
public function ocr(){
$imgurl = input('imgurl');
//图片url 路径
$imgurl = "http://baidu.com/document/20250228/team_61/33413.png";
$resurt = self::main($imgurl);
if(isset($resurt['code'])){//请求失败才返回code
return json(['code'=>$resurt['code'],'msg'=>$resurt['Message']]);
}else{
$resurt['code'] =200;
return json($resurt);
}
}
}
提示:请求失败才返回 code 和Message 内容
4、返回参数处理
{
"Response": {
"QuestionInfo": [
{
"Angle": -0.16999949956523785,
"Height": 200,
"ImageBase64": "TPI3z9of/AKMN8F/+Fhd//GaKKAP/2Q==",
"OrgHeight": 196,
"OrgWidth": 1626,
"ResultList": [
{
"Answer": [],
"Coord": [
{
"LeftBottom": {
"X": 14,
"Y": 845
},
"LeftTop": {
"X": 14,
"Y": 650
},
"RightBottom": {
"X": 1603,
"Y": 845
},
"RightTop": {
"X": 1603,
"Y": 650
}
}
],
"Figure": [],
"Option": [
{
"Coord": {
"LeftBottom": {
"X": 65,
"Y": 689
},
"LeftTop": {
"X": 65,
"Y": 650
},
"RightBottom": {
"X": 234,
"Y": 689
},
"RightTop": {
"X": 234,
"Y": 650
}
},
"GroupType": "multiple-choice",
"Index": 1,
"ResultList": null,
"Text": "A.b>c>a"
},
{
"Coord": {
"LeftBottom": {
"X": 364,
"Y": 689
},
"LeftTop": {
"X": 364,
"Y": 650
},
"RightBottom": {
"X": 552,
"Y": 689
},
"RightTop": {
"X": 552,
"Y": 650
}
},
"GroupType": "multiple-choice",
"Index": 2,
"ResultList": null,
"Text": "B.a>b>c"
},
{
"Coord": {
"LeftBottom": {
"X": 700,
"Y": 689
},
"LeftTop": {
"X": 700,
"Y": 650
},
"RightBottom": {
"X": 871,
"Y": 689
},
"RightTop": {
"X": 871,
"Y": 650
}
},
"GroupType": "multiple-choice",
"Index": 3,
"ResultList": null,
"Text": "C.c>a>b"
},
{
"Coord": {
"LeftBottom": {
"X": 1037,
"Y": 689
},
"LeftTop": {
"X": 1037,
"Y": 650
},
"RightBottom": {
"X": 1214,
"Y": 689
},
"RightTop": {
"X": 1214,
"Y": 650
}
},
"GroupType": "multiple-choice",
"Index": 4,
"ResultList": null,
"Text": "D.c>b>a"
}
],
"Question": [
{
"Coord": {
"LeftBottom": {
"X": 14,
"Y": 845
},
"LeftTop": {
"X": 14,
"Y": 759
},
"RightBottom": {
"X": 1603,
"Y": 845
},
"RightTop": {
"X": 1603,
"Y": 759
}
},
"GroupType": "multiple-choice",
"Index": 0,
"ResultList": null,
"Text": "5.若M(-6,a),N(2,b),P(6,c)三点都在反比例函数$y=\\frac{m^{2}+1}{x}$图象上,则a、b、c的大小关系为()"
}
],
"Table": []
}
],
"Width": 1626
}
],
"RequestId": "f1f81d7f-af58-4204-9275-30e7d945b5a7"
}
}
5、特定场景识别相关接口
数学公式识别
车牌识别
车辆VIN码识别
印章识别
试题识别
试卷切题
公式识别
RecognizeEduPaperStruct
7、关于费用
开通后1000次免费调用,免费完了收费每次0.2元,
套餐包:1000次 200左右,10000次1200 元
具体已腾讯云官方为准
腾讯的比阿里云ocr 精准度更高,嘻嘻吐槽一下阿里云,期待国外的mathpix 有试卷切题功能。