Skip to content
crowd-datasetPublic

About

This repository contains code that extracts YouTube videos based on a mapping.csv file and performs object detection using YOLOv11. The primary objective of this work is to evaluate pedestrian behaviour in a cross-country or cross-cultural context using freely available YouTube videos.

Topics

Resources

Security policy

Stars

13 stars

Watchers

2 watching

Forks

Latest commit

 

History

7,147 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

City Road Observations With Dashcams (CROWD)

This repository contains code that extracts YouTube videos based on a mapping.csv file and performs object detection using YOLOv11. The primary objective of this work is to evaluate pedestrian behaviour in a cross-country or cross-cultural context using freely available YouTube videos.

This study presents a comprehensive cross-cultural evaluation of pedestrian behaviour during road crossings, examining variations between developed and developing states worldwide. As urban landscapes evolve and autonomous vehicles (AVs) become integral to future transportation, understanding pedestrian behaviour becomes paramount for ensuring safe interactions between humans and AVs. Through an extensive review of global pedestrian studies, we analyse key factors influencing crossing behaviour, such as cultural norms, socioeconomic factors, infrastructure development, and regulatory frameworks. Our findings reveal distinct patterns in pedestrian conduct across different regions. Developed states generally exhibit more structured and rule-oriented crossing behaviours, influenced by established traffic regulations and advanced infrastructure. In contrast, developing states often witness a higher degree of informal and adaptive behaviour due to limited infrastructure and diverse cultural influences. These insights underscore the necessity for AVs to adapt to diverse pedestrian behaviour on a global scale, emphasising the importance of incorporating cultural nuances into AV programming and decision-making algorithms. As the integration of AVs into urban environments accelerates, this research contributes valuable insights for enhancing the safety and efficiency of autonomous transportation systems. By recognising and accommodating diverse pedestrian behaviours, AVs can navigate complex and dynamic urban settings, ensuring a harmonious coexistence with human road users across the globe.

The dataset is available on kaggle. The dataset shall soon be made available on a permanent FAIR storage.

Dataset overview

  • Footage: 35,082.1 hours (1,461.8 days)
  • Videos: 78,702 unique videos split into 101,405 segments
  • Localities (cities): 10,143
  • Countries and territories: 238
  • Continents: 6
  • YOLO detection files: 86,151 CSV files (one per processed segment)
  • Detected objects (unique tracked objects, confidence ≥ 0.7): 31,055,197 persons, 81,904,094 cars, 2,434,824 bicycles, 10,321,545 motorcycles, 3,371,598 buses, 13,178,837 trucks
  • Last updated: 2026-10-17 07:39 UTC
