rocket-welder-sdk 1.1.45__tar.gz → 1.1.47__tar.gz

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 (83) hide show
  1. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/PKG-INFO +1 -1
  2. rocket_welder_sdk-1.1.47/VERSION +1 -0
  3. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/rocket_welder_client.py +123 -0
  4. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk.egg-info/PKG-INFO +1 -1
  5. rocket_welder_sdk-1.1.45/VERSION +0 -1
  6. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/MANIFEST.in +0 -0
  7. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/README.md +0 -0
  8. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/logo.png +0 -0
  9. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/pyproject.toml +0 -0
  10. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/__init__.py +0 -0
  11. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/binary_frame_reader.py +0 -0
  12. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/binary_frame_writer.py +0 -0
  13. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/bytes_size.py +0 -0
  14. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/confidence.py +0 -0
  15. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/connection_string.py +0 -0
  16. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/controllers.py +0 -0
  17. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/delta_frame.py +0 -0
  18. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/external_controls/__init__.py +0 -0
  19. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/external_controls/contracts.py +0 -0
  20. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/external_controls/contracts_old.py +0 -0
  21. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/frame_metadata.py +0 -0
  22. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/graphics/__init__.py +0 -0
  23. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/graphics/layer_canvas.py +0 -0
  24. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/graphics/protocol.py +0 -0
  25. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/graphics/rgb_color.py +0 -0
  26. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/graphics/stage.py +0 -0
  27. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/graphics/vector_graphics_encoder.py +0 -0
  28. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/gst_metadata.py +0 -0
  29. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/__init__.py +0 -0
  30. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/client.py +0 -0
  31. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/connection_strings.py +0 -0
  32. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/data_context.py +0 -0
  33. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/frame_sink_factory.py +0 -0
  34. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/schema.py +0 -0
  35. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/high_level/transport_protocol.py +0 -0
  36. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/keypoints_protocol.py +0 -0
  37. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/opencv_controller.py +0 -0
  38. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/periodic_timer.py +0 -0
  39. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/py.typed +0 -0
  40. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/segmentation_result.py +0 -0
  41. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/session_id.py +0 -0
  42. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/__init__.py +0 -0
  43. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/frame_sink.py +0 -0
  44. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/frame_source.py +0 -0
  45. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/stream_transport.py +0 -0
  46. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/tcp_transport.py +0 -0
  47. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/unix_socket_transport.py +0 -0
  48. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/transport/websocket_transport.py +0 -0
  49. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/ui/__init__.py +0 -0
  50. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/ui/controls.py +0 -0
  51. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/ui/icons.py +0 -0
  52. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/ui/ui_events_projection.py +0 -0
  53. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/ui/ui_service.py +0 -0
  54. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/ui/value_types.py +0 -0
  55. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk/varint.py +0 -0
  56. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk.egg-info/SOURCES.txt +0 -0
  57. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk.egg-info/dependency_links.txt +0 -0
  58. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk.egg-info/requires.txt +0 -0
  59. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/rocket_welder_sdk.egg-info/top_level.txt +0 -0
  60. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/setup.cfg +0 -0
  61. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/setup.py +0 -0
  62. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_binary_frame.py +0 -0
  63. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_bytes_size.py +0 -0
  64. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_confidence.py +0 -0
  65. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_connection_string.py +0 -0
  66. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_controllers.py +0 -0
  67. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_delta_frame.py +0 -0
  68. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_external_controls_serialization.py +0 -0
  69. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_external_controls_serialization_v2.py +0 -0
  70. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_frame_metadata.py +0 -0
  71. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_gst_metadata.py +0 -0
  72. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_high_level_api.py +0 -0
  73. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_icons.py +0 -0
  74. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_keypoints_cross_platform.py +0 -0
  75. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_keypoints_protocol.py +0 -0
  76. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_rocket_welder_client.py +0 -0
  77. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_segmentation_cross_platform.py +0 -0
  78. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_segmentation_result.py +0 -0
  79. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_session_id.py +0 -0
  80. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_transport_cross_platform.py +0 -0
  81. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_ui_controls.py +0 -0
  82. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_ui_service_happy_path.py +0 -0
  83. {rocket_welder_sdk-1.1.45 → rocket_welder_sdk-1.1.47}/tests/test_websocket_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rocket-welder-sdk
3
- Version: 1.1.45
3
+ Version: 1.1.47
4
4
  Summary: High-performance video streaming SDK for RocketWelder services using ZeroBuffer IPC
5
5
  Home-page: https://github.com/modelingevolution/rocket-welder-sdk
6
6
  Author: ModelingEvolution
@@ -0,0 +1 @@
1
+ 1.1.47
@@ -308,6 +308,129 @@ class RocketWelderClient:
308
308
  self._controller.start(writer_callback, cancellation_token) # type: ignore[arg-type]
309
309
  logger.info("RocketWelder client started with writers: %s", self._connection)
310
310
 
