@camera.ui/server 0.0.50-internal.0 → 0.0.50-internal.2

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 (390) hide show
  1. package/dist/interface/index.html +44 -44
  2. package/dist/interface/js/{@primevue.OhxoO3MD.0.0.50-internal.0.js → @primevue.BAIU_p3r.0.0.50-internal.2.js} +1 -1
  3. package/dist/interface/js/{@tanstack.D1IL6eOv.0.0.50-internal.0.js → @tanstack.mdCorqzE.0.0.50-internal.2.js} +1 -1
  4. package/dist/interface/js/{@vee-validate.BGPyWWTh.0.0.50-internal.0.js → @vee-validate.D0vsSsly.0.0.50-internal.2.js} +1 -1
  5. package/dist/interface/js/{@vueuse.BsKtqdiG.0.0.50-internal.0.js → @vueuse.we5ZpWr2.0.0.50-internal.2.js} +1 -1
  6. package/dist/interface/js/{Adminpanel.D93Kvbwp.0.0.50-internal.0.js → Adminpanel.9AEBJ3H1.0.0.50-internal.2.js} +1 -1
  7. package/dist/interface/js/{Camera.DF2l3OMA.0.0.50-internal.0.js → Camera.CZcnEH0C.0.0.50-internal.2.js} +1 -1
  8. package/dist/interface/js/{Cameras.YzvZccdv.0.0.50-internal.0.js → Cameras.DE0LkcGu.0.0.50-internal.2.js} +2 -2
  9. package/dist/interface/js/Cammesh.CVvmkelB.0.0.50-internal.2.js +1 -0
  10. package/dist/interface/js/{Camview.CB7_HnoQ.0.0.50-internal.0.js → Camview.CUr4pGoU.0.0.50-internal.2.js} +1 -1
  11. package/dist/interface/js/{Config.BwflsWTm.0.0.50-internal.0.js → Config.CaJhu4fF.0.0.50-internal.2.js} +2 -2
  12. package/dist/interface/js/{Console.DZM8pN8Q.0.0.50-internal.0.js → Console.5VUmgryj.0.0.50-internal.2.js} +1 -1
  13. package/dist/interface/js/{CuiConsole.BXXU7Gth.0.0.50-internal.0.js → CuiConsole.iYmUxAR5.0.0.50-internal.2.js} +1 -1
  14. package/dist/interface/js/{CuiPluginCard.YFOrpbVD.0.0.50-internal.0.js → CuiPluginCard.DXPyE5mF.0.0.50-internal.2.js} +1 -1
  15. package/dist/interface/js/{CuiTimeline.VV5KSJd5.0.0.50-internal.0.js → CuiTimeline.BqtlOFnV.0.0.50-internal.2.js} +1 -1
  16. package/dist/interface/js/{FirstSteps.b-nvymgb.0.0.50-internal.0.js → FirstSteps.C_RI-SDQ.0.0.50-internal.2.js} +1 -1
  17. package/dist/interface/js/{Plugin.BOMpVEwM.0.0.50-internal.0.js → Plugin.Ch_v02eN.0.0.50-internal.2.js} +1 -1
  18. package/dist/interface/js/{Plugins.DdPwaUDA.0.0.50-internal.0.js → Plugins.BpXAYgSG.0.0.50-internal.2.js} +1 -1
  19. package/dist/interface/js/Recordings.CIKHJytH.0.0.50-internal.2.js +1 -0
  20. package/dist/interface/js/{Settings.D24ttaPu.0.0.50-internal.0.js → Settings.BcLoGNEy.0.0.50-internal.2.js} +1 -1
  21. package/dist/interface/js/{SettingsAccount.ms3aqz4E.0.0.50-internal.0.js → SettingsAccount.DMROW8kx.0.0.50-internal.2.js} +1 -1
  22. package/dist/interface/js/SettingsAppearance.CUaHpihp.0.0.50-internal.2.js +1 -0
  23. package/dist/interface/js/{SettingsAppearance.vue_vue_type_script_setup_true_lang.CBQ6lL3T.0.0.50-internal.0.js → SettingsAppearance.vue_vue_type_script_setup_true_lang.BuKZ-Uco.0.0.50-internal.2.js} +1 -1
  24. package/dist/interface/js/{SettingsBackup.BPEc4Rjg.0.0.50-internal.0.js → SettingsBackup.0QdwFSpv.0.0.50-internal.2.js} +1 -1
  25. package/dist/interface/js/SettingsRecordings.B-aj0U8_.0.0.50-internal.2.js +1 -0
  26. package/dist/interface/js/{SettingsRemote.BL5nXbUT.0.0.50-internal.0.js → SettingsRemote.Bi1YAJ76.0.0.50-internal.2.js} +1 -1
  27. package/dist/interface/js/{SettingsSystem.D7T0AIpm.0.0.50-internal.0.js → SettingsSystem.CAx66Iir.0.0.50-internal.2.js} +1 -1
  28. package/dist/interface/js/{SettingsUsers.1u0vCOVG.0.0.50-internal.0.js → SettingsUsers.CQcDtGy1.0.0.50-internal.2.js} +1 -1
  29. package/dist/interface/js/{VersionsHandler.vue_vue_type_script_setup_true_lang.xDishkkS.0.0.50-internal.0.js → VersionsHandler.vue_vue_type_script_setup_true_lang.BhXMzIhV.0.0.50-internal.2.js} +1 -1
  30. package/dist/interface/js/{ace-builds.D1nmvCwb.0.0.50-internal.0.js → ace-builds.C0sCXSu5.0.0.50-internal.2.js} +2 -2
  31. package/dist/interface/js/{ace.config.G96T2z54.0.0.50-internal.0.js → ace.config.DNqPWa0Q.0.0.50-internal.2.js} +1 -1
  32. package/dist/interface/js/{backup.B_Gzxtp_.0.0.50-internal.0.js → backup.DAXgG3bP.0.0.50-internal.2.js} +1 -1
  33. package/dist/interface/js/{chart.js.CP_nMnnf.0.0.50-internal.0.js → chart.js.Bq3YocRX.0.0.50-internal.2.js} +1 -1
  34. package/dist/interface/js/{close-circle.DYLuVIOg.0.0.50-internal.0.js → close-circle.9rxyNw0z.0.0.50-internal.2.js} +1 -1
  35. package/dist/interface/js/{dnd-core.T9OeW7mu.0.0.50-internal.0.js → dnd-core.BuEvHAsS.0.0.50-internal.2.js} +1 -1
  36. package/dist/interface/js/{draggabilly.D3zGcBb3.0.0.50-internal.0.js → draggabilly.DUdE08x8.0.0.50-internal.2.js} +1 -1
  37. package/dist/interface/js/{engine.io-client.kITRnq-g.0.0.50-internal.0.js → engine.io-client.DWU6YI8o.0.0.50-internal.2.js} +1 -1
  38. package/dist/interface/js/{fast-deep-equal.Bpc9mIsj.0.0.50-internal.0.js → fast-deep-equal.BpPyC6E4.0.0.50-internal.2.js} +1 -1
  39. package/dist/interface/js/{highlight.js.BlSXU-Wb.0.0.50-internal.0.js → highlight.js.BoR2Rhdd.0.0.50-internal.2.js} +1 -1
  40. package/dist/interface/js/{linkify-it.C3N1lWsJ.0.0.50-internal.0.js → linkify-it.BXzPONHs.0.0.50-internal.2.js} +1 -1
  41. package/dist/interface/js/{main.D0YR3Jat.0.0.50-internal.0.js → main.DwcBYfWc.0.0.50-internal.2.js} +3 -3
  42. package/dist/interface/js/{markdown-it.Dj0dt5s2.0.0.50-internal.0.js → markdown-it.BUDVOjPt.0.0.50-internal.2.js} +1 -1
  43. package/dist/interface/js/{nprogress.BwQWDcGj.0.0.50-internal.0.js → nprogress.CsG-OBoI.0.0.50-internal.2.js} +1 -1
  44. package/dist/interface/js/{pinia.DRh7plEC.0.0.50-internal.0.js → pinia.CqEQao5R.0.0.50-internal.2.js} +1 -1
  45. package/dist/interface/js/{primevue.Cl58krXf.0.0.50-internal.0.js → primevue.D91sslRx.0.0.50-internal.2.js} +1 -1
  46. package/dist/interface/js/{qrcode.C1sDj6P8.0.0.50-internal.0.js → qrcode.SdSTPzZO.0.0.50-internal.2.js} +1 -1
  47. package/dist/interface/js/{react-dnd-touch-backend.BA4WhUJo.0.0.50-internal.0.js → react-dnd-touch-backend.BwroebQ4.0.0.50-internal.2.js} +1 -1
  48. package/dist/interface/js/{refresh-rounded.D_SmhhUf.0.0.50-internal.0.js → refresh-rounded.DxM48YSv.0.0.50-internal.2.js} +1 -1
  49. package/dist/interface/js/{rxjs.C-fTBwEO.0.0.50-internal.0.js → rxjs.Cmpbnzo4.0.0.50-internal.2.js} +1 -1
  50. package/dist/interface/js/{socket.io-client.DKrRxgjP.0.0.50-internal.0.js → socket.io-client.DF2YgZo1.0.0.50-internal.2.js} +1 -1
  51. package/dist/interface/js/{socket.io-parser.EXj3YDH2.0.0.50-internal.0.js → socket.io-parser.BUs2ineY.0.0.50-internal.2.js} +1 -1
  52. package/dist/interface/js/{system.CY8rGd-Q.0.0.50-internal.0.js → system.DmkT2LKx.0.0.50-internal.2.js} +1 -1
  53. package/dist/interface/js/{trash-fill.CMnCN3Oy.0.0.50-internal.0.js → trash-fill.dPzyZDVa.0.0.50-internal.2.js} +1 -1
  54. package/dist/interface/js/{unidragger.D0w6Tqtt.0.0.50-internal.0.js → unidragger.y2ZlFveS.0.0.50-internal.2.js} +1 -1
  55. package/dist/interface/js/{vee-validate.BeiObIH8.0.0.50-internal.0.js → vee-validate.Y-alCADW.0.0.50-internal.2.js} +1 -1
  56. package/dist/interface/js/{vue-chartjs.DtdZdiYw.0.0.50-internal.0.js → vue-chartjs.sRVFTqDf.0.0.50-internal.2.js} +1 -1
  57. package/dist/interface/js/{vue-i18n.BW2bx_6z.0.0.50-internal.0.js → vue-i18n.D5WrXOZa.0.0.50-internal.2.js} +1 -1
  58. package/dist/interface/js/{vue-inline-svg.BJkQGmKz.0.0.50-internal.0.js → vue-inline-svg.R0uz_abA.0.0.50-internal.2.js} +1 -1
  59. package/dist/interface/js/{vue-router.B2mOXHaC.0.0.50-internal.0.js → vue-router.65mnGy-o.0.0.50-internal.2.js} +1 -1
  60. package/dist/interface/js/{vue-zoomable.BKDyCJE7.0.0.50-internal.0.js → vue-zoomable.B1Qop6Uu.0.0.50-internal.2.js} +1 -1
  61. package/dist/interface/js/{vue3-dnd.DRK24CBp.0.0.50-internal.0.js → vue3-dnd.CwmyAcir.0.0.50-internal.2.js} +1 -1
  62. package/dist/interface/js/{zoom-out.DxvzgVEo.0.0.50-internal.0.js → zoom-out.CMPALvRh.0.0.50-internal.2.js} +1 -1
  63. package/dist/interface/sw.js +1 -1
  64. package/dist/server/package.json +1 -1
  65. package/dist/server/src/rpc/server.js +4 -1
  66. package/dist/server/src/rpc/server.js.map +1 -1
  67. package/package.json +1 -1
  68. package/.prettierignore +0 -12
  69. package/.prettierrc.json +0 -12
  70. package/artillery.yaml +0 -29
  71. package/bin/cameraui-server.ts +0 -11
  72. package/dist/interface/js/Cammesh.D-6dAROQ.0.0.50-internal.0.js +0 -1
  73. package/dist/interface/js/Recordings.DhxjIW7e.0.0.50-internal.0.js +0 -1
  74. package/dist/interface/js/SettingsAppearance.DsTjKXk1.0.0.50-internal.0.js +0 -1
  75. package/dist/interface/js/SettingsRecordings.DgW7M0jj.0.0.50-internal.0.js +0 -1
  76. package/eslint.config.js +0 -103
  77. package/localdeps.txt +0 -10
  78. package/mypy.ini +0 -30
  79. package/requirements.txt +0 -15
  80. package/ruff.toml +0 -90
  81. package/src/__init__.py +0 -0
  82. package/src/_camera_ui_tools/__init__.py +0 -0
  83. package/src/_camera_ui_tools/__pycache__/__init__.cpython-311.pyc +0 -0
  84. package/src/api/controllers/api.controller.ts +0 -19
  85. package/src/api/controllers/auth.controller.ts +0 -294
  86. package/src/api/controllers/backup.controller.ts +0 -72
  87. package/src/api/controllers/cameras.controller.ts +0 -1029
  88. package/src/api/controllers/config.controller.ts +0 -102
  89. package/src/api/controllers/files.controller.ts +0 -35
  90. package/src/api/controllers/frameWorkers.controller.ts +0 -109
  91. package/src/api/controllers/plugins.controller.ts +0 -1206
  92. package/src/api/controllers/system.controller.ts +0 -273
  93. package/src/api/controllers/users.controller.ts +0 -648
  94. package/src/api/database/checks.ts +0 -268
  95. package/src/api/database/constants.ts +0 -8
  96. package/src/api/database/index.ts +0 -262
  97. package/src/api/database/migration.ts +0 -62
  98. package/src/api/database/selfcheck.ts +0 -492
  99. package/src/api/database/types.ts +0 -104
  100. package/src/api/go2rtc/api/application.ts +0 -48
  101. package/src/api/go2rtc/api/config.ts +0 -61
  102. package/src/api/go2rtc/api/discover.ts +0 -197
  103. package/src/api/go2rtc/api/index.ts +0 -49
  104. package/src/api/go2rtc/api/snapshot.ts +0 -44
  105. package/src/api/go2rtc/api/streams.ts +0 -168
  106. package/src/api/go2rtc/index.ts +0 -43
  107. package/src/api/go2rtc/queue.ts +0 -50
  108. package/src/api/go2rtc/types.ts +0 -174
  109. package/src/api/index.ts +0 -286
  110. package/src/api/middlewares/authPermission.middleware.ts +0 -46
  111. package/src/api/middlewares/authValidation.middleware.ts +0 -160
  112. package/src/api/middlewares/pagination.middleware.ts +0 -67
  113. package/src/api/middlewares/socketAuth.middleware.ts +0 -136
  114. package/src/api/plugins/header.plugin.ts +0 -15
  115. package/src/api/plugins/logger.plugin.ts +0 -44
  116. package/src/api/plugins/proxy.plugin.ts +0 -255
  117. package/src/api/plugins/socket.plugin.ts +0 -28
  118. package/src/api/plugins/system.plugin.ts +0 -48
  119. package/src/api/plugins/useragent.plugin.ts +0 -19
  120. package/src/api/routes/api.routes.ts +0 -10
  121. package/src/api/routes/auth.routes.ts +0 -56
  122. package/src/api/routes/backup.routes.ts +0 -28
  123. package/src/api/routes/cameras.routes.ts +0 -281
  124. package/src/api/routes/config.routes.ts +0 -66
  125. package/src/api/routes/files.routes.ts +0 -15
  126. package/src/api/routes/frameWorkers.routes.ts +0 -39
  127. package/src/api/routes/index.ts +0 -37
  128. package/src/api/routes/plugins.routes.ts +0 -420
  129. package/src/api/routes/system.routes.ts +0 -101
  130. package/src/api/routes/users.routes.ts +0 -167
  131. package/src/api/schemas/backup.schema.ts +0 -112
  132. package/src/api/schemas/cameras.schema.ts +0 -479
  133. package/src/api/schemas/config.schema.ts +0 -38
  134. package/src/api/schemas/go2rtc.schema.ts +0 -189
  135. package/src/api/schemas/plugins.schema.ts +0 -126
  136. package/src/api/schemas/storage.schema.ts +0 -11
  137. package/src/api/schemas/system.schema.ts +0 -45
  138. package/src/api/schemas/users.schema.ts +0 -185
  139. package/src/api/services/auth.service.ts +0 -210
  140. package/src/api/services/backup.service.ts +0 -144
  141. package/src/api/services/cameras.service.ts +0 -671
  142. package/src/api/services/plugins.service.ts +0 -470
  143. package/src/api/services/system.service.ts +0 -85
  144. package/src/api/services/users.service.ts +0 -276
  145. package/src/api/types/index.ts +0 -675
  146. package/src/api/utils/cert.ts +0 -254
  147. package/src/api/utils/constants.ts +0 -17
  148. package/src/api/utils/fetch.ts +0 -21
  149. package/src/api/utils/moveFiles.ts +0 -45
  150. package/src/api/utils/parse.ts +0 -17
  151. package/src/api/websocket/index.ts +0 -110
  152. package/src/api/websocket/nsp/logs.ts +0 -240
  153. package/src/api/websocket/nsp/main.ts +0 -27
  154. package/src/api/websocket/nsp/metrics.ts +0 -301
  155. package/src/api/websocket/nsp/notifications.ts +0 -43
  156. package/src/api/websocket/nsp/plugins.ts +0 -37
  157. package/src/api/websocket/nsp/server.ts +0 -220
  158. package/src/api/websocket/nsp/status.ts +0 -77
  159. package/src/api/websocket/types.ts +0 -55
  160. package/src/api.ts +0 -163
  161. package/src/camera/classes.ts +0 -32
  162. package/src/camera/controller.ts +0 -579
  163. package/src/camera/device.ts +0 -422
  164. package/src/camera/frameWorker.ts +0 -403
  165. package/src/camera/index.ts +0 -679
  166. package/src/camera/interfaces.ts +0 -95
  167. package/src/camera/iou.ts +0 -153
  168. package/src/camera/polygon.ts +0 -226
  169. package/src/camera/python/__init__.py +0 -0
  170. package/src/camera/python/__pycache__/__init__.cpython-311.pyc +0 -0
  171. package/src/camera/python/__pycache__/classes.cpython-311.pyc +0 -0
  172. package/src/camera/python/__pycache__/delegate_controller.cpython-311.pyc +0 -0
  173. package/src/camera/python/__pycache__/interfaces.cpython-311.pyc +0 -0
  174. package/src/camera/python/__pycache__/iou.cpython-310.pyc +0 -0
  175. package/src/camera/python/__pycache__/iou.cpython-311.pyc +0 -0
  176. package/src/camera/python/__pycache__/iou2.cpython-310.pyc +0 -0
  177. package/src/camera/python/__pycache__/polygon.cpython-311.pyc +0 -0
  178. package/src/camera/python/__pycache__/typings.cpython-311.pyc +0 -0
  179. package/src/camera/python/__pycache__/video_frame.cpython-311.pyc +0 -0
  180. package/src/camera/python/classes.py +0 -41
  181. package/src/camera/python/interfaces.py +0 -130
  182. package/src/camera/python/iou.py +0 -158
  183. package/src/camera/python/polygon.py +0 -230
  184. package/src/camera/python/test/__pycache__/polygon.cpython-310.pyc +0 -0
  185. package/src/camera/python/test/iou_test.py +0 -799
  186. package/src/camera/python/test/polygon.py +0 -238
  187. package/src/camera/python/test/polygon_test.py +0 -256
  188. package/src/camera/python/test/polygon_test2.py +0 -484
  189. package/src/camera/python/typings.py +0 -50
  190. package/src/camera/python/video_frame.py +0 -143
  191. package/src/camera/session.ts +0 -192
  192. package/src/camera/streaming/fmp4-session.ts +0 -390
  193. package/src/camera/streaming/peer-connection.ts +0 -273
  194. package/src/camera/streaming/rtsp-session.ts +0 -331
  195. package/src/camera/streaming/webrtc-connection.ts +0 -260
  196. package/src/camera/streaming/werift-session.ts +0 -317
  197. package/src/camera/test/iou_test.ts +0 -761
  198. package/src/camera/test/polygon.test.ts +0 -611
  199. package/src/camera/test/polygon_test.ts +0 -210
  200. package/src/camera/types.ts +0 -48
  201. package/src/camera/utils.ts +0 -489
  202. package/src/camera/videoFrame.ts +0 -123
  203. package/src/cloud/index.ts +0 -61
  204. package/src/cloud/remote/cloudflare.ts +0 -18
  205. package/src/cloud/remote/upnp.ts +0 -18
  206. package/src/cloud/remote/utils.ts +0 -24
  207. package/src/cloud/types.ts +0 -16
  208. package/src/decoder/child.ts +0 -883
  209. package/src/decoder/imageUtils.ts +0 -275
  210. package/src/decoder/manager.ts +0 -251
  211. package/src/decoder/python/__init__.py +0 -0
  212. package/src/decoder/python/__pycache__/__init__.cpython-311.pyc +0 -0
  213. package/src/decoder/python/__pycache__/image_utils.cpython-311.pyc +0 -0
  214. package/src/decoder/python/__pycache__/typings.cpython-311.pyc +0 -0
  215. package/src/decoder/python/__pycache__/utils.cpython-311.pyc +0 -0
  216. package/src/decoder/python/child.py +0 -903
  217. package/src/decoder/python/image_utils.py +0 -196
  218. package/src/decoder/python/pool.py +0 -45
  219. package/src/decoder/python/test/group.py +0 -62
  220. package/src/decoder/python/test/motion.mp4 +0 -0
  221. package/src/decoder/python/test/motion2.mp4 +0 -0
  222. package/src/decoder/python/test/opencl.cl +0 -70
  223. package/src/decoder/python/test/opencl2.cl +0 -130
  224. package/src/decoder/python/test/test.py +0 -427
  225. package/src/decoder/python/test/test1.jpg +0 -0
  226. package/src/decoder/python/test/test1_resized.jpg +0 -0
  227. package/src/decoder/python/test/test2.jpg +0 -0
  228. package/src/decoder/python/test/test2.py +0 -451
  229. package/src/decoder/python/test/test2_resized.jpg +0 -0
  230. package/src/decoder/python/test/test3.jpg +0 -0
  231. package/src/decoder/python/test/utils.py +0 -50
  232. package/src/decoder/python/typings.py +0 -57
  233. package/src/decoder/python/utils.py +0 -70
  234. package/src/decoder/test/child.ts +0 -117
  235. package/src/decoder/test/ffmpeg.ts +0 -371
  236. package/src/decoder/test/test.ts +0 -182
  237. package/src/decoder/types.ts +0 -27
  238. package/src/decoder/utils.ts +0 -64
  239. package/src/decoder/wasm/asconfig.json +0 -28
  240. package/src/decoder/wasm/assembly/console.ts +0 -1
  241. package/src/decoder/wasm/assembly/index.ts +0 -890
  242. package/src/decoder/wasm/build/decoder.d.ts +0 -43
  243. package/src/decoder/wasm/build/decoder.js +0 -108
  244. package/src/decoder/wasm/build/decoder.wasm +0 -0
  245. package/src/decoder/wasm/tsconfig.json +0 -5
  246. package/src/decoder/worker.ts +0 -113
  247. package/src/go2rtc/index.ts +0 -324
  248. package/src/go2rtc/types.ts +0 -88
  249. package/src/main.ts +0 -267
  250. package/src/manager/coreManager.ts +0 -78
  251. package/src/manager/deviceManager.ts +0 -132
  252. package/src/manager/types.ts +0 -17
  253. package/src/plugins/index.ts +0 -443
  254. package/src/plugins/plugin.ts +0 -177
  255. package/src/plugins/runtime/base.ts +0 -282
  256. package/src/plugins/runtime/index.ts +0 -15
  257. package/src/plugins/runtime/node/child.ts +0 -193
  258. package/src/plugins/runtime/node/index.ts +0 -67
  259. package/src/plugins/runtime/node/plugin.ts +0 -122
  260. package/src/plugins/runtime/node/pluginApi.ts +0 -27
  261. package/src/plugins/runtime/node/proxy/cameraDevice.ts +0 -299
  262. package/src/plugins/runtime/node/proxy/coreManager.ts +0 -128
  263. package/src/plugins/runtime/node/proxy/deviceManager.ts +0 -187
  264. package/src/plugins/runtime/node/storage.ts +0 -312
  265. package/src/plugins/runtime/node/storageController.ts +0 -91
  266. package/src/plugins/runtime/python/__init__.py +0 -0
  267. package/src/plugins/runtime/python/__pycache__/__init__.cpython-311.pyc +0 -0
  268. package/src/plugins/runtime/python/__pycache__/camera_storage.cpython-311.pyc +0 -0
  269. package/src/plugins/runtime/python/__pycache__/config_service.cpython-311.pyc +0 -0
  270. package/src/plugins/runtime/python/__pycache__/constants.cpython-311.pyc +0 -0
  271. package/src/plugins/runtime/python/__pycache__/ipc.cpython-311.pyc +0 -0
  272. package/src/plugins/runtime/python/__pycache__/logger.cpython-311.pyc +0 -0
  273. package/src/plugins/runtime/python/__pycache__/message_queue.cpython-311.pyc +0 -0
  274. package/src/plugins/runtime/python/__pycache__/namespaces.cpython-311.pyc +0 -0
  275. package/src/plugins/runtime/python/__pycache__/plugin.cpython-311.pyc +0 -0
  276. package/src/plugins/runtime/python/__pycache__/plugin_api.cpython-311.pyc +0 -0
  277. package/src/plugins/runtime/python/__pycache__/plugin_logger.cpython-311.pyc +0 -0
  278. package/src/plugins/runtime/python/__pycache__/proxy_utils.cpython-311.pyc +0 -0
  279. package/src/plugins/runtime/python/__pycache__/schema.cpython-311.pyc +0 -0
  280. package/src/plugins/runtime/python/__pycache__/storage.cpython-311.pyc +0 -0
  281. package/src/plugins/runtime/python/__pycache__/storage_controller.cpython-311.pyc +0 -0
  282. package/src/plugins/runtime/python/__pycache__/typings.cpython-311.pyc +0 -0
  283. package/src/plugins/runtime/python/child.py +0 -248
  284. package/src/plugins/runtime/python/index.ts +0 -73
  285. package/src/plugins/runtime/python/namespaces.py +0 -101
  286. package/src/plugins/runtime/python/plugin.py +0 -155
  287. package/src/plugins/runtime/python/plugin_api.py +0 -29
  288. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-310.pyc +0 -0
  289. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-311.pyc +0 -0
  290. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-38.pyc +0 -0
  291. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-39.pyc +0 -0
  292. package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-311.pyc +0 -0
  293. package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-39.pyc +0 -0
  294. package/src/plugins/runtime/python/proxy/__pycache__/core_manager.cpython-311.pyc +0 -0
  295. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-310.pyc +0 -0
  296. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-311.pyc +0 -0
  297. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-38.pyc +0 -0
  298. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-39.pyc +0 -0
  299. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-310.pyc +0 -0
  300. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-311.pyc +0 -0
  301. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-38.pyc +0 -0
  302. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-39.pyc +0 -0
  303. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-310.pyc +0 -0
  304. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-311.pyc +0 -0
  305. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-38.pyc +0 -0
  306. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-39.pyc +0 -0
  307. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-310.pyc +0 -0
  308. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-311.pyc +0 -0
  309. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-38.pyc +0 -0
  310. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-39.pyc +0 -0
  311. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-310.pyc +0 -0
  312. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-311.pyc +0 -0
  313. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-38.pyc +0 -0
  314. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-39.pyc +0 -0
  315. package/src/plugins/runtime/python/proxy/camera_device.py +0 -1732
  316. package/src/plugins/runtime/python/proxy/core_manager.py +0 -126
  317. package/src/plugins/runtime/python/proxy/device_manager.py +0 -197
  318. package/src/plugins/runtime/python/schema.py +0 -99
  319. package/src/plugins/runtime/python/storage.py +0 -353
  320. package/src/plugins/runtime/python/storage_controller.py +0 -102
  321. package/src/plugins/runtime/python/typings.py +0 -195
  322. package/src/plugins/schema.ts +0 -472
  323. package/src/plugins/types.ts +0 -60
  324. package/src/plugins/worker.ts +0 -250
  325. package/src/rpc/index.ts +0 -149
  326. package/src/rpc/namespaces.ts +0 -79
  327. package/src/rpc/server.ts +0 -422
  328. package/src/rpc/types.ts +0 -119
  329. package/src/rpc/utils.ts +0 -16
  330. package/src/services/config/constants.ts +0 -47
  331. package/src/services/config/defaults.ts +0 -57
  332. package/src/services/config/index.ts +0 -744
  333. package/src/services/config/types.ts +0 -211
  334. package/src/services/logger/index.ts +0 -96
  335. package/src/types.ts +0 -47
  336. package/src/utils/path.ts +0 -16
  337. package/src/utils/pythonInstaller.ts +0 -597
  338. package/tsconfig.json +0 -37
  339. package/types/fastify.d.ts +0 -14
  340. package/updates.config.js +0 -3
  341. /package/dist/interface/assets/{@xterm.DYP7pi_n.0.0.50-internal.0.css → @xterm.DYP7pi_n.0.0.50-internal.2.css} +0 -0
  342. /package/dist/interface/assets/{Adminpanel.BKek2EMH.0.0.50-internal.0.css → Adminpanel.BKek2EMH.0.0.50-internal.2.css} +0 -0
  343. /package/dist/interface/assets/{Cameras.BDWZJqPN.0.0.50-internal.0.css → Cameras.BDWZJqPN.0.0.50-internal.2.css} +0 -0
  344. /package/dist/interface/assets/{Camview.BFUFMoNX.0.0.50-internal.0.css → Camview.BFUFMoNX.0.0.50-internal.2.css} +0 -0
  345. /package/dist/interface/assets/{CuiConsole.DCYyxdVg.0.0.50-internal.0.css → CuiConsole.DCYyxdVg.0.0.50-internal.2.css} +0 -0
  346. /package/dist/interface/assets/{CuiPluginCard.yF8V0SZY.0.0.50-internal.0.css → CuiPluginCard.yF8V0SZY.0.0.50-internal.2.css} +0 -0
  347. /package/dist/interface/assets/{CuiTimeline.BkIwlYtw.0.0.50-internal.0.css → CuiTimeline.BkIwlYtw.0.0.50-internal.2.css} +0 -0
  348. /package/dist/interface/assets/{Plugin.DJElsAn5.0.0.50-internal.0.css → Plugin.DJElsAn5.0.0.50-internal.2.css} +0 -0
  349. /package/dist/interface/assets/{Plugins.0h77qnmN.0.0.50-internal.0.css → Plugins.0h77qnmN.0.0.50-internal.2.css} +0 -0
  350. /package/dist/interface/assets/{Settings.CkgfRkQr.0.0.50-internal.0.css → Settings.CkgfRkQr.0.0.50-internal.2.css} +0 -0
  351. /package/dist/interface/assets/{SettingsAccount.DeFul3eQ.0.0.50-internal.0.css → SettingsAccount.DeFul3eQ.0.0.50-internal.2.css} +0 -0
  352. /package/dist/interface/assets/{SettingsBackup.CX0rT0QJ.0.0.50-internal.0.css → SettingsBackup.CX0rT0QJ.0.0.50-internal.2.css} +0 -0
  353. /package/dist/interface/assets/{highlight.Ch2EwETz.0.0.50-internal.0.css → highlight.Ch2EwETz.0.0.50-internal.2.css} +0 -0
  354. /package/dist/interface/assets/{logo-256.BCQk9H1-.0.0.50-internal.0.png → logo-256.BCQk9H1-.0.0.50-internal.2.png} +0 -0
  355. /package/dist/interface/assets/{logo-512.DLKVOU2S.0.0.50-internal.0.png → logo-512.DLKVOU2S.0.0.50-internal.2.png} +0 -0
  356. /package/dist/interface/assets/{logo.DmEiRk0z.0.0.50-internal.0.png → logo.DmEiRk0z.0.0.50-internal.2.png} +0 -0
  357. /package/dist/interface/assets/{main.Cip9LkS3.0.0.50-internal.0.css → main.Cip9LkS3.0.0.50-internal.2.css} +0 -0
  358. /package/dist/interface/assets/{mode-json.Br7xisR1.0.0.50-internal.0.js → mode-json.Br7xisR1.0.0.50-internal.2.js} +0 -0
  359. /package/dist/interface/assets/{mode-yaml.CIYL8U3d.0.0.50-internal.0.js → mode-yaml.CIYL8U3d.0.0.50-internal.2.js} +0 -0
  360. /package/dist/interface/assets/{worker-base.jEXLGV2h.0.0.50-internal.0.js → worker-base.jEXLGV2h.0.0.50-internal.2.js} +0 -0
  361. /package/dist/interface/assets/{worker-json.DgwNIOck.0.0.50-internal.0.js → worker-json.DgwNIOck.0.0.50-internal.2.js} +0 -0
  362. /package/dist/interface/assets/{worker-yaml.B3uUYINB.0.0.50-internal.0.js → worker-yaml.B3uUYINB.0.0.50-internal.2.js} +0 -0
  363. /package/dist/interface/js/{@babel.l0sNRNKZ.0.0.50-internal.0.js → @babel.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  364. /package/dist/interface/js/{@intlify.BkGPX90O.0.0.50-internal.0.js → @intlify.BkGPX90O.0.0.50-internal.2.js} +0 -0
  365. /package/dist/interface/js/{@kurkle.D8fDXNIl.0.0.50-internal.0.js → @kurkle.D8fDXNIl.0.0.50-internal.2.js} +0 -0
  366. /package/dist/interface/js/{@primeuix.BFAY2Bk9.0.0.50-internal.0.js → @primeuix.BFAY2Bk9.0.0.50-internal.2.js} +0 -0
  367. /package/dist/interface/js/{@react-dnd.CcwRs9xb.0.0.50-internal.0.js → @react-dnd.CcwRs9xb.0.0.50-internal.2.js} +0 -0
  368. /package/dist/interface/js/{@socket.io.Dkula2eQ.0.0.50-internal.0.js → @socket.io.Dkula2eQ.0.0.50-internal.2.js} +0 -0
  369. /package/dist/interface/js/{@vue.B5vqhCp2.0.0.50-internal.0.js → @vue.B5vqhCp2.0.0.50-internal.2.js} +0 -0
  370. /package/dist/interface/js/{@xterm.CAa7rpjv.0.0.50-internal.0.js → @xterm.C-5Lxnx_.0.0.50-internal.2.js} +0 -0
  371. /package/dist/interface/js/{axios.DHr9lByg.0.0.50-internal.0.js → axios.DHr9lByg.0.0.50-internal.2.js} +0 -0
  372. /package/dist/interface/js/{birpc.l0sNRNKZ.0.0.50-internal.0.js → birpc.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  373. /package/dist/interface/js/{compare-versions.DqEOhma6.0.0.50-internal.0.js → compare-versions.DqEOhma6.0.0.50-internal.2.js} +0 -0
  374. /package/dist/interface/js/{dijkstrajs.C00ieaqj.0.0.50-internal.0.js → dijkstrajs.C00ieaqj.0.0.50-internal.2.js} +0 -0
  375. /package/dist/interface/js/{engine.io-parser.BiEtp6m2.0.0.50-internal.0.js → engine.io-parser.BiEtp6m2.0.0.50-internal.2.js} +0 -0
  376. /package/dist/interface/js/{entities.C20TfXL6.0.0.50-internal.0.js → entities.C20TfXL6.0.0.50-internal.2.js} +0 -0
  377. /package/dist/interface/js/{ev-emitter.X5f1qa-c.0.0.50-internal.0.js → ev-emitter.X5f1qa-c.0.0.50-internal.2.js} +0 -0
  378. /package/dist/interface/js/{get-size.D1dS-IaP.0.0.50-internal.0.js → get-size.D1dS-IaP.0.0.50-internal.2.js} +0 -0
  379. /package/dist/interface/js/{hookable.l0sNRNKZ.0.0.50-internal.0.js → hookable.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  380. /package/dist/interface/js/{mdurl.k9Sl0PQj.0.0.50-internal.0.js → mdurl.k9Sl0PQj.0.0.50-internal.2.js} +0 -0
  381. /package/dist/interface/js/{perfect-debounce.l0sNRNKZ.0.0.50-internal.0.js → perfect-debounce.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  382. /package/dist/interface/js/{primelocale.Bga3dOQu.0.0.50-internal.0.js → primelocale.Bga3dOQu.0.0.50-internal.2.js} +0 -0
  383. /package/dist/interface/js/{punycode.js.Dj65hjkv.0.0.50-internal.0.js → punycode.js.Dj65hjkv.0.0.50-internal.2.js} +0 -0
  384. /package/dist/interface/js/{react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.2.js} +0 -0
  385. /package/dist/interface/js/{redux.BFxtlG_c.0.0.50-internal.0.js → redux.BFxtlG_c.0.0.50-internal.2.js} +0 -0
  386. /package/dist/interface/js/{tslib.9k7AwCpt.0.0.50-internal.0.js → tslib.9k7AwCpt.0.0.50-internal.2.js} +0 -0
  387. /package/dist/interface/js/{uc.micro.kMc2yuuw.0.0.50-internal.0.js → uc.micro.kMc2yuuw.0.0.50-internal.2.js} +0 -0
  388. /package/dist/interface/js/{uuid.C6aID195.0.0.50-internal.0.js → uuid.C6aID195.0.0.50-internal.2.js} +0 -0
  389. /package/dist/interface/js/{vue.l0sNRNKZ.0.0.50-internal.0.js → vue.l0sNRNKZ.0.0.50-internal.2.js} +0 -0
  390. /package/dist/interface/js/{zod.SKKegNRO.0.0.50-internal.0.js → zod.SKKegNRO.0.0.50-internal.2.js} +0 -0
@@ -1,451 +0,0 @@
1
- import os
2
- import time
3
- from typing import Any, Optional
4
-
5
- import cv2
6
- import numpy as np
7
- import pyopencl as cl
8
-
9
- BLUR_RADIUS = 6
10
- MOTION_THRESHOLD = 0.04
11
- DILATION_SIZE = 6
12
- AREA_THRESHOLD = 400
13
- ALPHA = 0.2
14
-
15
- video_path = "motion2.mp4"
16
- image1_path = "test1_resized.jpg"
17
- image2_path = "test2_resized.jpg"
18
- fps = 20
19
- num_frames = fps * 15
20
-
21
-
22
- def get_contour_detections(
23
- mask: np.ndarray[Any, Any], area_threshold: int
24
- ) -> list[tuple[float, float, float, float]]:
25
- cnts, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
26
- detections: list[tuple[float, float, float, float]] = []
27
- for cnt in cnts:
28
- x, y, w, h = cv2.boundingRect(cnt)
29
- area = w * h
30
- if area > area_threshold:
31
- detections.append((x, y, x + w, y + h))
32
- return detections
33
-
34
-
35
- def create_gaussian_kernel(radius: int) -> np.ndarray[Any, Any]:
36
- sigma = radius / 3.0
37
- x = np.arange(-radius, radius + 1)
38
- kernel = np.exp(-(x**2) / (2 * sigma**2))
39
- kernel = kernel / np.sum(kernel)
40
- return kernel.astype(np.float32)
41
-
42
-
43
- def CreateContext() -> tuple[Any, Any] | None:
44
- platforms: Any = cl.get_platforms()
45
- if len(platforms) == 0:
46
- print("Failed to find any OpenCL platforms.")
47
- return None
48
-
49
- devices = platforms[0].get_devices(cl.device_type.GPU)
50
- if len(devices) == 0:
51
- print("Could not find GPU device, trying CPU...")
52
- devices = platforms[0].get_devices(cl.device_type.CPU)
53
- if len(devices) == 0:
54
- print("Could not find OpenCL GPU or CPU device.")
55
- return None
56
-
57
- context: Any = cl.Context([devices[0]])
58
- return context, devices[0]
59
-
60
-
61
- def CreateProgram(context: Any, device: Any, filename: str) -> Any:
62
- current_dir = os.path.dirname(os.path.abspath(__file__))
63
- full_path = os.path.join(current_dir, filename)
64
-
65
- with open(full_path) as kernelFile:
66
- kernelStr = kernelFile.read()
67
-
68
- program = cl.Program(context, kernelStr)
69
- program.build(devices=[device])
70
-
71
- return program
72
-
73
-
74
- class OpenCLMotionDetector:
75
- def __init__(self, width: int, height: int):
76
- ocl = CreateContext()
77
-
78
- if ocl is None:
79
- raise RuntimeError("Failed to create OpenCL context.")
80
-
81
- self.ctx: Any = ocl[0]
82
- self.device: Any = ocl[1]
83
- self.queue: Any = cl.CommandQueue(self.ctx, properties=cl.command_queue_properties.PROFILING_ENABLE)
84
- self.program: Any = CreateProgram(self.ctx, self.device, "opencl.cl")
85
-
86
- print(f"Device OpenCL version: {self.device.version}")
87
- print(f"Selected device: {self.device.name}")
88
-
89
- self.width = width
90
- self.height = height
91
-
92
- mf: Any = cl.mem_flags
93
-
94
- # Erstelle die Images und Puffer
95
- self.gray_image: Any = cl.Image(
96
- self.ctx,
97
- mf.READ_ONLY,
98
- format=cl.ImageFormat(cl.channel_order.R, cl.channel_type.UNORM_INT8),
99
- shape=(self.width, self.height),
100
- )
101
- self.temp_image: Any = cl.Image(
102
- self.ctx,
103
- mf.READ_WRITE,
104
- format=cl.ImageFormat(cl.channel_order.R, cl.channel_type.FLOAT),
105
- shape=(self.width, self.height),
106
- )
107
- self.blurred_image: Any = cl.Image(
108
- self.ctx,
109
- mf.READ_WRITE,
110
- format=cl.ImageFormat(cl.channel_order.R, cl.channel_type.FLOAT),
111
- shape=(self.width, self.height),
112
- )
113
- self.mask_image: Any = cl.Image(
114
- self.ctx,
115
- mf.READ_WRITE,
116
- format=cl.ImageFormat(cl.channel_order.R, cl.channel_type.FLOAT),
117
- shape=(self.width, self.height),
118
- )
119
- self.dilated_image: Any = cl.Image(
120
- self.ctx,
121
- mf.WRITE_ONLY,
122
- format=cl.ImageFormat(cl.channel_order.R, cl.channel_type.FLOAT),
123
- shape=(self.width, self.height),
124
- )
125
- self.background_model_buf: Any = cl.Buffer(
126
- self.ctx,
127
- mf.READ_WRITE,
128
- size=self.width * self.height * np.dtype(np.float32).itemsize,
129
- )
130
-
131
- # Erstelle den Gaussian-Kernel
132
- self.kernel = create_gaussian_kernel(BLUR_RADIUS)
133
- self.kernel_buf: Any = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.kernel)
134
- self.kernel_size = np.int32(len(self.kernel))
135
-
136
- self.first_frame = True
137
-
138
- def process_frame(
139
- self,
140
- gray_frame: np.ndarray[Any, Any],
141
- motion_threshold: float,
142
- dilation_size: int,
143
- area_threshold: int,
144
- alpha: float,
145
- dispay: bool = True,
146
- ) -> tuple[
147
- Optional[np.ndarray[Any, Any]],
148
- Optional[np.ndarray[Any, Any]],
149
- list[tuple[float, float, float, float]],
150
- ]:
151
- # Kopiere das Graustufenbild in das OpenCL-Image
152
- cl.enqueue_copy(
153
- self.queue,
154
- self.gray_image,
155
- gray_frame,
156
- origin=(0, 0),
157
- region=(self.width, self.height),
158
- )
159
-
160
- # Definiere globale und lokale Workgroup-Größen
161
- global_size = (self.width, self.height)
162
-
163
- self.program.gaussian_blur_combined(
164
- self.queue,
165
- (self.width, self.height),
166
- None,
167
- self.gray_image,
168
- self.blurred_image,
169
- self.kernel_buf,
170
- np.int32(self.kernel_size),
171
- )
172
-
173
- if not self.first_frame:
174
- # Hintergrundsubtraktion und Aktualisierung des Hintergrundmodells
175
- self.program.background_subtraction(
176
- self.queue,
177
- global_size,
178
- None,
179
- self.blurred_image,
180
- self.background_model_buf,
181
- self.mask_image,
182
- np.int32(self.width),
183
- np.int32(self.height),
184
- np.float32(alpha),
185
- np.float32(motion_threshold),
186
- )
187
-
188
- # Dilatiere die Maske
189
- self.program.dilate(
190
- self.queue,
191
- global_size,
192
- None,
193
- self.mask_image,
194
- self.dilated_image,
195
- np.int32(dilation_size),
196
- )
197
-
198
- blur_image_cv = None
199
-
200
- if dispay:
201
- # Kopiere blur_image zur CPU für Anzeige und Verarbeitung
202
- blurred_image = np.empty((self.height, self.width), dtype=np.float32)
203
- cl.enqueue_copy(
204
- self.queue,
205
- blurred_image,
206
- self.blurred_image,
207
- origin=(0, 0),
208
- region=(self.width, self.height),
209
- )
210
-
211
- blur_image_cv = (blurred_image * 255).astype(np.uint8)
212
-
213
- # Kopiere motion_mask zur CPU für Anzeige und Verarbeitung
214
- motion_mask = np.empty((self.height, self.width), dtype=np.float32)
215
- cl.enqueue_copy(
216
- self.queue,
217
- motion_mask,
218
- self.dilated_image,
219
- origin=(0, 0),
220
- region=(self.width, self.height),
221
- )
222
-
223
- motion_mask_cv = (motion_mask * 255).astype(np.uint8)
224
- detections = get_contour_detections(motion_mask_cv, area_threshold)
225
-
226
- return blur_image_cv, motion_mask_cv, detections
227
- else:
228
- # Initialisiere das Hintergrundmodell
229
- background_model_np = np.empty((self.height, self.width), dtype=np.float32)
230
- cl.enqueue_copy(
231
- self.queue,
232
- background_model_np,
233
- self.blurred_image,
234
- origin=(0, 0),
235
- region=(self.width, self.height),
236
- )
237
- background_model_np = background_model_np.flatten()
238
- cl.enqueue_copy(self.queue, self.background_model_buf, background_model_np)
239
- self.first_frame = False
240
- return None, None, []
241
-
242
-
243
- def process_video(video_path: str, display: bool = True):
244
- cap = cv2.VideoCapture(video_path)
245
-
246
- if not cap.isOpened():
247
- print(f"Error opening video file {video_path}")
248
- return
249
-
250
- width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
251
- height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
252
-
253
- detector = OpenCLMotionDetector(width, height)
254
-
255
- frame_count = 0
256
- total_time = 0
257
- total_gpu_time = 0
258
-
259
- if display:
260
- cv2.namedWindow("Motion Detection", cv2.WINDOW_NORMAL)
261
- cv2.namedWindow("Motion Mask", cv2.WINDOW_NORMAL)
262
-
263
- while True:
264
- start_time = time.perf_counter()
265
-
266
- ret, frame = cap.read()
267
- if not ret:
268
- break
269
-
270
- frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
271
-
272
- gpu_time = time.perf_counter()
273
- blurred_image, motion_mask, boxes = detector.process_frame(
274
- frame_gray,
275
- MOTION_THRESHOLD,
276
- DILATION_SIZE,
277
- AREA_THRESHOLD,
278
- ALPHA,
279
- display,
280
- )
281
- end_time = time.perf_counter()
282
-
283
- gpu_processing_time = end_time - gpu_time
284
- total_gpu_time += gpu_processing_time
285
-
286
- processing_time = end_time - start_time
287
- total_time += processing_time
288
-
289
- frame_count += 1
290
-
291
- if display and motion_mask is not None and blurred_image is not None:
292
- debug_frame = frame.copy()
293
-
294
- cv2.putText(
295
- debug_frame,
296
- f"Frame: {frame_count}",
297
- (10, 30),
298
- cv2.FONT_HERSHEY_SIMPLEX,
299
- 1,
300
- (0, 255, 0),
301
- 2,
302
- )
303
- cv2.putText(
304
- debug_frame,
305
- f"Boxes: {len(boxes)}",
306
- (10, 70),
307
- cv2.FONT_HERSHEY_SIMPLEX,
308
- 1,
309
- (0, 255, 0),
310
- 2,
311
- )
312
-
313
- for box in boxes:
314
- x1, y1, x2, y2 = map(int, box)
315
- cv2.rectangle(debug_frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
316
-
317
- fps_text = f"FPS: {1/processing_time:.2f}"
318
- cv2.putText(
319
- debug_frame,
320
- fps_text,
321
- (10, 110),
322
- cv2.FONT_HERSHEY_SIMPLEX,
323
- 1,
324
- (0, 255, 0),
325
- 2,
326
- )
327
-
328
- cv2.imshow("Motion Mask", motion_mask)
329
- cv2.imshow("Motion Detection", debug_frame)
330
- cv2.imshow("Blurred Image", blurred_image)
331
-
332
- if cv2.waitKey(1) & 0xFF == ord("q"):
333
- break
334
-
335
- cap.release()
336
- if display:
337
- cv2.destroyAllWindows()
338
-
339
- avg_gpu_time = total_gpu_time / frame_count if frame_count > 0 else 0
340
- avg_time = total_time / frame_count if frame_count > 0 else 0
341
- avg_fps = 1 / avg_time if avg_time > 0 else 0
342
-
343
- print(f"Processed {frame_count} frames")
344
- print(f"Average total processing time per frame: {avg_time:.4f} seconds")
345
- print(f"Average GPU processing time per frame: {avg_gpu_time:.4f} seconds")
346
- print(f"Average frames per second: {avg_fps:.2f}")
347
-
348
-
349
- def simulate_stream(img1: np.ndarray[Any, Any], img2: np.ndarray[Any, Any], display: bool = True):
350
- height, width = img1.shape
351
- detector = OpenCLMotionDetector(width, height)
352
-
353
- frame_time = 1 / fps
354
- total_time = 0
355
- total_gpu_time = 0
356
- detected_motions = 0
357
-
358
- if display:
359
- cv2.namedWindow("Motion Detection", cv2.WINDOW_NORMAL)
360
- cv2.namedWindow("Motion Mask", cv2.WINDOW_NORMAL)
361
-
362
- max_time = time.perf_counter()
363
-
364
- for frame_count in range(num_frames):
365
- start_time = time.perf_counter()
366
-
367
- current_frame = img1 if frame_count % 2 == 0 else img2
368
-
369
- gpu_time = time.perf_counter()
370
- blurred_image, motion_mask, boxes = detector.process_frame(
371
- current_frame,
372
- MOTION_THRESHOLD,
373
- DILATION_SIZE,
374
- AREA_THRESHOLD,
375
- ALPHA,
376
- )
377
- end_time = time.perf_counter()
378
-
379
- gpu_processing_time = end_time - gpu_time
380
- total_gpu_time += gpu_processing_time
381
-
382
- processing_time = end_time - start_time
383
- total_time += processing_time
384
-
385
- if boxes:
386
- detected_motions += 1
387
-
388
- if display and motion_mask is not None and blurred_image is not None:
389
- debug_frame = cv2.cvtColor(current_frame, cv2.COLOR_GRAY2BGR)
390
-
391
- cv2.putText(
392
- debug_frame,
393
- f"Frame: {frame_count + 1}",
394
- (10, 30),
395
- cv2.FONT_HERSHEY_SIMPLEX,
396
- 1,
397
- (0, 255, 0),
398
- 2,
399
- )
400
- cv2.putText(
401
- debug_frame, f"Boxes: {len(boxes)}", (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2
402
- )
403
- cv2.putText(
404
- debug_frame,
405
- f"FPS: {1/processing_time:.2f}",
406
- (10, 110),
407
- cv2.FONT_HERSHEY_SIMPLEX,
408
- 1,
409
- (0, 255, 0),
410
- 2,
411
- )
412
-
413
- for box in boxes:
414
- x1, y1, x2, y2 = map(int, box)
415
- cv2.rectangle(debug_frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
416
-
417
- cv2.imshow("Motion Mask", motion_mask)
418
- cv2.imshow("Motion Detection", debug_frame)
419
- cv2.imshow("Blurred Image", blurred_image)
420
-
421
- if cv2.waitKey(1) & 0xFF == ord("q"):
422
- break
423
-
424
- # Simulate frame rate
425
- time_to_wait = frame_time - processing_time
426
- if time_to_wait > 0:
427
- time.sleep(time_to_wait)
428
-
429
- max_time = time.perf_counter() - max_time
430
-
431
- print(f"Max time: {max_time:.4f} seconds")
432
-
433
- if display:
434
- cv2.destroyAllWindows()
435
-
436
- avg_gpu_time = total_gpu_time / num_frames
437
- avg_time = total_time / num_frames
438
- avg_fps = 1 / avg_time if avg_time > 0 else 0
439
-
440
- print(f"Processed {num_frames} frames")
441
- print(f"Average total processing time per frame: {avg_time:.4f} seconds")
442
- print(f"Average GPU processing time per frame: {avg_gpu_time:.4f} seconds")
443
- print(f"Average frames per second: {avg_fps:.2f}")
444
- print(f"Frames with detected motion: {detected_motions}")
445
- print(f"Percentage of frames with motion: {(detected_motions/num_frames)*100:.2f}%")
446
-
447
-
448
- if __name__ == "__main__":
449
- img1 = cv2.imread(image1_path, cv2.IMREAD_GRAYSCALE)
450
- img2 = cv2.imread(image2_path, cv2.IMREAD_GRAYSCALE)
451
- simulate_stream(img1, img2, display=False)
Binary file
@@ -1,50 +0,0 @@
1
- import os
2
- from typing import Any
3
-
4
- import cv2
5
- import numpy as np
6
- import pyopencl as cl
7
-
8
-
9
- def CreateContext() -> tuple[Any, Any] | None:
10
- platforms: Any = cl.get_platforms()
11
- if len(platforms) == 0:
12
- print("Failed to find any OpenCL platforms.")
13
- return None
14
-
15
- devices = platforms[0].get_devices(cl.device_type.GPU)
16
- if len(devices) == 0:
17
- print("Could not find GPU device, trying CPU...")
18
- devices = platforms[0].get_devices(cl.device_type.CPU)
19
- if len(devices) == 0:
20
- print("Could not find OpenCL GPU or CPU device.")
21
- return None
22
-
23
- context: Any = cl.Context([devices[0]])
24
- return context, devices[0]
25
-
26
-
27
- def CreateProgram(context: Any, device: Any, filename: str) -> Any:
28
- current_dir = os.path.dirname(os.path.abspath(__file__))
29
- full_path = os.path.join(current_dir, filename)
30
-
31
- with open(full_path) as kernelFile:
32
- kernelStr = kernelFile.read()
33
-
34
- program = cl.Program(context, kernelStr)
35
- program.build(devices=[device])
36
-
37
- return program
38
-
39
-
40
- def get_contour_detections(
41
- mask: np.ndarray[Any, Any], area_threshold: int
42
- ) -> list[tuple[float, float, float, float]]:
43
- cnts, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
44
- detections: list[tuple[float, float, float, float]] = []
45
- for cnt in cnts:
46
- x, y, w, h = cv2.boundingRect(cnt)
47
- area = w * h
48
- if area > area_threshold:
49
- detections.append((x, y, x + w, y + h))
50
- return detections
@@ -1,57 +0,0 @@
1
- from collections.abc import AsyncGenerator
2
- from typing import Any, Optional, Protocol, Union, runtime_checkable
3
-
4
- from typing_extensions import Literal, TypedDict
5
-
6
- from _camera_ui_tools.camera_ui_types import (
7
- CameraFrameWorkerDecoder,
8
- CameraFrameWorkerResolution,
9
- DecoderFormat,
10
- FrameBuffer,
11
- FrameData,
12
- ImageOptions,
13
- )
14
-
15
-
16
- class AuthConfig(TypedDict):
17
- user: str
18
- password: str
19
-
20
-
21
- PixelFormat = Literal["yuv420p", "rgb24", "nv12"]
22
-
23
-
24
- class BaseFrameWorkerConfig(TypedDict):
25
- cameraId: str
26
- cameraName: str
27
- cameraSource: str
28
- ffmpegPath: str
29
- auth: AuthConfig
30
- proxyEndpoints: list[str]
31
- fps: int
32
- resolution: CameraFrameWorkerResolution
33
- decoder: CameraFrameWorkerDecoder
34
-
35
-
36
- class WorkerToMainMessage(TypedDict):
37
- message: Literal["started"]
38
- data: dict[str, Any]
39
-
40
-
41
- @runtime_checkable
42
- class FrameWorkerInterface(Protocol):
43
- def generateFrames(self, options: Optional[ImageOptions] = None) -> AsyncGenerator[FrameData, None]: ...
44
- async def processFrame(
45
- self,
46
- frame: Union[bytes, bytearray],
47
- width: int,
48
- height: int,
49
- format: Union[DecoderFormat, Literal["rgba", "gray"]],
50
- options: ImageOptions,
51
- ) -> FrameBuffer: ...
52
- async def getPrebufferedFrame(
53
- self,
54
- timestamp: int,
55
- options: Optional[ImageOptions] = None,
56
- max_difference: Optional[int] = 100,
57
- ) -> Optional[FrameData]: ...
@@ -1,70 +0,0 @@
1
- import asyncio
2
- from dataclasses import dataclass
3
- from typing import Any, Optional
4
-
5
-
6
- @dataclass
7
- class TCPConnectionDetails:
8
- server: asyncio.Server
9
- server_url: str
10
- server_address: str
11
- server_port: int
12
- connection_promise: asyncio.Future[tuple[asyncio.StreamReader, asyncio.StreamWriter]]
13
-
14
- def terminate(self) -> None:
15
- self.server.close()
16
-
17
-
18
- async def create_single_connection_server(
19
- bind_address: str = "127.0.0.1", config: Optional[dict[str, Any]] = None, wait_duration: float = 30.0
20
- ) -> TCPConnectionDetails:
21
- if not config:
22
- config = {}
23
-
24
- if not bind_address or bind_address == "0.0.0.0":
25
- bind_address = "127.0.0.1"
26
-
27
- connection_future: asyncio.Future[tuple[asyncio.StreamReader, asyncio.StreamWriter]] = asyncio.Future()
28
-
29
- async def client_connected(reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
30
- if not connection_future.done():
31
- connection_future.set_result((reader, writer))
32
-
33
- server = await asyncio.start_server(
34
- client_connected,
35
- host=bind_address,
36
- port=0,
37
- **config,
38
- )
39
-
40
- server_port = 0
41
- for sock in server.sockets:
42
- _, server_port = sock.getsockname()
43
- break
44
-
45
- if server_port == 0:
46
- raise RuntimeError("Konnte keinen Server-Port zuweisen")
47
-
48
- def on_timeout() -> None:
49
- if not connection_future.done():
50
- connection_future.set_exception(
51
- TimeoutError(f"Verbindungs-Timeout nach {wait_duration} Sekunden")
52
- )
53
- server.close()
54
-
55
- timeout_handle = asyncio.get_running_loop().call_later(wait_duration, on_timeout)
56
-
57
- def cancel_timeout(future: asyncio.Future[tuple[asyncio.StreamReader, asyncio.StreamWriter]]) -> None:
58
- timeout_handle.cancel()
59
- if future.exception() and server.is_serving():
60
- server.close()
61
-
62
- connection_future.add_done_callback(cancel_timeout)
63
-
64
- return TCPConnectionDetails(
65
- server=server,
66
- server_url=f"tcp://{bind_address}:{server_port}",
67
- server_address=bind_address,
68
- server_port=server_port,
69
- connection_promise=connection_future,
70
- )