All 238 countries and territories
# Country Cities Videos Footage (h) Persons Cars Bicycles Motorcycles Buses Trucks
1 🇺🇸 United States 2,299 20,167 10,280.0 4,272,921 23,691,175 271,124 142,831 463,957 3,767,718
2 🇬🇧 United Kingdom 358 3,156 1,670.3 2,669,605 3,286,323 258,876 153,027 259,935 557,811
3 🇦🇺 Australia 206 3,897 1,654.9 576,405 3,844,979 39,023 39,877 87,915 632,309
4 🇷🇺 Russia 210 3,268 1,486.7 739,160 3,488,118 15,963 6,876 153,569 448,842
5 🇵🇭 Philippines 398 3,570 1,308.3 2,280,616 2,263,741 71,888 1,423,298 303,676 910,602
6 🇨🇦 Canada 229 3,537 1,231.8 746,694 2,850,553 68,576 19,519 55,088 371,391
7 🇻🇳 Vietnam 77 3,056 1,188.8 2,841,773 1,918,728 89,613 2,791,899 124,640 295,741
8 🇮🇩 Indonesia 176 3,095 997.2 1,868,154 1,870,317 24,313 1,816,459 108,349 471,997
9 🇰🇷 South Korea 84 850 819.8 350,283 1,627,830 20,330 52,974 103,482 176,255
10 🇫🇷 France 359 1,891 745.2 811,503 1,741,161 100,263 122,825 46,589 193,698
11 🇨🇳 China 148 1,227 692.2 477,193 1,757,527 50,356 190,159 101,437 205,625
12 🇩🇪 Germany 237 1,375 652.3 529,924 1,684,445 183,442 34,832 59,311 204,147
13 🇯🇵 Japan 219 1,710 602.9 344,686 1,055,513 49,372 21,845 77,232 280,424
14 🇧🇷 Brazil 129 1,415 590.4 519,148 1,513,850 33,536 149,969 54,774 192,901
15 🇳🇱 Netherlands 231 1,442 547.2 487,941 991,002 339,799 54,752 31,801 113,489
16 🇮🇳 India 294 1,495 478.6 1,189,100 1,005,688 63,802 686,967 124,472 335,999
17 🇺🇦 Ukraine 94 1,083 443.1 264,908 1,196,004 7,847 4,225 59,354 177,315
18 🇹🇭 Thailand 49 790 385.1 448,112 969,956 8,581 341,371 48,744 219,493
19 🇲🇲 Myanmar 19 536 371.5 377,596 1,482,283 43,641 41,165 98,912 251,716
20 🇦🇪 United Arab Emirates 10 864 360.0 101,661 781,706 3,974 15,699 42,363 109,916
21 🇵🇱 Poland 280 864 343.5 211,781 862,033 20,428 7,005 32,398 82,793
22 🇮🇷 Iran 108 980 317.3 157,668 1,165,662 3,260 29,859 13,082 104,765
23 🇲🇾 Malaysia 65 599 282.3 139,060 821,081 1,749 83,469 17,702 77,039
24 🇹🇷 Türkiye 87 565 268.6 268,694 842,597 4,209 36,123 55,842 130,713
25 🇸🇪 Sweden 167 961 266.5 126,789 431,124 21,530 2,783 18,518 50,698
26 🇮🇹 Italy 168 671 262.3 265,315 817,830 23,685 100,055 17,599 68,722
27 🇦🇷 Argentina 64 410 255.9 339,200 819,300 33,589 41,484 29,416 97,763
28 🇩🇰 Denmark 22 562 255.2 369,226 719,246 194,237 8,296 20,180 60,390
29 🇷🇴 Romania 91 633 242.6 192,777 1,091,080 6,707 5,071 27,553 98,506
30 🇫🇮 Finland 41 382 238.9 126,585 442,436 14,166 2,367 21,442 54,634
31 🇪🇸 Spain 251 652 228.1 265,869 579,582 15,145 61,646 22,167 63,447
32 🇰🇭 Cambodia 7 427 222.6 581,388 540,096 13,515 597,642 38,795 179,386
33 🇨🇿 Czechia 82 374 214.6 211,202 529,498 5,602 5,071 23,140 55,113
34 🇦🇹 Austria 45 849 202.5 126,204 504,171 17,752 14,288 23,036 82,722
35 🇺🇬 Uganda 19 516 193.1 210,110 97,690 5,333 116,814 9,743 31,876
36 🇭🇺 Hungary 34 469 171.8 302,570 1,021,996 14,884 8,336 50,838 124,246
37 🇵🇰 Pakistan 38 420 165.7 441,809 466,633 16,051 232,921 27,715 116,824
38 🇧🇬 Bulgaria 89 643 162.6 83,794 508,664 1,792 1,203 18,043 48,284
39 🇳🇿 New Zealand 160 596 159.6 76,612 365,330 4,575 3,368 13,541 53,467
40 🇸🇬 Singapore 1 399 155.2 81,730 342,138 5,203 20,569 33,441 60,162
41 🇻🇪 Venezuela 15 599 148.2 92,844 331,841 4,908 35,984 7,127 68,507
42 🇲🇽 Mexico 72 306 144.2 125,401 377,330 6,052 21,125 13,579 60,564
43 🇮🇪 Ireland 55 491 142.4 108,118 310,653 10,483 2,209 13,984 41,030
44 🇧🇾 Belarus 83 281 139.3 44,011 171,135 1,579 398 9,951 24,933
45 🇳🇴 Norway 68 421 139.3 85,184 283,525 7,453 1,997 13,853 38,237
46 🇿🇦 South Africa 55 448 134.0 90,590 325,224 1,701 4,647 12,966 60,022
47 🇸🇾 Syria 13 316 124.7 216,348 507,868 6,463 16,996 17,203 83,736
48 🇪🇬 Egypt 20 270 107.5 71,736 235,831 634 8,241 11,975 31,172
49 🇧🇩 Bangladesh 29 298 107.3 390,478 113,971 74,318 72,325 40,702 85,738
50 🇵🇹 Portugal 73 226 104.4 87,578 287,432 2,143 7,460 7,731 31,681
51 🇨🇭 Switzerland 94 299 98.7 103,933 188,046 21,150 13,360 9,502 24,085
52 🇬🇲 Gambia 29 361 95.4 226,529 285,640 14,671 20,858 8,740 64,562
53 🇳🇬 Nigeria 35 230 92.0 216,399 176,420 1,810 32,108 13,929 45,474
54 🇸🇱 Sierra Leone 47 184 79.3 170,227 48,806 1,877 49,358 4,591 23,204
55 🇯🇴 Jordan 13 250 78.3 46,155 311,691 181 983 7,319 39,417
56 🇭🇷 Croatia 89 281 71.9 52,249 228,297 4,591 4,309 5,509 19,685
57 🇨🇱 Chile 43 160 71.9 22,163 61,334 775 1,113 2,706 13,174
58 🇲🇳 Mongolia 4 130 71.4 88,118 304,976 1,881 1,654 9,124 25,710
59 🇬🇷 Greece 40 196 66.9 73,714 265,121 2,806 25,708 6,316 25,638
60 🇨🇾 Cyprus 17 252 66.5 26,967 202,441 1,081 5,007 4,165 28,218
61 🇪🇪 Estonia 6 302 65.3 33,674 167,480 1,206 418 8,464 16,981
62 🇭🇰 Hong Kong 11 163 63.1 100,646 99,158 1,443 2,991 19,375 19,435
63 🇧🇪 Belgium 61 190 62.9 65,468 167,638 14,859 3,856 7,204 23,728
64 🇧🇦 Bosnia and Herzegovina 60 291 62.0 50,620 157,116 865 576 4,488 13,869
65 🇨🇴 Colombia 36 128 60.1 86,062 89,103 5,878 39,551 6,101 17,256
66 🇺🇿 Uzbekistan 12 178 53.7 26,976 209,921 434 194 4,187 17,563
67 🇵🇪 Peru 29 94 53.1 84,003 147,775 5,452 12,966 9,566 30,312
68 🇱🇰 Sri Lanka 15 127 47.6 70,859 99,910 1,065 25,398 17,602 40,207
69 🇲🇦 Morocco 35 135 47.6 85,390 175,883 3,788 17,447 5,038 21,670
70 🇷🇸 Serbia 34 143 47.1 42,935 171,668 1,152 1,224 5,929 14,641
71 🇹🇼 Taiwan 13 100 45.9 49,007 115,619 2,523 44,935 4,493 12,517
72 🇦🇿 Azerbaijan 8 112 45.5 44,791 206,195 690 1,127 6,072 21,374
73 🇶🇦 Qatar 5 98 44.3 10,603 109,498 434 1,281 5,308 16,307
74 🇪🇹 Ethiopia 8 77 44.2 104,306 104,629 540 1,978 9,657 31,967
75 🇸🇦 Saudi Arabia 11 110 43.6 5,107 142,192 118 248 2,833 17,976
76 🇬🇪 Georgia 11 117 42.4 31,146 170,922 246 1,164 6,716 21,141
77 🇳🇵 Nepal 4 120 38.2 212,044 71,559 6,035 126,705 10,857 19,965
78 🇱🇻 Latvia 20 123 38.0 24,270 91,567 1,611 716 3,964 11,579
79 🇱🇧 Lebanon 60 154 35.2 22,732 146,170 182 7,506 2,695 17,820
80 🇨🇺 Cuba 25 168 34.6 24,271 5,125 2,110 3,773 719 2,701
81 🇱🇹 Lithuania 10 84 33.5 31,866 98,334 2,608 715 3,317 7,486
82 🇵🇷 Puerto Rico 60 159 33.1 3,778 30,191 82 125 280 4,859
83 🇲🇼 Malawi 51 113 32.4 67,538 30,370 9,781 5,080 1,788 8,925
84 🇰🇿 Kazakhstan 26 113 30.9 21,562 115,902 260 201 4,020 12,666
85 🇰🇪 Kenya 55 112 27.0 62,585 46,029 1,155 12,133 4,453 12,793
86 🇺🇾 Uruguay 23 90 25.3 31,932 90,573 2,748 5,257 1,626 12,618
87 🇲🇰 North Macedonia 21 72 24.4 25,462 86,433 1,764 1,066 2,506 7,806
88 🇲🇩 Moldova 14 107 24.2 25,864 102,739 302 217 5,075 12,436
89 🇦🇲 Armenia 10 77 23.9 6,209 40,203 35 64 1,393 5,562
90 🇱🇦 Laos 10 60 22.9 23,497 49,112 526 22,212 1,271 19,464
91 🇪🇨 Ecuador 15 55 22.8 27,801 68,164 685 4,730 3,522 12,731
92 🇧🇴 Bolivia 20 55 21.5 26,213 42,478 628 4,934 2,728 13,037
93 🇲🇨 Monaco 1 45 20.3 35,821 30,718 962 12,489 1,542 4,295
94 🇮🇱 Israel 18 67 19.5 14,470 65,564 2,335 3,088 2,706 5,634
95 🇽🇰 Kosovo 31 93 15.4 12,872 51,774 508 510 1,264 7,371
96 🇬🇹 Guatemala 9 23 15.3 13,328 32,754 527 7,132 1,411 9,393
97 🇦🇱 Albania 23 62 14.8 17,949 45,917 1,604 1,215 1,389 5,350
98 🇩🇿 Algeria 8 35 14.5 24,662 61,115 133 1,301 1,363 6,805
99 🇨🇬 Congo (Congo-Brazzaville) 5 38 13.9 26,483 22,471 229 3,047 1,058 5,202
100 🇱🇾 Libya 3 39 13.2 4,891 54,787 79 115 299 6,981
101 🇮🇸 Iceland 14 39 12.8 7,211 28,191 474 68 952 4,491
102 🇹🇲 Turkmenistan 1 85 12.0 3,731 22,595 47 6 812 2,774
103 🇬🇭 Ghana 10 39 11.4 22,184 27,168 670 4,453 2,213 8,526
104 🇮🇶 Iraq 10 40 11.4 4,150 33,761 120 477 523 4,834
105 🇴🇲 Oman 10 32 10.9 2,967 35,947 156 60 742 3,513
106 🇸🇻 El Salvador 6 13 10.8 7,666 13,960 246 2,318 687 3,575
107 🇭🇳 Honduras 8 23 10.3 7,734 20,112 380 3,007 1,061 4,816
108 🇲🇪 Montenegro 22 65 10.2 8,812 38,620 172 751 963 4,063
109 🇹🇿 Tanzania 14 51 9.5 12,790 7,858 657 3,490 1,331 3,023
110 🇵🇦 Panama 7 22 9.4 1,682 10,262 55 117 183 2,349
111 🇬🇾 Guyana 6 20 9.0 8,363 22,593 662 826 1,087 6,297
112 🇧🇭 Bahrain 11 42 8.8 2,007 24,546 182 228 746 3,611
113 🇸🇮 Slovenia 25 47 8.5 9,937 25,347 1,570 356 897 2,050
114 🇰🇬 Kyrgyzstan 7 40 8.4 6,645 30,471 161 69 1,493 4,913
115 🇯🇲 Jamaica 10 30 8.3 8,835 19,261 220 346 1,458 3,469
116 🇵🇸 Palestine 10 31 8.3 5,348 26,384 95 244 807 3,880
117 🇬🇮 Gibraltar 1 21 7.9 7,384 14,720 384 3,883 630 2,258
118 🇲🇹 Malta 31 56 7.6 3,461 23,323 49 533 757 3,788
119 🇨🇮 Côte d'Ivoire 2 19 7.6 13,309 29,310 176 1,474 924 4,167
120 🇬🇳 Guinea 6 28 7.5 18,434 15,992 146 6,364 451 3,611
121 🇸🇰 Slovakia 13 26 7.4 5,559 22,126 292 193 879 2,484
122 🇱🇺 Luxembourg 12 24 7.0 8,121 15,294 468 316 914 1,638
123 🇰🇼 Kuwait 2 21 6.9 2,664 23,894 27 74 1,067 2,654
124 🇱🇷 Liberia 11 43 6.8 26,168 16,747 120 9,633 970 5,277
125 🇸🇷 Suriname 3 19 6.7 2,262 16,386 130 506 521 2,645
126 🇿🇼 Zimbabwe 4 26 6.3 16,477 25,223 110 148 1,292 6,010
127 🇦🇬 Antigua and Barbuda 9 21 6.1 4,292 10,555 43 25 270 1,908
128 🇵🇾 Paraguay 8 18 5.9 6,004 19,678 299 3,007 470 4,024
129 🇻🇨 Saint Vincent and the Grenadines 11 25 5.7 3,913 7,296 23 30 546 1,835
130 🇧🇯 Benin 10 16 5.6 19,911 10,339 325 12,657 291 2,243
131 🇨🇫 Central African Republic 3 18 5.4 33,260 7,691 373 14,433 187 2,431
132 🇦🇫 Afghanistan 8 26 5.3 10,698 15,305 996 694 858 3,172
133 🇱🇮 Liechtenstein 16 59 5.2 1,156 8,408 176 210 434 1,474
134 🇹🇳 Tunisia 5 15 5.1 9,163 23,032 173 672 506 3,303
135 🇹🇹 Trinidad and Tobago 3 5 4.6 1,657 8,274 3 11 228 1,770
136 🇪🇷 Eritrea 11 27 4.6 14,201 7,216 3,305 138 286 1,719
137 🇳🇮 Nicaragua 8 17 4.6 5,973 9,241 589 2,642 460 3,022
138 🇦🇩 Andorra 8 45 4.6 4,008 12,742 84 1,183 644 2,748
139 🇬🇺 Guam 10 41 4.5 510 14,313 14 33 154 3,039
140 🇲🇴 Macau 2 15 4.5 3,030 5,239 47 654 889 951
141 🇰🇵 North Korea 1 19 4.4 14,070 3,924 1,823 102 932 771
142 🇨🇷 Costa Rica 10 19 4.3 4,316 10,203 253 765 448 2,157
143 🇲🇬 Madagascar 3 11 4.3 19,088 6,412 2,000 2,699 1,016 3,360
144 🇵🇫 French Polynesia 11 17 4.3 2,002 10,477 210 975 196 2,538
145 🇸🇳 Senegal 6 16 4.3 11,200 12,515 159 2,982 463 2,408
146 🇰🇾 Cayman Islands 5 17 4.2 759 10,150 84 36 319 2,019
147 🇬🇵 Guadeloupe 11 30 4.1 1,311 12,588 38 117 259 1,792
148 🇦🇴 Angola 2 17 4.1 11,170 13,849 70 951 1,041 3,558
149 🇿🇲 Zambia 4 13 3.7 7,055 6,968 408 96 527 2,244
150 🇷🇼 Rwanda 7 14 3.5 10,556 4,987 638 4,322 326 1,543
151 🇬🇱 Greenland 3 11 3.5 1,349 2,888 39 2 162 772
152 🇸🇲 San Marino 4 13 3.5 1,032 8,866 11 245 155 890
153 🇨🇩 Congo (Democratic Republic) 3 16 3.3 9,462 7,610 66 2,604 289 1,534
154 🇨🇲 Cameroon 9 16 3.2 9,836 11,413 42 2,935 200 1,714
155 🇫🇯 Fiji 3 9 3.2 2,017 6,661 6 23 428 1,497
156 🇬🇬 Guernsey 8 20 3.1 1,510 6,086 113 166 186 974
157 🇱🇨 Saint Lucia 7 20 3.1 2,447 6,450 16 42 532 1,784
158 🇬🇦 Gabon 6 17 3.0 4,690 6,478 33 81 182 1,924
159 🇭🇹 Haiti 1 6 2.9 8,084 4,643 45 1,580 425 2,678
160 🇩🇴 Dominican Republic 7 9 2.9 3,782 6,949 172 1,872 298 1,352
161 🇸🇴 Somalia 4 15 2.8 7,097 4,498 21 170 864 2,487
162 🇲🇺 Mauritius 7 13 2.8 3,494 7,076 76 1,004 455 1,505
163 🇧🇲 Bermuda 4 5 2.7 658 3,199 24 737 189 700
164 🇳🇨 New Caledonia 1 5 2.6 675 5,424 49 42 103 1,377
165 🇯🇪 Jersey 10 18 2.5 889 4,543 101 67 148 956
166 🇾🇪 Yemen 3 12 2.5 7,388 9,522 96 2,496 347 2,781
167 🇰🇲 Comoros 3 5 2.5 3,578 4,854 55 1,564 87 770
168 🇧🇼 Botswana 4 9 2.3 1,589 4,779 5 10 174 1,077
169 🇻🇬 British Virgin Islands 7 17 2.2 680 5,237 3 49 101 1,193
170 🇰🇳 Saint Kitts and Nevis 3 9 2.1 1,762 3,245 26 25 174 743
171 🇼🇸 Samoa 1 7 2.0 392 2,715 0 0 224 588
172 🇷🇪 Réunion 4 6 2.0 1,205 4,903 31 89 107 632
173 🇹🇯 Tajikistan 2 9 1.9 2,537 8,973 30 72 355 855
174 🇸🇸 South Sudan 1 5 1.9 6,672 3,931 76 2,770 166 1,453
175 🇳🇦 Namibia 4 10 1.8 1,457 3,452 18 11 95 876
176 🇫🇴 Faroe Islands 21 36 1.8 287 2,560 12 4 124 456
177 🇧🇧 Barbados 3 4 1.8 1,506 2,706 41 7 177 500
178 🇬🇫 French Guiana 1 3 1.7 831 5,927 59 387 71 1,292
179 🇮🇲 Isle of Man 8 19 1.6 1,351 6,939 24 645 209 1,150
180 🇧🇹 Bhutan 2 6 1.6 1,646 3,041 14 40 91 671
181 🇩🇯 Djibouti 3 5 1.5 746 1,537 5 116 243 1,306
182 🇱🇸 Lesotho 10 15 1.5 1,730 2,222 5 11 95 619
183 🇬🇩 Grenada 4 8 1.4 577 1,762 8 43 97 611
184 🇲🇫 Saint Martin 6 9 1.3 461 4,156 13 130 100 1,155
185 🇧🇮 Burundi 6 9 1.3 5,541 2,270 433 313 173 492
186 🇲🇿 Mozambique 5 8 1.3 1,953 1,850 34 149 119 462
187 🇲🇷 Mauritania 1 3 1.3 1,854 3,898 74 116 38 937
188 🇪🇭 Western Sahara 3 4 1.3 726 2,450 34 100 56 564
189 🇹🇬 Togo 6 11 1.2 2,940 1,458 59 1,696 55 370
190 🇵🇬 Papua New Guinea 2 6 1.2 1,095 1,656 0 0 216 443
191 🇲🇸 Montserrat 1 3 1.2 4,465 1,127 267 4,014 383 835
192 🇦🇸 American Samoa 9 13 1.1 266 2,385 5 1 127 1,119
193 🇧🇸 Bahamas 2 5 1.1 257 1,383 21 22 55 248
194 🇹🇨 Turks and Caicos Islands 2 4 1.0 102 1,469 0 2 23 212
195 🇻🇺 Vanuatu 1 5 1.0 1,038 1,438 14 3 156 601
196 🇹🇩 Chad 1 4 1.0 3,975 2,890 74 1,962 52 748
197 🇻🇮 United States Virgin Islands 3 5 1.0 399 2,765 0 7 72 779
198 🇲🇱 Mali 1 2 0.9 4,487 2,330 29 3,053 173 696
199 🇳🇷 Nauru 11 18 0.9 329 1,067 4 341 49 571
200 🇧🇫 Burkina Faso 1 5 0.8 2,932 2,972 321 2,752 55 460
201 🇸🇽 Sint Maarten 4 5 0.8 570 2,892 7 42 67 613
202 🇦🇼 Aruba 2 3 0.8 312 2,342 6 9 44 272
203 🇨🇼 Curaçao 1 3 0.8 32 1,635 0 0 15 195
204 🇦🇽 Åland Islands 1 1 0.8 110 617 26 4 11 98
205 🇲🇭 Marshall Islands 3 3 0.8 114 333 0 0 13 95
206 🇧🇳 Brunei 3 4 0.8 74 1,391 1 4 27 145
207 🏳️ Svalbard and Jan Mayen 1 3 0.7 60 497 5 5 39 169
208 🇧🇿 Belize 3 5 0.7 404 1,571 61 91 49 519
209 🇧🇶 Bonaire, Sint Eustatius and Saba 1 1 0.7 236 1,737 21 82 27 695
210 🇬🇶 Equatorial Guinea 1 5 0.7 805 2,063 12 9 51 373
211 🇫🇲 Micronesia 3 3 0.6 164 661 0 0 6 148
212 🇳🇪 Niger 1 2 0.6 2,224 1,023 66 266 7 126
213 🇵🇼 Palau 4 5 0.6 23 521 3 3 9 126
214 🇦🇮 Anguilla 4 5 0.6 57 769 0 1 15 178
215 🇸🇩 Sudan 2 6 0.6 1,080 3,294 8 181 140 654
216 🇧🇱 Saint Barthélemy 2 3 0.5 214 1,343 0 222 22 510
217 🇲🇵 Northern Mariana Islands 2 5 0.5 109 1,729 3 0 20 300
218 🇲🇻 Maldives 2 4 0.5 1,597 751 57 1,488 36 187
219 🇵🇲 Saint Pierre and Miquelon 1 1 0.4 76 1,119 2 5 18 372
220 🇹🇴 Tonga 1 1 0.4 92 810 1 1 41 256
221 🇸🇿 Eswatini 3 3 0.4 595 784 1 1 37 156
222 🇩🇲 Dominica 1 2 0.4 192 446 1 8 19 141
223 🇹🇻 Tuvalu 1 2 0.4 109 65 3 191 6 38
224 🇫🇰 Falkland Islands 1 4 0.3 37 82 0 0 18 93
225 🇨🇰 Cook Islands 2 5 0.3 88 329 7 125 10 73
226 🇸🇨 Seychelles 3 3 0.3 275 603 10 12 42 175
227 🇸🇭 Saint Helena 2 3 0.3 59 333 0 6 28 107
228 🇹🇱 Timor-Leste 5 5 0.3 274 124 0 83 31 59
229 🇳🇫 Norfolk Island 1 2 0.3 4 16 0 0 3 8
230 🇨🇻 Cabo Verde 2 2 0.2 301 546 17 16 29 144
231 🇲🇶 Martinique 3 4 0.2 99 545 1 6 7 69
232 🇸🇹 Sao Tome and Principe 1 1 0.2 491 196 20 193 6 91
233 🇬🇼 Guinea-Bissau 1 1 0.2 721 463 4 40 23 93
234 🇾🇹 Mayotte 2 2 0.2 125 253 0 25 20 50
235 🇸🇧 Solomon Islands 1 2 0.1 166 379 0 0 37 135
236 🇨🇽 Christmas Island 1 1 0.1 56 127 0 1 7 32
237 🇳🇺 Niue 3 3 0.1 0 39 0 0 3 9
238 🇰🇮 Kiribati 2 2 0.1 71 96 5 17 8 30
Top 200 cities by footage
# City Country Videos Footage (h) Persons Cars Bicycles Motorcycles Buses Trucks
1 New York, NY 🇺🇸 United States 4,153 2,268.6 1,706,401 5,052,177 129,512 64,473 183,174 787,499
2 Chicago, IL 🇺🇸 United States 1,896 1,725.3 557,039 4,661,254 30,176 9,676 71,368 609,361
3 London 🇬🇧 United Kingdom 2,005 1,339.0 2,453,710 2,498,403 247,264 144,524 234,765 459,569
4 Los Angeles, CA 🇺🇸 United States 2,033 1,159.2 537,523 3,357,175 28,873 13,856 53,100 474,778
5 Hanoi 🇻🇳 Vietnam 2,149 874.7 2,271,937 1,607,428 63,791 2,164,743 100,239 215,239
6 Manila, Metro Manila 🇵🇭 Philippines 2,140 780.0 1,145,457 1,371,466 36,235 601,253 162,779 342,650
7 Sydney, NSW 🇦🇺 Australia 1,415 676.4 272,297 1,895,441 20,370 23,080 48,958 331,199
8 Saint Petersburg, Saint Petersburg 🇷🇺 Russia 689 566.0 290,101 1,405,043 6,951 1,923 68,078 166,481
9 Seoul 🇰🇷 South Korea 293 542.9 229,316 902,725 13,254 38,006 74,720 86,184
10 Jakarta 🇮🇩 Indonesia 1,603 448.3 746,405 985,480 6,244 663,413 59,104 232,593
11 Paris 🇫🇷 France 974 435.2 552,903 1,036,028 67,843 87,489 31,039 121,109
12 Toronto, ON 🇨🇦 Canada 924 399.7 463,377 1,279,686 42,527 12,535 26,332 146,625
13 Yangon 🇲🇲 Myanmar 488 357.1 350,381 1,461,843 40,642 20,587 95,870 243,748
14 Moscow, Moscow 🇷🇺 Russia 505 327.7 198,432 972,537 4,619 3,304 33,888 137,535
15 Philadelphia, PA 🇺🇸 United States 562 315.7 142,077 960,721 8,349 4,166 14,431 144,502
16 Dubai 🇦🇪 United Arab Emirates 745 311.6 81,499 623,331 2,874 13,974 36,942 89,583
17 Bangkok 🇹🇭 Thailand 605 302.4 378,377 806,126 6,909 266,949 40,210 164,900
18 Cotabato, Maguindanao del Norte 🇵🇭 Philippines 693 287.1 729,903 576,485 15,873 519,204 96,566 403,247
19 Melbourne, VIC 🇦🇺 Australia 572 280.2 199,141 994,924 12,797 10,296 18,731 115,711
20 Sao Paulo, SP 🇧🇷 Brazil 567 251.5 236,579 682,482 11,189 61,981 21,273 88,328
21 København 🇩🇰 Denmark 526 243.6 363,427 699,064 192,476 8,042 19,605 58,416
22 Kyiv, Kyiv 🇺🇦 Ukraine 569 240.9 163,823 890,032 4,840 2,486 39,375 123,287
23 Warsaw 🇵🇱 Poland 365 223.6 151,696 647,305 14,195 5,468 23,763 54,370
24 Berlin 🇩🇪 Germany 457 218.4 252,279 781,310 81,816 20,448 27,597 102,307
25 Buenos Aires, CABA 🇦🇷 Argentina 285 216.1 303,287 708,316 30,223 34,209 27,282 78,056
26 Townsville, QLD 🇦🇺 Australia 436 207.5 959 15,490 61 115 259 3,646
27 Detroit, MI 🇺🇸 United States 558 205.9 25,570 548,493 1,192 808 5,802 92,523
28 Guangzhou, Guangdong 🇨🇳 China 245 205.8 129,697 565,446 13,030 48,679 36,144 74,742
29 Montreal, QC 🇨🇦 Canada 470 202.5 114,906 570,680 13,299 3,268 10,961 50,197
30 Phnom Penh 🇰🇭 Cambodia 387 202.1 547,864 502,465 12,588 564,323 35,663 166,564
31 Helsinki 🇫🇮 Finland 282 198.1 107,865 388,813 10,614 1,719 19,427 48,452
32 Prague 🇨🇿 Czechia 239 187.1 198,447 462,120 5,078 4,823 20,212 45,241
33 Miami, FL 🇺🇸 United States 467 186.8 96,891 433,052 5,809 7,981 6,482 59,999
34 Rio de Janeiro, RJ 🇧🇷 Brazil 419 184.4 157,425 441,215 11,282 27,791 23,171 47,546
35 Kampala 🇺🇬 Uganda 466 176.4 210,110 97,690 5,333 116,814 9,743 31,876
36 Vienna 🇦🇹 Austria 714 173.7 103,254 436,287 11,849 12,577 20,222 74,380
37 Eindhoven 🇳🇱 Netherlands 329 171.4 157,940 402,576 109,956 15,504 10,035 39,405
38 Yogyakarta 🇮🇩 Indonesia 298 171.0 505,006 332,763 7,633 519,508 13,346 70,159
39 Tokyo, Tokyo 🇯🇵 Japan 253 170.2 176,774 250,287 19,589 9,299 26,281 76,096
40 Istanbul 🇹🇷 Türkiye 314 169.9 160,023 494,905 1,408 20,086 34,516 76,076
41 Stockholm 🇸🇪 Sweden 545 169.6 84,579 273,053 13,027 1,853 12,836 33,755
42 Perth, WA 🇦🇺 Australia 408 167.8 18,366 242,204 1,209 1,154 5,082 44,734
43 Bucharest 🇷🇴 Romania 325 166.7 126,986 768,567 4,781 4,178 19,656 68,103
44 Budapest 🇭🇺 Hungary 428 164.4 298,078 1,007,501 14,340 8,214 50,379 122,677
45 Sacramento, CA 🇺🇸 United States 413 159.5 17,385 548,148 1,273 972 6,082 97,520
46 Atlanta, GA 🇺🇸 United States 372 159.4 31,624 380,748 1,267 941 4,942 79,393
47 Kuala Lumpur, KUL 🇲🇾 Malaysia 325 159.1 95,099 460,754 718 49,102 10,679 38,508
48 Houston, TX 🇺🇸 United States 238 158.9 9,135 87,402 303 110 1,334 15,737
49 Vancouver, BC 🇨🇦 Canada 665 158.9 37,238 127,551 4,288 745 2,760 18,383
50 Singapore 🇸🇬 Singapore 399 155.2 81,730 342,138 5,203 20,569 33,441 60,162
51 Oldenburg 🇩🇪 Germany 172 152.7 80,109 221,155 43,435 3,352 7,404 22,413
52 Tyumen, Tyumen oblast 🇷🇺 Russia 306 147.5 92,426 428,881 1,999 537 19,867 49,241
53 Winnipeg, MB 🇨🇦 Canada 503 137.2 18,868 158,186 1,061 373 2,979 25,269
54 San Jose, CA 🇺🇸 United States 288 134.9 25,398 580,106 1,714 1,093 6,796 82,755
55 Sofia 🇧🇬 Bulgaria 429 132.4 68,315 419,963 1,316 910 15,132 36,911
56 San Francisco, CA 🇺🇸 United States 194 128.0 151,893 375,262 8,128 6,349 10,175 49,048
57 Den Haag 🇳🇱 Netherlands 259 126.8 17,237 73,901 11,683 2,891 2,087 7,860
58 Anchorage, AK 🇺🇸 United States 347 125.1 5,832 174,761 276 177 2,765 43,598
59 Dallas, TX 🇺🇸 United States 295 124.9 13,586 211,948 365 345 2,841 37,571
60 Washington, DC 🇺🇸 United States 217 123.9 80,735 353,897 6,526 2,341 8,202 47,413
61 Tehran 🇮🇷 Iran 266 122.4 40,265 267,292 1,103 15,061 4,567 24,450
62 Busan 🇰🇷 South Korea 143 121.7 66,773 304,102 2,522 8,513 12,317 38,578
63 Maracaibo, ZU 🇻🇪 Venezuela 505 119.6 80,947 307,185 4,467 30,463 6,089 63,208
64 Dublin 🇮🇪 Ireland 386 118.7 94,809 261,693 9,941 2,021 12,669 34,841
65 Las Vegas, NV 🇺🇸 United States 167 118.6 39,565 173,761 326 591 3,586 22,099
66 Oslo 🇳🇴 Norway 312 116.5 70,501 249,450 6,475 1,640 11,863 33,043
67 Portland, OR 🇺🇸 United States 183 113.1 55,775 215,779 3,747 873 4,360 27,908
68 Phoenix, AZ 🇺🇸 United States 235 110.1 9,745 96,185 457 292 1,412 19,898
69 Amsterdam 🇳🇱 Netherlands 204 109.3 238,339 214,152 173,948 28,103 10,986 30,853
70 Nashville, TN 🇺🇸 United States 290 100.3 29,278 58,625 293 243 1,472 9,800
71 Mumbai, MH 🇮🇳 India 261 98.0 232,809 317,101 6,219 94,627 18,328 71,425
72 Seattle, WA 🇺🇸 United States 199 96.0 0 0 0 0 0 0
73 Cairo 🇪🇬 Egypt 206 91.6 59,798 204,076 503 6,928 9,885 25,205
74 Volsk, Saratov oblast 🇷🇺 Russia 402 90.0 0 0 0 0 0 0
75 Kermanshah 🇮🇷 Iran 244 88.5 58,357 510,160 573 3,502 3,744 42,344
76 Cape Town 🇿🇦 South Africa 229 86.5 55,930 233,672 1,332 3,815 7,796 39,276
77 Darwin, NT 🇦🇺 Australia 253 85.6 12,507 95,060 454 930 1,832 19,780
78 Minsk 🇧🇾 Belarus 115 84.8 18,245 94,211 457 216 4,464 11,568
79 München 🇩🇪 Germany 169 81.8 80,877 260,636 26,811 4,455 10,029 33,084
80 Baltimore, MD 🇺🇸 United States 210 80.6 21,870 240,536 474 424 3,940 36,626
81 Serrekunda 🇬🇲 Gambia 267 77.0 179,757 252,094 10,645 17,150 6,831 52,811
82 Sylhet 🇧🇩 Bangladesh 194 74.5 302,421 78,883 58,803 56,760 26,739 63,853
83 Ho Chi Minh City 🇻🇳 Vietnam 139 73.7 168,431 72,961 3,064 173,005 6,858 17,849
84 Ulaanbaatar 🇲🇳 Mongolia 127 70.2 87,943 304,331 1,879 1,639 9,117 25,617
85 Gamagori, Aichi 🇯🇵 Japan 261 68.8 12,856 144,912 3,164 1,480 6,700 38,038
86 San Diego, CA 🇺🇸 United States 94 68.3 50,800 209,892 2,225 1,785 3,279 32,191
87 Denver, CO 🇺🇸 United States 196 68.1 16,772 113,558 1,325 582 2,031 20,464
88 Brisbane, QLD 🇦🇺 Australia 176 67.5 31,363 187,883 1,308 1,918 4,481 34,722
89 Damascus 🇸🇾 Syria 148 65.6 100,239 279,804 4,492 11,104 10,387 43,459
90 Karachi, SD 🇵🇰 Pakistan 145 65.4 186,698 238,894 6,397 95,433 16,302 55,090
91 Amman 🇯🇴 Jordan 199 61.9 35,564 263,325 107 881 5,889 32,157
92 Semarang 🇮🇩 Indonesia 322 61.7 85,584 91,843 1,616 85,609 6,698 31,419
93 Auckland 🇳🇿 New Zealand 142 61.5 43,978 159,198 2,536 1,631 6,578 19,959
94 Denpasar 🇮🇩 Indonesia 28 60.6 125,556 57,117 2,188 142,913 2,004 15,020
95 Tallinn 🇪🇪 Estonia 281 60.4 31,328 158,890 1,075 374 8,114 15,862
96 Hong Kong 🇭🇰 Hong Kong 142 60.2 95,898 94,454 1,185 2,867 18,406 18,096
97 Calgary, AB 🇨🇦 Canada 170 60.0 15,237 130,767 699 195 1,970 22,194
98 Ninh Binh 🇻🇳 Vietnam 197 58.2 61,841 55,887 6,806 71,260 3,687 15,457
99 Beijing, Beijing 🇨🇳 China 130 57.2 45,355 162,551 11,268 11,586 10,206 8,844
100 Catania 🇮🇹 Italy 144 56.5 17,124 125,837 199 8,707 1,660 6,666
101 Delhi, DL 🇮🇳 India 163 55.9 51,595 94,506 2,173 20,504 11,917 17,356
102 Boston, MA 🇺🇸 United States 108 54.0 53,953 96,954 2,750 769 2,391 14,297
103 Milan 🇮🇹 Italy 101 52.9 73,742 184,386 10,189 16,478 3,902 15,866
104 Orlando, FL 🇺🇸 United States 113 52.1 13,575 112,764 1,122 583 1,983 16,372
105 Shenzhen, Guangdong 🇨🇳 China 141 51.0 37,599 113,673 4,293 13,064 9,837 13,954
106 Aleppo 🇸🇾 Syria 137 51.0 109,909 209,868 1,733 4,556 6,149 36,402
107 Honolulu, HI 🇺🇸 United States 118 49.7 15,235 58,589 959 667 1,444 8,390
108 Shanghai, Shanghai 🇨🇳 China 65 49.1 53,160 86,157 6,478 14,750 6,013 6,637
109 Santiago 🇨🇱 Chile 85 48.1 3,844 8,094 171 358 608 919
110 Barcelona 🇪🇸 Spain 98 47.3 66,762 92,102 7,090 28,619 5,776 12,996
111 Mexico City, CDMX 🇲🇽 Mexico 75 47.2 52,019 120,584 2,579 4,669 4,066 12,100
112 Kolkata, WB 🇮🇳 India 149 45.9 119,686 74,046 21,248 34,029 18,923 35,086
113 Ben Tre 🇻🇳 Vietnam 87 44.6 140,156 31,560 4,697 138,142 3,292 11,874
114 Ninohe, Iwate 🇯🇵 Japan 247 44.2 7,095 74,697 390 333 5,606 24,760
115 Lviv, Lviv oblast 🇺🇦 Ukraine 145 44.2 25,400 44,522 386 202 2,937 6,041
116 Sarajevo 🇧🇦 Bosnia and Herzegovina 158 44.0 37,053 107,527 389 316 3,220 8,656
117 Colombo 🇱🇰 Sri Lanka 105 42.8 63,356 88,764 843 21,477 15,464 34,393
118 Toyohashi, Aichi 🇯🇵 Japan 153 42.6 10,689 87,598 2,765 875 4,699 24,684
119 Adelaide, SA 🇦🇺 Australia 123 42.5 9,433 128,216 915 567 2,805 17,240
120 Addis Ababa 🇪🇹 Ethiopia 68 42.3 97,122 102,712 472 1,800 8,940 30,449
121 Mashhad 🇮🇷 Iran 224 41.4 16,596 134,177 402 3,860 2,156 6,318
122 Nam Dinh 🇻🇳 Vietnam 128 40.9 63,624 44,482 5,773 74,649 1,685 8,048
123 Zaozhuang, Shandong 🇨🇳 China 122 39.9 23,493 126,774 1,344 13,859 5,983 19,760
124 Doha 🇶🇦 Qatar 78 39.5 10,088 100,428 407 1,230 4,807 14,696
125 Zürich, ZH 🇨🇭 Switzerland 76 39.4 53,676 80,646 9,908 5,253 4,172 10,945
126 Austin, TX 🇺🇸 United States 69 39.0 18,344 88,770 1,449 789 1,443 18,723
127 Madrid 🇪🇸 Spain 75 38.7 49,386 92,021 1,480 8,534 5,202 9,817
128 Jersey City, NJ 🇺🇸 United States 104 38.6 13,242 96,385 1,040 613 1,785 12,427
129 Baku 🇦🇿 Azerbaijan 91 38.3 37,213 189,258 524 1,048 5,479 17,773
130 Surabaya 🇮🇩 Indonesia 98 38.2 71,753 59,969 1,193 62,451 1,969 10,740
131 Rome 🇮🇹 Italy 73 37.7 57,411 145,068 2,234 12,687 3,480 10,865
132 Lisbon 🇵🇹 Portugal 70 37.3 30,103 111,823 1,071 3,689 3,349 11,815
133 Brussels 🇧🇪 Belgium 82 37.1 43,354 104,356 6,663 2,438 4,921 14,586
134 Nicosia 🇨🇾 Cyprus 126 37.1 10,741 121,456 466 2,889 2,331 16,521
135 Freetown 🇸🇱 Sierra Leone 90 36.7 93,685 39,617 676 21,317 3,852 18,564
136 Zagreb 🇭🇷 Croatia 94 35.8 27,055 131,851 2,828 958 3,139 9,776
137 Kathmandu 🇳🇵 Nepal 112 35.8 207,593 69,547 5,489 123,918 10,451 18,978
138 Kharkiv, Kharkiv oblast 🇺🇦 Ukraine 75 35.1 1,736 13,439 43 22 377 1,815
139 Lagos, Lagos 🇳🇬 Nigeria 73 35.1 150,463 103,955 1,369 17,007 9,246 27,667
140 Wellington 🇳🇿 New Zealand 113 34.8 17,968 92,977 986 1,071 3,114 12,604
141 Genoa 🇮🇹 Italy 71 34.3 46,192 126,323 928 38,965 3,751 12,946
142 Asaba, Delta 🇳🇬 Nigeria 77 34.3 1,748 2,602 8 88 354 986
143 Chennai, TN 🇮🇳 India 46 34.0 86,371 43,707 1,507 39,207 14,592 23,969
144 Riga 🇱🇻 Latvia 97 33.9 22,370 85,284 1,482 673 3,787 10,979
145 Thessaloniki 🇬🇷 Greece 81 33.8 42,570 158,855 1,217 12,761 3,361 13,565
146 Belgrade 🇷🇸 Serbia 96 32.8 31,196 132,090 446 949 4,988 10,467
147 Bengaluru, KA 🇮🇳 India 92 32.6 69,020 64,403 1,173 44,504 10,869 23,190
148 Tampa, FL 🇺🇸 United States 52 32.4 9,708 77,906 599 383 907 12,090
149 Birmingham 🇬🇧 United Kingdom 115 31.4 15,647 99,371 452 331 3,131 12,724
150 Rotterdam 🇳🇱 Netherlands 78 30.7 28,374 79,600 15,394 3,276 2,296 8,649
151 Edmonton, AB 🇨🇦 Canada 56 30.4 6,735 90,209 385 216 1,400 13,357
152 Riyadh 🇸🇦 Saudi Arabia 68 29.9 2,912 92,150 52 182 2,073 12,038
153 Tbilisi 🇬🇪 Georgia 75 29.6 21,518 126,225 124 1,027 4,603 14,487
154 Chengdu, Sichuan 🇨🇳 China 54 29.1 17,124 108,684 2,470 5,470 4,274 8,164
155 Kansas City, KS 🇺🇸 United States 53 29.1 3,353 60,130 91 68 826 10,550
156 Johor Bahru, JHR 🇲🇾 Malaysia 26 29.1 10,728 110,190 179 7,636 2,193 9,741
157 Goiânia, GO 🇧🇷 Brazil 64 28.8 15,464 75,395 807 8,488 1,145 8,074
158 Toshkent 🇺🇿 Uzbekistan 85 28.2 19,361 169,479 198 76 3,115 12,382
159 Milton Keynes 🇬🇧 United Kingdom 50 27.7 1,573 56,289 173 185 751 5,888
160 Lahore, PB 🇵🇰 Pakistan 88 26.8 37,406 45,089 1,435 23,507 1,479 8,244
161 Havana 🇨🇺 Cuba 132 26.3 6,648 1,806 219 1,028 238 768
162 Manchester 🇬🇧 United Kingdom 60 26.2 18,914 68,504 978 268 2,393 8,171
163 Pittsburgh, PA 🇺🇸 United States 54 25.8 13,181 49,044 580 242 1,098 7,794
164 Cherepovets, Vologda oblast 🇷🇺 Russia 176 25.0 25,909 71,495 65 25 4,084 10,354
165 Thiruvananthapuram, KL 🇮🇳 India 73 24.7 62,049 56,188 1,007 59,061 6,669 21,952
166 Lima, LI 🇵🇪 Peru 36 24.3 42,349 99,765 4,224 6,467 4,832 12,191
167 Frankfurt 🇩🇪 Germany 20 24.3 0 0 0 0 0 0
168 Vilnius 🇱🇹 Lithuania 60 24.2 26,719 69,153 2,302 624 2,342 4,938
169 Daejeon 🇰🇷 South Korea 60 24.0 9,482 70,925 1,046 1,140 2,785 5,925
170 Islamabad, ICT 🇵🇰 Pakistan 55 23.9 29,256 69,216 1,253 13,868 2,143 9,481
171 Stavropol, Stavropol krai 🇷🇺 Russia 79 23.9 13,437 84,585 262 83 3,340 8,224
172 New Orleans, LA 🇺🇸 United States 34 23.7 23,581 52,522 1,217 356 1,248 11,118
173 Samarkand 🇺🇿 Uzbekistan 81 23.6 5,900 34,462 121 104 871 4,017
174 Charleston, SC 🇺🇸 United States 38 23.0 24,457 54,823 932 308 853 12,763
175 Sendai, Miyagi 🇯🇵 Japan 56 22.5 6,181 53,941 896 511 3,157 12,835
176 Ōsaka, Ōsaka 🇯🇵 Japan 52 22.5 29,007 41,703 7,570 1,635 3,054 9,231
177 Porto 🇵🇹 Portugal 27 22.4 29,125 56,586 360 1,671 1,825 6,486
178 Hangzhou, Zhejiang 🇨🇳 China 28 22.3 6,651 23,852 411 2,726 1,181 1,997
179 San Antonio, TX 🇺🇸 United States 26 22.2 8,981 21,950 350 146 423 4,316
180 Kyoto, Kyōto 🇯🇵 Japan 45 22.0 26,428 38,391 3,395 2,054 4,409 10,184
181 Taipei 🇹🇼 Taiwan 49 21.8 25,569 49,857 1,741 20,972 3,186 6,147
182 Cheongju 🇰🇷 South Korea 64 21.4 6,168 57,371 316 676 2,049 7,607
183 Ottawa, ON 🇨🇦 Canada 37 21.3 25,772 53,063 2,916 395 1,347 5,874
184 Chiang Mai 🇹🇭 Thailand 53 21.0 15,632 41,695 507 15,811 1,510 12,962
185 Halifax, NS 🇨🇦 Canada 82 20.8 8,200 48,062 297 138 898 5,361
186 Sapporo, Hokkaidō 🇯🇵 Japan 60 20.8 7,760 35,309 523 92 2,059 4,800
187 Beirut 🇱🇧 Lebanon 68 20.5 16,855 101,182 106 6,178 1,850 10,127
188 Monaco 🇲🇨 Monaco 45 20.3 35,821 30,718 962 12,489 1,542 4,295
189 Yerevan 🇦🇲 Armenia 61 20.1 4,343 32,103 30 60 1,184 3,979
190 Manaus, AM 🇧🇷 Brazil 75 19.8 18,745 67,239 201 9,711 2,259 10,500
191 Chișinău 🇲🇩 Moldova 70 19.7 22,351 92,843 170 173 4,535 10,741
192 Ankara 🇹🇷 Türkiye 47 19.3 16,485 89,827 48 855 4,883 9,579
193 Malibu, CA 🇺🇸 United States 34 19.2 4,065 67,359 276 452 785 14,381
194 Medellín, ANT 🇨🇴 Colombia 50 19.2 5,392 7,277 141 1,864 478 962
195 Nice 🇫🇷 France 32 19.1 31,342 47,380 3,513 7,303 1,300 5,498
196 Skopje 🇲🇰 North Macedonia 39 18.9 21,132 71,350 1,425 755 2,142 6,384
197 Pattaya 🇹🇭 Thailand 34 18.8 16,998 32,964 210 14,355 1,891 10,355
198 Johannesburg 🇿🇦 South Africa 76 18.6 14,194 42,414 66 428 2,293 8,813
199 Roseville, CA 🇺🇸 United States 46 18.4 1,251 69,292 107 123 559 12,479
200 Borovskii, Tyumen oblast 🇷🇺 Russia 221 17.8 1,770 10,800 118 57 671 3,583

Citation and usage of code

If you use this work for academic work please cite the following paper:

Alam, M. S., Bazilinska, O., & Bazilinskyy, P. (2026). A global dataset of continuous urban dashcam driving. arXiv preprint arXiv:2604.01044. Under review. Available at https://arxiv.org/abs/2604.01044

What the dataset contains, how it was collected and its known biases are described in the datasheet. Citation metadata is in CITATION.cff.

The code is open-source and free to use. It is aimed for, but not limited to, academic research. We welcome forking of this repository, pull requests, and any contributions in the spirit of open science and open-source code. For inquiries about collaboration, you may contact Md Shadab Alam (md_shadab_alam@outlook.com) or Pavlo Bazilinskyy (pavlo.bazilinskyy@gmail.com).

Repository layout

  • top folder: the analysis (main.py, analysis.py), its shared modules (common.py, helper_script.py, logmod.py, custom_logger.py, add_video.py) and the channel pipeline (run_channels.py, propose_segments.py, review_hub.py, ...); utils/ holds the plotting and analytics code
  • release/: the weekly metadata update and the release files (update_info.py, make_crowd_jsonl.py, split_large_files.py, validation_release.py, weekly_metadata.sh)
  • tools/: one-off maintenance scripts for the mapping and the data
  • dashboards/: pages and widgets that follow the pipeline (its own README)
  • analysis_data/: data files the analysis reads and writes: country tables (countries.csv, height_data.csv), the YOLO detection counts (detection_counts.csv.gz) and who added which video (video_contributors.csv); the mapping and metadata files (mapping.csv, mapping-NAME.csv, mapping_metadata.csv, crowd_index.jsonl, ...) and cut_times.csv stay in the top folder
  • logs/: records kept by the scripts (traffic_index_log.csv, appended by tools/update_traffic_index.py)
  • archive/: old files no code uses any more (mappingsubmitted.csv)
  • tests/

