使用汉王云API实现手写识别H5(参考:2018政府工作报告关键字)

背景

      有个项目需求用到手写识别功能,即H5识别用户手写的文字内容。参考案例为“2018政府工作报告关键字”,扫描下面二维码体验,

使用汉王云API实现手写识别H5(参考:2018政府工作报告关键字)_第1张图片

 

分析

      重点为找到合适的文字识别接口,通过查询,市面上已有腾讯AI、百度AI、科大讯飞的文字识别接口,通过测试结果均不理想,这些接口的实现原理都是识别图片上的文字内容转换为文本。

      后经分析参考案例,其使用的为汉王云API,实现原理是识别手写轨迹,通过测试其准确率是极高的。

 

实现方法

      第一步,根 API文档 接口使用说明,在前端记录手写轨迹串"x1,y1,x2,y2,x3,y3,x4,y4......-1,0",轨迹以:"-1,0"结尾。

      第二步,调用简体中文接口地址:http(s)://api.hanvon.com/rt/ws/v1/hand/single?key=xxx&code=83b798e7-cd10-4ce3-bd56-7b9e66ace93d,传參。

请求参数示例如下,

{
    "uid": "118.12.0.12",
    "type": "1",
    "data": "76.55,79.55,51.7,119.35,43.75,129.3,-1,0"
}

具体的接口代码在文档PHP示例里写的很清楚,这里不再赘述。

      第三步,将接口返回的base64加密的字符串值,通过 base64解码 -> 10进制字符数组 -> 16进制字符数组 -> unicode解码,转成汉字字符数组,具体实现代码如下,

// echo $output;
// base64解码
$strJson = base64_decode($output);
$jsonArr = json_decode($strJson, true);
if($jsonArr["code"] == 0){ // code为0识别成功
	$wordArr = explode(",", $jsonArr["result"]); // 转成10进制字符数组
	$wordArr = array_filter($wordArr); // 除去数组中的空字符元素
	if(count($wordArr) > 0){
		$result['wordArr'] = decimalDecode($wordArr); // 将10进制字符数组解码成汉字数组	
	}else{ // 识别文字为空
	}
}else{ // 识别失败
}

// 10进制字符数组解码成汉字数组
function decimalDecode($wordArrDec){	
	$wordArrHex = array();
    for($i = 0; $i < count($wordArrDec); $i++){
    	array_push($wordArrHex, unicodeDecode("\u".dechex($wordArrDec[$i]))); // 先将10进制字符转成16进制字符
    }
    return $wordArrHex;
}

// 16进制字符unicode解码成汉字字符
function unicodeDecode($unicode_str){
    $json = '{"str":"'.$unicode_str.'"}';
    $arr = json_decode($json,true);
    if(empty($arr)) return '';
    return $arr['str'];
}

 

Demo二维码

使用汉王云API实现手写识别H5(参考:2018政府工作报告关键字)_第2张图片

 

BTW

      使用接口需要在汉王云购买服务或者申请免费额度200次/天。

 

参考链接

      汉王云-云手写单字API详情:http://developer.hanvon.com/api/toAPIinfo.do?id=1

      优图OCR-腾讯AI开放平台:https://ai.qq.com/product/ocr.shtml#handwrite

      百度AI开放平台-文字识别API文档:http://ai.baidu.com/docs#/OCR-API/top

      手写文字识别 · 科大讯飞REST_API开发指南:https://doc.xfyun.cn/rest_api/手写文字识别.html

     Egret你画我猜~源码分享:https://bbs.egret.com/forum.php?mod=viewthread&tid=27892

     egret 涂鸦分享:https://bbs.egret.com/thread-30686-1-1.html  

     PHP中10进制与16进制互转 - PHP - PHPcode:https://www.form1.cn/php-phpcode-246.html

     PHP解码unicode编码中文字符代码示例 - un123 - 博客园:https://www.cnblogs.com/cfinder010/p/3911596.html

你可能感兴趣的:(前端,Egret)