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

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 (387) hide show
  1. package/dist/interface/index.html +44 -44
  2. package/dist/interface/js/{@primevue.OhxoO3MD.0.0.50-internal.0.js → @primevue.CiB2EGly.0.0.50-internal.1.js} +1 -1
  3. package/dist/interface/js/{@tanstack.D1IL6eOv.0.0.50-internal.0.js → @tanstack.DxMw_rJn.0.0.50-internal.1.js} +1 -1
  4. package/dist/interface/js/{@vee-validate.BGPyWWTh.0.0.50-internal.0.js → @vee-validate.RxZ3hn6V.0.0.50-internal.1.js} +1 -1
  5. package/dist/interface/js/{@vueuse.BsKtqdiG.0.0.50-internal.0.js → @vueuse.C-k73ACm.0.0.50-internal.1.js} +1 -1
  6. package/dist/interface/js/{Adminpanel.D93Kvbwp.0.0.50-internal.0.js → Adminpanel.DumNu6GD.0.0.50-internal.1.js} +1 -1
  7. package/dist/interface/js/{Camera.DF2l3OMA.0.0.50-internal.0.js → Camera.BuosoqFl.0.0.50-internal.1.js} +1 -1
  8. package/dist/interface/js/{Cameras.YzvZccdv.0.0.50-internal.0.js → Cameras.A7NJflGG.0.0.50-internal.1.js} +2 -2
  9. package/dist/interface/js/Cammesh.Dv3C0UiR.0.0.50-internal.1.js +1 -0
  10. package/dist/interface/js/{Camview.CB7_HnoQ.0.0.50-internal.0.js → Camview.GgjJp7JR.0.0.50-internal.1.js} +1 -1
  11. package/dist/interface/js/{Config.BwflsWTm.0.0.50-internal.0.js → Config.BL3L-BFE.0.0.50-internal.1.js} +2 -2
  12. package/dist/interface/js/{Console.DZM8pN8Q.0.0.50-internal.0.js → Console.CxwRmUVF.0.0.50-internal.1.js} +1 -1
  13. package/dist/interface/js/{CuiConsole.BXXU7Gth.0.0.50-internal.0.js → CuiConsole.D16kkT6R.0.0.50-internal.1.js} +1 -1
  14. package/dist/interface/js/{CuiPluginCard.YFOrpbVD.0.0.50-internal.0.js → CuiPluginCard.Bkp__d8n.0.0.50-internal.1.js} +1 -1
  15. package/dist/interface/js/{CuiTimeline.VV5KSJd5.0.0.50-internal.0.js → CuiTimeline.C9HKvo0G.0.0.50-internal.1.js} +1 -1
  16. package/dist/interface/js/{FirstSteps.b-nvymgb.0.0.50-internal.0.js → FirstSteps.QuJjtAtF.0.0.50-internal.1.js} +1 -1
  17. package/dist/interface/js/{Plugin.BOMpVEwM.0.0.50-internal.0.js → Plugin.BLUUbEej.0.0.50-internal.1.js} +1 -1
  18. package/dist/interface/js/{Plugins.DdPwaUDA.0.0.50-internal.0.js → Plugins.DviCIk7w.0.0.50-internal.1.js} +1 -1
  19. package/dist/interface/js/Recordings.Dsp07cHs.0.0.50-internal.1.js +1 -0
  20. package/dist/interface/js/{Settings.D24ttaPu.0.0.50-internal.0.js → Settings.Clx4y9gP.0.0.50-internal.1.js} +1 -1
  21. package/dist/interface/js/{SettingsAccount.ms3aqz4E.0.0.50-internal.0.js → SettingsAccount.cfY4-PYd.0.0.50-internal.1.js} +1 -1
  22. package/dist/interface/js/SettingsAppearance.CBGZAazb.0.0.50-internal.1.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.kxAPXcBy.0.0.50-internal.1.js} +1 -1
  24. package/dist/interface/js/{SettingsBackup.BPEc4Rjg.0.0.50-internal.0.js → SettingsBackup.DOaJA4pp.0.0.50-internal.1.js} +1 -1
  25. package/dist/interface/js/SettingsRecordings.BGcwL6tk.0.0.50-internal.1.js +1 -0
  26. package/dist/interface/js/{SettingsRemote.BL5nXbUT.0.0.50-internal.0.js → SettingsRemote.BVU_w1Jm.0.0.50-internal.1.js} +1 -1
  27. package/dist/interface/js/{SettingsSystem.D7T0AIpm.0.0.50-internal.0.js → SettingsSystem.P0vy90vA.0.0.50-internal.1.js} +1 -1
  28. package/dist/interface/js/{SettingsUsers.1u0vCOVG.0.0.50-internal.0.js → SettingsUsers.DaP5m7eo.0.0.50-internal.1.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.MmrWYW3K.0.0.50-internal.1.js} +1 -1
  30. package/dist/interface/js/{ace-builds.D1nmvCwb.0.0.50-internal.0.js → ace-builds.C0aqA_3x.0.0.50-internal.1.js} +2 -2
  31. package/dist/interface/js/{ace.config.G96T2z54.0.0.50-internal.0.js → ace.config.C9wgzklI.0.0.50-internal.1.js} +1 -1
  32. package/dist/interface/js/{backup.B_Gzxtp_.0.0.50-internal.0.js → backup.BeH6lJ5t.0.0.50-internal.1.js} +1 -1
  33. package/dist/interface/js/{chart.js.CP_nMnnf.0.0.50-internal.0.js → chart.js.BQHSWV_g.0.0.50-internal.1.js} +1 -1
  34. package/dist/interface/js/{close-circle.DYLuVIOg.0.0.50-internal.0.js → close-circle.DDKMxauw.0.0.50-internal.1.js} +1 -1
  35. package/dist/interface/js/{dnd-core.T9OeW7mu.0.0.50-internal.0.js → dnd-core.dWz9rJqH.0.0.50-internal.1.js} +1 -1
  36. package/dist/interface/js/{draggabilly.D3zGcBb3.0.0.50-internal.0.js → draggabilly.D-iZIS1n.0.0.50-internal.1.js} +1 -1
  37. package/dist/interface/js/{engine.io-client.kITRnq-g.0.0.50-internal.0.js → engine.io-client.BwxOddB_.0.0.50-internal.1.js} +1 -1
  38. package/dist/interface/js/{fast-deep-equal.Bpc9mIsj.0.0.50-internal.0.js → fast-deep-equal.Dz96RC_N.0.0.50-internal.1.js} +1 -1
  39. package/dist/interface/js/{highlight.js.BlSXU-Wb.0.0.50-internal.0.js → highlight.js.CmcM8OM6.0.0.50-internal.1.js} +1 -1
  40. package/dist/interface/js/{linkify-it.C3N1lWsJ.0.0.50-internal.0.js → linkify-it.BgLcBzlw.0.0.50-internal.1.js} +1 -1
  41. package/dist/interface/js/{main.D0YR3Jat.0.0.50-internal.0.js → main.6bOgRV7D.0.0.50-internal.1.js} +3 -3
  42. package/dist/interface/js/{markdown-it.Dj0dt5s2.0.0.50-internal.0.js → markdown-it.CTgfs-3p.0.0.50-internal.1.js} +1 -1
  43. package/dist/interface/js/{nprogress.BwQWDcGj.0.0.50-internal.0.js → nprogress.CMhnq8jS.0.0.50-internal.1.js} +1 -1
  44. package/dist/interface/js/{pinia.DRh7plEC.0.0.50-internal.0.js → pinia.CuC5ZfNs.0.0.50-internal.1.js} +1 -1
  45. package/dist/interface/js/{primevue.Cl58krXf.0.0.50-internal.0.js → primevue.DmwjJ4xV.0.0.50-internal.1.js} +1 -1
  46. package/dist/interface/js/{qrcode.C1sDj6P8.0.0.50-internal.0.js → qrcode.DGZO3j1c.0.0.50-internal.1.js} +1 -1
  47. package/dist/interface/js/{react-dnd-touch-backend.BA4WhUJo.0.0.50-internal.0.js → react-dnd-touch-backend.CEGHlD-T.0.0.50-internal.1.js} +1 -1
  48. package/dist/interface/js/{refresh-rounded.D_SmhhUf.0.0.50-internal.0.js → refresh-rounded.D0keXzBc.0.0.50-internal.1.js} +1 -1
  49. package/dist/interface/js/{rxjs.C-fTBwEO.0.0.50-internal.0.js → rxjs.CiDbFOB0.0.0.50-internal.1.js} +1 -1
  50. package/dist/interface/js/{socket.io-client.DKrRxgjP.0.0.50-internal.0.js → socket.io-client.BPcXPAHG.0.0.50-internal.1.js} +1 -1
  51. package/dist/interface/js/{socket.io-parser.EXj3YDH2.0.0.50-internal.0.js → socket.io-parser.DSGzrW_l.0.0.50-internal.1.js} +1 -1
  52. package/dist/interface/js/{system.CY8rGd-Q.0.0.50-internal.0.js → system.BKlEObmx.0.0.50-internal.1.js} +1 -1
  53. package/dist/interface/js/{trash-fill.CMnCN3Oy.0.0.50-internal.0.js → trash-fill.BDFILs86.0.0.50-internal.1.js} +1 -1
  54. package/dist/interface/js/{unidragger.D0w6Tqtt.0.0.50-internal.0.js → unidragger.DcxsxHCS.0.0.50-internal.1.js} +1 -1
  55. package/dist/interface/js/{vee-validate.BeiObIH8.0.0.50-internal.0.js → vee-validate.BGRg3oQ8.0.0.50-internal.1.js} +1 -1
  56. package/dist/interface/js/{vue-chartjs.DtdZdiYw.0.0.50-internal.0.js → vue-chartjs.B9yk2de7.0.0.50-internal.1.js} +1 -1
  57. package/dist/interface/js/{vue-i18n.BW2bx_6z.0.0.50-internal.0.js → vue-i18n.DXDZITpf.0.0.50-internal.1.js} +1 -1
  58. package/dist/interface/js/{vue-inline-svg.BJkQGmKz.0.0.50-internal.0.js → vue-inline-svg.BDYaTfbi.0.0.50-internal.1.js} +1 -1
  59. package/dist/interface/js/{vue-router.B2mOXHaC.0.0.50-internal.0.js → vue-router.CFEDA008.0.0.50-internal.1.js} +1 -1
  60. package/dist/interface/js/{vue-zoomable.BKDyCJE7.0.0.50-internal.0.js → vue-zoomable.zqTafMgD.0.0.50-internal.1.js} +1 -1
  61. package/dist/interface/js/{vue3-dnd.DRK24CBp.0.0.50-internal.0.js → vue3-dnd.BxM3dbYs.0.0.50-internal.1.js} +1 -1
  62. package/dist/interface/js/{zoom-out.DxvzgVEo.0.0.50-internal.0.js → zoom-out.B6SY9IIj.0.0.50-internal.1.js} +1 -1
  63. package/dist/interface/sw.js +1 -1
  64. package/dist/server/package.json +1 -1
  65. package/package.json +1 -1
  66. package/.prettierignore +0 -12
  67. package/.prettierrc.json +0 -12
  68. package/artillery.yaml +0 -29
  69. package/bin/cameraui-server.ts +0 -11
  70. package/dist/interface/js/Cammesh.D-6dAROQ.0.0.50-internal.0.js +0 -1
  71. package/dist/interface/js/Recordings.DhxjIW7e.0.0.50-internal.0.js +0 -1
  72. package/dist/interface/js/SettingsAppearance.DsTjKXk1.0.0.50-internal.0.js +0 -1
  73. package/dist/interface/js/SettingsRecordings.DgW7M0jj.0.0.50-internal.0.js +0 -1
  74. package/eslint.config.js +0 -103
  75. package/localdeps.txt +0 -10
  76. package/mypy.ini +0 -30
  77. package/requirements.txt +0 -15
  78. package/ruff.toml +0 -90
  79. package/src/__init__.py +0 -0
  80. package/src/_camera_ui_tools/__init__.py +0 -0
  81. package/src/_camera_ui_tools/__pycache__/__init__.cpython-311.pyc +0 -0
  82. package/src/api/controllers/api.controller.ts +0 -19
  83. package/src/api/controllers/auth.controller.ts +0 -294
  84. package/src/api/controllers/backup.controller.ts +0 -72
  85. package/src/api/controllers/cameras.controller.ts +0 -1029
  86. package/src/api/controllers/config.controller.ts +0 -102
  87. package/src/api/controllers/files.controller.ts +0 -35
  88. package/src/api/controllers/frameWorkers.controller.ts +0 -109
  89. package/src/api/controllers/plugins.controller.ts +0 -1206
  90. package/src/api/controllers/system.controller.ts +0 -273
  91. package/src/api/controllers/users.controller.ts +0 -648
  92. package/src/api/database/checks.ts +0 -268
  93. package/src/api/database/constants.ts +0 -8
  94. package/src/api/database/index.ts +0 -262
  95. package/src/api/database/migration.ts +0 -62
  96. package/src/api/database/selfcheck.ts +0 -492
  97. package/src/api/database/types.ts +0 -104
  98. package/src/api/go2rtc/api/application.ts +0 -48
  99. package/src/api/go2rtc/api/config.ts +0 -61
  100. package/src/api/go2rtc/api/discover.ts +0 -197
  101. package/src/api/go2rtc/api/index.ts +0 -49
  102. package/src/api/go2rtc/api/snapshot.ts +0 -44
  103. package/src/api/go2rtc/api/streams.ts +0 -168
  104. package/src/api/go2rtc/index.ts +0 -43
  105. package/src/api/go2rtc/queue.ts +0 -50
  106. package/src/api/go2rtc/types.ts +0 -174
  107. package/src/api/index.ts +0 -286
  108. package/src/api/middlewares/authPermission.middleware.ts +0 -46
  109. package/src/api/middlewares/authValidation.middleware.ts +0 -160
  110. package/src/api/middlewares/pagination.middleware.ts +0 -67
  111. package/src/api/middlewares/socketAuth.middleware.ts +0 -136
  112. package/src/api/plugins/header.plugin.ts +0 -15
  113. package/src/api/plugins/logger.plugin.ts +0 -44
  114. package/src/api/plugins/proxy.plugin.ts +0 -255
  115. package/src/api/plugins/socket.plugin.ts +0 -28
  116. package/src/api/plugins/system.plugin.ts +0 -48
  117. package/src/api/plugins/useragent.plugin.ts +0 -19
  118. package/src/api/routes/api.routes.ts +0 -10
  119. package/src/api/routes/auth.routes.ts +0 -56
  120. package/src/api/routes/backup.routes.ts +0 -28
  121. package/src/api/routes/cameras.routes.ts +0 -281
  122. package/src/api/routes/config.routes.ts +0 -66
  123. package/src/api/routes/files.routes.ts +0 -15
  124. package/src/api/routes/frameWorkers.routes.ts +0 -39
  125. package/src/api/routes/index.ts +0 -37
  126. package/src/api/routes/plugins.routes.ts +0 -420
  127. package/src/api/routes/system.routes.ts +0 -101
  128. package/src/api/routes/users.routes.ts +0 -167
  129. package/src/api/schemas/backup.schema.ts +0 -112
  130. package/src/api/schemas/cameras.schema.ts +0 -479
  131. package/src/api/schemas/config.schema.ts +0 -38
  132. package/src/api/schemas/go2rtc.schema.ts +0 -189
  133. package/src/api/schemas/plugins.schema.ts +0 -126
  134. package/src/api/schemas/storage.schema.ts +0 -11
  135. package/src/api/schemas/system.schema.ts +0 -45
  136. package/src/api/schemas/users.schema.ts +0 -185
  137. package/src/api/services/auth.service.ts +0 -210
  138. package/src/api/services/backup.service.ts +0 -144
  139. package/src/api/services/cameras.service.ts +0 -671
  140. package/src/api/services/plugins.service.ts +0 -470
  141. package/src/api/services/system.service.ts +0 -85
  142. package/src/api/services/users.service.ts +0 -276
  143. package/src/api/types/index.ts +0 -675
  144. package/src/api/utils/cert.ts +0 -254
  145. package/src/api/utils/constants.ts +0 -17
  146. package/src/api/utils/fetch.ts +0 -21
  147. package/src/api/utils/moveFiles.ts +0 -45
  148. package/src/api/utils/parse.ts +0 -17
  149. package/src/api/websocket/index.ts +0 -110
  150. package/src/api/websocket/nsp/logs.ts +0 -240
  151. package/src/api/websocket/nsp/main.ts +0 -27
  152. package/src/api/websocket/nsp/metrics.ts +0 -301
  153. package/src/api/websocket/nsp/notifications.ts +0 -43
  154. package/src/api/websocket/nsp/plugins.ts +0 -37
  155. package/src/api/websocket/nsp/server.ts +0 -220
  156. package/src/api/websocket/nsp/status.ts +0 -77
  157. package/src/api/websocket/types.ts +0 -55
  158. package/src/api.ts +0 -163
  159. package/src/camera/classes.ts +0 -32
  160. package/src/camera/controller.ts +0 -579
  161. package/src/camera/device.ts +0 -422
  162. package/src/camera/frameWorker.ts +0 -403
  163. package/src/camera/index.ts +0 -679
  164. package/src/camera/interfaces.ts +0 -95
  165. package/src/camera/iou.ts +0 -153
  166. package/src/camera/polygon.ts +0 -226
  167. package/src/camera/python/__init__.py +0 -0
  168. package/src/camera/python/__pycache__/__init__.cpython-311.pyc +0 -0
  169. package/src/camera/python/__pycache__/classes.cpython-311.pyc +0 -0
  170. package/src/camera/python/__pycache__/delegate_controller.cpython-311.pyc +0 -0
  171. package/src/camera/python/__pycache__/interfaces.cpython-311.pyc +0 -0
  172. package/src/camera/python/__pycache__/iou.cpython-310.pyc +0 -0
  173. package/src/camera/python/__pycache__/iou.cpython-311.pyc +0 -0
  174. package/src/camera/python/__pycache__/iou2.cpython-310.pyc +0 -0
  175. package/src/camera/python/__pycache__/polygon.cpython-311.pyc +0 -0
  176. package/src/camera/python/__pycache__/typings.cpython-311.pyc +0 -0
  177. package/src/camera/python/__pycache__/video_frame.cpython-311.pyc +0 -0
  178. package/src/camera/python/classes.py +0 -41
  179. package/src/camera/python/interfaces.py +0 -130
  180. package/src/camera/python/iou.py +0 -158
  181. package/src/camera/python/polygon.py +0 -230
  182. package/src/camera/python/test/__pycache__/polygon.cpython-310.pyc +0 -0
  183. package/src/camera/python/test/iou_test.py +0 -799
  184. package/src/camera/python/test/polygon.py +0 -238
  185. package/src/camera/python/test/polygon_test.py +0 -256
  186. package/src/camera/python/test/polygon_test2.py +0 -484
  187. package/src/camera/python/typings.py +0 -50
  188. package/src/camera/python/video_frame.py +0 -143
  189. package/src/camera/session.ts +0 -192
  190. package/src/camera/streaming/fmp4-session.ts +0 -390
  191. package/src/camera/streaming/peer-connection.ts +0 -273
  192. package/src/camera/streaming/rtsp-session.ts +0 -331
  193. package/src/camera/streaming/webrtc-connection.ts +0 -260
  194. package/src/camera/streaming/werift-session.ts +0 -317
  195. package/src/camera/test/iou_test.ts +0 -761
  196. package/src/camera/test/polygon.test.ts +0 -611
  197. package/src/camera/test/polygon_test.ts +0 -210
  198. package/src/camera/types.ts +0 -48
  199. package/src/camera/utils.ts +0 -489
  200. package/src/camera/videoFrame.ts +0 -123
  201. package/src/cloud/index.ts +0 -61
  202. package/src/cloud/remote/cloudflare.ts +0 -18
  203. package/src/cloud/remote/upnp.ts +0 -18
  204. package/src/cloud/remote/utils.ts +0 -24
  205. package/src/cloud/types.ts +0 -16
  206. package/src/decoder/child.ts +0 -883
  207. package/src/decoder/imageUtils.ts +0 -275
  208. package/src/decoder/manager.ts +0 -251
  209. package/src/decoder/python/__init__.py +0 -0
  210. package/src/decoder/python/__pycache__/__init__.cpython-311.pyc +0 -0
  211. package/src/decoder/python/__pycache__/image_utils.cpython-311.pyc +0 -0
  212. package/src/decoder/python/__pycache__/typings.cpython-311.pyc +0 -0
  213. package/src/decoder/python/__pycache__/utils.cpython-311.pyc +0 -0
  214. package/src/decoder/python/child.py +0 -903
  215. package/src/decoder/python/image_utils.py +0 -196
  216. package/src/decoder/python/pool.py +0 -45
  217. package/src/decoder/python/test/group.py +0 -62
  218. package/src/decoder/python/test/motion.mp4 +0 -0
  219. package/src/decoder/python/test/motion2.mp4 +0 -0
  220. package/src/decoder/python/test/opencl.cl +0 -70
  221. package/src/decoder/python/test/opencl2.cl +0 -130
  222. package/src/decoder/python/test/test.py +0 -427
  223. package/src/decoder/python/test/test1.jpg +0 -0
  224. package/src/decoder/python/test/test1_resized.jpg +0 -0
  225. package/src/decoder/python/test/test2.jpg +0 -0
  226. package/src/decoder/python/test/test2.py +0 -451
  227. package/src/decoder/python/test/test2_resized.jpg +0 -0
  228. package/src/decoder/python/test/test3.jpg +0 -0
  229. package/src/decoder/python/test/utils.py +0 -50
  230. package/src/decoder/python/typings.py +0 -57
  231. package/src/decoder/python/utils.py +0 -70
  232. package/src/decoder/test/child.ts +0 -117
  233. package/src/decoder/test/ffmpeg.ts +0 -371
  234. package/src/decoder/test/test.ts +0 -182
  235. package/src/decoder/types.ts +0 -27
  236. package/src/decoder/utils.ts +0 -64
  237. package/src/decoder/wasm/asconfig.json +0 -28
  238. package/src/decoder/wasm/assembly/console.ts +0 -1
  239. package/src/decoder/wasm/assembly/index.ts +0 -890
  240. package/src/decoder/wasm/build/decoder.d.ts +0 -43
  241. package/src/decoder/wasm/build/decoder.js +0 -108
  242. package/src/decoder/wasm/build/decoder.wasm +0 -0
  243. package/src/decoder/wasm/tsconfig.json +0 -5
  244. package/src/decoder/worker.ts +0 -113
  245. package/src/go2rtc/index.ts +0 -324
  246. package/src/go2rtc/types.ts +0 -88
  247. package/src/main.ts +0 -267
  248. package/src/manager/coreManager.ts +0 -78
  249. package/src/manager/deviceManager.ts +0 -132
  250. package/src/manager/types.ts +0 -17
  251. package/src/plugins/index.ts +0 -443
  252. package/src/plugins/plugin.ts +0 -177
  253. package/src/plugins/runtime/base.ts +0 -282
  254. package/src/plugins/runtime/index.ts +0 -15
  255. package/src/plugins/runtime/node/child.ts +0 -193
  256. package/src/plugins/runtime/node/index.ts +0 -67
  257. package/src/plugins/runtime/node/plugin.ts +0 -122
  258. package/src/plugins/runtime/node/pluginApi.ts +0 -27
  259. package/src/plugins/runtime/node/proxy/cameraDevice.ts +0 -299
  260. package/src/plugins/runtime/node/proxy/coreManager.ts +0 -128
  261. package/src/plugins/runtime/node/proxy/deviceManager.ts +0 -187
  262. package/src/plugins/runtime/node/storage.ts +0 -312
  263. package/src/plugins/runtime/node/storageController.ts +0 -91
  264. package/src/plugins/runtime/python/__init__.py +0 -0
  265. package/src/plugins/runtime/python/__pycache__/__init__.cpython-311.pyc +0 -0
  266. package/src/plugins/runtime/python/__pycache__/camera_storage.cpython-311.pyc +0 -0
  267. package/src/plugins/runtime/python/__pycache__/config_service.cpython-311.pyc +0 -0
  268. package/src/plugins/runtime/python/__pycache__/constants.cpython-311.pyc +0 -0
  269. package/src/plugins/runtime/python/__pycache__/ipc.cpython-311.pyc +0 -0
  270. package/src/plugins/runtime/python/__pycache__/logger.cpython-311.pyc +0 -0
  271. package/src/plugins/runtime/python/__pycache__/message_queue.cpython-311.pyc +0 -0
  272. package/src/plugins/runtime/python/__pycache__/namespaces.cpython-311.pyc +0 -0
  273. package/src/plugins/runtime/python/__pycache__/plugin.cpython-311.pyc +0 -0
  274. package/src/plugins/runtime/python/__pycache__/plugin_api.cpython-311.pyc +0 -0
  275. package/src/plugins/runtime/python/__pycache__/plugin_logger.cpython-311.pyc +0 -0
  276. package/src/plugins/runtime/python/__pycache__/proxy_utils.cpython-311.pyc +0 -0
  277. package/src/plugins/runtime/python/__pycache__/schema.cpython-311.pyc +0 -0
  278. package/src/plugins/runtime/python/__pycache__/storage.cpython-311.pyc +0 -0
  279. package/src/plugins/runtime/python/__pycache__/storage_controller.cpython-311.pyc +0 -0
  280. package/src/plugins/runtime/python/__pycache__/typings.cpython-311.pyc +0 -0
  281. package/src/plugins/runtime/python/child.py +0 -248
  282. package/src/plugins/runtime/python/index.ts +0 -73
  283. package/src/plugins/runtime/python/namespaces.py +0 -101
  284. package/src/plugins/runtime/python/plugin.py +0 -155
  285. package/src/plugins/runtime/python/plugin_api.py +0 -29
  286. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-310.pyc +0 -0
  287. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-311.pyc +0 -0
  288. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-38.pyc +0 -0
  289. package/src/plugins/runtime/python/proxy/__pycache__/camera_device.cpython-39.pyc +0 -0
  290. package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-311.pyc +0 -0
  291. package/src/plugins/runtime/python/proxy/__pycache__/constants.cpython-39.pyc +0 -0
  292. package/src/plugins/runtime/python/proxy/__pycache__/core_manager.cpython-311.pyc +0 -0
  293. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-310.pyc +0 -0
  294. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-311.pyc +0 -0
  295. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-38.pyc +0 -0
  296. package/src/plugins/runtime/python/proxy/__pycache__/device_manager.cpython-39.pyc +0 -0
  297. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-310.pyc +0 -0
  298. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-311.pyc +0 -0
  299. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-38.pyc +0 -0
  300. package/src/plugins/runtime/python/proxy/__pycache__/generate_keys.cpython-39.pyc +0 -0
  301. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-310.pyc +0 -0
  302. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-311.pyc +0 -0
  303. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-38.pyc +0 -0
  304. package/src/plugins/runtime/python/proxy/__pycache__/message_queue.cpython-39.pyc +0 -0
  305. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-310.pyc +0 -0
  306. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-311.pyc +0 -0
  307. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-38.pyc +0 -0
  308. package/src/plugins/runtime/python/proxy/__pycache__/plugins_manager.cpython-39.pyc +0 -0
  309. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-310.pyc +0 -0
  310. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-311.pyc +0 -0
  311. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-38.pyc +0 -0
  312. package/src/plugins/runtime/python/proxy/__pycache__/system_manager.cpython-39.pyc +0 -0
  313. package/src/plugins/runtime/python/proxy/camera_device.py +0 -1732
  314. package/src/plugins/runtime/python/proxy/core_manager.py +0 -126
  315. package/src/plugins/runtime/python/proxy/device_manager.py +0 -197
  316. package/src/plugins/runtime/python/schema.py +0 -99
  317. package/src/plugins/runtime/python/storage.py +0 -353
  318. package/src/plugins/runtime/python/storage_controller.py +0 -102
  319. package/src/plugins/runtime/python/typings.py +0 -195
  320. package/src/plugins/schema.ts +0 -472
  321. package/src/plugins/types.ts +0 -60
  322. package/src/plugins/worker.ts +0 -250
  323. package/src/rpc/index.ts +0 -149
  324. package/src/rpc/namespaces.ts +0 -79
  325. package/src/rpc/server.ts +0 -422
  326. package/src/rpc/types.ts +0 -119
  327. package/src/rpc/utils.ts +0 -16
  328. package/src/services/config/constants.ts +0 -47
  329. package/src/services/config/defaults.ts +0 -57
  330. package/src/services/config/index.ts +0 -744
  331. package/src/services/config/types.ts +0 -211
  332. package/src/services/logger/index.ts +0 -96
  333. package/src/types.ts +0 -47
  334. package/src/utils/path.ts +0 -16
  335. package/src/utils/pythonInstaller.ts +0 -597
  336. package/tsconfig.json +0 -37
  337. package/updates.config.js +0 -3
  338. /package/dist/interface/assets/{@xterm.DYP7pi_n.0.0.50-internal.0.css → @xterm.DYP7pi_n.0.0.50-internal.1.css} +0 -0
  339. /package/dist/interface/assets/{Adminpanel.BKek2EMH.0.0.50-internal.0.css → Adminpanel.BKek2EMH.0.0.50-internal.1.css} +0 -0
  340. /package/dist/interface/assets/{Cameras.BDWZJqPN.0.0.50-internal.0.css → Cameras.BDWZJqPN.0.0.50-internal.1.css} +0 -0
  341. /package/dist/interface/assets/{Camview.BFUFMoNX.0.0.50-internal.0.css → Camview.BFUFMoNX.0.0.50-internal.1.css} +0 -0
  342. /package/dist/interface/assets/{CuiConsole.DCYyxdVg.0.0.50-internal.0.css → CuiConsole.DCYyxdVg.0.0.50-internal.1.css} +0 -0
  343. /package/dist/interface/assets/{CuiPluginCard.yF8V0SZY.0.0.50-internal.0.css → CuiPluginCard.yF8V0SZY.0.0.50-internal.1.css} +0 -0
  344. /package/dist/interface/assets/{CuiTimeline.BkIwlYtw.0.0.50-internal.0.css → CuiTimeline.BkIwlYtw.0.0.50-internal.1.css} +0 -0
  345. /package/dist/interface/assets/{Plugin.DJElsAn5.0.0.50-internal.0.css → Plugin.DJElsAn5.0.0.50-internal.1.css} +0 -0
  346. /package/dist/interface/assets/{Plugins.0h77qnmN.0.0.50-internal.0.css → Plugins.0h77qnmN.0.0.50-internal.1.css} +0 -0
  347. /package/dist/interface/assets/{Settings.CkgfRkQr.0.0.50-internal.0.css → Settings.CkgfRkQr.0.0.50-internal.1.css} +0 -0
  348. /package/dist/interface/assets/{SettingsAccount.DeFul3eQ.0.0.50-internal.0.css → SettingsAccount.DeFul3eQ.0.0.50-internal.1.css} +0 -0
  349. /package/dist/interface/assets/{SettingsBackup.CX0rT0QJ.0.0.50-internal.0.css → SettingsBackup.CX0rT0QJ.0.0.50-internal.1.css} +0 -0
  350. /package/dist/interface/assets/{highlight.Ch2EwETz.0.0.50-internal.0.css → highlight.Ch2EwETz.0.0.50-internal.1.css} +0 -0
  351. /package/dist/interface/assets/{logo-256.BCQk9H1-.0.0.50-internal.0.png → logo-256.BCQk9H1-.0.0.50-internal.1.png} +0 -0
  352. /package/dist/interface/assets/{logo-512.DLKVOU2S.0.0.50-internal.0.png → logo-512.DLKVOU2S.0.0.50-internal.1.png} +0 -0
  353. /package/dist/interface/assets/{logo.DmEiRk0z.0.0.50-internal.0.png → logo.DmEiRk0z.0.0.50-internal.1.png} +0 -0
  354. /package/dist/interface/assets/{main.Cip9LkS3.0.0.50-internal.0.css → main.Cip9LkS3.0.0.50-internal.1.css} +0 -0
  355. /package/dist/interface/assets/{mode-json.Br7xisR1.0.0.50-internal.0.js → mode-json.Br7xisR1.0.0.50-internal.1.js} +0 -0
  356. /package/dist/interface/assets/{mode-yaml.CIYL8U3d.0.0.50-internal.0.js → mode-yaml.CIYL8U3d.0.0.50-internal.1.js} +0 -0
  357. /package/dist/interface/assets/{worker-base.jEXLGV2h.0.0.50-internal.0.js → worker-base.jEXLGV2h.0.0.50-internal.1.js} +0 -0
  358. /package/dist/interface/assets/{worker-json.DgwNIOck.0.0.50-internal.0.js → worker-json.DgwNIOck.0.0.50-internal.1.js} +0 -0
  359. /package/dist/interface/assets/{worker-yaml.B3uUYINB.0.0.50-internal.0.js → worker-yaml.B3uUYINB.0.0.50-internal.1.js} +0 -0
  360. /package/dist/interface/js/{@babel.l0sNRNKZ.0.0.50-internal.0.js → @babel.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  361. /package/dist/interface/js/{@intlify.BkGPX90O.0.0.50-internal.0.js → @intlify.BkGPX90O.0.0.50-internal.1.js} +0 -0
  362. /package/dist/interface/js/{@kurkle.D8fDXNIl.0.0.50-internal.0.js → @kurkle.D8fDXNIl.0.0.50-internal.1.js} +0 -0
  363. /package/dist/interface/js/{@primeuix.BFAY2Bk9.0.0.50-internal.0.js → @primeuix.BFAY2Bk9.0.0.50-internal.1.js} +0 -0
  364. /package/dist/interface/js/{@react-dnd.CcwRs9xb.0.0.50-internal.0.js → @react-dnd.CcwRs9xb.0.0.50-internal.1.js} +0 -0
  365. /package/dist/interface/js/{@socket.io.Dkula2eQ.0.0.50-internal.0.js → @socket.io.Dkula2eQ.0.0.50-internal.1.js} +0 -0
  366. /package/dist/interface/js/{@vue.B5vqhCp2.0.0.50-internal.0.js → @vue.B5vqhCp2.0.0.50-internal.1.js} +0 -0
  367. /package/dist/interface/js/{@xterm.CAa7rpjv.0.0.50-internal.0.js → @xterm.DIUBesyz.0.0.50-internal.1.js} +0 -0
  368. /package/dist/interface/js/{axios.DHr9lByg.0.0.50-internal.0.js → axios.DHr9lByg.0.0.50-internal.1.js} +0 -0
  369. /package/dist/interface/js/{birpc.l0sNRNKZ.0.0.50-internal.0.js → birpc.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  370. /package/dist/interface/js/{compare-versions.DqEOhma6.0.0.50-internal.0.js → compare-versions.DqEOhma6.0.0.50-internal.1.js} +0 -0
  371. /package/dist/interface/js/{dijkstrajs.C00ieaqj.0.0.50-internal.0.js → dijkstrajs.C00ieaqj.0.0.50-internal.1.js} +0 -0
  372. /package/dist/interface/js/{engine.io-parser.BiEtp6m2.0.0.50-internal.0.js → engine.io-parser.BiEtp6m2.0.0.50-internal.1.js} +0 -0
  373. /package/dist/interface/js/{entities.C20TfXL6.0.0.50-internal.0.js → entities.C20TfXL6.0.0.50-internal.1.js} +0 -0
  374. /package/dist/interface/js/{ev-emitter.X5f1qa-c.0.0.50-internal.0.js → ev-emitter.X5f1qa-c.0.0.50-internal.1.js} +0 -0
  375. /package/dist/interface/js/{get-size.D1dS-IaP.0.0.50-internal.0.js → get-size.D1dS-IaP.0.0.50-internal.1.js} +0 -0
  376. /package/dist/interface/js/{hookable.l0sNRNKZ.0.0.50-internal.0.js → hookable.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  377. /package/dist/interface/js/{mdurl.k9Sl0PQj.0.0.50-internal.0.js → mdurl.k9Sl0PQj.0.0.50-internal.1.js} +0 -0
  378. /package/dist/interface/js/{perfect-debounce.l0sNRNKZ.0.0.50-internal.0.js → perfect-debounce.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  379. /package/dist/interface/js/{primelocale.Bga3dOQu.0.0.50-internal.0.js → primelocale.Bga3dOQu.0.0.50-internal.1.js} +0 -0
  380. /package/dist/interface/js/{punycode.js.Dj65hjkv.0.0.50-internal.0.js → punycode.js.Dj65hjkv.0.0.50-internal.1.js} +0 -0
  381. /package/dist/interface/js/{react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.0.js → react-dnd-html5-backend.1HQjlkwI.0.0.50-internal.1.js} +0 -0
  382. /package/dist/interface/js/{redux.BFxtlG_c.0.0.50-internal.0.js → redux.BFxtlG_c.0.0.50-internal.1.js} +0 -0
  383. /package/dist/interface/js/{tslib.9k7AwCpt.0.0.50-internal.0.js → tslib.9k7AwCpt.0.0.50-internal.1.js} +0 -0
  384. /package/dist/interface/js/{uc.micro.kMc2yuuw.0.0.50-internal.0.js → uc.micro.kMc2yuuw.0.0.50-internal.1.js} +0 -0
  385. /package/dist/interface/js/{uuid.C6aID195.0.0.50-internal.0.js → uuid.C6aID195.0.0.50-internal.1.js} +0 -0
  386. /package/dist/interface/js/{vue.l0sNRNKZ.0.0.50-internal.0.js → vue.l0sNRNKZ.0.0.50-internal.1.js} +0 -0
  387. /package/dist/interface/js/{zod.SKKegNRO.0.0.50-internal.0.js → zod.SKKegNRO.0.0.50-internal.1.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
- )