edge-impulse-linux 1.8.9 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/build/cli/check-new-version.js +1 -1
  2. package/build/cli/check-new-version.js.map +1 -1
  3. package/build/cli/config.d.ts +7 -0
  4. package/build/cli/config.js +16 -1
  5. package/build/cli/config.js.map +1 -1
  6. package/build/cli/init-cli-app.js +1 -1
  7. package/build/cli/init-cli-app.js.map +1 -1
  8. package/build/cli/linux/remote-mgmt-service.d.ts +3 -1
  9. package/build/cli/linux/remote-mgmt-service.js +1 -1
  10. package/build/cli/linux/remote-mgmt-service.js.map +1 -1
  11. package/build/cli/linux/runner-downloader.d.ts +17 -2
  12. package/build/cli/linux/runner-downloader.js +42 -18
  13. package/build/cli/linux/runner-downloader.js.map +1 -1
  14. package/build/cli/linux/runner.js +93 -14
  15. package/build/cli/linux/runner.js.map +1 -1
  16. package/build/cli/linux/webserver/views/escape-html-template-tag/escape.js.map +1 -1
  17. package/build/library/argv-split.js.map +1 -1
  18. package/build/library/sensors/gstreamer.js +1 -1
  19. package/build/library/sensors/gstreamer.js.map +1 -1
  20. package/build/library/sensors/prophesee.js.map +1 -1
  21. package/build/library/sensors/recorder.js.map +1 -1
  22. package/build/sdk/studio/sdk/api/adminApi.d.ts +166 -19
  23. package/build/sdk/studio/sdk/api/adminApi.js +1052 -202
  24. package/build/sdk/studio/sdk/api/adminApi.js.map +1 -1
  25. package/build/sdk/studio/sdk/api/authApi.js +2 -2
  26. package/build/sdk/studio/sdk/api/authApi.js.map +1 -1
  27. package/build/sdk/studio/sdk/api/cDNApi.js +1 -1
  28. package/build/sdk/studio/sdk/api/cDNApi.js.map +1 -1
  29. package/build/sdk/studio/sdk/api/canaryApi.js +1 -1
  30. package/build/sdk/studio/sdk/api/canaryApi.js.map +1 -1
  31. package/build/sdk/studio/sdk/api/classifyApi.d.ts +25 -7
  32. package/build/sdk/studio/sdk/api/classifyApi.js +41 -13
  33. package/build/sdk/studio/sdk/api/classifyApi.js.map +1 -1
  34. package/build/sdk/studio/sdk/api/dSPApi.d.ts +3 -3
  35. package/build/sdk/studio/sdk/api/dSPApi.js +12 -12
  36. package/build/sdk/studio/sdk/api/dSPApi.js.map +1 -1
  37. package/build/sdk/studio/sdk/api/deploymentApi.d.ts +45 -9
  38. package/build/sdk/studio/sdk/api/deploymentApi.js +57 -17
  39. package/build/sdk/studio/sdk/api/deploymentApi.js.map +1 -1
  40. package/build/sdk/studio/sdk/api/emailVerificationApi.d.ts +12 -0
  41. package/build/sdk/studio/sdk/api/emailVerificationApi.js +70 -0
  42. package/build/sdk/studio/sdk/api/emailVerificationApi.js.map +1 -1
  43. package/build/sdk/studio/sdk/api/healthApi.d.ts +2 -2
  44. package/build/sdk/studio/sdk/api/healthApi.js +2 -2
  45. package/build/sdk/studio/sdk/api/healthApi.js.map +1 -1
  46. package/build/sdk/studio/sdk/api/impulseApi.d.ts +121 -25
  47. package/build/sdk/studio/sdk/api/impulseApi.js +537 -52
  48. package/build/sdk/studio/sdk/api/impulseApi.js.map +1 -1
  49. package/build/sdk/studio/sdk/api/jobsApi.d.ts +99 -15
  50. package/build/sdk/studio/sdk/api/jobsApi.js +381 -29
  51. package/build/sdk/studio/sdk/api/jobsApi.js.map +1 -1
  52. package/build/sdk/studio/sdk/api/learnApi.d.ts +41 -17
  53. package/build/sdk/studio/sdk/api/learnApi.js +47 -15
  54. package/build/sdk/studio/sdk/api/learnApi.js.map +1 -1
  55. package/build/sdk/studio/sdk/api/optimizationApi.d.ts +36 -0
  56. package/build/sdk/studio/sdk/api/optimizationApi.js +245 -2
  57. package/build/sdk/studio/sdk/api/optimizationApi.js.map +1 -1
  58. package/build/sdk/studio/sdk/api/organizationBlocksApi.d.ts +2 -3
  59. package/build/sdk/studio/sdk/api/organizationBlocksApi.js +28 -28
  60. package/build/sdk/studio/sdk/api/organizationBlocksApi.js.map +1 -1
  61. package/build/sdk/studio/sdk/api/organizationCreateProjectApi.d.ts +2 -2
  62. package/build/sdk/studio/sdk/api/organizationCreateProjectApi.js +8 -8
  63. package/build/sdk/studio/sdk/api/organizationCreateProjectApi.js.map +1 -1
  64. package/build/sdk/studio/sdk/api/organizationDataApi.d.ts +8 -123
  65. package/build/sdk/studio/sdk/api/organizationDataApi.js +37 -621
  66. package/build/sdk/studio/sdk/api/organizationDataApi.js.map +1 -1
  67. package/build/sdk/studio/sdk/api/organizationDataCampaignsApi.d.ts +1 -2
  68. package/build/sdk/studio/sdk/api/organizationJobsApi.d.ts +6 -6
  69. package/build/sdk/studio/sdk/api/organizationJobsApi.js +18 -18
  70. package/build/sdk/studio/sdk/api/organizationJobsApi.js.map +1 -1
  71. package/build/sdk/studio/sdk/api/organizationPipelinesApi.d.ts +3 -3
  72. package/build/sdk/studio/sdk/api/organizationPipelinesApi.js +3 -3
  73. package/build/sdk/studio/sdk/api/organizationPipelinesApi.js.map +1 -1
  74. package/build/sdk/studio/sdk/api/organizationsApi.d.ts +97 -29
  75. package/build/sdk/studio/sdk/api/organizationsApi.js +416 -54
  76. package/build/sdk/studio/sdk/api/organizationsApi.js.map +1 -1
  77. package/build/sdk/studio/sdk/api/performanceCalibrationApi.d.ts +66 -11
  78. package/build/sdk/studio/sdk/api/performanceCalibrationApi.js +127 -10
  79. package/build/sdk/studio/sdk/api/performanceCalibrationApi.js.map +1 -1
  80. package/build/sdk/studio/sdk/api/projectsApi.d.ts +15 -18
  81. package/build/sdk/studio/sdk/api/projectsApi.js +17 -82
  82. package/build/sdk/studio/sdk/api/projectsApi.js.map +1 -1
  83. package/build/sdk/studio/sdk/api/rawDataApi.d.ts +16 -6
  84. package/build/sdk/studio/sdk/api/rawDataApi.js +122 -102
  85. package/build/sdk/studio/sdk/api/rawDataApi.js.map +1 -1
  86. package/build/sdk/studio/sdk/api/themesApi.d.ts +1 -2
  87. package/build/sdk/studio/sdk/api/thirdPartyAuthApi.d.ts +1 -2
  88. package/build/sdk/studio/sdk/api/thirdPartyAuthApi.js +1 -1
  89. package/build/sdk/studio/sdk/api/thirdPartyAuthApi.js.map +1 -1
  90. package/build/sdk/studio/sdk/api/uploadPortalApi.js +1 -1
  91. package/build/sdk/studio/sdk/api/uploadPortalApi.js.map +1 -1
  92. package/build/sdk/studio/sdk/api/userApi.d.ts +5 -4
  93. package/build/sdk/studio/sdk/api/userApi.js +7 -1
  94. package/build/sdk/studio/sdk/api/userApi.js.map +1 -1
  95. package/build/sdk/studio/sdk/model/addOrganizationTransferLearningBlockRequest.d.ts +7 -0
  96. package/build/sdk/studio/sdk/model/addOrganizationTransferLearningBlockRequest.js +10 -0
  97. package/build/sdk/studio/sdk/model/addOrganizationTransferLearningBlockRequest.js.map +1 -1
  98. package/build/sdk/studio/sdk/model/adminGetOrganizationComputeTimeUsageResponse.d.ts +1 -1
  99. package/build/sdk/studio/sdk/model/adminGetOrganizationsResponseAllOfOrganizations.d.ts +1 -0
  100. package/build/sdk/studio/sdk/model/adminGetOrganizationsResponseAllOfOrganizations.js +5 -0
  101. package/build/sdk/studio/sdk/model/adminGetOrganizationsResponseAllOfOrganizations.js.map +1 -1
  102. package/build/sdk/studio/sdk/model/{organizationProjectsDataBatchDisableResponse.d.ts → adminGetReportResponse.d.ts} +3 -2
  103. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportResponse.js → adminGetReportResponse.js} +8 -8
  104. package/build/sdk/studio/sdk/model/adminGetReportResponse.js.map +1 -0
  105. package/build/sdk/studio/sdk/model/adminGetReportResponseAllOf.d.ts +26 -0
  106. package/build/sdk/studio/sdk/model/adminGetReportResponseAllOf.js +29 -0
  107. package/build/sdk/studio/sdk/model/adminGetReportResponseAllOf.js.map +1 -0
  108. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportsResponse.d.ts → adminGetReportsResponse.d.ts} +3 -3
  109. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportsResponse.js → adminGetReportsResponse.js} +8 -8
  110. package/build/sdk/studio/sdk/model/adminGetReportsResponse.js.map +1 -0
  111. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportsResponseAllOf.d.ts → adminGetReportsResponseAllOf.d.ts} +3 -3
  112. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportsResponseAllOf.js → adminGetReportsResponseAllOf.js} +8 -8
  113. package/build/sdk/studio/sdk/model/adminGetReportsResponseAllOf.js.map +1 -0
  114. package/build/sdk/studio/sdk/model/adminOrganizationInfoResponse.d.ts +1 -1
  115. package/build/sdk/studio/sdk/model/adminUpdateConfigRequest.d.ts +28 -0
  116. package/build/sdk/studio/sdk/model/adminUpdateConfigRequest.js +29 -0
  117. package/build/sdk/studio/sdk/model/adminUpdateConfigRequest.js.map +1 -0
  118. package/build/sdk/studio/sdk/model/allLearnBlocksResponse.d.ts +34 -0
  119. package/build/sdk/studio/sdk/model/allLearnBlocksResponse.js +39 -0
  120. package/build/sdk/studio/sdk/model/allLearnBlocksResponse.js.map +1 -0
  121. package/build/sdk/studio/sdk/model/allLearnBlocksResponseAllOf.d.ts +26 -0
  122. package/build/sdk/studio/sdk/model/allLearnBlocksResponseAllOf.js +29 -0
  123. package/build/sdk/studio/sdk/model/allLearnBlocksResponseAllOf.js.map +1 -0
  124. package/build/sdk/studio/sdk/model/allLearnBlocksResponseAllOfLearnBlocks.d.ts +36 -0
  125. package/build/sdk/studio/sdk/model/allLearnBlocksResponseAllOfLearnBlocks.js +69 -0
  126. package/build/sdk/studio/sdk/model/allLearnBlocksResponseAllOfLearnBlocks.js.map +1 -0
  127. package/build/sdk/studio/sdk/model/{anomalyResponseAllOf.d.ts → anomalyConfig.d.ts} +3 -3
  128. package/build/sdk/studio/sdk/model/{anomalyResponseAllOf.js → anomalyConfig.js} +8 -8
  129. package/build/sdk/studio/sdk/model/anomalyConfig.js.map +1 -0
  130. package/build/sdk/studio/sdk/model/{anomalyResponseAllOfAxes.d.ts → anomalyConfigAxes.d.ts} +1 -1
  131. package/build/sdk/studio/sdk/model/{anomalyResponseAllOfAxes.js → anomalyConfigAxes.js} +7 -7
  132. package/build/sdk/studio/sdk/model/anomalyConfigAxes.js.map +1 -0
  133. package/build/sdk/studio/sdk/model/{anomalyResponse.d.ts → anomalyConfigResponse.d.ts} +3 -3
  134. package/build/sdk/studio/sdk/model/{anomalyResponse.js → anomalyConfigResponse.js} +8 -8
  135. package/build/sdk/studio/sdk/model/anomalyConfigResponse.js.map +1 -0
  136. package/build/sdk/studio/sdk/model/anomalyGmmMetadata.d.ts +0 -8
  137. package/build/sdk/studio/sdk/model/anomalyGmmMetadata.js +0 -10
  138. package/build/sdk/studio/sdk/model/anomalyGmmMetadata.js.map +1 -1
  139. package/build/sdk/studio/sdk/model/{anomalyGmmMetadataAllOf.d.ts → anomalyGmmMetadataResponse.d.ts} +9 -1
  140. package/build/sdk/studio/sdk/model/{anomalyGmmMetadataAllOf.js → anomalyGmmMetadataResponse.js} +17 -7
  141. package/build/sdk/studio/sdk/model/anomalyGmmMetadataResponse.js.map +1 -0
  142. package/build/sdk/studio/sdk/model/anomalyModelMetadata.d.ts +2 -10
  143. package/build/sdk/studio/sdk/model/anomalyModelMetadata.js +1 -11
  144. package/build/sdk/studio/sdk/model/anomalyModelMetadata.js.map +1 -1
  145. package/build/sdk/studio/sdk/model/{anomalyModelMetadataAllOfClusters.d.ts → anomalyModelMetadataClusters.d.ts} +1 -1
  146. package/build/sdk/studio/sdk/model/{anomalyModelMetadataAllOfClusters.js → anomalyModelMetadataClusters.js} +7 -7
  147. package/build/sdk/studio/sdk/model/anomalyModelMetadataClusters.js.map +1 -0
  148. package/build/sdk/studio/sdk/model/{anomalyModelMetadataAllOf.d.ts → anomalyModelMetadataResponse.d.ts} +11 -3
  149. package/build/sdk/studio/sdk/model/{anomalyModelMetadataAllOf.js → anomalyModelMetadataResponse.js} +18 -8
  150. package/build/sdk/studio/sdk/model/anomalyModelMetadataResponse.js.map +1 -0
  151. package/build/sdk/studio/sdk/model/blockParameters.d.ts +47 -0
  152. package/build/sdk/studio/sdk/model/blockParameters.js +52 -0
  153. package/build/sdk/studio/sdk/model/blockParameters.js.map +1 -0
  154. package/build/sdk/studio/sdk/model/blockParamsVisualAnomalyGmm.d.ts +28 -0
  155. package/build/sdk/studio/sdk/model/blockParamsVisualAnomalyGmm.js +29 -0
  156. package/build/sdk/studio/sdk/model/blockParamsVisualAnomalyGmm.js.map +1 -0
  157. package/build/sdk/studio/sdk/model/blockParamsVisualAnomalyPatchcore.d.ts +44 -0
  158. package/build/sdk/studio/sdk/model/blockParamsVisualAnomalyPatchcore.js +49 -0
  159. package/build/sdk/studio/sdk/model/blockParamsVisualAnomalyPatchcore.js.map +1 -0
  160. package/build/sdk/studio/sdk/model/canaryResponse.d.ts +8 -0
  161. package/build/sdk/studio/sdk/model/canaryResponse.js +10 -0
  162. package/build/sdk/studio/sdk/model/canaryResponse.js.map +1 -1
  163. package/build/sdk/studio/sdk/model/canaryResponseAllOf.d.ts +28 -0
  164. package/build/sdk/studio/sdk/model/{getNotesResponseAllOf.js → canaryResponseAllOf.js} +10 -10
  165. package/build/sdk/studio/sdk/model/canaryResponseAllOf.js.map +1 -0
  166. package/build/sdk/studio/sdk/model/classifySampleResponseClassification.d.ts +1 -1
  167. package/build/sdk/studio/sdk/model/{organizationProjectsDataBatchRequest.d.ts → cloneImpulseRequest.d.ts} +2 -2
  168. package/build/sdk/studio/sdk/model/cloneImpulseRequest.js +29 -0
  169. package/build/sdk/studio/sdk/model/cloneImpulseRequest.js.map +1 -0
  170. package/build/sdk/studio/sdk/model/createImpulseRequest.d.ts +43 -0
  171. package/build/sdk/studio/sdk/model/createImpulseRequest.js +44 -0
  172. package/build/sdk/studio/sdk/model/createImpulseRequest.js.map +1 -0
  173. package/build/sdk/studio/sdk/model/{createBlockVersionResponse.d.ts → createImpulseResponse.d.ts} +2 -2
  174. package/build/sdk/studio/sdk/model/{createBlockVersionResponse.js → createImpulseResponse.js} +7 -7
  175. package/build/sdk/studio/sdk/model/createImpulseResponse.js.map +1 -0
  176. package/build/sdk/studio/sdk/model/{createBlockVersionResponseAllOf.d.ts → createImpulseResponseAllOf.d.ts} +2 -2
  177. package/build/sdk/studio/sdk/model/{createBlockVersionResponseAllOf.js → createImpulseResponseAllOf.js} +7 -7
  178. package/build/sdk/studio/sdk/model/createImpulseResponseAllOf.js.map +1 -0
  179. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportResponse.d.ts → createNewEmptyImpulseResponse.d.ts} +9 -3
  180. package/build/sdk/studio/sdk/model/{getOrganizationProjectsDataCountResponse.js → createNewEmptyImpulseResponse.js} +14 -9
  181. package/build/sdk/studio/sdk/model/createNewEmptyImpulseResponse.js.map +1 -0
  182. package/build/sdk/studio/sdk/model/{listOrganizationProjectsDataResponseAllOfProjects.d.ts → createNewEmptyImpulseResponseAllOf.d.ts} +8 -4
  183. package/build/sdk/studio/sdk/model/createNewEmptyImpulseResponseAllOf.js +34 -0
  184. package/build/sdk/studio/sdk/model/createNewEmptyImpulseResponseAllOf.js.map +1 -0
  185. package/build/sdk/studio/sdk/model/createProTierUserRequest.d.ts +4 -0
  186. package/build/sdk/studio/sdk/model/createProTierUserRequest.js +5 -0
  187. package/build/sdk/studio/sdk/model/createProTierUserRequest.js.map +1 -1
  188. package/build/sdk/studio/sdk/model/createUserRequest.d.ts +4 -0
  189. package/build/sdk/studio/sdk/model/createUserRequest.js +5 -0
  190. package/build/sdk/studio/sdk/model/createUserRequest.js.map +1 -1
  191. package/build/sdk/studio/sdk/model/{dSPConfigResponseAllOf.d.ts → dSPConfig.d.ts} +1 -1
  192. package/build/sdk/studio/sdk/model/{dSPConfigResponseAllOf.js → dSPConfig.js} +7 -7
  193. package/build/sdk/studio/sdk/model/dSPConfig.js.map +1 -0
  194. package/build/sdk/studio/sdk/model/dataExplorerSettings.d.ts +4 -0
  195. package/build/sdk/studio/sdk/model/dataExplorerSettings.js +5 -0
  196. package/build/sdk/studio/sdk/model/dataExplorerSettings.js.map +1 -1
  197. package/build/sdk/studio/sdk/model/deployPretrainedModelRequest.d.ts +6 -0
  198. package/build/sdk/studio/sdk/model/deployPretrainedModelRequest.js +7 -1
  199. package/build/sdk/studio/sdk/model/deployPretrainedModelRequest.js.map +1 -1
  200. package/build/sdk/studio/sdk/model/deploymentTargetEngine.d.ts +1 -1
  201. package/build/sdk/studio/sdk/model/deploymentTargetEngine.js +1 -1
  202. package/build/sdk/studio/sdk/model/deploymentTargetEngine.js.map +1 -1
  203. package/build/sdk/studio/sdk/model/detailedImpulse.d.ts +44 -0
  204. package/build/sdk/studio/sdk/model/detailedImpulse.js +64 -0
  205. package/build/sdk/studio/sdk/model/detailedImpulse.js.map +1 -0
  206. package/build/sdk/studio/sdk/model/detailedImpulseDspBlockConfigs.d.ts +29 -0
  207. package/build/sdk/studio/sdk/model/detailedImpulseDspBlockConfigs.js +39 -0
  208. package/build/sdk/studio/sdk/model/detailedImpulseDspBlockConfigs.js.map +1 -0
  209. package/build/sdk/studio/sdk/model/detailedImpulseLearnBlockAnomalyConfigs.d.ts +31 -0
  210. package/build/sdk/studio/sdk/model/detailedImpulseLearnBlockAnomalyConfigs.js +44 -0
  211. package/build/sdk/studio/sdk/model/detailedImpulseLearnBlockAnomalyConfigs.js.map +1 -0
  212. package/build/sdk/studio/sdk/model/detailedImpulseLearnBlockKerasConfigs.d.ts +29 -0
  213. package/build/sdk/studio/sdk/model/detailedImpulseLearnBlockKerasConfigs.js +39 -0
  214. package/build/sdk/studio/sdk/model/detailedImpulseLearnBlockKerasConfigs.js.map +1 -0
  215. package/build/sdk/studio/sdk/model/detailedImpulseMetric.d.ts +40 -0
  216. package/build/sdk/studio/sdk/model/detailedImpulseMetric.js +70 -0
  217. package/build/sdk/studio/sdk/model/detailedImpulseMetric.js.map +1 -0
  218. package/build/sdk/studio/sdk/model/detailedImpulseMetricCategory.d.ts +13 -0
  219. package/build/sdk/studio/sdk/model/detailedImpulseMetricCategory.js +16 -0
  220. package/build/sdk/studio/sdk/model/detailedImpulseMetricCategory.js.map +1 -0
  221. package/build/sdk/studio/sdk/model/detailedImpulseMetricFilteringType.d.ts +28 -0
  222. package/build/sdk/studio/sdk/model/detailedImpulseMetricFilteringType.js +35 -0
  223. package/build/sdk/studio/sdk/model/detailedImpulseMetricFilteringType.js.map +1 -0
  224. package/build/sdk/studio/sdk/model/{getNotesResponseAllOf.d.ts → detailedImpulsePretrainedModelInfo.d.ts} +2 -3
  225. package/build/sdk/studio/sdk/model/detailedImpulsePretrainedModelInfo.js +29 -0
  226. package/build/sdk/studio/sdk/model/detailedImpulsePretrainedModelInfo.js.map +1 -0
  227. package/build/sdk/studio/sdk/model/downgradeSubscriptionRequest.d.ts +28 -0
  228. package/build/sdk/studio/sdk/model/downgradeSubscriptionRequest.js +29 -0
  229. package/build/sdk/studio/sdk/model/downgradeSubscriptionRequest.js.map +1 -0
  230. package/build/sdk/studio/sdk/model/editSampleLabelRequest.d.ts +1 -1
  231. package/build/sdk/studio/sdk/model/emailValidationRequest.d.ts +28 -0
  232. package/build/sdk/studio/sdk/model/emailValidationRequest.js +29 -0
  233. package/build/sdk/studio/sdk/model/emailValidationRequest.js.map +1 -0
  234. package/build/sdk/studio/sdk/model/feature.d.ts +1 -1
  235. package/build/sdk/studio/sdk/model/feature.js +1 -1
  236. package/build/sdk/studio/sdk/model/feature.js.map +1 -1
  237. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponse.d.ts +40 -0
  238. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponse.js +49 -0
  239. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponse.js.map +1 -0
  240. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOf.d.ts +32 -0
  241. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOf.js +39 -0
  242. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOf.js.map +1 -0
  243. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOfMetricKeys.d.ts +32 -0
  244. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOfMetricKeys.js +50 -0
  245. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOfMetricKeys.js.map +1 -0
  246. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOfMetricKeysByCategory.d.ts +28 -0
  247. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOfMetricKeysByCategory.js +34 -0
  248. package/build/sdk/studio/sdk/model/getAllDetailedImpulsesResponseAllOfMetricKeysByCategory.js.map +1 -0
  249. package/build/sdk/studio/sdk/model/{getNotesResponse.d.ts → getAllImpulsesResponse.d.ts} +3 -3
  250. package/build/sdk/studio/sdk/model/getAllImpulsesResponse.js +39 -0
  251. package/build/sdk/studio/sdk/model/getAllImpulsesResponse.js.map +1 -0
  252. package/build/sdk/studio/sdk/model/getAllImpulsesResponseAllOf.d.ts +26 -0
  253. package/build/sdk/studio/sdk/model/getAllImpulsesResponseAllOf.js +29 -0
  254. package/build/sdk/studio/sdk/model/getAllImpulsesResponseAllOf.js.map +1 -0
  255. package/build/sdk/studio/sdk/model/getDataExplorerSettingsResponse.d.ts +4 -0
  256. package/build/sdk/studio/sdk/model/getDataExplorerSettingsResponse.js +5 -0
  257. package/build/sdk/studio/sdk/model/getDataExplorerSettingsResponse.js.map +1 -1
  258. package/build/sdk/studio/sdk/model/getJobResponse.d.ts +1 -1
  259. package/build/sdk/studio/sdk/model/getJobResponseAllOf.d.ts +1 -1
  260. package/build/sdk/studio/sdk/model/getModelVariantsResponse.d.ts +1 -1
  261. package/build/sdk/studio/sdk/model/getModelVariantsResponseAllOf.d.ts +1 -1
  262. package/build/sdk/studio/sdk/model/{getOrganizationProjectsDataCountResponse.d.ts → getNewBlockIdResponse.d.ts} +2 -2
  263. package/build/sdk/studio/sdk/model/{getNotesResponse.js → getNewBlockIdResponse.js} +10 -10
  264. package/build/sdk/studio/sdk/model/getNewBlockIdResponse.js.map +1 -0
  265. package/build/sdk/studio/sdk/model/getNewBlockIdResponseAllOf.d.ts +25 -0
  266. package/build/sdk/studio/sdk/model/getNewBlockIdResponseAllOf.js +29 -0
  267. package/build/sdk/studio/sdk/model/getNewBlockIdResponseAllOf.js.map +1 -0
  268. package/build/sdk/studio/sdk/model/getOrganizationUsageReportResponse.d.ts +2 -2
  269. package/build/sdk/studio/sdk/model/getOrganizationUsageReportResponse.js +1 -1
  270. package/build/sdk/studio/sdk/model/getOrganizationUsageReportResponse.js.map +1 -1
  271. package/build/sdk/studio/sdk/model/getPostProcessingResultsResponse.d.ts +48 -0
  272. package/build/sdk/studio/sdk/model/getPostProcessingResultsResponse.js +54 -0
  273. package/build/sdk/studio/sdk/model/getPostProcessingResultsResponse.js.map +1 -0
  274. package/build/sdk/studio/sdk/model/{note.d.ts → getPostProcessingResultsResponseAllOf.d.ts} +9 -12
  275. package/build/sdk/studio/sdk/model/getPostProcessingResultsResponseAllOf.js +44 -0
  276. package/build/sdk/studio/sdk/model/getPostProcessingResultsResponseAllOf.js.map +1 -0
  277. package/build/sdk/studio/sdk/model/getStudioConfigResponse.d.ts +37 -0
  278. package/build/sdk/studio/sdk/model/getStudioConfigResponse.js +39 -0
  279. package/build/sdk/studio/sdk/model/getStudioConfigResponse.js.map +1 -0
  280. package/build/sdk/studio/sdk/model/getStudioConfigResponseAllOf.d.ts +29 -0
  281. package/build/sdk/studio/sdk/model/getStudioConfigResponseAllOf.js +29 -0
  282. package/build/sdk/studio/sdk/model/getStudioConfigResponseAllOf.js.map +1 -0
  283. package/build/sdk/studio/sdk/model/{adminGetOrganizationUsageReportResponseAllOf.d.ts → getStudioConfigResponseAllOfConfig.d.ts} +9 -3
  284. package/build/sdk/studio/sdk/model/getStudioConfigResponseAllOfConfig.js +34 -0
  285. package/build/sdk/studio/sdk/model/getStudioConfigResponseAllOfConfig.js.map +1 -0
  286. package/build/sdk/studio/sdk/model/getUserResponse.d.ts +4 -0
  287. package/build/sdk/studio/sdk/model/getUserResponse.js +5 -0
  288. package/build/sdk/studio/sdk/model/getUserResponse.js.map +1 -1
  289. package/build/sdk/studio/sdk/model/getUserResponseAllOf.d.ts +4 -0
  290. package/build/sdk/studio/sdk/model/getUserResponseAllOf.js +5 -0
  291. package/build/sdk/studio/sdk/model/getUserResponseAllOf.js.map +1 -1
  292. package/build/sdk/studio/sdk/model/impulse.d.ts +8 -0
  293. package/build/sdk/studio/sdk/model/impulse.js +10 -0
  294. package/build/sdk/studio/sdk/model/impulse.js.map +1 -1
  295. package/build/sdk/studio/sdk/model/impulseDspBlock.d.ts +5 -36
  296. package/build/sdk/studio/sdk/model/impulseDspBlock.js +5 -45
  297. package/build/sdk/studio/sdk/model/impulseDspBlock.js.map +1 -1
  298. package/build/sdk/studio/sdk/model/impulseDspBlockNamedAxes.d.ts +40 -0
  299. package/build/sdk/studio/sdk/model/{listOrganizationProjectsDataResponseAllOfProjects.js → impulseDspBlockNamedAxes.js} +16 -16
  300. package/build/sdk/studio/sdk/model/impulseDspBlockNamedAxes.js.map +1 -0
  301. package/build/sdk/studio/sdk/model/impulseInputBlock.d.ts +4 -38
  302. package/build/sdk/studio/sdk/model/impulseInputBlock.js +6 -46
  303. package/build/sdk/studio/sdk/model/impulseInputBlock.js.map +1 -1
  304. package/build/sdk/studio/sdk/model/impulseInputBlockDatasetSubset.d.ts +29 -0
  305. package/build/sdk/studio/sdk/model/impulseInputBlockDatasetSubset.js +37 -0
  306. package/build/sdk/studio/sdk/model/impulseInputBlockDatasetSubset.js.map +1 -0
  307. package/build/sdk/studio/sdk/model/impulseLearnBlock.d.ts +0 -36
  308. package/build/sdk/studio/sdk/model/impulseLearnBlock.js +0 -45
  309. package/build/sdk/studio/sdk/model/impulseLearnBlock.js.map +1 -1
  310. package/build/sdk/studio/sdk/model/inputBlock.d.ts +1 -1
  311. package/build/sdk/studio/sdk/model/inputBlock.js +1 -1
  312. package/build/sdk/studio/sdk/model/inputBlock.js.map +1 -1
  313. package/build/sdk/studio/sdk/model/{kerasResponseAllOf.d.ts → kerasConfig.d.ts} +6 -4
  314. package/build/sdk/studio/sdk/model/{kerasResponseAllOf.js → kerasConfig.js} +14 -9
  315. package/build/sdk/studio/sdk/model/kerasConfig.js.map +1 -0
  316. package/build/sdk/studio/sdk/model/kerasModelMetadata.d.ts +3 -10
  317. package/build/sdk/studio/sdk/model/kerasModelMetadata.js +3 -12
  318. package/build/sdk/studio/sdk/model/kerasModelMetadata.js.map +1 -1
  319. package/build/sdk/studio/sdk/model/{kerasModelMetadataAllOf.d.ts → kerasModelMetadataResponse.d.ts} +12 -3
  320. package/build/sdk/studio/sdk/model/{kerasModelMetadataAllOf.js → kerasModelMetadataResponse.js} +19 -8
  321. package/build/sdk/studio/sdk/model/kerasModelMetadataResponse.js.map +1 -0
  322. package/build/sdk/studio/sdk/model/kerasResponse.d.ts +2 -0
  323. package/build/sdk/studio/sdk/model/kerasResponse.js +5 -0
  324. package/build/sdk/studio/sdk/model/kerasResponse.js.map +1 -1
  325. package/build/sdk/studio/sdk/model/kerasVisualLayerType.d.ts +1 -1
  326. package/build/sdk/studio/sdk/model/kerasVisualLayerType.js +1 -1
  327. package/build/sdk/studio/sdk/model/kerasVisualLayerType.js.map +1 -1
  328. package/build/sdk/studio/sdk/model/listOrganizationUsageReportsResponse.d.ts +2 -2
  329. package/build/sdk/studio/sdk/model/listOrganizationUsageReportsResponse.js +1 -1
  330. package/build/sdk/studio/sdk/model/listOrganizationUsageReportsResponse.js.map +1 -1
  331. package/build/sdk/studio/sdk/model/listOrganizationUsageReportsResponseAllOf.d.ts +2 -2
  332. package/build/sdk/studio/sdk/model/listOrganizationUsageReportsResponseAllOf.js +1 -1
  333. package/build/sdk/studio/sdk/model/listOrganizationUsageReportsResponseAllOf.js.map +1 -1
  334. package/build/sdk/studio/sdk/model/listVersionsResponseAllOfVersions.d.ts +10 -0
  335. package/build/sdk/studio/sdk/model/listVersionsResponseAllOfVersions.js +5 -0
  336. package/build/sdk/studio/sdk/model/listVersionsResponseAllOfVersions.js.map +1 -1
  337. package/build/sdk/studio/sdk/model/modelPrediction.d.ts +1 -1
  338. package/build/sdk/studio/sdk/model/models.d.ts +70 -29
  339. package/build/sdk/studio/sdk/model/models.js +229 -99
  340. package/build/sdk/studio/sdk/model/models.js.map +1 -1
  341. package/build/sdk/studio/sdk/model/optimizeConfig.d.ts +74 -12
  342. package/build/sdk/studio/sdk/model/optimizeConfig.js +93 -13
  343. package/build/sdk/studio/sdk/model/optimizeConfig.js.map +1 -1
  344. package/build/sdk/studio/sdk/model/optimizeConfigResponse.d.ts +74 -12
  345. package/build/sdk/studio/sdk/model/optimizeConfigResponse.js +93 -13
  346. package/build/sdk/studio/sdk/model/optimizeConfigResponse.js.map +1 -1
  347. package/build/sdk/studio/sdk/model/optimizeConfigSearchSpaceTemplate.d.ts +45 -0
  348. package/build/sdk/studio/sdk/model/optimizeConfigSearchSpaceTemplate.js +48 -0
  349. package/build/sdk/studio/sdk/model/optimizeConfigSearchSpaceTemplate.js.map +1 -0
  350. package/build/sdk/studio/sdk/model/optimizeStateResponse.d.ts +5 -0
  351. package/build/sdk/studio/sdk/model/optimizeStateResponse.js +10 -0
  352. package/build/sdk/studio/sdk/model/optimizeStateResponse.js.map +1 -1
  353. package/build/sdk/studio/sdk/model/optimizeStateResponseAllOf.d.ts +5 -0
  354. package/build/sdk/studio/sdk/model/optimizeStateResponseAllOf.js +10 -0
  355. package/build/sdk/studio/sdk/model/optimizeStateResponseAllOf.js.map +1 -1
  356. package/build/sdk/studio/sdk/model/organizationAddDataFolderRequest.d.ts +2 -3
  357. package/build/sdk/studio/sdk/model/organizationAddDataFolderRequest.js +2 -3
  358. package/build/sdk/studio/sdk/model/organizationAddDataFolderRequest.js.map +1 -1
  359. package/build/sdk/studio/sdk/model/organizationAddDatasetRequest.d.ts +2 -3
  360. package/build/sdk/studio/sdk/model/organizationAddDatasetRequest.js +2 -3
  361. package/build/sdk/studio/sdk/model/organizationAddDatasetRequest.js.map +1 -1
  362. package/build/sdk/studio/sdk/model/organizationComputeTimeUsage.d.ts +1 -1
  363. package/build/sdk/studio/sdk/model/organizationCreateProjectWithFilesAllOfFiles.d.ts +2 -3
  364. package/build/sdk/studio/sdk/model/organizationCreateProjectWithFilesAllOfFiles.js +2 -3
  365. package/build/sdk/studio/sdk/model/organizationCreateProjectWithFilesAllOfFiles.js.map +1 -1
  366. package/build/sdk/studio/sdk/model/organizationDataset.d.ts +1 -2
  367. package/build/sdk/studio/sdk/model/organizationDataset.js +1 -2
  368. package/build/sdk/studio/sdk/model/organizationDataset.js.map +1 -1
  369. package/build/sdk/studio/sdk/model/organizationDatasetTypeEnum.d.ts +13 -0
  370. package/build/sdk/studio/sdk/model/organizationDatasetTypeEnum.js +16 -0
  371. package/build/sdk/studio/sdk/model/organizationDatasetTypeEnum.js.map +1 -0
  372. package/build/sdk/studio/sdk/model/organizationMetricsResponseAllOfMetrics.d.ts +2 -2
  373. package/build/sdk/studio/sdk/model/organizationPipelineFeedingIntoDataset.d.ts +2 -0
  374. package/build/sdk/studio/sdk/model/organizationPipelineFeedingIntoDataset.js +5 -0
  375. package/build/sdk/studio/sdk/model/organizationPipelineFeedingIntoDataset.js.map +1 -1
  376. package/build/sdk/studio/sdk/model/organizationTransferLearningBlock.d.ts +5 -0
  377. package/build/sdk/studio/sdk/model/organizationTransferLearningBlock.js +5 -0
  378. package/build/sdk/studio/sdk/model/organizationTransferLearningBlock.js.map +1 -1
  379. package/build/sdk/studio/sdk/model/organizationTransferLearningBlockCustomVariant.d.ts +34 -0
  380. package/build/sdk/studio/sdk/model/organizationTransferLearningBlockCustomVariant.js +39 -0
  381. package/build/sdk/studio/sdk/model/organizationTransferLearningBlockCustomVariant.js.map +1 -0
  382. package/build/sdk/studio/sdk/model/organizationTransferLearningBlockModelFile.d.ts +42 -0
  383. package/build/sdk/studio/sdk/model/organizationTransferLearningBlockModelFile.js +45 -0
  384. package/build/sdk/studio/sdk/model/organizationTransferLearningBlockModelFile.js.map +1 -0
  385. package/build/sdk/studio/sdk/model/organizationUser.d.ts +8 -0
  386. package/build/sdk/studio/sdk/model/organizationUser.js +10 -0
  387. package/build/sdk/studio/sdk/model/organizationUser.js.map +1 -1
  388. package/build/sdk/studio/sdk/model/organizationUserAllOf.d.ts +8 -0
  389. package/build/sdk/studio/sdk/model/organizationUserAllOf.js +10 -0
  390. package/build/sdk/studio/sdk/model/organizationUserAllOf.js.map +1 -1
  391. package/build/sdk/studio/sdk/model/permission.d.ts +1 -1
  392. package/build/sdk/studio/sdk/model/permission.js +1 -1
  393. package/build/sdk/studio/sdk/model/permission.js.map +1 -1
  394. package/build/sdk/studio/sdk/model/project.d.ts +5 -0
  395. package/build/sdk/studio/sdk/model/project.js +10 -0
  396. package/build/sdk/studio/sdk/model/project.js.map +1 -1
  397. package/build/sdk/studio/sdk/model/projectInfoResponse.d.ts +4 -0
  398. package/build/sdk/studio/sdk/model/projectInfoResponse.js +5 -0
  399. package/build/sdk/studio/sdk/model/projectInfoResponse.js.map +1 -1
  400. package/build/sdk/studio/sdk/model/projectInfoResponseAllOf.d.ts +4 -0
  401. package/build/sdk/studio/sdk/model/projectInfoResponseAllOf.js +5 -0
  402. package/build/sdk/studio/sdk/model/projectInfoResponseAllOf.js.map +1 -1
  403. package/build/sdk/studio/sdk/model/projectPublicData.d.ts +6 -0
  404. package/build/sdk/studio/sdk/model/projectPublicData.js.map +1 -1
  405. package/build/sdk/studio/sdk/model/{organizationUsageReport.d.ts → report.d.ts} +1 -1
  406. package/build/sdk/studio/sdk/model/{organizationUsageReport.js → report.js} +7 -7
  407. package/build/sdk/studio/sdk/model/report.js.map +1 -0
  408. package/build/sdk/studio/sdk/model/sample.d.ts +1 -1
  409. package/build/sdk/studio/sdk/model/sample.js +1 -1
  410. package/build/sdk/studio/sdk/model/sample.js.map +1 -1
  411. package/build/sdk/studio/sdk/model/setKerasParameterRequest.d.ts +2 -0
  412. package/build/sdk/studio/sdk/model/setKerasParameterRequest.js +5 -0
  413. package/build/sdk/studio/sdk/model/setKerasParameterRequest.js.map +1 -1
  414. package/build/sdk/studio/sdk/model/{organizationProjectsDataBulkMetadataRequest.d.ts → setLegacyImpulseStateInternalRequest.d.ts} +18 -3
  415. package/build/sdk/studio/sdk/model/setLegacyImpulseStateInternalRequest.js +39 -0
  416. package/build/sdk/studio/sdk/model/setLegacyImpulseStateInternalRequest.js.map +1 -0
  417. package/build/sdk/studio/sdk/model/setTunerPrimaryJobRequest.d.ts +28 -0
  418. package/build/sdk/studio/sdk/model/setTunerPrimaryJobRequest.js +29 -0
  419. package/build/sdk/studio/sdk/model/setTunerPrimaryJobRequest.js.map +1 -0
  420. package/build/sdk/studio/sdk/model/startClassifyJobRequest.d.ts +1 -1
  421. package/build/sdk/studio/sdk/model/startPostProcessingRequest.d.ts +60 -0
  422. package/build/sdk/studio/sdk/model/startPostProcessingRequest.js +70 -0
  423. package/build/sdk/studio/sdk/model/startPostProcessingRequest.js.map +1 -0
  424. package/build/sdk/studio/sdk/model/transferLearningModel.d.ts +1 -0
  425. package/build/sdk/studio/sdk/model/transferLearningModel.js +5 -0
  426. package/build/sdk/studio/sdk/model/transferLearningModel.js.map +1 -1
  427. package/build/sdk/studio/sdk/model/tunerCompleteSearch.d.ts +25 -0
  428. package/build/sdk/studio/sdk/model/tunerCompleteSearch.js +29 -0
  429. package/build/sdk/studio/sdk/model/tunerCompleteSearch.js.map +1 -0
  430. package/build/sdk/studio/sdk/model/tunerCreateTrialImpulse.d.ts +1 -0
  431. package/build/sdk/studio/sdk/model/tunerCreateTrialImpulse.js +5 -0
  432. package/build/sdk/studio/sdk/model/tunerCreateTrialImpulse.js.map +1 -1
  433. package/build/sdk/studio/sdk/model/tunerRun.d.ts +5 -0
  434. package/build/sdk/studio/sdk/model/tunerRun.js +5 -0
  435. package/build/sdk/studio/sdk/model/tunerRun.js.map +1 -1
  436. package/build/sdk/studio/sdk/model/tunerSpaceImpulse.d.ts +1 -1
  437. package/build/sdk/studio/sdk/model/tunerSpaceImpulse.js +1 -1
  438. package/build/sdk/studio/sdk/model/tunerSpaceImpulse.js.map +1 -1
  439. package/build/sdk/studio/sdk/model/tunerTrial.d.ts +8 -0
  440. package/build/sdk/studio/sdk/model/tunerTrial.js +25 -0
  441. package/build/sdk/studio/sdk/model/tunerTrial.js.map +1 -1
  442. package/build/sdk/studio/sdk/model/tunerTrialBlocks.d.ts +4 -0
  443. package/build/sdk/studio/sdk/model/tunerTrialBlocks.js +5 -0
  444. package/build/sdk/studio/sdk/model/tunerTrialBlocks.js.map +1 -1
  445. package/build/sdk/studio/sdk/model/tunerTrialImpulseAddedToProject.d.ts +26 -0
  446. package/build/sdk/studio/sdk/model/tunerTrialImpulseAddedToProject.js +34 -0
  447. package/build/sdk/studio/sdk/model/tunerTrialImpulseAddedToProject.js.map +1 -0
  448. package/build/sdk/studio/sdk/model/tunerTrialMetrics.d.ts +28 -0
  449. package/build/sdk/studio/sdk/model/tunerTrialMetrics.js +39 -0
  450. package/build/sdk/studio/sdk/model/tunerTrialMetrics.js.map +1 -0
  451. package/build/sdk/studio/sdk/model/tunerTrialMetricsTest.d.ts +27 -0
  452. package/build/sdk/studio/sdk/model/tunerTrialMetricsTest.js +34 -0
  453. package/build/sdk/studio/sdk/model/tunerTrialMetricsTest.js.map +1 -0
  454. package/build/sdk/studio/sdk/model/tunerTrialProgress.d.ts +29 -0
  455. package/build/sdk/studio/sdk/model/tunerTrialProgress.js +49 -0
  456. package/build/sdk/studio/sdk/model/tunerTrialProgress.js.map +1 -0
  457. package/build/sdk/studio/sdk/model/updateImpulseRequest.d.ts +26 -0
  458. package/build/sdk/studio/sdk/model/updateImpulseRequest.js +34 -0
  459. package/build/sdk/studio/sdk/model/updateImpulseRequest.js.map +1 -0
  460. package/build/sdk/studio/sdk/model/updateOrganizationDatasetRequest.d.ts +2 -3
  461. package/build/sdk/studio/sdk/model/updateOrganizationDatasetRequest.js +2 -3
  462. package/build/sdk/studio/sdk/model/updateOrganizationDatasetRequest.js.map +1 -1
  463. package/build/sdk/studio/sdk/model/updateOrganizationTransferLearningBlockRequest.d.ts +5 -0
  464. package/build/sdk/studio/sdk/model/updateOrganizationTransferLearningBlockRequest.js +5 -0
  465. package/build/sdk/studio/sdk/model/updateOrganizationTransferLearningBlockRequest.js.map +1 -1
  466. package/build/sdk/studio/sdk/model/updateProjectRequest.d.ts +12 -0
  467. package/build/sdk/studio/sdk/model/updateProjectRequest.js +15 -0
  468. package/build/sdk/studio/sdk/model/updateProjectRequest.js.map +1 -1
  469. package/build/sdk/studio/sdk/model/updateUserRequest.d.ts +4 -0
  470. package/build/sdk/studio/sdk/model/updateUserRequest.js +5 -0
  471. package/build/sdk/studio/sdk/model/updateUserRequest.js.map +1 -1
  472. package/build/sdk/studio/sdk/model/userOrganization.d.ts +15 -0
  473. package/build/sdk/studio/sdk/model/userOrganization.js +15 -0
  474. package/build/sdk/studio/sdk/model/userOrganization.js.map +1 -1
  475. package/build/sdk/studio/sdk/model/validateEmailResponse.d.ts +58 -0
  476. package/build/sdk/studio/sdk/model/validateEmailResponse.js +65 -0
  477. package/build/sdk/studio/sdk/model/validateEmailResponse.js.map +1 -0
  478. package/build/sdk/studio/sdk/model/validateEmailResponseAllOf.d.ts +50 -0
  479. package/build/sdk/studio/sdk/model/validateEmailResponseAllOf.js +55 -0
  480. package/build/sdk/studio/sdk/model/validateEmailResponseAllOf.js.map +1 -0
  481. package/build/sdk/studio/sdk/model/{windowSettingsResponseAllOfWindowSettings.d.ts → windowSettings.d.ts} +1 -1
  482. package/build/sdk/studio/sdk/model/{windowSettingsResponseAllOfWindowSettings.js → windowSettings.js} +7 -7
  483. package/build/sdk/studio/sdk/model/windowSettings.js.map +1 -0
  484. package/build/sdk/studio/sdk/model/windowSettingsResponse.d.ts +3 -2
  485. package/build/sdk/studio/sdk/model/windowSettingsResponse.js +8 -3
  486. package/build/sdk/studio/sdk/model/windowSettingsResponse.js.map +1 -1
  487. package/build/sdk/studio/sdk/model/windowSettingsResponseAllOf.d.ts +3 -2
  488. package/build/sdk/studio/sdk/model/windowSettingsResponseAllOf.js +8 -3
  489. package/build/sdk/studio/sdk/model/windowSettingsResponseAllOf.js.map +1 -1
  490. package/build/shared/bounding-box-file-types.d.ts +1 -0
  491. package/build/shared/bounding-box-file-types.js +7 -2
  492. package/build/shared/bounding-box-file-types.js.map +1 -1
  493. package/build/shared/daemon/ei-serial-protocol.d.ts +6 -0
  494. package/build/shared/daemon/ei-serial-protocol.js +31 -1
  495. package/build/shared/daemon/ei-serial-protocol.js.map +1 -1
  496. package/build/shared/daemon/remote-mgmt-service.d.ts +3 -1
  497. package/build/shared/daemon/remote-mgmt-service.js +1 -1
  498. package/build/shared/daemon/remote-mgmt-service.js.map +1 -1
  499. package/build/shared/viewmodels/init.d.ts +4 -1
  500. package/build/shared/viewmodels/init.js +11 -2
  501. package/build/shared/viewmodels/init.js.map +1 -1
  502. package/examples/ts/classify-audio.ts +83 -0
  503. package/examples/ts/classify-camera-webserver.ts +190 -0
  504. package/examples/ts/classify-camera.ts +113 -0
  505. package/examples/ts/classify-custom-from-test.ts +97 -0
  506. package/examples/ts/classify-custom.ts +63 -0
  507. package/examples/ts/collect-custom.ts +56 -0
  508. package/package.json +29 -16
  509. package/build/sdk/studio/sdk/model/adminGetOrganizationUsageReportResponse.js.map +0 -1
  510. package/build/sdk/studio/sdk/model/adminGetOrganizationUsageReportResponseAllOf.js +0 -29
  511. package/build/sdk/studio/sdk/model/adminGetOrganizationUsageReportResponseAllOf.js.map +0 -1
  512. package/build/sdk/studio/sdk/model/adminGetOrganizationUsageReportsResponse.js.map +0 -1
  513. package/build/sdk/studio/sdk/model/adminGetOrganizationUsageReportsResponseAllOf.js.map +0 -1
  514. package/build/sdk/studio/sdk/model/anomalyGmmMetadataAllOf.js.map +0 -1
  515. package/build/sdk/studio/sdk/model/anomalyModelMetadataAllOf.js.map +0 -1
  516. package/build/sdk/studio/sdk/model/anomalyModelMetadataAllOfClusters.js.map +0 -1
  517. package/build/sdk/studio/sdk/model/anomalyResponse.js.map +0 -1
  518. package/build/sdk/studio/sdk/model/anomalyResponseAllOf.js.map +0 -1
  519. package/build/sdk/studio/sdk/model/anomalyResponseAllOfAxes.js.map +0 -1
  520. package/build/sdk/studio/sdk/model/createBlockVersionResponse.js.map +0 -1
  521. package/build/sdk/studio/sdk/model/createBlockVersionResponseAllOf.js.map +0 -1
  522. package/build/sdk/studio/sdk/model/dSPConfigResponseAllOf.js.map +0 -1
  523. package/build/sdk/studio/sdk/model/getNotesResponse.js.map +0 -1
  524. package/build/sdk/studio/sdk/model/getNotesResponseAllOf.js.map +0 -1
  525. package/build/sdk/studio/sdk/model/getOrganizationProjectsDataCountResponse.js.map +0 -1
  526. package/build/sdk/studio/sdk/model/impulseBlockVersion.d.ts +0 -98
  527. package/build/sdk/studio/sdk/model/impulseBlockVersion.js +0 -112
  528. package/build/sdk/studio/sdk/model/impulseBlockVersion.js.map +0 -1
  529. package/build/sdk/studio/sdk/model/kerasModelMetadataAllOf.js.map +0 -1
  530. package/build/sdk/studio/sdk/model/kerasResponseAllOf.js.map +0 -1
  531. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponse.d.ts +0 -36
  532. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponse.js +0 -44
  533. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponse.js.map +0 -1
  534. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponseAllOf.d.ts +0 -28
  535. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponseAllOf.js +0 -34
  536. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponseAllOf.js.map +0 -1
  537. package/build/sdk/studio/sdk/model/listOrganizationProjectsDataResponseAllOfProjects.js.map +0 -1
  538. package/build/sdk/studio/sdk/model/note.js +0 -59
  539. package/build/sdk/studio/sdk/model/note.js.map +0 -1
  540. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchDisableResponse.js +0 -39
  541. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchDisableResponse.js.map +0 -1
  542. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchEnableResponse.d.ts +0 -33
  543. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchEnableResponse.js +0 -39
  544. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchEnableResponse.js.map +0 -1
  545. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchRequest.js +0 -29
  546. package/build/sdk/studio/sdk/model/organizationProjectsDataBatchRequest.js.map +0 -1
  547. package/build/sdk/studio/sdk/model/organizationProjectsDataBulkMetadataRequest.js +0 -34
  548. package/build/sdk/studio/sdk/model/organizationProjectsDataBulkMetadataRequest.js.map +0 -1
  549. package/build/sdk/studio/sdk/model/organizationUsageReport.js.map +0 -1
  550. package/build/sdk/studio/sdk/model/windowSettingsResponseAllOfWindowSettings.js.map +0 -1
  551. package/build/test/gstreamer.test.d.ts +0 -1
  552. package/build/test/gstreamer.test.js +0 -4248
  553. package/build/test/gstreamer.test.js.map +0 -1
  554. package/cli/linux/camera-debug.ts +0 -172
  555. package/cli/linux/linux.ts +0 -606
  556. package/cli/linux/model-monitor.ts +0 -838
  557. package/cli/linux/remote-mgmt-service.ts +0 -461
  558. package/cli/linux/runner-downloader.ts +0 -212
  559. package/cli/linux/runner.ts +0 -992
  560. package/cli/linux/webserver/middleware/asyncMiddleware.ts +0 -7
  561. package/cli/linux/webserver/public/assets/argon-dashboard.css +0 -20595
  562. package/cli/linux/webserver/public/assets/favicon-color/favicon-120.png +0 -0
  563. package/cli/linux/webserver/public/assets/favicon-color/favicon-128.png +0 -0
  564. package/cli/linux/webserver/public/assets/favicon-color/favicon-144.png +0 -0
  565. package/cli/linux/webserver/public/assets/favicon-color/favicon-152.png +0 -0
  566. package/cli/linux/webserver/public/assets/favicon-color/favicon-16.png +0 -0
  567. package/cli/linux/webserver/public/assets/favicon-color/favicon-180.png +0 -0
  568. package/cli/linux/webserver/public/assets/favicon-color/favicon-228.png +0 -0
  569. package/cli/linux/webserver/public/assets/favicon-color/favicon-32.png +0 -0
  570. package/cli/linux/webserver/public/assets/favicon-color/favicon-57.png +0 -0
  571. package/cli/linux/webserver/public/assets/favicon-color/favicon-76.png +0 -0
  572. package/cli/linux/webserver/public/assets/favicon-color/favicon-96.png +0 -0
  573. package/cli/linux/webserver/public/assets/logo-rgb.svg +0 -18
  574. package/cli/linux/webserver/public/assets/mark.svg +0 -20
  575. package/cli/linux/webserver/public/assets/mobileclient.css +0 -4179
  576. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300.eot +0 -0
  577. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300.svg +0 -332
  578. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300.ttf +0 -0
  579. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300.woff +0 -0
  580. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300.woff2 +0 -0
  581. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300italic.eot +0 -0
  582. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300italic.svg +0 -345
  583. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300italic.ttf +0 -0
  584. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300italic.woff +0 -0
  585. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-300italic.woff2 +0 -0
  586. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600.eot +0 -0
  587. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600.svg +0 -336
  588. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600.ttf +0 -0
  589. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600.woff +0 -0
  590. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600.woff2 +0 -0
  591. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600italic.eot +0 -0
  592. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600italic.svg +0 -349
  593. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600italic.ttf +0 -0
  594. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600italic.woff +0 -0
  595. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-600italic.woff2 +0 -0
  596. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700.eot +0 -0
  597. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700.svg +0 -334
  598. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700.ttf +0 -0
  599. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700.woff +0 -0
  600. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700.woff2 +0 -0
  601. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700italic.eot +0 -0
  602. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700italic.svg +0 -342
  603. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700italic.ttf +0 -0
  604. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700italic.woff +0 -0
  605. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-700italic.woff2 +0 -0
  606. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800.eot +0 -0
  607. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800.svg +0 -336
  608. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800.ttf +0 -0
  609. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800.woff +0 -0
  610. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800.woff2 +0 -0
  611. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800italic.eot +0 -0
  612. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800italic.svg +0 -342
  613. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800italic.ttf +0 -0
  614. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800italic.woff +0 -0
  615. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-800italic.woff2 +0 -0
  616. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-italic.eot +0 -0
  617. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-italic.svg +0 -349
  618. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-italic.ttf +0 -0
  619. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-italic.woff +0 -0
  620. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-italic.woff2 +0 -0
  621. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-regular.eot +0 -0
  622. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-regular.svg +0 -336
  623. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-regular.ttf +0 -0
  624. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-regular.woff +0 -0
  625. package/cli/linux/webserver/public/fonts/open-sans-v17-latin-regular.woff2 +0 -0
  626. package/cli/linux/webserver/public/index.html +0 -114
  627. package/cli/linux/webserver/public/inference-server.js +0 -216
  628. package/cli/linux/webserver/public/webserver.js +0 -247
  629. package/cli/linux/webserver/views/escape-html-template-tag/escape.ts +0 -66
  630. package/cli/linux/webserver/views/escape-html-template-tag/index.ts +0 -2
  631. package/cli/linux/webserver/views/inference-server-view.ts +0 -179
