AnalyzeConfig.mm 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. //
  2. // AnalyzeConfig.m
  3. // FunSDKDemo
  4. //
  5. // Created by XM on 2018/12/22.
  6. // Copyright © 2018年 XM. All rights reserved.
  7. //
  8. #import "AnalyzeConfig.h"
  9. #import "Detect_Analyze.h"
  10. #import "AnalyzeDataSource.h"
  11. @interface AnalyzeConfig ()
  12. {
  13. Detect_Analyze Analyze;//智能分析
  14. AnalyzeDataSource *dataSource; //智能分析数据支持对象
  15. }
  16. @end
  17. @implementation AnalyzeConfig
  18. #pragma mark 判断当前数据是否有效 (比如获取到的数据异常)
  19. - (BOOL)checkParam {
  20. if (Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire.Size()<=0) {
  21. return NO;
  22. }
  23. if (Analyze.mRuleConfig.mOSCRule.mAbandumRule.SpclRgs.Size()<=0) {
  24. return NO;
  25. }
  26. if (Analyze.mRuleConfig.mOSCRule.mNoParkingRule.SpclRgs.Size()<=0) {
  27. return NO;
  28. }
  29. if (Analyze.mRuleConfig.mOSCRule.mStolenRule.SpclRgs.Size()<=0) {
  30. return NO;
  31. }
  32. return YES;
  33. }
  34. #pragma mark - 请求智能分析
  35. - (void)getAnalyzeConfig {
  36. ChannelObject *channel = [[DeviceControl getInstance] getSelectChannel];
  37. DeviceObject *device = [[DeviceControl getInstance] GetDeviceObjectBySN:channel.deviceMac];
  38. dataSource = [self getAnalyzeDataSource];
  39. if (device.sysFunction.NewVideoAnalyze == YES) {
  40. //支持智能分析
  41. }else {
  42. return;
  43. }
  44. CfgParam* paramsetEnableVideo = [[CfgParam alloc] initWithName:[NSString stringWithUTF8String:Analyze.Name()] andDevId:channel.deviceMac andChannel:channel.channelNumber andConfig:&Analyze andOnce:YES andSaveLocal:NO];
  45. [self AddConfig:paramsetEnableVideo];
  46. [self GetConfig];
  47. }
  48. #pragma mark - 保存智能分析配置
  49. - (void)setAnalyzeConfig {
  50. //当前算法配置
  51. Analyze.Enable = dataSource.AnalyzeEnable;
  52. Analyze.mEventHandler.RecordEnable = dataSource.AnalyzeEnable;
  53. Analyze.ModuleType = dataSource.ModuleType;
  54. //PEA配置
  55. Analyze.mRuleConfig.mPEARule.PerimeterEnable = dataSource.PerimeterEnable;//周线警戒开关
  56. Analyze.mRuleConfig.mPEARule.TripWireEnable = dataSource.TripWireEnable; //单线警戒开关
  57. Analyze.mRuleConfig.mPEARule.ShowRule = dataSource.PeaShowRule; //显示规则
  58. Analyze.mRuleConfig.mPEARule.ShowTrace = dataSource.PeaShowTrace; //显示踪迹
  59. Analyze.mRuleConfig.mPEARule.ShowTrack = dataSource.PeaShowRule;
  60. Analyze.mRuleConfig.mPEARule.mPerimeterRule.mLimitPara.DirectionLimit = dataSource.DirectionLimit; //周线警戒方向
  61. if (Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire.Size()>0) {//单线警戒方向
  62. Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].IsDoubleDir = dataSource.IsDoubleDir;
  63. Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].Valid = dataSource.PeaShowRule;
  64. }
  65. //OSC配置
  66. Analyze.mRuleConfig.mOSCRule.AbandumEnable = dataSource.AbandumEnable;
  67. Analyze.mRuleConfig.mOSCRule.StolenEnable = dataSource.StolenEnable;
  68. Analyze.mRuleConfig.mOSCRule.ShowRule = dataSource.OscShowRule;
  69. Analyze.mRuleConfig.mOSCRule.ShowTrace = dataSource.OscShowTrace;
  70. Analyze.mRuleConfig.mOSCRule.ShowTrack = dataSource.OscShowRule;
  71. //设置是否显示规则
  72. Analyze.mRuleConfig.mOSCRule.mAbandumRule.SpclRgs[0].Valid = dataSource.OscShowRule;
  73. Analyze.mRuleConfig.mOSCRule.mNoParkingRule.SpclRgs[0].Valid = dataSource.OscShowRule;
  74. Analyze.mRuleConfig.mOSCRule.mStolenRule.SpclRgs[0].Valid = dataSource.OscShowRule;
  75. //场景变换检测
  76. Analyze.mRuleConfig.mAVDRule.ChangeEnable = dataSource.ChangeEnable;
  77. //人为干扰检测
  78. Analyze.mRuleConfig.mAVDRule.InterfereEnable = dataSource.InterfereEnable;
  79. //画面冻结检测
  80. Analyze.mRuleConfig.mAVDRule.FreezeEnable = dataSource.FreezeEnable;
  81. //信号缺失检测
  82. Analyze.mRuleConfig.mAVDRule.NosignalEnable = dataSource.NosignalEnable;
  83. [self SetConfig];
  84. }
  85. #pragma mark - 请求智能分析回调
  86. -(void)OnGetConfig:(CfgParam *)param{
  87. if ([param.name isEqualToString:[NSString stringWithUTF8String:Analyze.Name()]]) {
  88. if (param.errorCode <= 0) {
  89. }else{
  90. //智能分析开关
  91. dataSource.AnalyzeEnable = Analyze.Enable.Value();
  92. //智能分析算法
  93. dataSource.ModuleType = Analyze.ModuleType.Value();
  94. //警戒级别
  95. dataSource.PeaLevel = Analyze.mRuleConfig.mPEARule.Level.Value();
  96. //显示规则
  97. dataSource.PeaShowRule = Analyze.mRuleConfig.mPEARule.ShowRule.Value();
  98. //显示轨迹
  99. dataSource.PeaShowTrace = Analyze.mRuleConfig.mPEARule.ShowTrace.Value();
  100. //周线警戒开关
  101. dataSource.PerimeterEnable = Analyze.mRuleConfig.mPEARule.PerimeterEnable.Value();
  102. //周线警戒方向
  103. dataSource.DirectionLimit = Analyze.mRuleConfig.mPEARule.mPerimeterRule.mLimitPara.DirectionLimit.Value();
  104. //周线警戒点数组
  105. dataSource.PerimeterArray = [[self getAnalyzePointArray:DrawType_PEA_Area] mutableCopy];
  106. //单线警戒开关
  107. dataSource.TripWireEnable = Analyze.mRuleConfig.mPEARule.TripWireEnable.Value();
  108. //单线警戒是否是双向
  109. if (Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire.Size()>0) {
  110. dataSource.IsDoubleDir = Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].IsDoubleDir.Value();
  111. }
  112. //单线警戒点数组
  113. dataSource.TripWireArray = [[self getAnalyzePointArray:DrawType_PEA_Line] mutableCopy];
  114. //警戒级别
  115. dataSource.OscLevel = Analyze.mRuleConfig.mOSCRule.Level.Value();
  116. //显示规则
  117. dataSource.OscShowRule = Analyze.mRuleConfig.mOSCRule.ShowRule.Value();
  118. //显示轨迹
  119. dataSource.OscShowTrace = Analyze.mRuleConfig.mOSCRule.ShowTrace.Value();
  120. //物品滞留开关
  121. dataSource.AbandumEnable = Analyze.mRuleConfig.mOSCRule.AbandumEnable.Value();
  122. //物品滞留点数组
  123. dataSource.AbandumArray = [[self getAnalyzePointArray:DrawType_OSC_Stay] mutableCopy];
  124. //物品盗移开关
  125. dataSource.StolenEnable = Analyze.mRuleConfig.mOSCRule.StolenEnable.Value();
  126. //物品盗移点数组
  127. dataSource.StolenArray = [[self getAnalyzePointArray:DrawType_OSC_Move] mutableCopy];
  128. //场景变换检测
  129. dataSource.ChangeEnable = Analyze.mRuleConfig.mAVDRule.ChangeEnable.Value();
  130. //人为干扰检测
  131. dataSource.InterfereEnable = Analyze.mRuleConfig.mAVDRule.InterfereEnable.Value();
  132. //画面冻结检测
  133. dataSource.FreezeEnable = Analyze.mRuleConfig.mAVDRule.FreezeEnable.Value();
  134. //信号缺失检测
  135. dataSource.NosignalEnable = Analyze.mRuleConfig.mAVDRule.NosignalEnable.Value();
  136. }
  137. if ([self.delegate respondsToSelector:@selector(getAnalyzeConfigResult:)]) {
  138. [self.delegate getAnalyzeConfigResult:param.errorCode];
  139. }
  140. }
  141. }
  142. #pragma mark - 设置智能分析配置回调
  143. -(void)OnSetConfig:(CfgParam *)param {
  144. if ( [param.name isEqualToString:[NSString stringWithUTF8String:Analyze.Name()]] ) {
  145. if ([self.delegate respondsToSelector:@selector(setAnalyzeConfigResult:)]) {
  146. [self.delegate setAnalyzeConfigResult:param.errorCode];
  147. }
  148. }
  149. }
  150. #pragma mark - 获取区域警戒点数组
  151. -(NSMutableArray*)getAnalyzePointArray:(DrawType)type
  152. {
  153. NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];
  154. switch (type) {
  155. case DrawType_PEA_Line: {
  156. [self getTripWireData:array];
  157. }
  158. break;
  159. case DrawType_PEA_Area: {
  160. [self getPerimeterData:array];
  161. }
  162. break;
  163. case DrawType_OSC_Move: {
  164. [self getStolenRuleData:array];
  165. }
  166. break;
  167. case DrawType_OSC_Stay: {
  168. [self getAbandumData:array];
  169. }
  170. break;
  171. default:
  172. break;
  173. }
  174. return array;
  175. }
  176. //获取区域警戒数组
  177. -(void)getPerimeterData:(NSMutableArray*)array {
  178. for (int i = 0; i< Analyze.mRuleConfig.mPEARule.mPerimeterRule.mLimitPara.mBoundary.PointNum.Value(); i++) {
  179. float x = Analyze.mRuleConfig.mPEARule.mPerimeterRule.mLimitPara.mBoundary.Points[i].x.Value();
  180. float y = Analyze.mRuleConfig.mPEARule.mPerimeterRule.mLimitPara.mBoundary.Points[i].y.Value();
  181. CGPoint point = CGPointMake(x/SCALEWIDEH*ScreenWidth, y/SCALEWIDEH*ScreenWidth);
  182. [array addObject:[NSValue valueWithCGPoint:point]];
  183. }
  184. }
  185. //获取单线警戒数组
  186. -(void)getTripWireData:(NSMutableArray*)array {
  187. if (Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire.Size() >0 ) {
  188. float xStart = Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].mLine.mStartPt.x.Value();
  189. float yStart = Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].mLine.mStartPt.y.Value();
  190. CGPoint pStart = CGPointMake(xStart/SCALEWIDEH*ScreenWidth, yStart/SCALEWIDEH*ScreenWidth);
  191. float xEnd = Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].mLine.mEndPt.x.Value();
  192. float yEnd = Analyze.mRuleConfig.mPEARule.mTripWireRule.TripWire[0].mLine.mEndPt.y.Value();
  193. CGPoint pEnd = CGPointMake(xEnd/SCALEWIDEH*ScreenWidth, yEnd/SCALEWIDEH*ScreenWidth);
  194. [array addObject:[NSValue valueWithCGPoint:pStart]];
  195. [array addObject:[NSValue valueWithCGPoint:pEnd]];
  196. }
  197. }
  198. //获取物品滞留数组
  199. -(void)getAbandumData:(NSMutableArray*)array {
  200. if (Analyze.mRuleConfig.mOSCRule.mAbandumRule.SpclRgs.Size() > 0 ) {
  201. for (int i =0; i< Analyze.mRuleConfig.mOSCRule.mAbandumRule.SpclRgs[0].mOscRg.PointNu.Value(); i++) {
  202. float x = Analyze.mRuleConfig.mOSCRule.mAbandumRule.SpclRgs[0].mOscRg.Points[i].x.Value();
  203. float y = Analyze.mRuleConfig.mOSCRule.mAbandumRule.SpclRgs[0].mOscRg.Points[i].y.Value();
  204. CGPoint point = CGPointMake(x/SCALEWIDEH*ScreenWidth, y/SCALEWIDEH*ScreenWidth);
  205. [array addObject:[NSValue valueWithCGPoint:point]];
  206. }
  207. }
  208. }
  209. //获取物品盗移数组
  210. -(void)getStolenRuleData:(NSMutableArray*)array {
  211. if (Analyze.mRuleConfig.mOSCRule.mStolenRule.SpclRgs.Size() > 0 ) {
  212. for (int i =0; i< Analyze.mRuleConfig.mOSCRule.mStolenRule.SpclRgs[0].mOscRg.PointNu.Value(); i++) {
  213. float x = Analyze.mRuleConfig.mOSCRule.mStolenRule.SpclRgs[0].mOscRg.Points[i].x.Value();
  214. float y = Analyze.mRuleConfig.mOSCRule.mStolenRule.SpclRgs[0].mOscRg.Points[i].y.Value();
  215. CGPoint point = CGPointMake(x/SCALEWIDEH*ScreenWidth, y/SCALEWIDEH*ScreenWidth);
  216. [array addObject:[NSValue valueWithCGPoint:point]];
  217. }
  218. }
  219. }
  220. - (AnalyzeDataSource*)getAnalyzeDataSource {
  221. if (dataSource == nil) {
  222. dataSource = [[AnalyzeDataSource alloc] init];
  223. }
  224. return dataSource;
  225. }
  226. - (NSMutableArray*)getEnableArray {//获取开关数组
  227. NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];
  228. for (int i =0 ; i< 2; i++) {
  229. NSString *enable = [dataSource getEnableString:i];
  230. [array addObject:enable];
  231. }
  232. return array;
  233. }
  234. - (void)didReceiveMemoryWarning {
  235. [super didReceiveMemoryWarning];
  236. // Dispose of any resources that can be recreated.
  237. }
  238. @end