Run the scripts with the virtual environment active (see Step 11).

Getting started

Tested with Python 3.12.13 and the uv package manager.

The project is configured to automatically select the appropriate PyTorch backend. On systems with a supported NVIDIA GPU and CUDA driver, uv installs a CUDA enabled version of PyTorch. If no supported GPU is detected, it automatically falls back to the CPU version.

Step 1: Install uv

uv is a fast Python package and environment manager.

macOS / Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows PowerShell:

irm https://astral.sh/uv/install.ps1 | iex

Alternative, if Python and pip are already installed:

pip install uv

Step 2: Fix permissions if needed

In some environments, uv may need to create directories under:

macOS / Linux:

~/.local/share/uv/python

Windows:

%LOCALAPPDATA%\uv\python

If these directories were previously created by another user or with elevated privileges, you may encounter an error such as:

error: failed to create directory ... Permission denied (os error 13)

macOS / Linux

mkdir -p ~/.local/share/uv
chown -R "$(id -un)":"$(id -gn)" ~/.local/share/uv
chmod -R u+rwX ~/.local/share/uv

Windows PowerShell

New-Item -ItemType Directory -Force "$env:LOCALAPPDATA\uv"

icacls "$env:LOCALAPPDATA\uv" /grant "$($env:UserName):(OI)(CI)F"

