Skip to content

Commit eb2099d

Browse files
Merge pull request #1144 from roboflow/feat/add-frame-seconds-since-start-to-property-definition
Add seconds_since_start to PropertyDefinition extract_frame_metadata
2 parents d97d4ae + ce643cd commit eb2099d

3 files changed

Lines changed: 21 additions & 0 deletions

File tree

inference/core/workflows/core_steps/common/query_language/entities/enums.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ class ImageProperty(Enum):
106106
class FrameMetadataProperty(Enum):
107107
FRAME_NUMBER = "frame_number"
108108
FRAME_TIMESTAMP = "frame_timestamp"
109+
SECONDS_SINCE_START = "seconds_since_start"
109110

110111

111112
class DetectionsSelectionMode(Enum):

inference/core/workflows/core_steps/common/query_language/operations/frame_metadata/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
PROPERTY_EXTRACTORS = {
1616
FrameMetadataProperty.FRAME_NUMBER: lambda image: image.video_metadata.frame_number,
1717
FrameMetadataProperty.FRAME_TIMESTAMP: lambda image: image.video_metadata.frame_timestamp,
18+
FrameMetadataProperty.SECONDS_SINCE_START: lambda image: (
19+
image.video_metadata.frame_number - 1
20+
)
21+
/ image.video_metadata.fps,
1822
}
1923

2024

tests/workflows/integration_tests/execution/test_workflow_with_property_extraction.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,14 @@ def test_workflow_with_frame_number_extraction_from_photo(
856856
{"type": "ExtractFrameMetadata", "property_name": "frame_number"}
857857
],
858858
},
859+
{
860+
"type": "PropertyDefinition",
861+
"name": "seconds_since_start",
862+
"data": "$inputs.image",
863+
"operations": [
864+
{"type": "ExtractFrameMetadata", "property_name": "seconds_since_start"}
865+
],
866+
},
859867
],
860868
"outputs": [
861869
{
@@ -868,6 +876,11 @@ def test_workflow_with_frame_number_extraction_from_photo(
868876
"name": "frame_number",
869877
"selector": "$steps.frame_number.output",
870878
},
879+
{
880+
"type": "JsonField",
881+
"name": "seconds_since_start",
882+
"selector": "$steps.seconds_since_start.output",
883+
},
871884
],
872885
}
873886

@@ -895,6 +908,7 @@ def test_workflow_with_timestamp_extraction_from_photo(
895908
assert set(result[0].keys()) == {
896909
"frame_timestamp",
897910
"frame_number",
911+
"seconds_since_start",
898912
}, "Expected all declared outputs to be delivered"
899913

900914

@@ -942,10 +956,12 @@ def on_prediction(prediction: dict, video_frame: VideoFrame) -> None:
942956
assert set(predictions[0].keys()) == {
943957
"frame_timestamp",
944958
"frame_number",
959+
"seconds_since_start",
945960
}, "Expected all declared outputs to be delivered"
946961

947962
for i in range(1, frames_count + 1):
948963
assert predictions[i - 1]["frame_number"] == i
949964
assert predictions[i - 1][
950965
"frame_timestamp"
951966
] == timestamp_created + datetime.timedelta(seconds=(i - 1) / fps)
967+
assert predictions[i - 1]["seconds_since_start"] == (i - 1) / fps

0 commit comments

Comments
 (0)