手中有个项目客户需要用百度AR的SDK做一个扫描图片出来一段视频的功能(云端识别)于是乎来到百度AR的开发者中心根据需求选择了EASY版(CORE版只能做本地图片识别)首先我们要在控制台建立一个项目
下载到本地注意这里的license文件的名字一定不可以修改只能叫api.license拖到项目中去然后把 下载的SDK集成到项目中去、注意这个地方是否打勾。如果不打勾会报错鉴权失败、
把SDK拖到项目里添加所需要的一些库(对着demo 一个一个托xcode10以上吧libstdc++这个用libc++替代即可)注意demo中有个opencv的文件夹里的库是没有被放在ARSDK这个文件夹下面(官方文档没有说要添加这个库)不添加就会报错linker command failed with exist code 1 (use -v to see invocation)。接下来我们把项目的appid appkey appsecret加到appdelegate.m中(如果报错鉴权失败一般都是appid key secret以及License文件的问题检查下或者删了重新走一遍吧)。接下来我们去管理中心创建一个模板,扫描图片出来视频的简单需求只要选择第二个就足够用啦:附上地址:https://dumix.baidu.com/content/#/selectMode
然后上传识别图以及出发视频就会返回给你一个ar_key,这个ar_key在后面代码中可直接调用。接下来我们能把代码集成到项目中吧!
附上代码:
- (void)pushToARViewController{
NSDictionary *dic = @{@"ar_type":@"7",@"ar_key":@"你创建模板返回的ar_key"};
NSString *value = [self dicToString:dic];
MyLog(@"%@",value);
BARViewController *arVC = [BaiduARSDK viewController:value arInfo:nil];
__weak BARViewController *weakARVC = arVC;
__weak typeof (self) weakSelf = self;
arVC.closeEventBlock = ^{
if (weakSelf) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakARVC dismissViewControllerAnimated:YES completion:nil];
});
}
};
MainNavigationController *nav = [[MainNavigationController alloc] initWithRootViewController:arVC];
[self presentViewController:nav animated:YES completion:nil];
}
- (NSString *)dicToString:(NSDictionary *)dic {
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:0 error:&error];
if (error) {
return nil;
}
NSString *jsonString = [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding];
return jsonString;
}
好啦把代码集成进去跑起来,哇好神奇~原来这个功能这么简单的哇!这时候有人会问了,如果我有多个模板这个ar_key要怎么去传值呢?GOOD,这个时候我们只要给ar_key传一个空的字符串他就能自己识别了!很智能对不对!那么我们传空试试,很好,项目崩了,我们看一下打印信息
乍一看不明觉厉找不到方法是么,问了百度的技术支持,原来要在buildsetting中搜索preprocessor macros添加一个BAR_FOR_OPENSDK!OK完美解决,项目跑起来就可以实现简单的需求啦!这里有个提示!请大家注意,如果你创建了2个appid对应的模板而且两个模板的识别图是一样的那么在你项目识别图片的时候很有可能识别到的是另一个appid下的项目模板,造成搜索无结果的现象。还有一个报错就是:网络不给力,这个问题往往是你创建模型的时候选择应用不是你AR项目对应的应用比如说我这个项目叫休闲鸭,那么创建模型的时候有个渠道选择选择休闲鸭,那么这个模型就跟你的项目关联起来啦!不要慌! 好啦调这个调了好久,遇到的坑给大家总结下!也是满脸的辛酸泪