Step 3: Verify uv

Check that uv is available:

uv --version

Step 4: Clone the repository

git clone https://github.com/crowd-dataset/crowd.git
cd crowd

Step 5: Install Python 3.12.13

The project is tested with Python 3.12.13.

Install it using uv:

uv python install 3.12.13

The repository contains a .python-version file so that uv can automatically select the correct Python version.

Step 6: Create the virtual environment

Create a virtual environment in .venv using Python 3.12.13:

uv venv --python 3.12.13

Step 7: Activate the virtual environment

macOS / Linux:

source .venv/bin/activate

Windows PowerShell:

.\.venv\Scripts\Activate.ps1

Windows Command Prompt:

.\.venv\Scripts\activate.bat

Step 8: Install the dependencies

Install the project dependencies from pyproject.toml:

uv pip install -r pyproject.toml

The project uses:

[tool.uv.pip]
torch-backend = "auto"

This allows uv to automatically select the appropriate PyTorch backend for the current machine.

For example:

  • NVIDIA GPU with a compatible CUDA driver → CUDA enabled PyTorch
  • No supported GPU → CPU PyTorch

No manual selection of a CUDA version should normally be required.

Note: Do not use uv sync for the initial installation if automatic PyTorch backend detection is required. Automatic torch-backend selection currently applies to the uv pip interface.

Step 9: Verify the PyTorch backend

Check which PyTorch backend was installed:

python -c "import torch; print('PyTorch:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda); print('Device:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CPU')"

On an NVIDIA CUDA system, the output should look similar to:

PyTorch: 2.8.0+cu129
CUDA available: True
CUDA version: 12.9
Device: NVIDIA GeForce RTX 5090

On a machine without a supported GPU, CUDA available will be False and the CPU version of PyTorch will be used.

Step 10: Create config and secret

mapping.csv (the videos, segments and localities) is in the top folder of the repository. Copy the two templates in the top folder:

cp default.config config
cp default.secret secret

