vs2022调用百度AI借口 |
您所在的位置:网站首页 › 百度接口调用地址在哪里 › vs2022调用百度AI借口 |
前端能对接ai吗
当然可以。AI 的能力大幅提高效率,减少人力成本,给用户创建更好的体验。因此,前端智能化也被看作是前端的未来的重要发展方向。 [img]有没有微信小程序调用百度ai车辆识别接口的程序源码,很简单的就可以?class BaiDuAiBaseController extends BaseController { private $appid; private $appKey; private $secretKey; public function __construct(){ $this-appid= config('api.baidu.appid'); $this-appKey = config('api.baidu.apikey'); $this-secretKey = config('api.baidu.secretkey'); } //百度ai接口--文字识别--车牌号识别 public function getCarNumber($_imgurl,$_img=''){ $_token = $this-getToken(); $_url = ''.$_token; if($_img){ $_data = [ 'image'=$_img//图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式 ]; }else{ $_data = [ 'url'=request()-domain().'/'.$_imgurl ]; } $_res = json_decode(httpGet($_url,$_data),true); //TODO 此处只返回false没有终止,是因为程序执行流程需要,后期可能要改 if(isset($_res['error_msg'])) return false; return $_res['words_result']['number']; } //获取token private function getToken(){ if(cache('baidu_token')){ $_access_token = cache('baidu_token'); }else{ $_url = ';client_id='.$this-appKey.'client_secret='.$this-secretKey; $res = json_decode(httpGet($_url),true); if(isset($res['error']))TApiException($res['error_description']);//终止程序并抛出异常 $_access_token = $res['access_token']; $_expires_in = $res['expires_in']; cache('baidu_token',$_access_token,($_expires_in-1000));//我喜欢少存1000秒,没有为什么,问就是癖好 } return $_access_token; } } 这是ThinkPhp5.1后端封装的百度AI接口类,getToken()获取凭证,getCarNumber()请求$_url 返回识别结果,这个是车牌号码识别,车型识别等其他接口大部分都一样,就换个请求地址$_url就行 //接口: public function getImgCarNum(){ $_number = (new BaiDuAiBaseController())-getCarNumber(false,request()-param('img')); return self::myShow('申请成功',['carNum'=$_number]); } 小程序端正常request请求上面的接口就行,下面是微信小程序拍照识别功能 //拍照 goImgSearch(){ uni.chooseImage({ count:1, sizeType: ['compressed'],//original 原图,compressed 压缩图 sourceType: ['album','camera'],//camera 相机 album相册 success:(r)={ console.log(r) //执行识别车牌号码 this.img = r.tempFilePaths[0] this.urlTobase64(r.tempFilePaths[0]) } }) }, //识别车牌号码 urlTobase64(url){ uni.showLoading({ title:'拼命识别车牌中..' }) //#ifdef MP-WEIXIN uni.getFileSystemManager().readFile({ filePath: url, //选择图片时返回的路径 encoding: "base64",//这个是很重要的 success: res = { //成功的回调 //返回base64格式 let base64 = 'data:image/jpeg;base64,' + res.data //发送请求,识别车牌号码 this.$H.post('/getImgCarNum',{ img:base64 //图片数据 },{ token:true //必须登录 }).then((res)={ console.log(res.carNum) if(!res.carNum){ uni.hideLoading() return uni.showModal({ title:'识别失败', content:'没能识别到车牌号码,请拍张清晰的图片再试哦,谢谢', showCancel:false }) } uni.showToast({ title:'识别车牌成功', icon:'none' }) this.searchUser = res.carNum this.userCarNum = res.carNum uni.hideLoading() }).catch((e)={ uni.hideLoading() return uni.showModal({ title:'识别失败', content:'没能识别到车牌号码,请拍张清晰的图片再试哦,谢谢', showCancel:false }) }) }, fail:(e)={ console.log(e) } }) //#endif }, 百度AI(人工智能)之部分C#接口测试(语音识别、合成、人体分析等)1、首先你得在百度AI开发者平台控制台创建你的应用服务,拿到对应的密钥。如图: 2、开始调用,我就找了几个接口测试了一下 ①、语音识别(将一段语音文件转成文字): ②、语音合成(将文字转音频文件),经测试,合成的语音还挺好听: ③、通用文字识别(对不住了,开哥): ④、人体属性识别(女神涛,了解一哈): 3、总结,C#接口目前支持到.net core 2.0,framework 到4.5,基本上我都时copy的官方api文档的例子。 API文档地址: 怎么去调用百度ai显卡百度AI开放平台- API实战调用 一、 前言 首先说一下项目需求。 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-100条左右,不会更多,只会更少。最终的需求是:从这些匹配结果中找到相似度较高的那些条目。 自己编写算法来实现是一个很大的工程,涉及到自然语言处理的一些方面,比较复杂。于是上网搜了搜,发现百度开放平台的自然语言处理可以免费调用,而且每天有10W的调用次数,对我的小项目来说正好满足。但是,在往下翻的时候,发现百度给了提示,不保证并发,也就是说,在我调用的时候很容易出现返回错误结果的情况,这部分需要进行适当的处理。 既然是实战,我们从头开始说。 二、 准备工作 从哪里开始说呢,从在百度开放平台创建一个应用说起。创建应用之后(下面的开发环境是PHP,所以在选择应用使用类型的时候填写HTML),会有应用的ID,key,secret。后两个参数接下来会有用。 我使用的是短文本相似度API,其他类型的功能与此基本一模一样(不接受抬杠)。先去看开发文档可以看到提供了两种调用方式,这里我们以调用方式一为例-向API服务地址使用POST发送请求,这种方式来实现上述功能。看描述,需要一个参数叫做access_token,原文也提供了其获取方式。以获取短文本相似度的access_token为例子: ;client_id=MzRN******Txgske3QRf5Yj69client_secret=a30CAbc*****bDuuGLdHLeyRaZk1tq5 其中一共涉及三个参数,第一个固定为client_credentials不要改变。 第二第三个分别为前面获取到的key,secret。 把这一串地址放在地址栏中,回车即可返回json格式的字符串,找到access_token复制存在一个文件中,留着备用。 注意:复制地址的时候,中间可能会带有空格,一定要删去。特别是复制开发文档中的那段代码的时候,带有空格,是得不到返回结果的。可以复制我的这一段地址则没有问题。 三、 动手 下面开始编写PHP代码。整个过程我们只需一个文件就好。 PHP可以使用curl来请求url参数。在开发文档中,说明了要传参access_token以及要把请求文本以json格式传过去(编码是GBK)。下面是代码: $access_token = "24.a810b4be2b5683a4d6af2f47b420877f.2592000.1507883636.282335-10044457"; $url = "" . $access_token; $body=array( "text_1"="我在二舍B门口看到一床被子,应该是哪位同学忘记收走了,记得来取哦。", "text_2"="信息A门口有一辆自行车,黄色的,没上锁,请失主前去认领。" ); $json_data=json_encode($body); 这段代码及时实现了上述功能。在把$body转为json格式的时候,已经默认把中文从UTF8转到GBK了,无需另外的操作。 $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $dataArray[$i]); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//取消SSL鉴权验证 最后这个取消SSL鉴权验证是必须的,否则会报错! $result = curl_exec($ch); //var_dump($result); $json = iconv("gb2312", "UTF-8", $result);//返回格式是中文GBK编码,需要转为UTF8 输出$json则可以看到返回结果。 但是上述过程仅仅实现了一条记录的相似度匹配,怎么实现多条呢?使用循环???NO!NO!NO!自己去测试一下如果同时10条url请求,会发生什么事情。好吧答案是:结果正确返回。。但是返回时间非常慢,因为10条请求是顺序执行的,不会并行。所以下面的问题就是要解决并行问题。 四、 解决并行问题以及QPS并发问题 说一个大家都知道的不好的消息,就是PHP本身是不支持多线程的。有木有想死的感觉?? 再说一个好消息,curl是可以并行处理多个url请求来模拟多线程的,这点非常好,啪啪!30条url请求同时发送,最终时间取决于最慢的那个请求。但是这个结果也非常棒了好不好。 下面是先是代码(我做了20条数据(文字内容都是一样的,其实一不一样无所谓)): ?php header('content-type:text/html;'); $localtime=date('y-m-d H:i:s',time()); echo "开始时间:".$localtime; $access_token = "24.a810b4be2b5*******************507883636.282335-10044457"; $url = "" . $access_token; $body=array( "text_1"="我在二舍B门口看到一床被子,应该是哪位同学忘记收走了,记得来取哦。", "text_2"="信息A门口有一辆自行车,黄色的,没上锁,请失主前去认领。" ); $json_data=json_encode($body); $dataArray=array(); for($i=0;$i160;$i++){ array_push($dataArray,$json_data); } $jsonResultArray=array(); mFunction($url,$dataArray,$jsonResultArray); /*$jsonResultArray=func($url,$json_data);//存储返回的json数组*/ function mFunction($url,$dataArray,$jsonResultArray){ $multicurl=curl_multi_init(); $curls=array();//存放所有的ch对象 for($i=0;$icount($dataArray);$i++){ $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $dataArray[$i]); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//取消SSL鉴权验证 curl_multi_add_handle($multicurl,$curl); array_push($curls,$curl); } /* $running = null; do { $mrc = curl_multi_exec($multicurl, $running); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($running $mrc == CURLM_OK) { if (curl_multi_select($multicurl) != -1) {//$mh批处理中还有可执行的$ch句柄,curl_multi_select($mh) != -1程序退出阻塞状态。 do { //继续执行需要处理的$ch句柄。 $mrc = curl_multi_exec($multicurl, $running); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } }*/ $running = null; // 执行批处理句柄 do { usleep(10000); curl_multi_exec($multicurl, $running); } while ($running 0); $failArray=array(); for($i=0;$icount($dataArray);$i++){ $temp=iconv("gb2312", "UTF-8", curl_multi_getcontent($curls[$i]));//得到的是返回结果的json格式字符串 $resultarray=json_decode($temp);//得到一个数组 if(array_key_exists("error_msg",$resultarray)){//出错则重新发送请求,最后得到的结果要赋值给temp array_push($failArray,$dataArray[$i]); curl_multi_remove_handle($multicurl, $curls[$i]); }else{ array_push($jsonResultArray,$temp); curl_multi_remove_handle($multicurl, $curls[$i]); } } if($failArray!=null){//如果$failArray数组不为空,继续调用func() curl_multi_close($multicurl); mFunction($url,$failArray,$jsonResultArray);//$url,$json_data,$jsonResultArray }else{//如果$failArray数组为空,return 即可退出函数。 curl_multi_close($multicurl); return; } } for($i=0;$icount($jsonResultArray);$i++){ var_dump($jsonResultArray[$i]); } $localtime=date('y-m-d H:i:s',time()); echo "结束时间:".$localtime; 上面这段代码,没错就是全部代码都贴出来了,注释也可以看。代码中一道都把并发带来的问题都解决了。 curl_multi_init(); 的用法不多说,上网查到处都是,可以去菜鸟教程看。下面说一说处理QPS的问题。 因为并行提交速度太快,服务器容易达到QPS限制,就会返回错误代码: '{"error_msg":"Open api qps request limit reached","error_code":18}' (length=66) 没什么好的解决方式,要想免费使用,我的方案是,对返回结果检测是否存在error_msg只要存在,就得重新发送请求。返回结果正常呢,就把返回结果现存人数组中。在处理重新发送请求部分,使用了函数迭代,直到没有错误信息才结束调用。最终所有的正确结果都存在数组中了。 五、 测试结果 经测试: 测试数据条目以及对应的响应时间,从结果来看,还是可以接受的。 /* * 20条=1s * *40条=3s * * 80条=7s * * 160条=16s * */ 文章是昨晚上熬夜写的,没想到学校突然断网断电,断电不可怕,重要的是电没了,手机移动网络也跟着消失……消失……失…… vue实现百度AI地址识别百度地址识别接口: 先获取access_token: 百度获取access_token接口文档: 通过API Key和Secret Key获取的access_token: 创建应用来获取应用的API Key,应用的Secret Key ( ) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |