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.
- 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 |
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).
- 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 datadashboards/: 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, ...) andcut_times.csvstay in the top folderlogs/: records kept by the scripts (traffic_index_log.csv, appended bytools/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).
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.
uv is a fast Python package and environment manager.
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows PowerShell:
irm https://astral.sh/uv/install.ps1 | iexAlternative, if Python and pip are already installed:
pip install uvIn 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)
mkdir -p ~/.local/share/uv
chown -R "$(id -un)":"$(id -gn)" ~/.local/share/uv
chmod -R u+rwX ~/.local/share/uvNew-Item -ItemType Directory -Force "$env:LOCALAPPDATA\uv"
icacls "$env:LOCALAPPDATA\uv" /grant "$($env:UserName):(OI)(CI)F"Check that uv is available:
uv --versiongit clone https://github.com/crowd-dataset/crowd.git
cd crowdThe project is tested with Python 3.12.13.
Install it using uv:
uv python install 3.12.13The repository contains a .python-version file so that uv can automatically select the correct Python version.
Create a virtual environment in .venv using Python 3.12.13:
uv venv --python 3.12.13macOS / Linux:
source .venv/bin/activateWindows PowerShell:
.\.venv\Scripts\Activate.ps1Windows Command Prompt:
.\.venv\Scripts\activate.batInstall the project dependencies from pyproject.toml:
uv pip install -r pyproject.tomlThe 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 syncfor the initial installation if automatic PyTorch backend detection is required. Automatictorch-backendselection currently applies to theuv pipinterface.
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.
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 secretIn 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.
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 foldersThe 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_listsThe tests run with python -m pytest tests (after uv pip install pytest).
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 includecityandcountry.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 includev8xandv11x.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 thepytubefixlibrary 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 totrueto 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 inmain.py.git_pull: Pull changes from git repository in the end of the loop inmain.py.email_send: Send email about completion of the job in the end of the loop inmain.py. See the following paragraph for the additional parameters in thesecretfile.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.
- If set to 1, the scheduler tends to distribute workers across different videos (e.g., with
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_keyis optional. - adding videos (
add_video.py):geonames_username,restcountries_api_key,tomtom_api_keyandyoutube_api_key;bea_api_keyfor US localities. - proposing segments from channels (
propose_segments.py):youtube_api_key;geonames_usernameandlocationiq_api_keyhelp. - updating the traffic index (
tools/update_traffic_index.py):tomtom_api_key. - processing videos (
main.py):ftp_usernameandftp_passwordfor the VideoFiles server; the email keys only ifemail_sendis on inconfig.
| 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 |
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).
- Go to the Google Cloud console and sign in with the Google account you want the key to belong to.
- Create a project: project selector at the top → New project → give it a name (e.g.
crowd) → Create, then select it. - Open APIs & Services → Library, search for YouTube Data API v3 and click Enable.
- Open APIs & Services → Credentials → Create credentials → API key. Copy the key that appears.
- 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.
- Put the key in
secretas"youtube_api_key": "...".
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.
- Sign up for the free plan at locationiq.com and confirm your email address.
- Open the dashboard's Access Tokens page and copy the token there.
- Put it in
secretas"locationiq_api_key": "...". Nothing else needs changing; running channel batches pick it up from their next chunk.
GeoNames is free; an account allows 10,000 requests a day and 1,000 an hour.
- Create an account at geonames.org/login and confirm your email address with the link GeoNames sends.
- 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.
- Put your username (not your email address) in
secretas"geonames_username": "...".
The U.S. Bureau of Economic Analysis key is free and is used only for localities in the USA.
- Fill in your name and email address at apps.bea.gov/API/signup.
- BEA emails you the key (a 36-character code); click the activation link in that email.
- Put the key in
secretas"bea_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.
- Create an account at developer.tomtom.com and confirm your email address.
- Open the Dashboard: a key is created with the account (Keys section). Copy it.
- Put it in
secretas"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.
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.
- Sign up at restcountries.com/sign-up and confirm your email address.
- Create an API key in the dashboard and copy it.
- Put it in
secretas"restcountries_api_key": "...".
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.comfor 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.
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.
- Create an account at carto.com.
- In the CARTO Workspace, create an API access token under Developers → Credentials and copy it.
- Put it in
secretas"carto_api_key": "...".
Video: https://www.youtube.com/watch?v=_Wyg213IZDI.
Video: https://www.youtube.com/watch?v=0K9vaQxKZ9k.
Video: https://www.youtube.com/watch?v=3jVszt_78_k.
Video: https://www.youtube.com/watch?v=uFG1_JBZUmM.
Video: https://www.youtube.com/watch?v=U0pdQ8eZtHY.
Video: https://www.youtube.com/watch?v=rdx7UFXYSz0.
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.
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.htmlfile from thefiguresdirectory and open it locally in a web browser.
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 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 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 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 (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 (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 (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 (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 (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 (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 (hours) per US state. Note: the colour scale is logarithmic.
Footage per US county (log colour scale): localities are assigned to the county they lie in. Hover over a county for its localities.
Hours of footage per million people per US county (population: US Census Bureau estimates, 2024).
Share of footage recorded at night per US county (counties with at least an hour of footage).
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.
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 footage recorded at night per European region (regions with at least an hour of footage).
One spike per locality in the United States; height and colour show its hours of footage (log scale).
One spike per locality in Russia.
One spike per locality in Japan.
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.
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.
Blind spots of the dataset in North America.
Blind spots of the dataset in Asia.
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 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), 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.
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), 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.
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 of videos by continent. Note: continents are based on geography, i.e., the cities in Russia east from Ural mountains are shown as Asia.
Number of videos by quarter of upload and continent. The current quarter (hatched) is not complete yet.
Distribution of segments (parts of videos included in dataset) by type of vehicle.
Amount of footage per locality against its population. Large localities with little footage are candidates for adding videos.
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 (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 (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, 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. Countries with less than 10 hours of footage are grey, as their share is not reliable.
Hours of footage per million inhabitants per country: coverage relative to country size (log scale).
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 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.
Share of footage coming from the largest YouTube channels.
Distribution of the length of segments (parts of videos included in the dataset).
Every locality in the dataset as a dot coloured by continent; the dot area is proportional to the hours of footage.
The same localities on a globe. The HTML version spins until you grab it; drag to turn it.
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.
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, 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 (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.
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 (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 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 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 by type of vehicle (boxes: quartiles; whiskers: 5th and 95th percentiles).
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.
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 |
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, 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).
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).
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).
Pedestrians per minute of footage per locality, by continent.
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 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).
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 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.
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.
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.
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.
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 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.
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.
Motorcycles as a share of detected vehicles 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 of footage per locality against its population.
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.
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.
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.
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.
The form accepts the following shortcuts (when the cursor is not in a text field; they also work with non-Latin keyboard layouts):
- A: the current second of the video into "Start time (seconds)".
- S: the current second of the video into "End time (seconds)".
- 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).
- Q: "Day" for "Time of day".
- W: "Night" for "Time of day".
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.pyIt 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 20The 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 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).
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.
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.
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:
- it resets the clone to the latest
mainon GitHub; python -m release.update_infofetches 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);python -m release.make_crowd_jsonlrebuildscrowd_index.jsonl;python -m release.split_large_files splitsplits a file over 99 MB intoNAME_part1.EXT,NAME_part2.EXT, ... (each under 99 MB; CSV parts repeat the header), as GitHub refuses files over 100 MB;- 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).
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 (cumulative hours of the videos in the dataset now, by the date they were added).
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).
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.
