# alibabacloud-viapi-ios-sdk **Repository Path**: aliyun/alibabacloud-viapi-ios-sdk ## Basic Information - **Project Name**: alibabacloud-viapi-ios-sdk - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-08 - **Last Updated**: 2025-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1 概述 ViapiIosSDK 是阿里达摩院推出的一款适用于 iOS 平台的实时视频 SDK,提供了包括人像抠图、美颜、人像关键点检测等多种功能。 # 2 功能列表 + 视频流实时人像分割 + 本地图片人像分割 + ~~美颜功能(瘦脸、大眼、美白、磨皮等)~~ + ~~人脸关键点检测~~ # 3 SDK开发包适配及包含内容说明 ## 3.1 支持的系统和硬件版本 + 硬件要求:要求设备上有相机模块 + 系统:最低支持9.0 ## 3.2 开发包资源说明 + ViapiIosSDK——具体版本以获取到的最终版本为准 + damo-viapi.license ——sdk全局license文件,对所有能力生效,名字固定不允许修改 + damo-viapi-xxx.license ——sdk单个能力license文件,只对单个能力生效,名字路径可以自定义 + xxx.nn ——以.nn为结尾的是SDK使用到的模型文件 # 4 SDK集成步骤 ## 4.1 将算法能力相关的文件包导入到工程 把sdk的framework,模型文件xxx.nn文件以及damo-viapi.license拷贝到主工程的目录下。如下图: # 5 SDK调用步骤 ## 5.1 分割处理 ### 5.1.1视频流实时分割算法处理 #### 接口描述: ``` /// 检查证书路径 /// @param licensePath 鉴权证书路径 .license /// @param callBack block -(void)checkVideoLicensePath:(NSString *)licensePath withCallBack:(void(^)(int errorCode))callBack; /// 创建分割对象 /// @param callBack block -(void)createVideoSegmentationObjectWithCallBack:(void(^)(int errorCode))callBack; /// 初始化分割对象 /// @param modelPath 模型路径 .nn -(void)initVideoSegmentationModelPath:(NSString *)modelPath withCallBack:(void(^)(int errorCode))callBack; ///设置背景融合 /// @param oriBgImg 原图 /// @param w 宽 /// @param h 高 /// @param rotation 手机朝向 /// @param front 是否前置摄像头 -(BOOL)setBackBufferWithOriginalImg:(UIImage *)oriBgImg mixBufferW:(CGFloat)w mixBufferH:(CGFloat)h rotation:(VISegmentRotation)rotation isFront:(BOOL)front; /// 视频分割方法 /// @param pixelBuffer 视频buffer /// @param callBack block /// @param rotation 手机朝向 /// @param front 是否前置摄像头 -(CVPixelBufferRef)segmentationVideoFromBuffer:(CVPixelBufferRef)pixelBuffer rotation:(VISegmentRotation)rotation isFront:(BOOL)front withCallBack:(void(^)(int errorCode))callBack; /// 摧毁分割对象 /// @param callBack block -(void)destroyVideoSegmentationObjectWithCallBack:(void(^)(int errorCode))callBack; /// 获取视频证书过期时间 /// @param callBack block -(void)getVideoLicenseExpirTimeWithCallBack:(void(^)(NSString*expirTime))callBack; ``` #### 具体代码示例如下: 引入头文件 #import 调用代码如下: ``` let licPath = Bundle.main.path(forResource: "damo-viapi", ofType: "license") let modelPath = Bundle.main.path(forResource: "segvHuman", ofType:"nn") segmentator = HuManRealTimeVideoSegmentor() segmentator?.checkVideoLicensePath(licPath!, withCallBack: { errorCode in print("check证书结果:\(errorCode)") }) self.segmentator?.createVideoSegmentationObject(callBack: { errorCode in print("创建对象失败,错误码为\(errorCode)") }); self.segmentator?.initVideoSegmentationModelPath(modelPath!,withCallBack: { errorCode in print("初始化对象失败,错误码为\(errorCode)") }); self.segmentator?.getVideoLicenseExpirTime(callBack: {expireString in print("视频证书过期时间:\(expireString)") }) segmentator?.setBackBufferWithOriginalImg(backgroundImage!, mixBufferW: self.backgroundImage!.size.width, mixBufferH: self.backgroundImage!.size.height, rotation: getPhoneRotation(), isFront: true); ``` ## 注意 离开当前页面,请手动调用-(void)destroyVideoSegmentationObjectWithCallBack:(void(^)(int errorCode))callBack 摧毁视频分割对象。 ``` dismiss(animated: false) { self.segmentator?.destroyVideoSegmentationObject(callBack: { errorCode in print("摧毁对象失败,错误码:\(errorCode)") }) }; ``` ### 5.1.2图片分割算法处理 #### 接口描述: ``` /// 检查证书路径 /// @param licensePath 鉴权证书路径 .license /// @param callBack block -(void)checkPhotoLicensePath:(NSString *)licensePath withCallBack:(void(^)(int errorCode))callBack; /// 创建分割对象 /// @param callBack block -(void)createPhotoSegmentationObjectWithCallBack:(void(^)(int errorCode))callBack; /// 初始化分割对象 /// @param modelPath 模型路径 .nn -(void)initPhotoSegmentationModelPath:(NSString *)modelPath withCallBack:(void(^)(int errorCode))callBack; /// 处理图片方法 /// @param originalImage 原图 /// @param callBack block -(void)segmentationPhotoFromOriginalImage:(UIImage*)originalImage withCallBack:(void(^)(UIImage*outImage,int errorCode))callBack; /// 摧毁分割对象 /// @param callBack block -(void)destroyPhotoSegmentationObjectWithCallBack:(void(^)(int errorCode))callBack; /// 获取图片证书过期时间 /// @param callBack block -(void)getPhotoLicenseExpirTimeWithCallBack:(void(^)(NSString*expirTime))callBack; ``` #### 具体代码示例如下: 引入头文件 #import 调用代码如下: ``` self.photoSegmentor = [[HumanPhotoSegmentor alloc]init]; NSString *licensePath= [[NSBundle mainBundle] pathForResource:@"damo-viapi.license" ofType:nil]; NSString *nnModelPath= [[NSBundle mainBundle]resourcePath]; NSLog(@"licensePath:%@\n bundleID:%@",licensePath,[NSBundle mainBundle].bundleIdentifier); [self.photoSegmentor checkPhotoLicensePath:licensePath withCallBack:^(int errorCode) { NSLog(@"check证书结果:%d",errorCode); }]; [self.photoSegmentor createPhotoSegmentationObjectWithCallBack:^(int errorCode) { NSLog(@"创建对象失败,错误码为%d",errorCode); }]; [self.photoSegmentor initPhotoSegmentationModelPath:nnModelPath withCallBack:^(int errorCode) { NSLog(@"初始化对象失败,错误码为%d",errorCode); }]; [self.photoSegmentor getPhotoLicenseExpirTimeWithCallBack:^(NSString * _Nonnull expirTime) { NSLog(@"照片证书过期时间:%@",expirTime); }]; ``` ## 注意 离开当前页面,请手动调用-(void)destroyPhotoSegmentationObjectWithCallBack:(void(^)(int errorCode))callBack 摧毁图片分割对象。 ``` dismiss(animated: false) { self.segmentator?.destroyPhotoSegmentationObjectWithCallBack(callBack: { errorCode in print("摧毁对象失败,错误码:\(errorCode)") }) }; ``` ## 5.2 返回值 #### 返回值 : int类型,返回0为图像分割算法处理成功,其它返回为图像分割算法处理失败。 ``` errorCode UnknowError = -1 , 离线鉴权错误码: LicenseNotInitError = -211 , LicenseNotBindBundleIdError = -212 , LicenseInvalidError = -213 , LicenseExpireError = -214 , LicenseNotSupport = -215 , LicenseGetCallBundleIdError = -216 ```