FUManager.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. //
  2. // FUManager.h
  3. // FULiveDemo
  4. //
  5. // Created by 刘洋 on 2017/8/18.
  6. // Copyright © 2017年 刘洋. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <UIKit/UIKit.h>
  10. #import <AVFoundation/AVFoundation.h>
  11. #import <libCNamaSDK/FURenderer.h>
  12. #import "FUBeautyParam.h"
  13. @class FULiveModel;
  14. /*
  15. items 保存加载到Nama中bundle的操作句柄集
  16. 注意:道具句柄数组位置可以调整,道具渲染顺序更具数组顺序渲染
  17. */
  18. typedef NS_ENUM(NSUInteger, FUNamaHandleType) {
  19. FUNamaHandleTypeBeauty = 0, /* items[0] ------ 放置 美颜道具句柄 */
  20. FUNamaHandleTypeItem = 1, /* items[1] ------ 放置 普通道具句柄(包含很多,如:贴纸,aoimoji...若不单一存在,可放句柄集其他位置) */
  21. FUNamaHandleTypeFxaa = 2, /* items[2] ------ fxaa抗锯齿道具句柄 */
  22. FUNamaHandleTypeGesture = 3, /* items[3] ------ 手势识别道具句柄 */
  23. FUNamaHandleTypeChangeface = 4, /* items[4] ------ 海报换脸道具句柄 */
  24. FUNamaHandleTypeComic = 5, /* items[5] ------ 动漫道具句柄 */
  25. FUNamaHandleTypeMakeup = 6, /* items[6] ------ 美妆道具句柄 */
  26. FUNamaHandleTypePhotolive = 7, /* items[7] ------ 异图道具句柄 */
  27. FUNamaHandleTypeAvtarHead = 8, /* items[8] ------ Avtar头*/
  28. FUNamaHandleTypeAvtarHiar = 9, /* items[9] ------ Avtar头发 */
  29. FUNamaHandleTypeAvtarbg = 10, /* items[10] ------ Avtar背景 */
  30. FUNamaHandleTypeBodySlim = 11, /* items[11] ------ 美体道具 */
  31. FUNamaHandleTypeBodyAvtar = 12, /* 全身avtar */
  32. FUNamaHandleTotal = 13,
  33. };
  34. typedef NS_OPTIONS(NSUInteger, FUBeautyModuleType) {
  35. FUBeautyModuleTypeSkin = 1 << 0,
  36. FUBeautyModuleTypeShape = 1 << 1,
  37. };
  38. @interface FUManager : NSObject
  39. @property (nonatomic, assign) BOOL enableGesture; /**设置是否开启手势识别,默认未开启*/
  40. @property (nonatomic, assign) BOOL enableMaxFaces; /**设置人脸识别个数,默认为单人模式*/
  41. /* 滤镜参数 */
  42. @property (nonatomic, strong) NSMutableArray<FUBeautyParam *> *filters;
  43. /* 美肤参数 */
  44. @property (nonatomic, strong) NSMutableArray<FUBeautyParam *> *skinParams;
  45. /* 美型参数 */
  46. @property (nonatomic, strong) NSMutableArray<FUBeautyParam *> *shapeParams;
  47. /* 风格参数 */
  48. @property (nonatomic, strong) NSMutableArray<FUBeautyParam *> *styleParams;
  49. @property (nonatomic, strong) NSMutableArray<NSMutableArray<FULiveModel *>*> *dataSource; /**道具分类数组*/
  50. @property (nonatomic, strong) NSString *selectedItem; /**选中的道具名称*/
  51. @property (nonatomic, strong) FUBeautyParam *seletedFliter;
  52. @property (nonatomic, strong) FUBeautyParam *currentStyle;
  53. @property (nonatomic, strong) dispatch_queue_t asyncLoadQueue;
  54. // 当前页面的 model
  55. @property (nonatomic, strong) FULiveModel *currentModel ;
  56. @property (nonatomic) int deviceOrientation;
  57. + (FUManager *)shareManager;
  58. - (void)setAsyncTrackFaceEnable:(BOOL)enable;
  59. // 默认美颜参数
  60. - (void)setBeautyDefaultParameters:(FUBeautyModuleType)type;
  61. /* 设置所有美颜参数 */
  62. -(void)setStyleBeautyParams:(FUBeautyParams*)params;
  63. /* 设置fumanager 保存的美颜参数 */
  64. - (void)setBeautyParameters;
  65. /**
  66. 判断是不是默认美型参数
  67. */
  68. -(BOOL)isDefaultShapeValue;
  69. /* 判断是不是默认美肤 */
  70. -(BOOL)isDefaultSkinValue;
  71. - (void)resetAllBeautyParams;
  72. /**初始化Faceunity,加载道具*/
  73. - (void)loadItems;
  74. /* 加载美颜bundle */
  75. - (void)loadMakeupBundleWithName:(NSString *)name;
  76. /* 加载bundle 到指定items位置 */
  77. - (void)loadBundleWithName:(NSString *)name aboutType:(FUNamaHandleType)type;
  78. /**加载美颜道具*/
  79. - (void)loadFilter ;
  80. /**销毁全部道具*/
  81. - (void)destoryItems;
  82. /*
  83. 销毁指定道具
  84. */
  85. - (void)destoryItemAboutType:(FUNamaHandleType)type;
  86. /* 获取handle */
  87. - (int)getHandleAboutType:(FUNamaHandleType)type;
  88. /**加载普通道具*/
  89. - (void)loadItem:(NSString *)itemName completion:(void (^)(BOOL finished))completion;
  90. /* 添加动漫滤镜 */
  91. - (void)loadFilterAnimoji:(NSString *)itemName style:(int)style;
  92. /* 跳过渲染的道具 */
  93. -(void)preventRenderingAarray:(NSArray <NSNumber *>*)array;
  94. /* 将道具绘制到imager */
  95. - (UIImage *)renderItemsToImage:(UIImage *)image;
  96. /**将道具绘制到pixelBuffer*/
  97. - (CVPixelBufferRef)renderItemsToPixelBuffer:(CVPixelBufferRef)pixelBuffer;
  98. - (CVPixelBufferRef)renderAvatarPixelBuffer:(CVPixelBufferRef)pixelBuffer;
  99. /* 3D 渲染接口 */
  100. -(void)renderItemsWithPtaPixelBuffer:(CVPixelBufferRef)pixelBuffer;
  101. /* 加载海报道具 */
  102. - (void)loadPoster;
  103. /**
  104. 合成海报输入参数
  105. @param posterImage 海报模板照片
  106. @param photoImage 人脸照片
  107. @param photoLandmarks 要处理人脸点位
  108. */
  109. -(void)setPosterItemParamImage:(UIImage *)posterImage photo:(UIImage *)photoImage photoLandmarks:(float *)photoLandmarks warpValue:(id)warpValue;
  110. /**
  111. 美妆贴纸
  112. @param image 贴纸图片
  113. @param paramStr 美妆部位参数
  114. */
  115. -(void)setMakeupItemParamImageName:(NSString *)image param:(NSString *)paramStr;
  116. /**
  117. 美妆程度值
  118. @param value 0~1
  119. @param paramStr 美妆部位参数
  120. */
  121. -(void)setMakeupItemIntensity:(float )value param:(NSString *)paramStr;
  122. /**
  123. 美妆颜色设置
  124. @param sdkStr sdk键值
  125. @param valueArr 值
  126. */
  127. -(void)setMakeupItemStr:(NSString *)sdkStr valueArr:(NSArray *)valueArr;
  128. /// 将道具句柄移除nama 渲染,注意:b该操作不会销毁道具
  129. /// @param type 句柄索引
  130. -(void)removeNamaRenderWithType:(FUNamaHandleType)type;
  131. /// 将移除的道具句柄,重新加入,渲染出效果
  132. /// @param type 句柄索引
  133. -(void)rejoinNamaRenderWithType:(FUNamaHandleType)type;
  134. - (void)musicFilterSetMusicTime;
  135. /**获取item的提示语*/
  136. - (NSString *)hintForItem:(NSString *)item;
  137. - (void)set3DFlipH ;
  138. /**获取75个人脸特征点*/
  139. - (void)getLandmarks:(float *)landmarks index:(int)index;
  140. /**
  141. 获取图像中人脸中心点位置
  142. @param frameSize 图像的尺寸,该尺寸要与视频处理接口或人脸信息跟踪接口中传入的图像宽高相一致
  143. @return 返回一个以图像左上角为原点的中心点
  144. */
  145. - (CGPoint)getFaceCenterInFrameSize:(CGSize)frameSize;
  146. /**判断是否检测到人脸*/
  147. - (BOOL)isTracking;
  148. /**切换摄像头要调用此函数*/
  149. - (void)onCameraChange;
  150. /**获取错误信息*/
  151. - (NSString *)getError;
  152. /**判断 SDK 是否是 lite 版本**/
  153. - (BOOL)isLiteSDK ;
  154. /* 是否正脸 */
  155. -(BOOL)isGoodFace:(int)index;
  156. /* 是否夸张 */
  157. -(BOOL)isExaggeration:(int)index;
  158. -(void)setParamItemAboutType:(FUNamaHandleType)type name:(NSString *)paramName value:(float)value;
  159. /* 判断屏幕方向是否改变 */
  160. -(BOOL)isDeviceMotionChange;
  161. @end