使用漢王雲API實現手寫識別H5(參考:2018政府工作報告關鍵字)

背景

      有個項目需求用到手寫識別功能,即H5識別用戶手寫的文字內容。參考案例爲“2018政府工作報告關鍵字”,掃描下面二維碼體驗,

 

分析

      重點爲找到合適的文字識別接口,通過查詢,市面上已有騰訊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二維碼

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章