In config, set data to the folders that hold (or will hold) the YOLO output (bbox/*.csv in each), videos to the folders with the videos, and mapping to the mapping file (mapping.csv); the other parameters are described in Configuration of project. Without a config, default.config is used. Fill in only the keys of secret you need (The secret file); the analysis needs none.

Step 11: Run the scripts

Run the scripts from the top folder of the repository with the virtual environment active:

python main.py       # download the videos and run YOLO on their segments (runs in a loop)
python analysis.py   # tables and figures from the YOLO output in the data folders

The scripts in tools/ and release/ can be run as a file or as a module, and from any folder (they switch to the top folder, where mapping.csv and the other files are):

python tools/check_lists.py
python -m tools.check_lists

The tests run with python -m pytest tests (after uv pip install pytest).

Configuration of project

Configuration of the project needs to be defined in config. Please use the default.config file for the required structure of the file. If no custom config file is provided, default.config is used. The config file has the following parameters:

  • data: Directory containing data (CSV output from YOLO).
  • videos: Directories containing the videos used to generate the data.
  • mapping: CSV file that contains mapping data for the cities referenced in the data.
  • prediction_mode: Configures YOLO for object detection.
  • tracking_mode: Configures YOLO for object tracking.
  • always_analyse: Always conduct analysis even when pickle files are present (good for testing).
  • display_frame_tracking: Displays the frame tracking during analysis.
  • save_annotated_img: Saves the annotated frames produced by YOLO.
  • delete_labels: Deletes label files from YOLO output.
  • delete_frames: Deletes frames from YOLO output.
  • delete_youtube_video: Deletes saved YouTube videos.
  • compress_youtube_video: Compresses YouTube videos (using the H.255 codec by default).
  • delete_runs_files: Deletes files containing YOLO output after analysis.
  • check_missing_mapping: Identifies all the missing csv files.
  • min_max_videos: Gives snippets of the fastest and slowest crossing pedestrian.
  • track_buffer_sec: Keep tracks longer (in seconds).
  • analysis_level: Specifies the analysis level; supported versions include city and country.
  • client: Specifies the client type for downloading YouTube videos; accepted values are "WEB", "ANDROID" or "ios".
  • model: Specifies the YOLO model to use; supported/tested versions include v8x and v11x.
  • population_threshold: Specifies the minimum population a city must have to be included in the analysis.
  • footage_threshold: Specifies the minimum amount of footage required for a city to be included in the analysis.
  • min_city_population_percentage: Specifies the minimum proportion of a country’s population that a city must have to be included in the analysis.
  • countries_analyse: Lists the countries to be analysed.
  • confidence: Sets the confidence threshold parameter for YOLO.
  • update_ISO_code: Updates the ISO code of the country in the mapping file during analysis.
  • update_pop_country: Updates the country’s population in the mapping file during analysis.
  • update_gini_value: Updates the GINI value of the country in the mapping file during analysis.
  • update_pytubefix: Updates the pytubefix library each time analysis starts.
  • font_family: Specifies the font family to be used in outputs.
  • font_size: Specifies the font size to be used in outputs.
  • plotly_template: Defines the template for Plotly figures.
  • open_html_figures (optional): Set to true to open every saved HTML figure in the browser. Off when absent.
  • logger_level: Level of console output. Can be: debug, info, warning, error.
  • sleep_sec: Amount of seconds of pause in the end of the loop in main.py.
  • git_pull: Pull changes from git repository in the end of the loop in main.py.
  • email_send: Send email about completion of the job in the end of the loop in main.py. See the following paragraph for the additional parameters in the secret file.
  • email_sender: Email address of the the "sender" of the email.
  • email_recipients: List of emails for sending the message.
  • max_workers: Specifies the maximum number of segment-processing worker threads (i.e., how many segments can be analysed in parallel). Increasing this increases concurrent segment processing, subject to GPU/CPU and I/O limits.
  • download_workers: Specifies the maximum number of concurrent video download/prepare workers. Increasing this allows multiple videos to be downloaded/prepared in parallel (useful when network/FTP is the bottleneck).
  • max_active_segments_per_video: Specifies the maximum number of segments from the same video that are allowed to be processed concurrently.
    • If set to 1, the scheduler tends to distribute workers across different videos (e.g., with max_workers=3, it will try to process 3 different videos at once).
    • If set to 2+, multiple workers may process segments from the same video simultaneously, which can improve throughput when one video has many segments but reduces “video diversity” across workers.

The secret file

API keys, passwords and usernames live in a file named secret (no extension) in the root of the project. It is ignored by git, so it is never committed. To create it, copy the template default.secret to secret and fill in the values you need. Any value can stay empty ("") if you do not use the feature it belongs to. Running the analysis on the released dataset needs none of them; running main.py needs at least an empty secret copied from the template.

The file is a single JSON object:

{
  "geonames_username": "",
  "bea_api_key": "",
  "tomtom_api_key": "",
  "restcountries_api_key": "",
  "email_smtp": "",
  "email_account": "",
  "email_password": "",
  "ftp_username": "",
  "ftp_password": "",
  "carto_api_key": "",
  "youtube_api_key": "",
  "locationiq_api_key": ""
}

Which keys you need depends on what you run:

  • analysis of the released dataset (analysis.py): none; carto_api_key is optional.
  • adding videos (add_video.py): geonames_username, restcountries_api_key, tomtom_api_key and youtube_api_key; bea_api_key for US localities.
  • proposing segments from channels (propose_segments.py): youtube_api_key; geonames_username and locationiq_api_key help.
  • updating the traffic index (tools/update_traffic_index.py): tomtom_api_key.
  • processing videos (main.py): ftp_username and ftp_password for the VideoFiles server; the email keys only if email_send is on in config.
Key Used by What for Where to get it
geonames_username add_video.py, propose_segments.py locality population, a fallback for coordinates, and place lookups free account at GeoNames; see below
bea_api_key add_video.py GDP of US localities free key from BEA; see below
tomtom_api_key add_video.py, tools/update_traffic_index.py traffic index from TomTom traffic flow free account at TomTom; see below
restcountries_api_key add_video.py country population, continent and Gini free account at REST Countries; see below
email_smtp, email_account, email_password main.py email when a job finishes (email_send in config) your email provider; see below
ftp_username, ftp_password main.py downloading videos from the VideoFiles server the maintainers (see Contact)
carto_api_key utils/plotting/maps.py optional: basemap tiles for the Mapbox-style maps without CARTO's watermark; without a key, CARTO's free basemap is used CARTO; see below
youtube_api_key propose_segments.py, add_video.py listing a channel's videos and their length, upload date and channel, without downloading them see below
locationiq_api_key propose_segments.py optional: faster place lookups (localities from titles, descriptions and chapters, and the towns along a drive "from A to B") see below

Getting a YouTube Data API key

The key is free; the default quota of 10,000 units a day covers several large channels (listing a channel's search results costs 100 units per 50 videos, video details 1 unit per 50 videos).

  1. Go to the Google Cloud console and sign in with the Google account you want the key to belong to.
  2. Create a project: project selector at the top → New project → give it a name (e.g. crowd) → Create, then select it.
  3. Open APIs & Services → Library, search for YouTube Data API v3 and click Enable.
  4. Open APIs & Services → Credentials → Create credentials → API key. Copy the key that appears.
  5. Recommended: click the new key → under API restrictions choose Restrict key → select YouTube Data API v3 → Save, so the key cannot be used for anything else.
  6. Put the key in secret as "youtube_api_key": "...".

Getting a LocationIQ key (optional)

propose_segments.py looks places up on OpenStreetMap: to guess a video's locality from a named place ("Al Khan Beach" is in Sharjah) and to split a drive "from A to B" into the towns along its route (about 25 lookups per such drive). Without a key it uses the public Nominatim server, which allows one request a second and refuses requests for a while when a busy day goes over that. LocationIQ runs the same OpenStreetMap search with a free key: 5,000 requests a day at two a second, with no payment details. With a key in secret, lookups go to LocationIQ; once its daily requests are used up, they fall back to the public server.

  1. Sign up for the free plan at locationiq.com and confirm your email address.
  2. Open the dashboard's Access Tokens page and copy the token there.
  3. Put it in secret as "locationiq_api_key": "...". Nothing else needs changing; running channel batches pick it up from their next chunk.

Getting a GeoNames username

GeoNames is free; an account allows 10,000 requests a day and 1,000 an hour.

  1. Create an account at geonames.org/login and confirm your email address with the link GeoNames sends.
  2. Sign in and open your account page. At the bottom, click Click here to enable the free web services. Requests are refused until this is done.
  3. Put your username (not your email address) in secret as "geonames_username": "...".

Getting a BEA API key

The U.S. Bureau of Economic Analysis key is free and is used only for localities in the USA.

  1. Fill in your name and email address at apps.bea.gov/API/signup.
  2. BEA emails you the key (a 36-character code); click the activation link in that email.
  3. Put the key in secret as "bea_api_key": "...".

Getting a TomTom API key

The traffic index uses TomTom's Traffic Flow API (segment data). Its free tier allows 20,000 requests a month, with no payment details needed.

  1. Create an account at developer.tomtom.com and confirm your email address.
  2. Open the Dashboard: a key is created with the account (Keys section). Copy it.
  3. Put it in secret as "tomtom_api_key": "...".

tools/update_traffic_index.py uses one request per locality and only queries localities where it is local daytime; requests beyond the free tier are refused unless payment details are added to the TomTom account.

Getting a REST Countries API key

add_video.py uses version 5 of the REST Countries API, which needs a key. The free plan allows 1,000 requests a month, with no payment details.

  1. Sign up at restcountries.com/sign-up and confirm your email address.
  2. Create an API key in the dashboard and copy it.
  3. Put it in secret as "restcountries_api_key": "...".

Email settings

main.py can email you when a job finishes (email_send, email_sender and email_recipients in config). It connects to the SMTP server over SSL on port 465.

  • email_smtp: the SMTP server of your provider, e.g. smtp.gmail.com for Gmail.
  • email_account: the full email address you send from.
  • email_password: for Gmail, an app password, not your normal password. Turn on 2-Step Verification for the Google account, then create an app password at myaccount.google.com/apppasswords and paste the 16 characters. Other providers have similar app passwords or use the account password.

Getting a CARTO key (optional)

The Mapbox-style maps (mapbox_map_*) use CARTO's free basemap, which shows a CARTO watermark. With a key, maps.py loads CARTO's basemap tiles with the key instead.

  1. Create an account at carto.com.
  2. In the CARTO Workspace, create an API access token under Developers → Credentials and copy it.
  3. Put it in secret as "carto_api_key": "...".

Example of YOLO output for a video with dashcam footage

Video: https://www.youtube.com/watch?v=_Wyg213IZDI.

Selection procedure

Segments of videos were not selected if frames are skipped

Video: https://www.youtube.com/watch?v=0K9vaQxKZ9k.

Snippets of videos are not analysed during the movement of camera

Video: https://www.youtube.com/watch?v=3jVszt_78_k.

Videos are excluded from analysis if the camera is unstable or shaking

Video: https://www.youtube.com/watch?v=uFG1_JBZUmM.

Snippets of videos captured in parking areas were excluded from analysis

Video: https://www.youtube.com/watch?v=U0pdQ8eZtHY.

Videos are excluded from analysis if another video is a part of main video

Video: https://www.youtube.com/watch?v=rdx7UFXYSz0.

Verification of segments

After segments were added, they were checked again by hand. The checks were done by Md Shadab Alam, on the main branch, for the segments of mapping.csv, including the videos that other contributors of this repository added (see Who added the videos).

1. Candidate cuts. Points inside segments where the footage may break (a jump in time, a different clip, or a part that should not be analysed) are listed in cut_times.csv, with the video, the segment start and the time of the candidate cut.

2. Reviewing. For each candidate cut, the YouTube video was played for a few seconds around the cut. The reviewer marked the candidate as yes (a real cut), no (not a cut) or unavailable (YouTube no longer plays or embeds the video), and could add a note. The decision and the time of the review are saved in cut_times.csv.

In total, 52,838 cuts were analysed.

3. What the reviewer looked for.

  • Cuts in videos added by other contributors. The segments of the videos added by the other authors of the repository were checked for cuts, in the same way as the others.
  • Videos that are not at normal speed. Videos that play faster or slower than 1x (for example fast-forwarded footage or time-lapses) are not suitable, because speeds and crossing times in them are wrong. Such cases are noted, for example as fast forward.
  • Advertisements in the footage. An advertisement that was cut into the middle of a video is not footage of the road. Where one was found, it was removed from the segments by the reviewer.

4. Applying the result. Each candidate marked yes splits its segment in mapping.csv into the part before and the part after the cut, and the detection CSV of the segment is split at the same time, so that the footage around the cut is not analysed. Segments that become too short are removed. Detection CSVs that no longer match a segment in mapping.csv are removed from the data folder.

Description and analysis of dataset

Note: The interactive figures are displayed using htmlpreview.github.io, which may be blocked on some institutional or education networks. If an interactive figure does not open, try another network or download the corresponding .html file from the figures directory and open it locally in a web browser.

Description of dataset

Locations of cities with footage in dataset Locations of cities with footage in dataset. Note: continents are based on geography, i.e., the cities in Russia east from Ural mountains are shown as Asia.

Locations of cities with footage in dataset with density overlay of population Locations of cities with footage in dataset with a density overlay of population. Note: continents are based on geography, i.e., the cities in Russia east from Ural mountains are shown as Asia.

Locations of cities with footage in dataset with density overlay of the number of videos in the dataset Locations of cities with footage in dataset with a density overlay of the number of videos in the dataset. Note: continents are based on geography, i.e., the cities in Russia east from Ural mountains are shown as Asia.

Locations of cities with footage in dataset with density overlay of the total number of seconds of footage in the dataset Locations of cities with footage in dataset with a density overlay of the total number of seconds of footage in the dataset. Note: continents are based on geography, i.e., the cities in Russia east from Ural mountains are shown as Asia.

Amount of footage per country in Africa Amount of footage (hours) per country in Africa. Note: the colour scale is logarithmic; countries are grouped by the continent of their cities in the dataset.

Amount of footage per country in Asia Amount of footage (hours) per country in Asia. Note: the colour scale is logarithmic; countries are grouped by the continent of their cities in the dataset.

Amount of footage per country in Europe Amount of footage (hours) per country in Europe. Note: the colour scale is logarithmic; countries are grouped by the continent of their cities in the dataset.

Amount of footage per country in North America Amount of footage (hours) per country in North America. Note: the colour scale is logarithmic; countries are grouped by the continent of their cities in the dataset.

Amount of footage per country in Oceania Amount of footage (hours) per country in Oceania. Note: the colour scale is logarithmic; countries are grouped by the continent of their cities in the dataset.

Amount of footage per country in South America Amount of footage (hours) per country in South America. Note: the colour scale is logarithmic; countries are grouped by the continent of their cities in the dataset.

Amount of footage per US state Amount of footage (hours) per US state. Note: the colour scale is logarithmic.

Footage per US county Footage per US county (log colour scale): localities are assigned to the county they lie in. Hover over a county for its localities.

Footage per million people per US county Hours of footage per million people per US county (population: US Census Bureau estimates, 2024).

Share of night footage per US county Share of footage recorded at night per US county (counties with at least an hour of footage).

Footage per European region Footage per European region: Eurostat NUTS 2 regions for the EU, EFTA, the United Kingdom and candidate countries, and geoBoundaries regions for European Russia (west of the Urals), Ukraine, Belarus and Bosnia and Herzegovina; Moldova, Kosovo and small countries as a whole.

Footage per million people per European region Hours of footage per million people per European region (population: Eurostat, each region's latest year; for Russia, Ukraine, Belarus and Bosnia and Herzegovina, Wikidata's latest figure).

Share of night footage per European region Share of footage recorded at night per European region (regions with at least an hour of footage).

Footage per locality in the United States as spikes One spike per locality in the United States; height and colour show its hours of footage (log scale).

Footage per locality in Russia as spikes One spike per locality in Russia.

Footage per locality in Japan as spikes One spike per locality in Japan.

Where the footage is in Europe Where the footage is in Europe: hours of footage per 10,000 km², smoothed over about 50 km (log colour scale); grey: no footage nearby. Callouts mark the densest places.

Where the footage is in North America Where the footage is in North America.

Where the footage is in Asia Where the footage is in Asia.

Distance to the nearest footage in Europe Blind spots of the dataset in Europe: distance from every place to the nearest locality with at least an hour of footage. Callouts mark the places furthest from any footage.

Distance to the nearest footage in North America Blind spots of the dataset in North America.

Distance to the nearest footage in Asia Blind spots of the dataset in Asia.

Share of night footage in Europe, smoothed Share of footage recorded at night in Europe, smoothed over about 50 km and weighted by footage; grey where there is less than an hour of footage within 100 km.

Average upload year of the footage in Europe Average year of upload of the footage in Europe (weighted by footage): where the footage is recent and where it is older.

Number of videos against the amount of footage per locality, log scales Number of videos against the amount of footage per locality (log scales), coloured by continent, with every country and its flag in the legend on the right, in alphabetical order (scroll it in the HTML version; click a country to hide or show it); hover over a point for its details. The 40 localities with the most footage are labelled, the top 12 in larger black text; in the HTML version, zoom in to label every point.

Number of videos against the amount of footage per locality, linear scales The same on linear scales, which show how far the localities with the most footage lead, with the same country legend. The 40 localities with the most footage are labelled, the top 12 in larger black text; in the HTML version, zoom in to label every point.

Number of videos against the amount of footage per country, log scales Number of videos against the amount of footage per country (log scales), coloured by continent; hover over a point for its details. Countries are labelled with their flag and ISO3 code, the 30 with the most footage in larger black text; in the HTML version, zoom in to label every point.

Number of videos against the amount of footage per country, linear scales The same on linear scales, which show how far the countries with the most footage lead. The 30 countries with the most footage are labelled with their flag and ISO3 code; in the HTML version, zoom in to label every point.

Distribution by continent Distribution of videos by continent. Note: continents are based on geography, i.e., the cities in Russia east from Ural mountains are shown as Asia.

Time of upload of videos Number of videos by quarter of upload and continent. The current quarter (hatched) is not complete yet.

Distribution by type of vehicle Distribution of segments (parts of videos included in dataset) by type of vehicle.

Amount of footage per locality against its population Amount of footage per locality against its population. Large localities with little footage are candidates for adding videos.

Footage per locality against its population, relative to the trend Footage per locality against its population (log scales), coloured by whether a locality has more than three times, about, or less than a third of the footage its size predicts (the dotted least-squares line). Labelled: the most populous localities, those with the most footage, and the most under-covered cities of over a million people, which are the next ones to collect.

Amount of footage per locality against its gross metropolitan product Amount of footage per locality against its gross metropolitan product (GMP, known for about 200 large cities), with the Spearman rank correlation: whether economically large cities dominate the data.

Amount of footage per locality against its traffic index Amount of footage per locality against its traffic index (how much slower than free flow traffic is, from one TomTom reading per locality), for localities with a reading above 0, with the Spearman rank correlation.

Amount of footage per country against country indicators, showing whether some kinds of countries are over- or under-represented Amount of footage per country against country indicators, with the Spearman rank correlation and a trend line per panel, showing whether some kinds of countries are over- or under-represented.

Share of footage recorded at night per country Share of footage recorded at night per country. Countries with less than 10 hours of footage are grey, as their share is not reliable.

Footage per million inhabitants per country Hours of footage per million inhabitants per country: coverage relative to country size (log scale).

Footage per million people against GDP per person per country Hours of footage per million people against GDP per person (both log scales; circle size: population), coloured by whether a country has more than twice, about, or less than half the footage its wealth predicts (the dotted least-squares line). GDP per person at purchasing-power parity is the World Bank's latest value.

Share of footage from the largest channel per country Share of each country's footage that comes from its largest YouTube channel. Where it is high, one uploader's routes and camera dominate that country's data. Countries with less than 10 hours of footage are grey.

Type of vehicle the footage is recorded from, as a share of footage per continent Type of vehicle the footage is recorded from, as a share of footage per continent.

Share of footage coming from the largest YouTube channels Share of footage coming from the largest YouTube channels.

Distribution of the length of segments (parts of videos included in the dataset) Distribution of the length of segments (parts of videos included in the dataset).

Localities in the dataset, sized by footage Every locality in the dataset as a dot coloured by continent; the dot area is proportional to the hours of footage.

Localities in the dataset on a globe The same localities on a globe. The HTML version spins until you grab it; drag to turn it.

Localities in the dataset on a 3D globe with spikes The localities on a 3D satellite globe (NASA Blue Marble), with a spike for each locality whose height shows its hours of footage on a log scale, so localities with little footage are visible too. In the HTML version, a button merges neighbouring localities into one spike per area of about 200 km, which is easier to read where localities are dense. Each spike is orange for the share of its footage recorded by day and blue for the share at night. The HTML version spins until you grab it; drag to turn it, scroll to zoom.

Localities in the dataset on the spinning globe of the dashboards The spinning globe of the CROWD dashboards: every locality as a square that grows with its hours of footage, and the places with segments added in the last week (red) and month (amber). The HTML version loads the latest data when it opens (from the globe on bazilinskyy.github.io, rebuilt every night) and turns until you grab it; drag to turn it, hover over a place for its footage and new segments, and click it to watch its longest segment on YouTube.

Footage by continent, country and locality Footage by continent, country and locality, coloured by the share recorded at night. In the HTML version, click a box to zoom in down to the localities.

Share of footage against share of population per country Share of footage against share of population (of all countries in the dataset) for the 25 largest countries by either share (log scale). Where the orange dot is left of the blue one, the country is under-represented.

Footage by population of locality per continent Share of footage by population of the locality, per continent and overall: what "urban" means in each part of the dataset.

Effective number of YouTube channels per country Effective number of YouTube channels per country (inverse Herfindahl index of the channels' shares of footage): 1 means a single uploader; n means as diverse as n channels with equal shares. Countries with less than 10 hours of footage are grey.

Effective number of channels against footage per country Effective number of YouTube channels against hours of footage per country (log scales; circle size: population), coloured by whether a country has more than twice, about, or less than half the channels its amount of footage predicts. Countries below the line rest on few uploaders, so their footage reflects few channels' routes, cameras and styles.

Where the 20 channels with the most footage film Where the 20 YouTube channels with the most footage film, numbered by footage, with the number of countries and hours of each (dot area proportional to hours). Travel channels span many countries; most large channels film in one country or city. In the HTML version, each channel's number links to the channel on YouTube.

Length of segments by continent and type of vehicle Length of segments by continent and by type of vehicle (boxes: quartiles; whiskers: 5th and 95th percentiles).

Detections in the footage (YOLO)

Objects detected in the footage by YOLO (yolo11x with tracking): unique tracked persons, cars, bicycles, motorcycles, buses and trucks, counted with a confidence of at least 0.7 and expressed per minute of analysed footage. The counts per segment are kept in analysis_data/detection_counts.csv.gz (video, start of the segment and the unique tracked objects of each class), which python count_detections.py --data <folder with bbox/> writes where the YOLO detection CSV files are (the first run reads about 900 GB of CSVs, in parallel with --workers; later runs read only new or changed files, cached in _output/). analysis.py, also in the GitHub Action, makes the tables and figures below from it, matched to the current mapping, so they stay up to date without the CSV files. Every Sunday at 20:00 (Amsterdam time), tools/weekly_detection_counts.sh on the machine with the data drive counts newly analysed footage and pushes analysis_data/detection_counts.csv.gz if it changed, ahead of the weekly refresh of the figures.

The detections are automatic outputs, not ground truth. What the detector sees depends on the camera, resolution and viewpoint, so the figures by vehicle type and by year of upload show these effects next to the comparisons between countries.

Based on 86,151 detection CSV files, last updated 2026-10-17 07:39 UTC.

Tables

Detections per continent
# Continent Analysed (h) Of footage (%) Localities Persons / min Cars / min Bicycles / min Motorcycles / min Buses / min Trucks / min
1 Africa 756.9 73.8 540 37.21 43.48 1.16 7.93 2.24 9.40
2 Asia 9,283.9 96.3 2,141 24.27 40.55 1.03 15.65 2.73 8.10
3 Europe 8,448.8 89.3 3,651 17.12 44.72 2.61 1.35 1.94 5.53
4 North America 9,045.5 76.4 2,287 9.69 50.06 0.65 0.39 1.00 7.85
5 Oceania 1,333.9 72.5 436 8.28 53.25 0.55 0.56 1.29 8.73
6 South America 1,127.1 88.1 398 18.47 47.96 1.32 4.45 1.78 7.03
7 All 29,996.1 85.5 9,453 17.26 45.51 1.35 5.73 1.87 7.32
Top 20 countries by pedestrians per minute (at least 10 analysed hours in at least 3 localities)
# Country Pedestrians / min 95% interval Analysed (h) Localities
1 🇳🇵 Nepal 92.85 25.71–96.55 38.1 4
2 🇳🇬 Nigeria 63.33 38.92–70.41 56.9 34
3 🇧🇩 Bangladesh 60.73 41.68–66.12 107.2 29
4 🇰🇪 Kenya 52.53 49.14–59.82 19.9 55
5 🇵🇰 Pakistan 51.73 38.66–67.73 142.4 37
6 🇮🇳 India 44.01 40.06–49.22 450.3 293
7 🇰🇭 Cambodia 43.54 24.40–45.14 222.5 7
8 🇻🇳 Vietnam 42.64 25.36–45.04 1,110.8 68
9 🇪🇹 Ethiopia 41.02 39.50–73.56 42.4 8
10 🇬🇲 Gambia 39.59 32.25–51.09 95.4 29
11 🇲🇼 Malawi 37.69 29.68–49.66 29.9 48
12 🇨🇬 Congo (Congo-Brazzaville) 37.40 5.83–38.06 11.8 3
13 🇸🇱 Sierra Leone 35.88 22.87–41.69 79.1 46
14 🇨🇴 Colombia 34.63 31.58–38.46 41.4 35
15 🇬🇭 Ghana 32.50 26.84–60.01 11.4 10
16 🇮🇩 Indonesia 32.11 25.54–41.46 969.6 175
17 🇲🇦 Morocco 30.32 26.77–35.61 46.9 34
18 🇬🇧 United Kingdom 29.72 9.56–33.09 1,496.8 353
19 🇸🇾 Syria 29.49 14.75–35.58 122.3 11
20 🇭🇺 Hungary 29.41 7.98–30.01 171.5 34
Top 20 localities by pedestrians per minute (at least 1 analysed hour)
# Locality Pedestrians / min Analysed (h)
1 🇮🇳 Varanasi 126.64 1.0
2 🇨🇫 Bangui 103.73 5.3
3 🇮🇳 Anantapur 103.57 1.2
4 🇵🇰 Dera Ismail Khan 98.21 1.2
5 🇵🇰 Sialkot 98.18 3.4
6 🇳🇵 Kathmandu 97.07 35.6
7 🇲🇬 Toamasina 89.05 1.3
8 🇵🇰 Multan 88.86 9.8
9 🇺🇬 Kampala 87.35 40.1
10 🇸🇱 Kenema 86.35 2.4
11 🇸🇱 Makeni 80.86 1.2
12 🇵🇰 Mansehra 76.74 2.1
13 🇮🇳 Gaya 76.16 3.0
14 🇳🇬 Lagos 73.20 34.3
15 🇳🇬 Ibadan 71.18 5.2
16 🇮🇳 Dehradun 71.17 1.3
17 🇵🇰 Abbottabad 70.47 1.9
18 🇵🇰 Faisalabad 70.15 1.8
19 🇸🇱 Bo 68.89 2.6
20 🇧🇩 Sylhet 67.63 74.5

Figures

Share of each country's footage that has been analysed with YOLO (countries with less than 10 hours of footage are grey). Share of each country's footage that has been analysed with YOLO (countries with less than 10 hours of footage are grey).

Pedestrians per minute of footage per country (unique tracked persons). Pedestrians per minute of footage per country (unique tracked persons).

Pedestrians per minute of footage per country, with a 95% bootstrap interval over its localities (countries with at least 10 analysed hours in at least 3 localities). Pedestrians per minute of footage per country, with a 95% bootstrap interval over its localities (countries with at least 10 analysed hours in at least 3 localities).

How much footage a stable estimate of a locality needs: the width of its 95% bootstrap interval of pedestrians per minute over its segments (as a share of the rate) against its analysed hours (localities with at least 5 segments; segments of one drive are alike, so the true intervals are somewhat wider). How much footage a stable estimate of a locality needs: the width of its 95% bootstrap interval of pedestrians per minute over its segments (as a share of the rate) against its analysed hours (localities with at least 5 segments; segments of one drive are alike, so the true intervals are somewhat wider).

Pedestrians against cars per minute per locality (at least an analysed hour), split at the medians into walkable, busy, car-dominated and quiet streets. Pedestrians against cars per minute per locality (at least an analysed hour), split at the medians into walkable, busy, car-dominated and quiet streets.

Pedestrians per minute by population of the locality, per continent, with a 95% bootstrap interval over localities (groups with at least 3 localities and an analysed hour). Pedestrians per minute by population of the locality, per continent, with a 95% bootstrap interval over localities (groups with at least 3 localities and an analysed hour).

Road-user mix of the 30 localities with the most analysed footage, each as 100 squares (ordered by the share of pedestrians). Road-user mix of the 30 localities with the most analysed footage, each as 100 squares (ordered by the share of pedestrians).

Detected road users per minute of footage, per class, in the 40 countries with the most analysed footage (log colour scale). Detected road users per minute of footage, per class, in the 40 countries with the most analysed footage (log colour scale).

Pedestrians per minute of footage per locality, by continent. Pedestrians per minute of footage per locality, by continent.

Distribution of pedestrians per minute over segments of at least a minute (log scale). Distribution of pedestrians per minute over segments of at least a minute (log scale).

Mix of detected road users per continent. Mix of detected road users per continent.

Mix of detected road users in the 30 countries with the most analysed footage. Mix of detected road users in the 30 countries with the most analysed footage.

Share of two-wheelers (motorcycles and bicycles) among the detected vehicles per country (countries with less than 10 analysed hours are grey). Share of two-wheelers (motorcycles and bicycles) among the detected vehicles per country (countries with less than 10 analysed hours are grey).

Detected road users per minute by day and by night, per class and continent (log scale). Detected road users per minute by day and by night, per class and continent (log scale).

Pedestrians per minute of footage by day and by night per country (countries with at least an hour of each). Pedestrians per minute of footage by day and by night per country (countries with at least an hour of each).

Pedestrians per minute by the type of vehicle the footage is filmed from: the viewpoint changes what the detector sees. Pedestrians per minute by the type of vehicle the footage is filmed from: the viewpoint changes what the detector sees.

Detected road users per minute by year of upload (years with at least 10 analysed hours): newer cameras and higher resolutions can change what the detector sees. Detected road users per minute by year of upload (years with at least 10 analysed hours): newer cameras and higher resolutions can change what the detector sees.

Pedestrians per minute of footage per country against country indicators: the mapping's, GDP per person, urban population, density and jobs in agriculture (World Bank), pedestrians among road deaths, registered vehicles, physical inactivity and obesity (WHO), mean temperature and rainfall (ERA5, World Bank climate portal) and the footage-weighted TomTom traffic index. Pedestrians per minute of footage per country against country indicators: the mapping's, GDP per person, urban population, density and jobs in agriculture (World Bank), pedestrians among road deaths, registered vehicles, physical inactivity and obesity (WHO), mean temperature and rainfall (ERA5, World Bank climate portal) and the footage-weighted TomTom traffic index.

Pedestrians per minute of footage against GDP per person (countries with at least 10 analysed hours; circle size: population), coloured by whether a country has more than 1.5 times, about, or less than two-thirds of the pedestrians its wealth predicts. Pedestrians per minute of footage against GDP per person (countries with at least 10 analysed hours; circle size: population), coloured by whether a country has more than 1.5 times, about, or less than two-thirds of the pedestrians its wealth predicts.

Motorcycles as a share of detected vehicles against GDP per person, coloured by whether a country has more than twice, about, or less than half the share its wealth predicts. Motorcycles as a share of detected vehicles against GDP per person, coloured by whether a country has more than twice, about, or less than half the share its wealth predicts.

Bicycles per minute against GDP per person: cycling cultures stand out above the line. Bicycles per minute against GDP per person: cycling cultures stand out above the line.

Cars per minute against GDP per person: motorisation on the street, relative to wealth. Cars per minute against GDP per person: motorisation on the street, relative to wealth.

Road traffic deaths per 100,000 people against pedestrians per minute: countries with more or fewer deaths than their number of pedestrians on the street predicts. Road traffic deaths per 100,000 people against pedestrians per minute: countries with more or fewer deaths than their number of pedestrians on the street predicts.

Pedestrian road deaths per 100,000 people (road deaths times the WHO's pedestrian share of them, 2016) against pedestrians per minute: where walking is more or less deadly than the number of pedestrians on the street predicts. Pedestrian road deaths per 100,000 people (road deaths times the WHO's pedestrian share of them, 2016) against pedestrians per minute: where walking is more or less deadly than the number of pedestrians on the street predicts.

Pedestrians per minute per US county (counties with at least an hour of analysed footage). Pedestrians per minute per US county (counties with at least an hour of analysed footage).

Pedestrians per minute per European region (NUTS 2, and first-level regions of European Russia, Ukraine, Belarus and Bosnia and Herzegovina; regions with at least an hour of analysed footage). Pedestrians per minute per European region (NUTS 2, and first-level regions of European Russia, Ukraine, Belarus and Bosnia and Herzegovina; regions with at least an hour of analysed footage).

Bicycles per minute per European region: cycling regions stand out. Bicycles per minute per European region: cycling regions stand out.

Pedestrians per minute in Europe, smoothed over about 50 km; grey where there is less than an analysed hour within 100 km. Pedestrians per minute in Europe, smoothed over about 50 km; grey where there is less than an analysed hour within 100 km.

Walkable street minutes in Europe: the share of analysed minutes with at least 2 pedestrians and at most 10 cars per minute, smoothed over about 50 km. Walkable street minutes in Europe: the share of analysed minutes with at least 2 pedestrians and at most 10 cars per minute, smoothed over about 50 km.

Motorcycles as a share of detected vehicles in Europe, smoothed over about 50 km. Motorcycles as a share of detected vehicles in Europe, smoothed over about 50 km.

Bicycles per minute in Europe, smoothed over about 50 km. Bicycles per minute in Europe, smoothed over about 50 km.

Pedestrians per minute per locality against its population (localities with at least an hour of analysed footage): busy and quiet streets for a city's size. Pedestrians per minute per locality against its population (localities with at least an hour of analysed footage): busy and quiet streets for a city's size.

Pedestrians per minute of footage per locality against its population. Pedestrians per minute of footage per locality against its population.

Adding videos to dataset

To add videos to the mapping file by hand, run python add_video.py. It opens a web form (a Flask app on a local port) for one video at a time. Fill in the locality, the state (optional, recommended for the USA 🇺🇸 and Canada 🇨🇦), the country (mandatory, chosen from a list) and the YouTube link, and click Fetch data. While you type the locality, the form suggests localities that are already in the mapping file.

Form with new video Adding a video to Delft, Netherlands 🇳🇱 (with no state), before fetching its data. While the locality is typed, the form suggests the matching locality already in the mapping file.

Fetch data checks whether the locality is already in the mapping file and looks up the rest. For the video: its upload date and channel from YouTube. For a new locality: its coordinates, population and gross metropolitan product (GDP), the country's population, road deaths, continent, literacy rate, average height, median age and Gini index, and the traffic index (see The secret file for the services used). The video plays next to the form, with the current second of the player, the last second of the video and a map of the locality.

Form with new locality The same video after fetching its data, from before Delft was in the mapping file: with no entry for Delft yet, the form adds it as a new locality. Its coordinates are shown on the map under the video; dragging the marker adjusts them.

Form with existing locality Kyiv, Ukraine 💙💛 is in the mapping file (with 569 videos), so the form adds the video to it. This video is in the mapping file already: the form shows its existing segments in red (here from second 1 to 1408) next to the player, so a new segment is added after them or the existing ones can be checked.

For each segment (part of a video), add the Time of day (day or night), the Vehicle the footage is filmed from, the Start time (seconds) and the End time (seconds) (larger than the start), and click Submit. A video can have several segments, each starting at or after the end of the previous one; the values of the video (upload date, channel) and of the locality are kept, so for each further segment only its start, end, time of day and vehicle need to be filled in. All values can be corrected in the form before submitting, and by hand in the mapping file later.

Shortcuts and click events

The form accepts the following shortcuts (when the cursor is not in a text field; they also work with non-Latin keyboard layouts):

  1. A: the current second of the video into "Start time (seconds)".
  2. S: the current second of the video into "End time (seconds)".
  3. D: the whole video: "Start time (seconds)" 0 and "End time (seconds)" the last second of the video. Clicking on "Last second" under the video does the same (and copies it).
  4. Q: "Day" for "Time of day".
  5. W: "Night" for "Time of day".

Proposing segments from YouTube channels

Instead of finding segments by hand in add_video.py, whole YouTube channels can be processed automatically: propose_segments.py downloads each video of a channel at low resolution, proposes segments, localities, time of day and vehicle type, and a curator reviews the proposals on a web page and applies the approved ones to the mapping file. Nothing is written to the mapping before a curator applies it.

1. Channels to process. run_channels.py takes channels from a Google Sheet (the sheet URL is set in run_channels.py): column A is the channel URL, column B its status and column C its country. It works from the bottom of the sheet up, through channels with an empty status, and proposes segments for each in chunks of videos (--chunk, default 15), each chunk in a new process, so changes to the code apply from the next chunk:

python run_channels.py

It runs until stopped (--max-minutes N stops after N minutes) and continues where it stopped when restarted. It cannot write to the sheet: it logs lines starting with SHEET: (set row N to Processing, Processed or Rejected) for the curator to copy into the sheet. Without a country in column C, it uses the channel's country on YouTube. A single channel can also be processed directly:

python propose_segments.py --channel https://www.youtube.com/@CHANNEL --country "Netherlands" --limit 20

The country must be written as in the add_video.py form. --single-city treats all of a channel's videos as one city (no drives from A to B), and --no-download proposes whole videos from YouTube metadata only. Downloading needs yt-dlp, ffmpeg and node; when YouTube asks to sign in, put a cookies.txt exported from your browser in the root of the project. The youtube_api_key in the secret file is needed to list channels (see The secret file).

2. What is proposed automatically. Videos are left out from their metadata when they are shorter than 5 minutes, live, portrait, or walking tours, time-lapses, compilations, crash videos, highway drives or road trips. For the others, a 160x90 copy is analysed at 2 frames per second:

  • segments: stationary stretches at the start and end are trimmed and stops longer than 3 minutes are cut out; hard cuts (edits), blank frames and title cards end a segment; footage with the camera facing the driver, not facing forward or shaking, and rural or highway stretches (from YOLO detections) are left out; segments shorter than 30 seconds are dropped. Whole videos are left out for picture-in-picture or skipped footage, and a channel where ten videos in a row have skips is rejected;
  • time of day: night when the sky or the street is dark for at least a minute, with a hint at dusk;
  • vehicle: the most common vehicle type of the channel's videos already in the mapping (a car, with a note, for a new channel);
  • locality: from the title, then the description, then the chapters (a video with chapters for several places is split), and otherwise a named place looked up on OpenStreetMap; drives "from A to B" are split into the towns along the route; a town within 30 km of a city with over a million people counts as that city unless it has 250,000 people itself;
  • re-uploads of a video already in the mapping are recognised and left out.

The proposals of a channel are kept in _output/proposals/<channel>/plan.json, with frames and signals of each video. Videos left out are listed on the review page with the reason:

Videos left out of the proposals Videos of the same channel as the Kyiv example of add_video.py, left out automatically: a video under 5 minutes, a walk, and a drive that skips footage (an edit cut).

3. Reviewing. Run python review_hub.py and open http://127.0.0.1:8770: it lists the channels with videos to review, and clicking one opens its review page (also available directly with python propose_segments.py --review _output/proposals/<channel>/plan.json).

Batches to review The review hub: channels with videos still to decide. For each video, the page shows the player, the title and description, a contact sheet of frames, a route map, and the proposed segments with the reasons for each cut. Per segment, the curator can change the start and end, switch day and night, approve, reject, split it at a time, move it to another locality, or add a new segment; per video, change the vehicle, locality, state and country (with a map for a new locality), approve the rest of the video or reject it. Shortcuts: A sets the start and S the end of a segment to the current time of the player, D takes the whole video, Q and W set day and night, and F puts the current time in the split box.

Review page The proposal for the Kyiv video used in the add_video.py example above: one segment from 0:01 to 23:30 in Kyiv, Ukraine (the locality guessed from the title, the vehicle from the channel's other videos in the mapping), with a contact sheet of frames and the video's description; it matches the segment added by hand (seconds 1 to 1408).

4. Applying. Apply adds the approved segments to the mapping file through the same code as the add_video.py form: the video, its segments, time of day, vehicle type, upload date and channel, and for a new locality a new row with its coordinates, population and other values. Applied segments are marked in plan.json and cannot be changed on the page any more. Overlapping segments are refused, and writes to the mapping file are locked, so several review pages and a running channel batch can be used at once. Do not stop a review page while it is applying.

5. Merging towns into cities. python review_merges.py serves a page at http://127.0.0.1:8772 with towns of under 250,000 people within 30 km of a city of over a million in the same state, side by side on maps: Y merges a town into the city, N keeps it separate. python review_merges.py --apply merges the accepted towns: their videos move to the city and their name is added to the city's other names.

Weekly update of video metadata

mapping_metadata.csv holds the YouTube metadata of every video in the mapping file (title, upload date, channel, views, description, chapters), and crowd_index.jsonl is the same dataset as JSON Lines, one object per segment, built from mapping.csv and mapping_metadata.csv without the free-text fields (titles, descriptions, chapters). Both are refreshed every Monday at 02:00 (Amsterdam time) by weekly_metadata.sh, run by cron on a Mac mini at TU/e in a clone used only by this job:

  1. it resets the clone to the latest main on GitHub;
  2. python -m release.update_info fetches the metadata of videos added since the last run and retries the videos with missing values (offline videos keep being retried and are never removed);
  3. python -m release.make_crowd_jsonl rebuilds crowd_index.jsonl;
  4. python -m release.split_large_files split splits a file over 99 MB into NAME_part1.EXT, NAME_part2.EXT, ... (each under 99 MB; CSV parts repeat the header), as GitHub refuses files over 100 MB;
  5. the two files (or their parts) are committed as "Weekly update of video metadata" and pushed. A file over 99 MB is never pushed: the job stops instead. When someone pushed in the meantime, the commit is replayed on top of theirs.

When the files are split, the whole file is not in the repository. release/update_info.py, release/make_crowd_jsonl.py and release/validation_release.py rebuild it from its parts when needed, or run python -m release.split_large_files join mapping_metadata.csv crowd_index.jsonl. The log of the job is in ~/repos/crowd-metadata.log on the mini. To run it elsewhere, clone the repository with push access and add 0 2 * * 1 /path/to/clone/weekly_metadata.sh >> /path/to/crowd-metadata.log 2>&1 to crontab -e (set PY to the Python of the environment if it is not ~/micromamba/envs/crowd/bin/python).

Who added the videos

Videos are added by several people, each in their own copy of the mapping file: mapping.csv is Pavlo's, mapping-olena.csv Olena's, mapping-shadab.csv and mapping-epfl.csv Shadab's and, in general, mapping-NAME.csv NAME's. Videos added to mapping.csv in commits from a contributor's own account (currently Shadab's and Faye's) are credited to that contributor. Each video is credited to the file it first appeared in. The credits are kept in analysis_data/video_contributors.csv: one row per video with the contributor, the time of the commit that added it (UTC) and the mapping file it first appeared in. It was built from the git history with python -m utils.analytics.contributors, and analysis.py (also in the GitHub Action) adds new videos with the time of the last commit to their mapping file. It is the only record of who added what once the history of the mapping files is gone, so keep it when rewriting the repository's history. A video that appeared in mapping.csv and another file at the same time is credited to mapping.csv, as the other files are refreshed with copies of it. The table counts the videos in the dataset now.

# Contributor Videos Footage (h) Localities Countries First added Last added
1 Pavlo 71,032 31,848.6 7,491 232 2025-01-19 2026-10-17
2 Olena 4,718 1,727.6 943 90 2025-05-03 2026-10-13
3 Shadab 2,818 1,447.9 499 96 2023-12-17 2026-07-22
4 Margarida 54 25.0 34 4 2025-05-02 2025-06-05
5 Aloysia 38 18.3 17 2 2025-04-29 2025-07-08
6 Faye 42 14.8 29 11 2026-06-30 2026-07-12

Footage in the dataset over time by who added it Footage in the dataset over time, by who added it (cumulative hours of the videos in the dataset now, by the date they were added).

Contact

If you have any questions or suggestions, feel free to reach out to Md Shadab Alam (md_shadab_alam@outlook.com) or Pavlo Bazilinskyy (p.bazilinskyy@tue.nl).

Licence

Code: MIT License
CROWD dataset: Creative Commons Attribution 4.0 International (CC BY 4.0)

The dataset licence covers CROWD generated structured data, annotations, and derived computer vision outputs. It does not cover the underlying YouTube videos or other third party content.

CROWD does not redistribute the original YouTube videos, extracted frames, or images. Source videos remain subject to the rights of their respective owners and YouTube's Terms of Service.

About

This repository contains code that extracts YouTube videos based on a mapping.csv file and performs object detection using YOLOv11. The primary objective of this work is to evaluate pedestrian behaviour in a cross-country or cross-cultural context using freely available YouTube videos.

Topics

Resources

Security policy

Stars

13 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages