iOS SDK 基础版
所有文档

          AR开放平台

          iOS SDK 基础版

          简介

          本文档主要介绍DuMix AR iOS SDK 基础版的集成和使用。在使用本文档前,您需要先了解AR(Augmented Reality)的基础知识,并已经开通了百度AR应用授权,您可以在 AR技术开放平台应用控制台 申请应用授权。

          运行环境

          • iOS: 9.0 以上
          • 架构:arm64(代码可通过 [BARSDKPro isSupportAR] 来判断当前设备是否支持AR功能)。

          SDK目录结构

          目前只支持静态库链接 SDK目录如下:

          -核心功能
          |-DumixARCore.a          // Required DuMixARSDK
          
          -组件能力
          |-AR-TTS                 // Optional 百度TTS相关的部分,若您不使用该功能,该模块不需要添加
          |-AR-Voice               // Optional 百度语音相关的部分,若您不使用该功能,该模块不需要添加
          |-AR-ImageSearch         // Optional 百度识图功能,若您不使用该功能,该模块不需要添加

          SDK集成步骤

          第1步:创建AR应用

          请前往百度云控制台 -> 百度AR创建您的AR应用:

          第2步:添加FrameWorks

          -系统库
          |-libz.tbd
          |-libc++.tbd
          |-Accelerate.framework
          |-libsqlite3.0.tbd 
          |-libstdc++.6.0.9.tbd        
          |-libsqlite3.0.tbd
          |-libiconv.tbd (语音/TTS能力需要)
          -第三方库
          |-libBaiduSpeechSDK.a(如果需要语音能力,需要集成)
          |-libBaiduTTSSDK.a(如果需要TTS能力,需要集成)

          第3步:设置工程配置

          1. 相机权限-需要在info.plist中添加 Privacy - Camera Usage Description, 麦克风权限-添加 Privacy - Microphone Usage Description, 如果需要相册权限-需要在info.plist中添加 Privacy - Photo Library Additions Usage Description
          2. 请设置工程的 Bundle Identifer,内容为您创建应用时的iOS包名。
          3. 创建完AR应用后,在“应用详情”页面下载license文件,并将license文件放到您应用的工程目录中(license文件名称必须为:aip.license)

          第4步:设置AppID、APIKey、Secret Key

          #define APP_ID       @""    // 您创建应用的 App ID 
          #define API_KEY      @""    // 您创建应用的 API Key
          #define SECRET_KEY   @""    // 您创建应用的 Secret Key
          
          [BaiduARSDK setBundlePath:@"BaiduAR.bundle"];   // BaiduAR.bundle 为资源文件名
          [BaiduARSDK setAppID: APP_ID APIKey: API_KEY andSecretKey: SECRET_KEY];

          API介绍

          BARMainController

          AR控制器(处理相机samplebuffer、case管理等)

          self.arController = [[BARMainController alloc] initARWithCameraSize:CGSizeMake(720, 1280) previewSize:self.renderVC.cameraSize];
          [self.arController setDevicePosition:self.renderVC.devicePosition needArMirrorBuffer:[self.renderVC demoNeedARMirrorBuffer]];
          • 初始化
          /**
           初始化方法
          
           @param cameraSize 相机尺寸
           @param previewSize 预览尺寸
           @return BARMainController实例
          
           */
          - (instancetype)initARWithCameraSize:(CGSize)cameraSize
                                   previewSize:(CGSize)previewSize;
          • AR控制
          /**
           从网络加载AR
          
           @param arKey ARKey
           @param successBlock 加载成功回调
           @param failureBlock 加载失败回调
           */
          - (void)loadAR:(NSString *)arKey
                 success:(BARLoadSuccessBlock)successBlock
                 failure:(BARLoadFailedBlock)failureBlock;
           
           /**
            从本地路径加载AR
          
            @param filePath case资源包路径,下载并解压完后的路径:比如
            ../bar_10070173/ar/...,传递的参数filePath为../bar_10070173
            @param arType ARKey(case唯一标识)
            @param successBlock 加载成功回调
            @param failureBlock 加载失败回调:case包有问题或者鉴权失败
            */
           - (void)loadARFromFilePath:(NSString *)filePath
                                arKey:(NSString *)arKey
                               arType:(NSString *)arType
                              success:(BARLoadSuccessBlock)successBlock
                              failure:(BARLoadFailedBlock)failureBlock;
          
          /**
           启动AR
           */
          - (void)startAR;
          
          /**
           停止AR
           */
          - (void)stopAR;
          
          /**
           暂停AR
           */
          - (void)pauseAR;
          
          /**
           恢复AR
           */
          - (void)resumeAR;
          • 相机操作
          /**
           相机数据流
           @param sampleBuffer 相机数据
           */
          - (void)updateSampleBuffer:(CMSampleBufferRef)sampleBuffer;
          
          /**
           设置设备姿态
          
           @param position 设备姿态
           */
          - (void)setDevicePosition:(int)position needArMirrorBuffer:(BOOL)needArMirrorBuffer;
          
          /**
           设置相机size、预览size数据
          
           @param cameraSize 相机尺寸
           @param previewSize 预览尺寸
           */
          - (void)setArCameraSize:(CGSize)cameraSize previewSize:(CGSize)previewSize;
          • 拍摄
          /**
           拍照
          
           @param finishBlock 拍照回调
           */
          - (void)takePicture:(BARTakePictureFinishBlock)finishBlock;
          • 消息
          /**
          该回调会接受case发出的消息,类型说明如下
           
           BARMessageTypeNone                    = -1,
           BARMessageTypeCustom                  = 1000,//自定义
           BARMessageTypeOpenURL                 = 1001,//打开URL
           BARMessageTypeEnableFrontCamera       = 1002,//开启前置摄像头
           BARMessageTypeChangeFrontBackCamera   = 1003,//前后摄像头切换
           BARMessageTypeIntitialClick           = 1004,//引导页点击
           BARMessageTypeNativeUIVisible         = 1005,//Native UI处理(显示、隐藏)
           BARMessageTypeCloseAR                 = 1006,//关闭AR
           BARMessageTypeShowAlert               = 1007,//弹出alert
           BARMessageTypeShowToast               = 1008,//弹出toast
           BARMessageTypeSwitchCase              = 1009,//切换case
           BARMessageTypeLogoStart               = 1010,//Logo识别开始
           BARMessageTypeLogoStop                = 1011,//Logo识别结束
           BARMessageTypeBatchDownloadRetryShowDialog = 1012,//分布加载batch包(失败后弹窗)
           BARMessageTypeLuaStatistic            = 1013,//case内统计信息
           BARMessageTypeLuaMakeupState          = 1014,//是否需要显示原生美妆调节页面:event_id : 0不显示 1显示
           BARMessageTypeLuaCaseFilterCreated    = 1015,//case内是否开启了滤镜
           BARMessageTypeVPSSessionInvalid       = 1016,//vps sesison失效
           BARMessageTypeVPSHideUIBtn            = 1017//vps 隐藏按钮
           
           */
           @property (nonatomic, copy) BARLuaMsgBlock luaMsgBlock;
          
          /**
           向lua发送消息
          
           @param eventName 消息名
           @param msgData 消息内容
           @discussion lua中通过注册监听,获得消息Event:addEventListener("session_find_anchor", find_anchor)
           */
          - (void)sendMsgToLua:(NSString *)eventName msgData:(NSDictionary *)msgData;
          
          /**
          该回调会接受运行时AR的消息,类型说明如下
          BARSDKUIState_UnKnown = -1,
          BARSDKUIState_TrackOn,  			 //跟上
          BARSDKUIState_TrackLost_HideModel, 	 //跟丢隐藏模型
          BARSDKUIState_TrackLost_ShowModel,   //跟丢显示模型
          BARSDKUIState_TrackTimeOut,			 //跟踪超时
          BARSDKUIState_DistanceNormal,        //距离正常
          BARSDKUIState_DistanceTooFar,        //距离过远
          BARSDKUIState_DistanceTooNear,       //距离过近
          */
          
          @property (nonatomic, copy) BARSDKUIStateEventBlock uiStateChangeBlock;

          BARVideoRecorder

          录制视频类

          /**
          开始录制
          @param enable 是否带音频
          	
          */
          - (void)startRecordingWithAudioTrack:(BOOL)enable;
          
          /**
           获取录制视频路径
          
           @return 视频录制路径
           */
          - (NSString *)getVideoPath;
          
          /**
          停止录制
          @param handler 停止录制回调
          */
          - (void)stopRecording:(void (^)(void))handler;

          BARCaseTask

          下载ar资源包的工具类,可以在程序内做预下载功能

          /**
          下载进度回调
          @param task task类
          @param downloadProgress 下载进度
          */
          - (void)caseTask:(BARCaseTask *)task downloadProgress:(float)downloadProgress;
          
          /**
          下载完成回调
          @param task task类
          @param taskResult 下载结果
          @param error 下载错误
          */
          - (void)caseTask:(BARCaseTask *)task taskResult:(NSDictionary *)taskResult error:(NSError *)error;
          
          /**
          查询完成回调
          @param task task类
          */
          - (void)caseTaskQueryArResourceSuccess:(BARCaseTask *)task;
          
          /**
          查询销毁回调
          @param task task类
          */
          - (void)caseTaskDealloc:(BARCaseTask *)task;	
          
          具体预下载&本地加载请参考Demo中代码BARCaseTask相关部分

          能力组件

          语音识别

          • setupARVoice

          self.voiceConfigure = [[BARRouter sharedInstance] voice_createVoiceConfigure];
          [[BARRouter sharedInstance] voice_setStopBlock:^{
              NSLog(@"voiceStop");
          } withConfigure:self.voiceConfigure];
          
          
          [[BARRouter sharedInstance] voice_setStartBlock:^(BOOL success){
              NSLog(@"voiceStart");
          } withConfigure:self.voiceConfigure];

          语音合成

          • setUpTTS

          - (void)setUpTTS {
              [[BARRouter sharedInstance] setUpTTS];
          }

          识图

          • setUpSameSearch

          [self.arController imageSearch_setUpWithARType:arType completion:^(BOOL success) {
              if (success) {
                  [weakSelf.arController imageSearch_loadSameSearch];
                  [weakSelf.arController imageSearch_setResultBlock:^(id  _Nullable result) {
                      if (result && [result isKindOfClass:[NSDictionary class]]) {
                          NSDictionary *dic = result;
                          NSString *arKey = dic[@"arKey"];
                          NSString *arType = dic[@"arType"];
                          if (arKey && arType && weakSelf) {
                              NSLog(@"识别成功 arkey: %@, artype %@",arKey,arType);
                              //识别到ARKey&ARType,加载AR
                              weakSelf.arKey = arKey;
                              weakSelf.arType = arType;
                              [weakSelf stopSameSearch];//停止识图模块
                              [weakSelf loadAR:nil];
                          }
                      }
                  }];
                  
                  [weakSelf.arController imageSearch_setDownloadSuccessBlock:^{
                      NSLog(@"----下载特征库成功");
                  }];
                  
                  [weakSelf.arController imageSearch_setErrorBlock:^(NSError * _Nullable error) {}];
                  weakSelf.sameSearching = YES;
                  [weakSelf.arController imageSearch_startImageSearch];
                  
              }else {
                  NSLog(@"----初始化识图组件失败");
              }
          }];

          Demo业务逻辑类

          BARBusinessDemoViewController

          业务控制类,开发者可自定义

          case的几个操作流程如下:
          加载AR --> 下载AR资源包并且加载AR
          启动AR --> 加载AR成功后,调用startAR
          
          viewDidLoad --> setupARView --> setupARController --> setupComponents

          DARRenderViewController

          相机控制类,开发者可自定义

          self.renderVC = [[DARRenderViewController alloc] initWithCameraSessionPreset:@"1280*720"];
          self.renderVC.isInitCamera = YES;
          self.renderVC.isDefaultBack = YES;
          if ([self isIPhoneX]) {
               self.renderVC.aspect = ASPECT_RATIO;
           } else {
               self.renderVC.aspect = [UIScreen mainScreen].bounds.size.height/[UIScreen mainScreen].bounds.size.width;
           }
          self.renderVC.dataSource = self;
          self.renderVC.view.backgroundColor = [UIColor clearColor];
          [self.renderVC didMoveToParentViewController:self];
          [self.renderVC manualAdjustFocusAtPoint:CGPointMake(0.5, 0.5)];
          [self addChildViewController:self.renderVC];
          [self.replacedView addSubview:self.renderVC.view];

          DARRenderViewControllerDataSource

          • 相机回调
          /**
           将相机流数据传给MainController,进行渲染处理
          
           @param srcBuffer 相机流原始数据
           */
          - (void)updateSampleBuffer:(CMSampleBufferRef)srcBuffer;
          
          /**
           录制视频时,将音频数据传给BARVideoRecorder
          
           @param srcBuffer 音频数据
           */
          - (void)updateAudioSampleBuffer:(CMSampleBufferRef)srcBuffer;
          • property
          @property (strong, nonatomic)  UIView *arContentView;//AR视图容器
          @property (nonatomic, assign) CGSize previewSizeInPixels;//预览尺寸
          @property (nonatomic, assign) CGSize cameraSize;//相机尺寸
          @property (nonatomic, assign) CGFloat aspect;//屏占比
          @property (nonatomic, strong) BARGestureView *gestureView;//手势view
          @property (nonatomic, assign) BOOL isLandscape;//是否横屏

          版本更新说明

          DuMix AR iOS SDK 基础版4.7.2-2020年05月 升级渲染引擎。

          DuMix AR iOS SDK 基础版2.6.1-2019年06月 用于免费开放的版本。

          DuMix AR iOS SDK 基础版2.6-2018年09月 剥离opencv库。

          DuMix AR iOS SDK 基础版2.5-2018年08月 试用授权升级为正式授权。

          DuMix AR iOS SDK 基础版2.4.1-2018年07月 新增加载本地内容接口。

          上一篇
          Android SDK 基础版
          下一篇
          Unity SDK