@@ -1,992 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import Path from 'path';
4
- import { LinuxImpulseRunner, ModelInformation, RunnerHelloHasAnomaly,
5
- RunnerHelloInferencingEngine, RunnerHelloResponseModelParameters } from '../../library/classifier/linux-impulse-runner';
6
- import { AudioClassifier } from '../../library/classifier/audio-classifier';
7
- import { ImageClassifier } from '../../library/classifier/image-classifier';
8
- import { Imagesnap } from '../../library/sensors/imagesnap';
9
- import inquirer from 'inquirer';
10
- import { initCliApp, setupCliApp } from '../init-cli-app';
11
- import fs from 'fs';
12
- import os from 'os';
13
- import { RunnerDownloader, RunnerModelPath } from './runner-downloader';
14
- import { GStreamer } from '../../library/sensors/gstreamer';
15
- import { ICamera } from '../../library/sensors/icamera';
16
- import program from 'commander';
17
- import express = require('express');
18
- import http from 'http';
19
- import socketIO from 'socket.io';
20
- import sharp from 'sharp';
21
- import { AudioRecorder } from '../../library';
22
- import { ips } from '../get-ips';
23
- import { Prophesee } from '../../library/sensors/prophesee';
24
- import { asyncMiddleware } from './webserver/middleware/asyncMiddleware';
25
- import { RemoteMgmt, RemoteMgmtConfig, RemoteMgmtInferenceDevice } from './remote-mgmt-service';
26
- import { EventEmitter } from "tsee";
27
- import TypedEmitter from "typed-emitter";
28
- import WebSocket from 'ws';
29
- import { Config, EdgeImpulseConfig } from "../config";
30
- import multer from 'multer';
31
- import util from 'util';
32
- import { InferenceServerModelViewModel, InferenceServerViewModel, renderInferenceServerView } from './webserver/views/inference-server-view';
33
- import { ModelMonitor } from './model-monitor';
34
-
35
- const RUNNER_PREFIX = '\x1b[33m[RUN]\x1b[0m';
36
- const BUILD_PREFIX = '\x1b[32m[BLD]\x1b[0m';
37
-
38
- let audioClassifier: AudioClassifier | undefined;
39
- let imageClassifier: ImageClassifier | undefined;
40
- let configFactory: Config | undefined;
41
-
42
- const packageVersion = (<{ version: string }>JSON.parse(fs.readFileSync(
43
- Path.join(__dirname, '..', '..', '..', 'package.json'), 'utf-8'))).version;
44
-
45
- program
46
- .description('Edge Impulse Linux runner ' + packageVersion)
47
- .version(packageVersion)
48
- .option('--model-file <file>', 'Specify model file (either path to .eim, or the socket on which the model is running), ' +
49
- 'if not provided the model will be fetched from Edge Impulse')
50
- .option('--api-key <key>', 'API key to authenticate with Edge Impulse (overrides current credentials)')
51
- .option('--download <file>', 'Just download the model and store it on the file system')
52
- .option('--list-targets', 'List all supported targets and inference engines')
53
- .option('--force-target <target>', 'Do not autodetect the target system, but set it by hand (e.g. "runner-linux-aarch64")')
54
- .option('--force-engine <engine>', 'Do not autodetect the inference engine, but set it by hand (e.g. "tflite")')
55
- .option('--run-http-server <port>', 'Do not run using a sensor, but instead expose an API server at the specified port')
56
- .option('--monitor', 'Enable model monitoring', false)
57
- .option('--clean', 'Clear credentials')
58
- .option('--silent', `Run in silent mode, don't prompt for credentials`)
59
- .option('--quantized', 'Download int8 quantized neural networks, rather than the float32 neural networks. ' +
60
- 'These might run faster on some architectures, but have reduced accuracy.')
61
- .option('--enable-camera', 'Always enable the camera. This flag needs to be used to get data from the microphone ' +
62
- 'on some USB webcams.')
63
- .option('--gst-launch-args <args>', 'Override the arguments to gst-launch-1.0. This should be a stream that returns JPEG images, e.g.: ' +
64
- '"v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! videoconvert ! jpegenc"')
65
- .option('--dev', 'List development servers, alternatively you can use the EI_HOST environmental variable ' +
66
- 'to specify the Edge Impulse instance.')
67
- .option('--verbose', 'Enable debug logs')
68
- .allowUnknownOption(true)
69
- .parse(process.argv);
70
-
71
- const devArgv: boolean = !!program.dev;
72
- const cleanArgv: boolean = !!program.clean;
73
- const silentArgv: boolean = !!program.silent;
74
- const quantizedArgv: boolean = !!program.quantized;
75
- const enableCameraArgv: boolean = !!program.enableCamera;
76
- const verboseArgv: boolean = !!program.verbose;
77
- const apiKeyArgv = <string | undefined>program.apiKey;
78
- const modelFileArgv = <string | undefined>program.modelFile;
79
- const downloadArgv = <string | undefined>program.download;
80
- const forceTargetArgv = <string | undefined>program.forceTarget;
81
- const forceEngineArgv = <string | undefined>program.forceEngine;
82
- const monitorArgv: boolean = !!program.monitor;
83
- const listTargetsArgv: boolean = !!program.listTargets;
84
- const gstLaunchArgsArgv = <string | undefined>program.gstLaunchArgs;
85
- const runHttpServerPort = program.runHttpServer ? Number(program.runHttpServer) : undefined;
86
-
87
- process.on('warning', e => console.warn(e.stack));
88
-
89
- const cliOptions = {
90
- appName: 'Edge Impulse Linux runner',
91
- apiKeyArgv: apiKeyArgv,
92
- cleanArgv: cleanArgv,
93
- devArgv: devArgv,
94
- hmacKeyArgv: undefined,
95
- silentArgv: silentArgv,
96
- connectProjectMsg: 'From which project do you want to load the model?',
97
- getProjectFromConfig: async () => {
98
- if (!configFactory) return undefined;
99
-
100
- let projectId = await configFactory.getLinuxProjectId();
101
- if (!projectId) {
102
- return undefined;
103
- }
104
- return { projectId: projectId };
105
- }
106
- };
107
-
108
- let firstExit = true;
109
- let isExiting = false;
110
-
111
- const onSignal = async () => {
112
- if (!firstExit) {
113
- process.exit(1);
114
- }
115
- else {
116
- isExiting = true;
117
-
118
- console.log(RUNNER_PREFIX, 'Received stop signal, stopping application... ' +
119
- 'Press CTRL+C again to force quit.');
120
- firstExit = false;
121
- try {
122
- if (audioClassifier) {
123
- await audioClassifier.stop();
124
- }
125
- if (imageClassifier) {
126
- await imageClassifier.stop();
127
- }
128
- process.exit(0);
129
- }
130
- catch (ex2) {
131
- let ex = <Error>ex2;
132
- console.log(RUNNER_PREFIX, 'Failed to stop inferencing', ex.message);
133
- }
134
- process.exit(1);
135
- }
136
- };
137
-
138
- process.on('SIGHUP', onSignal);
139
- process.on('SIGINT', onSignal);
140
-
141
- class LinuxDevice extends (EventEmitter as new () => TypedEmitter<{
142
- snapshot: (buffer: Buffer, filename: string) => void
143
- }>) implements RemoteMgmtInferenceDevice {
144
-
145
- constructor() {
146
- // eslint-disable-next-line constructor-super
147
- super();
148
- }
149
-
150
- async getDeviceId() {
151
- return ips.length > 0 ? ips[0].mac : '00:00:00:00:00:00';
152
- }
153
-
154
- getDeviceType() {
155
- let id = (ips.length > 0 ? ips[0].mac : '00:00:00:00:00:00').toLowerCase();
156
-
157
- if (id.startsWith('dc:a6:32') || id.startsWith('b8:27:eb')) {
158
- return 'RASPBERRY_PI';
159
- }
160
-
161
- if (id.startsWith('00:04:4b') || id.startsWith('48:b0:2d')) {
162
- return 'NVIDIA_JETSON_NANO';
163
- }
164
-
165
- return 'EDGE_IMPULSE_LINUX';
166
- }
167
- }
168
-
169
- async function downloadModel(projectId: number | undefined,
170
- config: EdgeImpulseConfig): Promise<{
171
- modelFile: string,
172
- modelPath: RunnerModelPath }> {
173
-
174
- if (!projectId) {
175
- throw new Error('No project ID found');
176
- }
177
-
178
- // configFactory should be set by now (global variable)
179
- if (!configFactory) {
180
- throw new Error('No config factory found');
181
- }
182
-
183
- const studioUrl = await configFactory.getStudioUrl(null);
184
- let projectStudioUrl = studioUrl + '/studio/' + projectId;
185
- let modelPath: RunnerModelPath | undefined;
186
- let modelFile: string;
187
-
188
- await configFactory.setLinuxProjectId(projectId);
189
-
190
- const downloader = new RunnerDownloader(projectId, quantizedArgv ? 'int8' : 'float32',
191
- config, forceTargetArgv, forceEngineArgv);
192
- downloader.on('build-progress', msg => {
193
- console.log(BUILD_PREFIX, msg);
194
- });
195
- modelPath = new RunnerModelPath(projectId, quantizedArgv ? 'int8' : 'float32',
196
- forceTargetArgv, forceEngineArgv);
197
-
198
- // no new version? and already downloaded? return that model
199
- let currVersion = await downloader.getLastDeploymentVersion();
200
- if (currVersion && await checkFileExists(modelPath.getModelPath(currVersion))) {
201
- modelFile = modelPath.getModelPath(currVersion);
202
- console.log(RUNNER_PREFIX, 'Already have model', modelFile, 'not downloading...');
203
- }
204
- else {
205
- console.log(RUNNER_PREFIX, 'Downloading model...');
206
-
207
- let deployment = await downloader.downloadDeployment();
208
- let tmpDir = await fs.promises.mkdtemp(Path.join(os.tmpdir(), 'ei-' + Date.now()));
209
- tmpDir = Path.join(os.tmpdir(), tmpDir);
210
- await fs.promises.mkdir(tmpDir, { recursive: true });
211
- let ret = await downloader.getDownloadType();
212
- modelFile = Path.join(tmpDir, ret[0]);
213
- await fs.promises.writeFile(modelFile, deployment);
214
- await fs.promises.chmod(modelFile, 0o755);
215
-
216
- console.log(RUNNER_PREFIX, 'Downloading model OK');
217
- }
218
-
219
- return { modelFile, modelPath };
220
- }
221
-
222
- function audioClassifierHelloMsg(model: ModelInformation) {
223
- let param = model.modelParameters;
224
- console.log(RUNNER_PREFIX, 'Starting the audio classifier for',
225
- model.project.owner + ' / ' + model.project.name, '(v' + model.project.deploy_version + ')');
226
- console.log(RUNNER_PREFIX, 'Parameters', 'freq', param.frequency + 'Hz',
227
- 'window length', ((param.input_features_count / param.frequency / param.axis_count) * 1000) + 'ms.',
228
- 'classes', param.labels);
229
- }
230
-
231
- function imageClassifierHelloMsg(model: ModelInformation) {
232
- let param = model.modelParameters;
233
- let labels = param.labels;
234
-
235
- if (param.has_anomaly === RunnerHelloHasAnomaly.VisualGMM) {
236
- labels.push('anomaly');
237
- }
238
-
239
- console.log(RUNNER_PREFIX, 'Starting the image classifier for',
240
- model.project.owner + ' / ' + model.project.name, '(v' + model.project.deploy_version + ')');
241
- console.log(RUNNER_PREFIX, 'Parameters',
242
- 'image size', param.image_input_width + 'x' + param.image_input_height + ' px (' +
243
- param.image_channel_count + ' channels)',
244
- 'classes', labels);
245
- }
246
-
247
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
248
- (async () => {
249
- try {
250
- let modelFile;
251
- let remoteMgmt: RemoteMgmt | undefined;
252
- let modelPath: RunnerModelPath | undefined;
253
- let projectStudioUrl: string | undefined;
254
- let config: EdgeImpulseConfig | undefined;
255
- // projectId keeps the Studio project ID, not the EIM/model project ID
256
- // currently they can differ, as user can use EIM form the other project than the projct
257
- // the user selected during the login
258
- let projectId: number | undefined;
259
- let devKeys: { apiKey: string, hmacKey: string };
260
- let modelMonitor: ModelMonitor | undefined;
261
- let runner: LinuxImpulseRunner;
262
- let model: ModelInformation;
263
-
264
- // make sanity checks on the arguments
265
- if (listTargetsArgv && modelFileArgv) {
266
- // TODO: why? List targets and display the warning...
267
- throw new Error('Cannot combine --list-targets and --model-file');
268
- }
269
-
270
- if (modelFileArgv && downloadArgv) {
271
- throw new Error('Cannot combine --model-file and --download');
272
- }
273
-
274
- // any of this arguments implies online mode, so we need to login to the studio or get the API key
275
- const connectionRequired: boolean =
276
- monitorArgv ||
277
- modelFileArgv === undefined ||
278
- downloadArgv !== undefined ||
279
- listTargetsArgv ||
280
- devArgv;
281
-
282
- if (connectionRequired) {
283
- if (monitorArgv && modelFileArgv) {
284
- cliOptions.connectProjectMsg = 'From which project do you want to monitor the model?';
285
- }
286
- // initCliApp calls verifyLogin which logs in the user
287
- const init = await initCliApp(cliOptions);
288
- config = init.config;
289
- configFactory = init.configFactory;
290
-
291
- ({ projectId, devKeys } = await setupCliApp(configFactory, config, cliOptions, undefined));
292
-
293
- // store project id in case user just selected one
294
- await configFactory.setLinuxProjectId(projectId);
295
- }
296
- else {
297
- configFactory = new Config();
298
- devKeys = {
299
- apiKey: apiKeyArgv ?? '',
300
- hmacKey: ''
301
- };
302
- }
303
-
304
- if (listTargetsArgv) {
305
- if (!projectId) {
306
- // this should never happen, as we are in online mode
307
- projectId = await configFactory.getLinuxProjectId() || -1;
308
- }
309
- // make sure the config is set
310
- if (!config) {
311
- // this should never happen, as we are in online mode
312
- throw new Error('No config found');
313
- }
314
- const targets = await config.api.deployment.listDeploymentTargetsForProjectDataSources(projectId);
315
- console.log('Listing all available targets');
316
- console.log('-----------------------------');
317
- for (let t of targets.targets.filter(x => x.format.startsWith('runner'))) {
318
- console.log(`target: ${t.format}, name: ${t.name}, supported engines: [${t.supportedEngines.join(', ')}]`);
319
- }
320
- console.log('');
321
- console.log('You can force a target via "edge-impulse-linux-runner --force-target <target> [--force-engine <engine>]"');
322
- process.exit(0);
323
- }
324
-
325
- if (modelFileArgv) {
326
- // if we have the model file, just use that and make it executable
327
- modelFile = modelFileArgv;
328
- await fs.promises.chmod(modelFile, 0o755);
329
- }
330
- else {
331
- // make sure the config is set
332
- if (!config) {
333
- // this should never happen, as we are in online mode
334
- throw new Error('No config found');
335
- }
336
- // if we don't have the model file, download it
337
- ({ modelFile, modelPath } = await downloadModel(projectId, config));
338
- if (downloadArgv) {
339
- await fs.promises.mkdir(Path.dirname(downloadArgv), { recursive: true });
340
- await fs.promises.copyFile(modelFile, downloadArgv);
341
- console.log(RUNNER_PREFIX, 'Stored model in', Path.resolve(downloadArgv));
342
- return process.exit(0);
343
- }
344
- }
345
-
346
- // create the runner and init (get info from model file)
347
- runner = new LinuxImpulseRunner(modelFile);
348
- model = await runner.init();
349
-
350
- // if downloaded? then store...
351
- if (!modelFileArgv && modelPath) {
352
- let file = modelPath.getModelPath(model.project.deploy_version);
353
- if (file !== modelFile) {
354
- await fs.promises.mkdir(Path.dirname(file), { recursive: true });
355
- await fs.promises.copyFile(modelFile, file);
356
- await fs.promises.unlink(modelFile);
357
- console.log(RUNNER_PREFIX, 'Stored model version in', file);
358
- }
359
- }
360
-
361
- let param = model.modelParameters;
362
- if (monitorArgv) {
363
- let device = new LinuxDevice();
364
- modelMonitor = await ModelMonitor.getModelMonitor(configFactory, model);
365
- let storageStatus = await modelMonitor?.getStorageStatus();
366
-
367
- if (!projectId) {
368
- throw new Error('No project ID found');
369
- }
370
-
371
- remoteMgmt = new RemoteMgmt(projectId, {
372
- projectId: model.project.id,
373
- projectName: model.project.name,
374
- projectOwner: model.project.owner,
375
- deploymentVersion: model.project.deploy_version,
376
- modelType: model.modelParameters.model_type,
377
- }, devKeys, Object.assign({
378
- command: <'edge-impulse-linux'>'edge-impulse-linux'
379
- }, config), device, modelMonitor,
380
- url => new WebSocket(url),
381
- async (currName) => {
382
- let nameDevice = <{ nameDevice: string }>await inquirer.prompt([{
383
- type: 'input',
384
- message: 'What name do you want to give this device?',
385
- name: 'nameDevice',
386
- default: currName
387
- }]);
388
- return nameDevice.nameDevice;
389
- });
390
- await remoteMgmt.connect();
391
-
392
- // wait 30 sec for the connection to be established (WS connection + setting device name by user)
393
- let isConnected = false;
394
- let timeout = 0;
395
- while (!isConnected && timeout < 30) {
396
- await new Promise(resolve => setTimeout(resolve, 1000));
397
- isConnected = await remoteMgmt.isConnected;
398
- timeout++;
399
- }
400
-
401
- modelMonitor.on('inference-summary', remoteMgmt?.inferenceSummaryListener.bind(remoteMgmt));
402
- modelMonitor.on('impulse-record', remoteMgmt?.impulseRecordListener.bind(remoteMgmt));
403
- modelMonitor.on('impulse-records-response', remoteMgmt?.impulseRecordsResponseListener.bind(remoteMgmt));
404
- }
405
-
406
- remoteMgmt?.on('newModelAvailable', async ( ) => {
407
- console.log(RUNNER_PREFIX, 'New model available, downloading...');
408
- try {
409
- if (!config) {
410
- // this should never happen, as we are in online mode
411
- throw new Error('No config found');
412
- }
413
- ({ modelFile, modelPath } = await downloadModel(projectId, config));
414
-
415
- // pause features streaming
416
- imageClassifier?.pause();
417
- audioClassifier?.pause();
418
-
419
- // load the new model
420
- model = await runner?.init(modelFile);
421
-
422
- console.log(RUNNER_PREFIX, 'Model updated successfully');
423
- // resume (refresh the model info internally as well)
424
- if (model.modelParameters.sensorType === 'microphone') {
425
- audioClassifierHelloMsg(model);
426
- audioClassifier?.resume();
427
- await remoteMgmt?.sendModelUpdateStatus(model, true);
428
- }
429
- else if (model.modelParameters.sensorType === 'camera') {
430
- imageClassifierHelloMsg(model);
431
- imageClassifier?.resume();
432
- await remoteMgmt?.sendModelUpdateStatus(model, true);
433
- }
434
- }
435
- catch (ex) {
436
- let exErr = <Error>ex;
437
- await remoteMgmt?.sendModelUpdateStatus(model, false);
438
- throw Error('Model update failed: ' + exErr.message);
439
- }
440
- });
441
-
442
- if (runHttpServerPort) {
443
- console.log(RUNNER_PREFIX, 'Starting HTTP server for',
444
- model.project.owner + ' / ' + model.project.name, '(v' + model.project.deploy_version + ')',
445
- 'on port ' + runHttpServerPort);
446
- if (param.sensorType === 'camera') {
447
- console.log(RUNNER_PREFIX, 'Parameters',
448
- 'image size', param.image_input_width + 'x' + param.image_input_height + ' px (' +
449
- param.image_channel_count + ' channels)',
450
- 'classes', param.labels);
451
- }
452
- else {
453
- console.log(RUNNER_PREFIX, 'Parameters', 'freq', param.frequency + 'Hz',
454
- 'window length', ((param.input_features_count / param.frequency / param.axis_count) * 1000) + 'ms.',
455
- 'classes', param.labels);
456
- }
457
-
458
- if (!projectStudioUrl) {
459
- projectStudioUrl = 'https://studio.edgeimpulse.com/studio/' + model.project.id;
460
- }
461
-
462
- await startApiServer(model, runner, projectStudioUrl, runHttpServerPort);
463
-
464
- console.log(RUNNER_PREFIX, '');
465
- console.log(RUNNER_PREFIX, `HTTP Server now running at http://localhost:${runHttpServerPort}`);
466
- console.log(RUNNER_PREFIX, '');
467
-
468
- return;
469
- }
470
-
471
- if (param.sensorType === 'microphone') {
472
- audioClassifierHelloMsg(model);
473
-
474
- if (enableCameraArgv) {
475
- await connectCamera(configFactory);
476
- }
477
-
478
- let audioDevice: string | undefined;
479
- const audioDevices = await AudioRecorder.ListDevices();
480
- const storedAudio = await configFactory.getAudio();
481
- if (storedAudio && audioDevices.find(d => d.id === storedAudio)) {
482
- audioDevice = storedAudio;
483
- }
484
- else if (audioDevices.length === 1) {
485
- audioDevice = audioDevices[0].id;
486
- }
487
- else if (audioDevices.length === 0) {
488
- console.warn(RUNNER_PREFIX, 'Could not find any microphones...');
489
- audioDevice = '';
490
- }
491
- else {
492
- let inqRes = await inquirer.prompt([{
493
- type: 'list',
494
- choices: (audioDevices || []).map(p => ({ name: p.name, value: p.id })),
495
- name: 'microphone',
496
- message: 'Select a microphone',
497
- pageSize: 20
498
- }]);
499
- audioDevice = <string>inqRes.microphone;
500
- }
501
- await configFactory.storeAudio(audioDevice);
502
-
503
- console.log(RUNNER_PREFIX, 'Using microphone ' + audioDevice);
504
-
505
- audioClassifier = new AudioClassifier(runner, verboseArgv);
506
-
507
- audioClassifier.on('noAudioError', async () => {
508
- console.log('');
509
- console.log(RUNNER_PREFIX, 'ERR: Did not receive any audio.');
510
- console.log('ERR: Did not receive any audio. Here are some potential causes:');
511
- console.log('* If you are on macOS this might be a permissions issue.');
512
- console.log(' Are you running this command from a simulated shell (like in Visual Studio Code)?');
513
- console.log('* If you are on Linux and use a microphone in a webcam, you might also want');
514
- console.log(' to initialize the camera with --enable-camera');
515
- await audioClassifier?.stop();
516
- process.exit(1);
517
- });
518
-
519
- await audioClassifier.start(audioDevice);
520
-
521
- audioClassifier.on('result', async (ev, timeMs, audioAsPcm) => {
522
- if (!ev.result.classification) return;
523
-
524
- if (modelMonitor) {
525
- await modelMonitor.processResult(ev, {
526
- type: 'wav',
527
- buffer: audioAsPcm,
528
- });
529
- }
530
-
531
- // print the raw predicted values for this frame
532
- // (turn into string here so the content does not jump around)
533
- // eslint-disable-next-line
534
- let c = <{ [k: string]: string | number }>(<any>ev.result.classification);
535
- for (let k of Object.keys(c)) {
536
- c[k] = (<number>c[k]).toFixed(4);
537
- }
538
- console.log('classifyRes', timeMs + 'ms.', c);
539
- if (ev.info) {
540
- console.log('additionalInfo:', ev.info);
541
- }
542
- });
543
- }
544
- else if (param.sensorType === 'camera') {
545
- imageClassifierHelloMsg(model);
546
-
547
- let camera = await connectCamera(configFactory);
548
-
549
- imageClassifier = new ImageClassifier(runner, camera);
550
-
551
- await imageClassifier.start();
552
-
553
- let webserverPort = await startWebServer(model, camera, imageClassifier);
554
- console.log('');
555
- console.log('Want to see a feed of the camera and live classification in your browser? ' +
556
- 'Go to http://' + (ips.length > 0 ? ips[0].address : 'localhost') + ':' + webserverPort);
557
- console.log('');
558
-
559
- imageClassifier.on('result', async (ev, timeMs, imgAsJpg) => {
560
- if (modelMonitor) {
561
- await modelMonitor.processResult(ev, {
562
- type: 'jpg',
563
- buffer: imgAsJpg,
564
- });
565
- }
566
-
567
- if (ev.result.classification) {
568
- // print the raw predicted values for this frame
569
- // (turn into string here so the content does not jump around)
570
- // eslint-disable-next-line
571
- let c = <{ [k: string]: string | number }>(<any>ev.result.classification);
572
- for (let k of Object.keys(c)) {
573
- c[k] = (<number>c[k]).toFixed(4);
574
- }
575
- console.log('classifyRes', timeMs + 'ms.', c);
576
- }
577
- if (ev.result.bounding_boxes) {
578
- console.log('boundingBoxes', timeMs + 'ms.', JSON.stringify(ev.result.bounding_boxes));
579
- }
580
- if (ev.result.visual_anomaly_grid) {
581
- console.log('visual anomalies', timeMs + 'ms.', JSON.stringify(ev.result.visual_anomaly_grid));
582
- }
583
- if (ev.info) {
584
- console.log('additionalInfo:', ev.info);
585
- }
586
- });
587
- }
588
- else {
589
- throw new Error('Invalid sensorType: ' + param.sensorType);
590
- }
591
- }
592
- catch (ex2) {
593
- let ex = <Error>ex2;
594
- console.warn(RUNNER_PREFIX, 'Failed to run impulse', ex.message || ex.toString());
595
-
596
- if ((ex.message || ex.toString()).indexOf('libtensorflowlite_flex') > -1) {
597
- console.log('You will need to install the flex delegates ' +
598
- 'shared library to run this model. Learn more at https://docs.edgeimpulse.com/docs/edge-impulse-for-linux/flex-delegates');
599
- console.log('');
600
- }
601
- else if (verboseArgv) {
602
- console.log(ex);
603
- }
604
-
605
- if (audioClassifier) {
606
- await audioClassifier.stop();
607
- }
608
- if (imageClassifier) {
609
- await imageClassifier.stop();
610
- }
611
- process.exit(1);
612
- }
613
- })();
614
-
615
- async function connectCamera(cf: Config) {
616
- let camera: ICamera;
617
- if (process.env.PROPHESEE_CAM === '1') {
618
- camera = new Prophesee(verboseArgv);
619
- }
620
- else if (process.platform === 'darwin') {
621
- camera = new Imagesnap(verboseArgv);
622
- }
623
- else if (process.platform === 'linux') {
624
- camera = new GStreamer(verboseArgv, {
625
- customLaunchCommand: gstLaunchArgsArgv,
626
- });
627
- }
628
- else {
629
- throw new Error('Unsupported platform "' + process.platform + '"');
630
- }
631
- await camera.init();
632
-
633
- let device: string | undefined;
634
- const devices = await camera.listDevices();
635
- if (devices.length === 0) {
636
- throw new Error('Cannot find any webcams');
637
- }
638
-
639
- const storedCamera = await cf.getCamera();
640
- if (storedCamera && devices.find(d => d === storedCamera)) {
641
- device = storedCamera;
642
- }
643
- else if (devices.length === 1) {
644
- device = devices[0];
645
- }
646
- else {
647
- let inqRes = await inquirer.prompt([{
648
- type: 'list',
649
- choices: (devices || []).map(p => ({ name: p, value: p })),
650
- name: 'camera',
651
- message: 'Select a camera',
652
- pageSize: 20
653
- }]);
654
- device = <string>inqRes.camera;
655
- }
656
- await cf.storeCamera(device);
657
-
658
- console.log(RUNNER_PREFIX, 'Using camera', device, 'starting...');
659
-
660
- await camera.start({
661
- device: device,
662
- intervalMs: 100,
663
- });
664
-
665
- camera.on('error', error => {
666
- if (isExiting) return;
667
-
668
- console.log(RUNNER_PREFIX, 'camera error', error);
669
- process.exit(1);
670
- });
671
-
672
- console.log(RUNNER_PREFIX, 'Connected to camera');
673
-
674
- return camera;
675
- }
676
-
677
- function buildWavFileBuffer(data: Buffer, intervalMs: number) {
678
- // let's build a WAV file!
679
- let wavFreq = 1 / intervalMs * 1000;
680
- let fileSize = 44 + (data.length);
681
- let dataSize = (data.length);
682
- let srBpsC8 = (wavFreq * 16 * 1) / 8;
683
-
684
- let headerArr = new Uint8Array(44);
685
- let h = [
686
- 0x52, 0x49, 0x46, 0x46, // RIFF
687
- // eslint-disable-next-line no-bitwise
688
- fileSize & 0xff, (fileSize >> 8) & 0xff, (fileSize >> 16) & 0xff, (fileSize >> 24) & 0xff,
689
- 0x57, 0x41, 0x56, 0x45, // WAVE
690
- 0x66, 0x6d, 0x74, 0x20, // fmt
691
- 0x10, 0x00, 0x00, 0x00, // length of format data
692
- 0x01, 0x00, // type of format (1=PCM)
693
- 0x01, 0x00, // number of channels
694
- // eslint-disable-next-line no-bitwise
695
- wavFreq & 0xff, (wavFreq >> 8) & 0xff, (wavFreq >> 16) & 0xff, (wavFreq >> 24) & 0xff,
696
- // eslint-disable-next-line no-bitwise
697
- srBpsC8 & 0xff, (srBpsC8 >> 8) & 0xff, (srBpsC8 >> 16) & 0xff, (srBpsC8 >> 24) & 0xff,
698
- 0x02, 0x00, 0x10, 0x00,
699
- 0x64, 0x61, 0x74, 0x61, // data
700
- // eslint-disable-next-line no-bitwise
701
- dataSize & 0xff, (dataSize >> 8) & 0xff, (dataSize >> 16) & 0xff, (dataSize >> 24) & 0xff,
702
- ];
703
- for (let hx = 0; hx < 44; hx++) {
704
- headerArr[hx] = h[hx];
705
- }
706
-
707
- return Buffer.concat([ Buffer.from(headerArr), data ]);
708
- }
709
-
710
- function checkFileExists(file: string) {
711
- return new Promise(resolve => {
712
- return fs.promises.access(file, fs.constants.F_OK)
713
- .then(() => resolve(true))
714
- .catch(() => resolve(false));
715
- });
716
- }
717
-
718
- function startWebServer(model: ModelInformation, camera: ICamera, imgClassifier: ImageClassifier) {
719
- const app = express();
720
- app.use(express.static(Path.join(__dirname, '..', '..', '..', 'cli', 'linux', 'webserver', 'public')));
721
-
722
- const server = new http.Server(app);
723
- const io = socketIO(server);
724
-
725
- // you can also get the actual image being classified from 'imageClassifier.on("result")',
726
- // but then you're limited by the inference speed.
727
- // here we get a direct feed from the camera so we guarantee the fps that we set earlier.
728
-
729
- let nextFrame = Date.now();
730
- let processingFrame = false;
731
- camera.on('snapshot', async (data) => {
732
- if (nextFrame > Date.now() || processingFrame) return;
733
-
734
- processingFrame = true;
735
-
736
- let img;
737
- if (model.modelParameters.image_channel_count === 3) {
738
- img = sharp(data).resize({
739
- height: model.modelParameters.image_input_height,
740
- width: model.modelParameters.image_input_width,
741
- fastShrinkOnLoad: false
742
- });
743
- }
744
- else {
745
- img = sharp(data).resize({
746
- height: model.modelParameters.image_input_height,
747
- width: model.modelParameters.image_input_width,
748
- fastShrinkOnLoad: false
749
- }).toColourspace('b-w');
750
- }
751
-
752
- io.emit('image', {
753
- img: 'data:image/jpeg;base64,' + (await img.jpeg().toBuffer()).toString('base64')
754
- });
755
-
756
- nextFrame = Date.now() + 50;
757
- processingFrame = false;
758
- });
759
-
760
- imgClassifier.on('result', async (result, timeMs, imgAsJpg) => {
761
- io.emit('classification', {
762
- modelType: model.modelParameters.model_type,
763
- result: result.result,
764
- timeMs: timeMs,
765
- additionalInfo: result.info,
766
- });
767
- });
768
-
769
- io.on('connection', socket => {
770
- socket.emit('hello', {
771
- projectName: model.project.owner + ' / ' + model.project.name
772
- });
773
- });
774
-
775
- return new Promise<number>((resolve) => {
776
- server.listen(Number(process.env.PORT) || 4912, process.env.HOST || '0.0.0.0', async () => {
777
- resolve((Number(process.env.PORT) || 4912));
778
- });
779
- });
780
- }
781
-
782
- function startApiServer(model: ModelInformation, runner: LinuxImpulseRunner, projectStudioUrl: string, port: number) {
783
- const app = express();
784
- app.disable('x-powered-by');
785
- app.use(express.json());
786
- app.use(express.urlencoded({ extended: true }));
787
- app.use((req, res, next) => {
788
- res.header('x-ei-owner', model.project.owner);
789
- res.header('x-ei-project-name', model.project.name);
790
- res.header('x-ei-project-version', model.project.deploy_version.toString());
791
- next();
792
- });
793
-
794
- const server = new http.Server(app);
795
-
796
- app.get('/', asyncMiddleware(async (req, res) => {
797
- let text = [
798
- 'Edge Impulse inference server for ' +
799
- model.project.owner + ' / ' + model.project.name + ' (v' + model.project.deploy_version + ')',
800
- '',
801
- 'How to run inference:',
802
- '',
803
- ];
804
- if (model.modelParameters.sensorType === 'camera') {
805
- text = text.concat([
806
- `curl -v -X POST -F 'file=@path-to-an-image.jpg' http://localhost:${port}/api/image`,
807
- ]);
808
- }
809
- else {
810
- text = text.concat([
811
- `curl -v -X POST -H "Content-Type: application/json" -d '{"features": [5, 10, 15, 20]}' http://localhost:${port}/api/features`,
812
- '',
813
- '(Expecting ' + model.modelParameters.input_features_count + ' features for this model)',
814
- ]);
815
- }
816
-
817
- const isObjectDetection = model.modelParameters.model_type === 'constrained_object_detection' ||
818
- model.modelParameters.model_type === 'object_detection';
819
- const isVisualAd = model.modelParameters.has_anomaly === RunnerHelloHasAnomaly.VisualGMM;
820
-
821
- let modelVm: InferenceServerModelViewModel;
822
- if (model.modelParameters.sensorType === 'camera') {
823
- modelVm = {
824
- mode: 'image',
825
- width: model.modelParameters.image_input_width,
826
- height: model.modelParameters.image_input_height,
827
- depth: model.modelParameters.image_channel_count === 3 ? 'RGB' : 'Grayscale',
828
- showImagePreview: isObjectDetection || isVisualAd,
829
- };
830
- }
831
- else {
832
- modelVm = {
833
- mode: 'features',
834
- featuresCount: model.modelParameters.input_features_count,
835
- };
836
- }
837
-
838
- const view = renderInferenceServerView({
839
- owner: model.project.owner,
840
- projectName: model.project.name,
841
- projectVersion: model.project.deploy_version,
842
- serverPort: port,
843
- studioLink: projectStudioUrl,
844
- model: modelVm,
845
- });
846
-
847
- res.status(200);
848
- res.header('Content-Type', 'text/html');
849
- res.end(view.toString());
850
- }));
851
-
852
- app.get('/api/info', asyncMiddleware(async (req, res) => {
853
- res.header('Content-Type', 'application/json');
854
-
855
- let modelParametersCloned = Object.assign({
856
- has_visual_anomaly_detection: model.modelParameters.has_anomaly === RunnerHelloHasAnomaly.VisualGMM,
857
- }, model.modelParameters);
858
-
859
- res.end(JSON.stringify({
860
- project: model.project,
861
- modelParameters: modelParametersCloned,
862
- }, null, 4) + '\n');
863
- }));
864
-
865
- app.post('/api/features', asyncMiddleware(async (req, res) => {
866
- const body = <{ features: number[] }>req.body;
867
-
868
- try {
869
- if (!req.body) {
870
- throw new Error('Missing body on request. Did you set "Content-Type: application/json" ?');
871
- }
872
- if (!body.features) {
873
- throw new Error('Missing "features" on body');
874
- }
875
- if (!Array.isArray(body.features)) {
876
- throw new Error('"features" on body is not an array');
877
- }
878
- if (!body.features.every(n => !isNaN(Number(n)))) {
879
- throw new Error('Not every element of the "features" array is a number');
880
- }
881
- if (body.features.length !== runner.getModel().modelParameters.input_features_count) {
882
- throw new Error('Expected ' + runner.getModel().modelParameters.input_features_count +
883
- ' features, but received ' + body.features.length);
884
- }
885
- }
886
- catch (ex2) {
887
- const ex = <Error>ex2;
888
- res.status(400);
889
- res.header('Content-Type', 'text/plain');
890
- return res.end(ex.message || ex.toString() + '\n');
891
- }
892
-
893
- console.log(RUNNER_PREFIX, 'Incoming inference request (/api/features)');
894
-
895
- let response = await runner.classify(body.features);
896
-
897
- res.header('Content-Type', 'application/json');
898
- res.end(JSON.stringify(response, null, 4) + '\n');
899
- }));
900
-
901
- app.post('/api/image', asyncMiddleware(async (req, res) => {
902
- let resized: {
903
- features: number[],
904
- originalWidth: number,
905
- originalHeight: number,
906
- newWidth: number,
907
- newHeight: number,
908
- };
909
-
910
- try {
911
- const multipartUpload = multer({ limits: { files: 1, fileSize: 100 * 1024 * 1024 } });
912
- const fields: multer.Field[] = [{ name: "file", maxCount: 1 }];
913
- await util.promisify(multipartUpload.fields(fields))(req, res);
914
-
915
- if (!req.files) {
916
- throw new Error('No files posted, requiring a multipart/form-data body with 1 item "file"');
917
- }
918
- const allFiles = Object.keys(req.files || { }).reduce((curr: { [k: string]: Express.Multer.File[] }, v) => {
919
- if (req.files instanceof Array) return curr;
920
- curr[v.replace('[]', '')] = req.files![v];
921
- return curr;
922
- }, { });
923
- const file = allFiles.file[0];
924
- if (!file) {
925
- throw new Error('Missing "file" in the multipart/form-data');
926
- }
927
-
928
- console.log(RUNNER_PREFIX, 'Incoming inference request (/api/image) for ' +
929
- (file.originalname || 'a file with size ' + file.size + ' bytes'));
930
-
931
- resized = (await ImageClassifier.resizeImage(model, file.buffer, 'contain'));
932
- }
933
- catch (ex2) {
934
- const ex = <Error>ex2;
935
- res.status(400);
936
- res.header('Content-Type', 'text/plain');
937
- return res.end(ex.message || ex.toString() + '\n');
938
- }
939
-
940
- let response = await runner.classify(resized.features);
941
-
942
- let origFactor = resized.originalWidth / resized.originalHeight;
943
- let newFactor = resized.newWidth / resized.newHeight;
944
-
945
- let factor: number;
946
- let offsetX: number;
947
- let offsetY: number;
948
-
949
- if (origFactor > newFactor) {
950
- // boxed in with bands top/bottom
951
- factor = resized.newWidth / resized.originalWidth;
952
- offsetX = 0;
953
- offsetY = (resized.newHeight - (resized.originalHeight * factor)) / 2;
954
- }
955
- else if (origFactor < newFactor) {
956
- // boxed in with bands left/right
957
- factor = resized.newHeight / resized.originalHeight;
958
- offsetX = (resized.newWidth - (resized.originalWidth * factor)) / 2;
959
- offsetY = 0;
960
- }
961
- else {
962
- // image was already at the right aspect ratio
963
- offsetX = 0;
964
- offsetY = 0;
965
- factor = resized.newWidth / resized.originalWidth;
966
- }
967
-
968
- for (const bb of response.result.bounding_boxes || []) {
969
- bb.x = Math.round((bb.x / factor) - (offsetX / factor));
970
- bb.width = Math.round((bb.width / factor));
971
- bb.y = Math.round((bb.y / factor) - (offsetY / factor));
972
- bb.height = Math.round((bb.height / factor));
973
- }
974
- for (const bb of response.result.visual_anomaly_grid || []) {
975
- bb.x = Math.round((bb.x / factor) - (offsetX / factor));
976
- bb.width = Math.round((bb.width / factor));
977
- bb.y = Math.round((bb.y / factor) - (offsetY / factor));
978
- bb.height = Math.round((bb.height / factor));
979
- }
980
-
981
- res.header('Content-Type', 'application/json');
982
- res.end(JSON.stringify(response, null, 4) + '\n');
983
- }));
984
-
985
- app.use(express.static(Path.join(__dirname, '..', '..', '..', 'cli', 'linux', 'webserver', 'public')));
986
-
987
- return new Promise<void>((resolve) => {
988
- server.listen(port, process.env.HOST || '0.0.0.0', async () => {
989
- resolve();
990
- });
991
- });
992
- }