BDFaceAdjustParams.m 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // BDFaceAdjustParams.m
  3. // FaceSDKSample_IOS
  4. //
  5. // Created by Zhang,Jian(MBD) on 2020/12/1.
  6. // Copyright © 2020 Baidu. All rights reserved.
  7. //
  8. #import "BDFaceAdjustParams.h"
  9. #import "BDFaceAdjustParamsConstants.h"
  10. @implementation BDFaceAdjustParams
  11. - (instancetype)initWithJson:(NSString *)json {
  12. BDFaceAdjustParams *des = nil;
  13. NSDictionary *dic = nil;
  14. @try {
  15. if (json && [json isKindOfClass:[NSString class]]) {
  16. NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
  17. if (data) {
  18. dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
  19. }
  20. }
  21. if (dic) {
  22. des = [self initWithDic:dic];
  23. }
  24. } @catch (NSException *exception) {
  25. des = nil;
  26. } @finally {
  27. // do nothing
  28. }
  29. return des;
  30. }
  31. - (BOOL)compareToParams:(BDFaceAdjustParams *)obj {
  32. if (!obj) {
  33. return NO;
  34. }
  35. if (self == obj) {
  36. return NO;
  37. }
  38. if (self.minLightIntensity == obj.minLightIntensity
  39. && self.maxLightIntensity == obj.maxLightIntensity
  40. && self.ambiguity == obj.ambiguity
  41. && self.leftEyeOcclusion == obj.leftEyeOcclusion
  42. && self.rightEyeOcclusion == obj.rightEyeOcclusion
  43. && self.noseOcclusion == obj.noseOcclusion
  44. && self.mouthOcclusion == obj.mouthOcclusion
  45. && self.leftFaceOcclusion == obj.leftFaceOcclusion
  46. && self.rightFaceOcclusion == obj.rightFaceOcclusion
  47. && self.lowerJawOcclusion == obj.lowerJawOcclusion
  48. && self.upAndDownAngle == obj.upAndDownAngle
  49. && self.leftAndRightAngle == obj.leftAndRightAngle
  50. && self.spinAngle == obj.spinAngle) {
  51. return YES;
  52. } else {
  53. return NO;
  54. }
  55. }
  56. - (id)copyWithZone:(nullable NSZone *)zone {
  57. BDFaceAdjustParams *another = [[BDFaceAdjustParams alloc] init];
  58. another.minLightIntensity = self.minLightIntensity;
  59. another.maxLightIntensity = self.maxLightIntensity;
  60. another.ambiguity = self.ambiguity;
  61. another.leftEyeOcclusion = self.leftEyeOcclusion;
  62. another.rightEyeOcclusion = self.rightEyeOcclusion;
  63. another.noseOcclusion = self.noseOcclusion;
  64. another.mouthOcclusion = self.mouthOcclusion;
  65. another.leftFaceOcclusion = self.leftFaceOcclusion;
  66. another.rightFaceOcclusion = self.rightFaceOcclusion;
  67. another.lowerJawOcclusion = self.lowerJawOcclusion;
  68. another.upAndDownAngle = self.upAndDownAngle;
  69. another.leftAndRightAngle = self.leftAndRightAngle;
  70. another.spinAngle = self.spinAngle;
  71. return another;
  72. }
  73. - (instancetype)initWithDic:(NSDictionary *)dic {
  74. if (!dic) {
  75. return nil;
  76. }
  77. if (![dic isKindOfClass:[NSDictionary class]]) {
  78. return nil;
  79. }
  80. if (dic.allKeys.count == 0) {
  81. return nil;
  82. }
  83. BDFaceAdjustParams *des = [super init];
  84. des.minLightIntensity = [self getIntValue:dic key:minLightIntensityKey];
  85. des.maxLightIntensity = [self getIntValue:dic key:maxLightIntensityKey];
  86. des.ambiguity = [self getFloatValue:dic key:ambiguityKey];
  87. des.leftEyeOcclusion = [self getFloatValue:dic key:leftEyeOcclusionKey];
  88. des.rightEyeOcclusion = [self getFloatValue:dic key:rightEyeOcclusionKey];
  89. des.noseOcclusion = [self getFloatValue:dic key:noseOcclusionKey];
  90. des.mouthOcclusion = [self getFloatValue:dic key:mouthOcclusionKey];
  91. des.leftFaceOcclusion = [self getFloatValue:dic key:leftFaceOcclusionKey];
  92. des.rightFaceOcclusion = [self getFloatValue:dic key:rightFaceOcclusionKey];
  93. des.lowerJawOcclusion = [self getFloatValue:dic key:lowerJawOcclusionKey];
  94. des.upAndDownAngle = [self getFloatValue:dic key:upAndDownAngleKey];
  95. des.leftAndRightAngle = [self getFloatValue:dic key:leftAndRightAngleKey];
  96. des.spinAngle = [self getFloatValue:dic key:spinAngleKey];
  97. return des;
  98. }
  99. - (float)getFloatValue:(NSDictionary *)dic key:(NSString *)key {
  100. if (!dic) {
  101. return 0;
  102. }
  103. if (![dic isKindOfClass:[NSDictionary class]]) {
  104. return 0;
  105. }
  106. if (![key isKindOfClass:[NSString class]]) {
  107. return 0;
  108. }
  109. NSString *value = dic[key];
  110. if (value && [value isKindOfClass:[NSNumber class]]) {
  111. return value.floatValue;
  112. }
  113. return 0.0f;
  114. }
  115. - (NSInteger)getIntValue:(NSDictionary *)dic key:(NSString *)key {
  116. if (!dic) {
  117. return 0;
  118. }
  119. if (![dic isKindOfClass:[NSDictionary class]]) {
  120. return 0;
  121. }
  122. if (![key isKindOfClass:[NSString class]]) {
  123. return 0;
  124. }
  125. NSString *value = dic[key];
  126. if (value && [value isKindOfClass:[NSNumber class]]) {
  127. return value.integerValue;
  128. }
  129. return 0;
  130. }
  131. - (NSDictionary *)toDic {
  132. NSDictionary *dic = nil;
  133. @try {
  134. dic = @{minLightIntensityKey : [self toNumber:self.minLightIntensity],
  135. maxLightIntensityKey : [self toNumber:self.maxLightIntensity],
  136. ambiguityKey : [self toNumber:self.ambiguity],
  137. leftEyeOcclusionKey : [self toNumber:self.leftEyeOcclusion],
  138. rightEyeOcclusionKey : [self toNumber:self.rightEyeOcclusion],
  139. noseOcclusionKey : [self toNumber:self.noseOcclusion],
  140. mouthOcclusionKey : [self toNumber:self.mouthOcclusion],
  141. leftFaceOcclusionKey : [self toNumber:self.leftFaceOcclusion],
  142. rightFaceOcclusionKey : [self toNumber:self.rightFaceOcclusion],
  143. lowerJawOcclusionKey : [self toNumber:self.lowerJawOcclusion],
  144. upAndDownAngleKey : [self toNumber:self.upAndDownAngle],
  145. leftAndRightAngleKey : [self toNumber:self.leftAndRightAngle],
  146. spinAngleKey : [self toNumber:self.spinAngle],
  147. };
  148. } @catch (NSException *exception) {
  149. dic = nil;
  150. } @finally {
  151. }
  152. return dic;
  153. }
  154. - (NSNumber *)toNumber:(float)value {
  155. NSString *str = [NSString stringWithFormat:@"%0.2f", value];
  156. return @(str.floatValue);
  157. }
  158. - (NSString *)description {
  159. NSString *content1 = [NSString stringWithFormat:@"content: minLightIntensity: %f, maxLightIntensity: %f, ambiguity:%f", (float)self.minLightIntensity, (float)self.maxLightIntensity, self.ambiguity];
  160. NSString *content2 = [NSString stringWithFormat:@"content: :leftEyeOcclusion: %f, rightEyeOcclusion: %f,noseOcclusion :%f", (float)self.leftEyeOcclusion, (float)self.rightEyeOcclusion, (float)self.noseOcclusion];
  161. NSString *content3 = [NSString stringWithFormat:@"content: :mouthOcclusion: %f, leftFaceOcclusion: %f,rightFaceOcclusion :%f; lowerJawOcclusion: %f", (float)self.mouthOcclusion, (float)self.leftFaceOcclusion, self.rightFaceOcclusion, self.lowerJawOcclusion];
  162. NSString *content4 = [NSString stringWithFormat:@"content: :upAndDownAngle: %f, :leftAndRightAngle %f,spinAngle :%f", (float)self.upAndDownAngle, (float)self.leftAndRightAngle, (float)self.spinAngle];
  163. NSString *value = [NSString stringWithFormat:@"%@%@%@%@", content1, content2, content3, content4];
  164. return value;
  165. }
  166. @end