VideoIndexing alleviates redundant processing of each aerial drone video frame. This can be delegated to public cloud video indexing apis or local opencv PySceneDetect. Here is an example:
from scenedetect import VideoManager, SceneManager
from scenedetect.detectors import ContentDetector
from scenedetect.frame_timecode import FrameTimecode
# Path to your aerial drone video
video_path = 'video01.mp4'
# Initialize video and scene managers
video_manager = VideoManager([video_path])
scene_manager = SceneManager()
scene_manager.add_detector(ContentDetector(threshold=30.0)) # Adjust threshold for sensitivity
# Start processing
video_manager.set_downscale_factor() # Optional: speeds up processing
video_manager.start()
scene_manager.detect_scenes(frame_source=video_manager)
# Get list of detected scenes
scene_list = scene_manager.get_scene_list()
# Print scene boundaries with timestamps and frame indices
print(f"Detected {len(scene_list)} scenes:")
for i, (start, end) in enumerate(scene_list):
start_frame = start.get_frames()
end_frame = end.get_frames()
start_time = start.get_timecode()
end_time = end.get_timecode()
print(f"Scene {i+1}:")
print(f" Start Frame: {start_frame}, Timestamp: {start_time}")
print(f" End Frame: {end_frame}, Timestamp: {end_time}")
with results as:
Detected 53 scenes:
Scene 1:
Start Frame: 0, Timestamp: 00:00:00.000
End Frame: 303, Timestamp: 00:00:10.107
Scene 2:
Start Frame: 303, Timestamp: 00:00:10.107
End Frame: 334, Timestamp: 00:00:11.141
Scene 3:
Start Frame: 334, Timestamp: 00:00:11.141
End Frame: 965, Timestamp: 00:00:32.190
Scene 4:
Start Frame: 965, Timestamp: 00:00:32.190
End Frame: 1446, Timestamp: 00:00:48.234
Scene 5:
Start Frame: 1446, Timestamp: 00:00:48.234
End Frame: 1600, Timestamp: 00:00:53.371
Scene 6:
Start Frame: 1600, Timestamp: 00:00:53.371
End Frame: 1631, Timestamp: 00:00:54.405
Scene 7:
Start Frame: 1631, Timestamp: 00:00:54.405
End Frame: 1693, Timestamp: 00:00:56.473
Scene 8:
Start Frame: 1693, Timestamp: 00:00:56.473
End Frame: 1724, Timestamp: 00:00:57.508
Scene 9:
Start Frame: 1724, Timestamp: 00:00:57.508
End Frame: 1785, Timestamp: 00:00:59.542
Scene 10:
Start Frame: 1785, Timestamp: 00:00:59.542
End Frame: 1877, Timestamp: 00:01:02.611
Scene 11:
Start Frame: 1877, Timestamp: 00:01:02.611
End Frame: 2208, Timestamp: 00:01:13.652
Scene 12:
Start Frame: 2208, Timestamp: 00:01:13.652
End Frame: 2269, Timestamp: 00:01:15.687
Scene 13:
Start Frame: 2269, Timestamp: 00:01:15.687
End Frame: 2303, Timestamp: 00:01:16.821
Scene 14:
Start Frame: 2303, Timestamp: 00:01:16.821
End Frame: 2567, Timestamp: 00:01:25.627
Scene 15:
Start Frame: 2567, Timestamp: 00:01:25.627
End Frame: 2601, Timestamp: 00:01:26.762
Scene 16:
Start Frame: 2601, Timestamp: 00:01:26.762
End Frame: 2784, Timestamp: 00:01:32.866
Scene 17:
Start Frame: 2784, Timestamp: 00:01:32.866
End Frame: 2845, Timestamp: 00:01:34.901
Scene 18:
Start Frame: 2845, Timestamp: 00:01:34.901
End Frame: 2883, Timestamp: 00:01:36.168
Scene 19:
Start Frame: 2883, Timestamp: 00:01:36.168
End Frame: 3034, Timestamp: 00:01:41.205
Scene 20:
Start Frame: 3034, Timestamp: 00:01:41.205
End Frame: 3079, Timestamp: 00:01:42.706
Scene 21:
Start Frame: 3079, Timestamp: 00:01:42.706
End Frame: 3276, Timestamp: 00:01:49.278
Scene 22:
Start Frame: 3276, Timestamp: 00:01:49.278
End Frame: 3307, Timestamp: 00:01:50.312
Scene 23:
Start Frame: 3307, Timestamp: 00:01:50.312
End Frame: 3339, Timestamp: 00:01:51.379
Scene 24:
Start Frame: 3339, Timestamp: 00:01:51.379
End Frame: 3370, Timestamp: 00:01:52.413
Scene 25:
Start Frame: 3370, Timestamp: 00:01:52.413
End Frame: 3492, Timestamp: 00:01:56.483
Scene 26:
Start Frame: 3492, Timestamp: 00:01:56.483
End Frame: 3613, Timestamp: 00:02:00.519
Scene 27:
Start Frame: 3613, Timestamp: 00:02:00.519
End Frame: 3644, Timestamp: 00:02:01.553
Scene 28:
Start Frame: 3644, Timestamp: 00:02:01.553
End Frame: 3735, Timestamp: 00:02:04.588
Scene 29:
Start Frame: 3735, Timestamp: 00:02:04.588
End Frame: 3796, Timestamp: 00:02:06.623
Scene 30:
Start Frame: 3796, Timestamp: 00:02:06.623
End Frame: 4221, Timestamp: 00:02:20.800
Scene 31:
Start Frame: 4221, Timestamp: 00:02:20.800
End Frame: 4252, Timestamp: 00:02:21.834
Scene 32:
Start Frame: 4252, Timestamp: 00:02:21.834
End Frame: 4463, Timestamp: 00:02:28.872
Scene 33:
Start Frame: 4463, Timestamp: 00:02:28.872
End Frame: 4764, Timestamp: 00:02:38.913
Scene 34:
Start Frame: 4764, Timestamp: 00:02:38.913
End Frame: 5038, Timestamp: 00:02:48.053
Scene 35:
Start Frame: 5038, Timestamp: 00:02:48.053
End Frame: 5069, Timestamp: 00:02:49.087
Scene 36:
Start Frame: 5069, Timestamp: 00:02:49.087
End Frame: 5101, Timestamp: 00:02:50.154
Scene 37:
Start Frame: 5101, Timestamp: 00:02:50.154
End Frame: 5312, Timestamp: 00:02:57.193
Scene 38:
Start Frame: 5312, Timestamp: 00:02:57.193
End Frame: 5373, Timestamp: 00:02:59.227
Scene 39:
Start Frame: 5373, Timestamp: 00:02:59.227
End Frame: 6004, Timestamp: 00:03:20.276
Scene 40:
Start Frame: 6004, Timestamp: 00:03:20.276
End Frame: 6035, Timestamp: 00:03:21.310
Scene 41:
Start Frame: 6035, Timestamp: 00:03:21.310
End Frame: 6133, Timestamp: 00:03:24.579
Scene 42:
Start Frame: 6133, Timestamp: 00:03:24.579
End Frame: 6184, Timestamp: 00:03:26.280
Scene 43:
Start Frame: 6184, Timestamp: 00:03:26.280
End Frame: 6437, Timestamp: 00:03:34.719
Scene 44:
Start Frame: 6437, Timestamp: 00:03:34.719
End Frame: 6498, Timestamp: 00:03:36.754
Scene 45:
Start Frame: 6498, Timestamp: 00:03:36.754
End Frame: 6529, Timestamp: 00:03:37.788
Scene 46:
Start Frame: 6529, Timestamp: 00:03:37.788
End Frame: 6710, Timestamp: 00:03:43.826
Scene 47:
Start Frame: 6710, Timestamp: 00:03:43.826
End Frame: 6863, Timestamp: 00:03:48.929
Scene 48:
Start Frame: 6863, Timestamp: 00:03:48.929
End Frame: 6894, Timestamp: 00:03:49.963
Scene 49:
Start Frame: 6894, Timestamp: 00:03:49.963
End Frame: 7465, Timestamp: 00:04:09.010
Scene 50:
Start Frame: 7465, Timestamp: 00:04:09.010
End Frame: 7982, Timestamp: 00:04:26.256
Scene 51:
Start Frame: 7982, Timestamp: 00:04:26.256
End Frame: 8104, Timestamp: 00:04:30.325
Scene 52:
Start Frame: 8104, Timestamp: 00:04:30.325
End Frame: 8675, Timestamp: 00:04:49.372
Scene 53:
Start Frame: 8675, Timestamp: 00:04:49.372
End Frame: 9216, Timestamp: 00:05:07.418
These can be stitched back into a new video file and re-indexed to further shorten the extracted video.
Preserving actual timestamps on re-indexing is as simple as:
from datetime import datetime, timedelta
def parse_timecode(timecode):
# Parse HH:mm:ss.SSS string to timedelta from zero time
return datetime.strptime(timecode, "%H:%M:%S.%f") - datetime.strptime("00:00:00.000", "%H:%M:%S.%f")
def map_offset_to_timestamp_with_validation(intervals, offset):
total_duration = timedelta(0)
actual_time = -1
for start, end in intervals:
start_td = parse_timecode(start)
end_td = parse_timecode(end)
interval_duration = end_td - start_td
if offset < total_duration.total_seconds() + interval_duration.total_seconds():
offset_in_interval = offset - total_duration.total_seconds()
actual_time = start_td + timedelta(seconds=offset_in_interval)
total_duration += interval_duration
for start, end in intervals:
if start_td <= actual_time <= end_td:
return actual_time
return -1
# Example usage:
intervals = [("00:00:00.000", "00:00:10.000"), ("00:02:00.000", "00:02:05.000")]
print(map_offset_to_timestamp_with_validation(intervals, 12)) # Returns timedelta at 00:02:02
print(map_offset_to_timestamp_with_validation(intervals, 20)) # Returns -1 since offset out of range
Cost Comparison:
Prompt: Are there dedicated bicycle crossings in green color at street intersections in the attached set of aerial drone images? (+ 26 images extracted from re/indexed drone video)
Answer: Yes, there are **dedicated bicycle crossings in green color at street intersections** visible in the attached set of aerial drone images.
- In several of the images (notably the 12th and 15th images), you can clearly see a **bright green marking** extending across a lane at a street intersection. This matches the standard implementation of green pavement marking treatments used to highlight and designate bike crossings at intersection conflict points[1][2][3][5].
- Such markings are a dedicated safety feature, making bicycle paths and crossings more visible to both cyclists and motorists. They are typically installed at intersections or approach lanes to indicate the preferred bicycle route and reduce the likelihood of conflicts[1][2][3][5].
All other intersections depicted in these images lack such green bicycle crossings, but the presence of these markings in some images directly confirms their implementation in this area.
Type | Count | Total_Tokens | Total_cost |
Indexed video/extracted images | 26 | 49316 (99% input-side, 1% output-side) | 0.156 |
Original aerial drone video | 17776 | 35,500,000 | $270 (including vector index and search) |
No comments:
Post a Comment