311
+ def start_with_writers_oneway(
312
+ self,
313
+ on_frame: Callable[[Mat, ISegmentationResultWriter, IKeyPointsWriter, IStageWriter], None], # type: ignore[valid-type]
314
+ cancellation_token: Optional[threading.Event] = None,
315
+ ) -> None:
316
+ """
317
+ Start receiving frames with writers in ONE-WAY mode (no output frame).
318
+
319
+ This is for inference-only containers that consume frames but don't produce
320
+ modified output. Data is streamed via Unix sockets for downstream consumers.
321
+
322
+ Configuration via environment variables:
323
+ - SEGMENTATION_SINK_URL: URL for segmentation output (e.g., socket:///tmp/seg.sock)
324
+ - KEYPOINTS_SINK_URL: URL for keypoints output (e.g., socket:///tmp/kp.sock)
325
+ - GRAPHICS_SINK_URL: URL for graphics/stage output (e.g., socket:///tmp/stage.sock)
326
+
327
+ Args:
328
+ on_frame: Callback receiving (input_mat, seg_writer, kp_writer, stage_writer).
329
+ Note: NO output_mat parameter - this is one-way/sink mode.
330
+ cancellation_token: Optional cancellation token
331
+
332
+ Example:
333
+ def process_frame(input_mat, seg_writer, kp_writer, stage_writer):
334
+ # Run AI inference
335
+ result = ai_model.infer(input_mat)
336
+
337
+ # Write segmentation results
338
+ for instance in result.instances:
339
+ seg_writer.append(instance.class_id, instance.instance_id, instance.points)
340
+
341
+ # Write keypoints
342
+ for kp in result.keypoints:
343
+ kp_writer.append(kp.id, kp.x, kp.y, kp.confidence)
344
+
345
+ # Draw graphics overlay
346
+ layer = stage_writer[0]
347
+ layer.set_font_size(24)
348
+ layer.draw_text("Detection count: 5", 10, 30)
349
+
350
+ # NOTE: No output_mat - we don't modify frames in sink mode
351
+
352
+ client.start_with_writers_oneway(process_frame)
353
+
354
+ Raises:
355
+ RuntimeError: If already running
356
+ ValueError: If connection type is not supported
357
+ """
358
+ with self._lock:
359
+ if self._controller and self._controller.is_running:
360
+ raise RuntimeError("Client is already running")
361
+
362
+ # Create controller - OneWay mode uses OneWayShmController
363
+ if self._connection.protocol == Protocol.SHM:
364
+ if self._connection.connection_mode == ConnectionMode.DUPLEX:
365
+ # For duplex mode, use the other method
366
+ raise ValueError(
367
+ "start_with_writers_oneway() is for OneWay mode. "
368
+ "Use start_with_writers() for Duplex mode."
369
+ )
370
+ self._controller = OneWayShmController(self._connection)
371
+ elif self._connection.protocol == Protocol.FILE or bool(
372
+ self._connection.protocol & Protocol.MJPEG # type: ignore[operator]
373
+ ):
374
+ self._controller = OpenCvController(self._connection)
375
+ else:
376
+ raise ValueError(f"Unsupported protocol: {self._connection.protocol}")
377
+
378
+ # Create sinks from environment
379
+ seg_sink = self._get_or_create_segmentation_sink()
380
+ kp_sink = self._get_or_create_keypoints_sink()
381
+ stage_sink = self._get_or_create_stage_sink()
382
+
383
+ logger.info(
384
+ "Starting RocketWelder client with AI output support (one-way): seg=%s, kp=%s, stage=%s",
385
+ "configured" if seg_sink else "null",
386
+ "configured" if kp_sink else "null",
387
+ "configured" if stage_sink else "null",
388
+ )
389
+
390
+ # Track frame number manually for one-way mode (no FrameMetadata from controller)
391
+ frame_number_holder = [0] # Use list to allow mutation in nested function
392
+
393
+ # Wrapper callback that creates per-frame writers
394
+ # OneWay controller provides only input Mat, no output Mat
395
+ def writer_callback_oneway(input_mat: Mat) -> None: # type: ignore[valid-type]
396
+ frame_number_holder[0] += 1
397
+ frame_number = frame_number_holder[0]
398
+
399
+ # Get caps from controller metadata (width/height for segmentation)
400
+ metadata = self._controller.get_metadata() if self._controller else None
401
+ caps = metadata.caps if metadata else None
402
+
403
+ if caps is None:
404
+ logger.warning(
405
+ "GstCaps not available for frame %d, using no-op writers",
406
+ frame_number,
407
+ )
408
+ # Use no-op writers
409
+ with stage_sink.create_writer(frame_number) as stage_writer:
410
+ on_frame(
411
+ input_mat,
412
+ _NoOpSegmentationWriter(),
413
+ _NoOpKeyPointsWriter(),
414
+ stage_writer,
415
+ )
416
+ return
417
+
418
+ # Create per-frame writers from sinks (all auto-flush on context exit)
419
+ with seg_sink.create_writer(
420
+ frame_number, caps.width, caps.height
421
+ ) as seg_writer, kp_sink.create_writer(
422
+ frame_number
423
+ ) as kp_writer, stage_sink.create_writer(
424
+ frame_number
425
+ ) as stage_writer:
426
+ # Call user callback with writers (no output_mat for one-way)
427
+ on_frame(input_mat, seg_writer, kp_writer, stage_writer)
428
+ # Writers auto-flush on context exit
429
+
430
+ # Start the controller with our wrapper (single-Mat callback for OneWay)
431
+ self._controller.start(writer_callback_oneway, cancellation_token)
432
+ logger.info("RocketWelder client started with writers (one-way): %s", self._connection)
433
+
311
434
  def _get_or_create_segmentation_sink(self) -> ISegmentationResultSink:
312
435
  """Get or create segmentation result sink from environment."""
313
436
  import os
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rocket-welder-sdk
3
- Version: 1.1.45
3
+ Version: 1.1.47
4
4
  Summary: High-performance video streaming SDK for RocketWelder services using ZeroBuffer IPC
5
5
  Home-page: https://github.com/modelingevolution/rocket-welder-sdk
6
6
  Author: ModelingEvolution
@@ -1 +0,0 @@
1
- 1.1.45