1 00:00:00,630 --> 00:00:05,100 - We are happy to introduce Andrew Logan 2 00:00:05,100 --> 00:00:10,100 and his DEF CON 30 and his parents, 3 00:00:10,500 --> 00:00:12,270 he wanted me to mention his parents, 4 00:00:12,270 --> 00:00:14,160 we're happy to have him here. 5 00:00:14,160 --> 00:00:16,650 He will be talking about ghost helicopters. 6 00:00:16,650 --> 00:00:19,962 So please give a big round of applause for Andrew Logan. 7 00:00:19,962 --> 00:00:21,402 (audience applauding) 8 00:00:21,402 --> 00:00:22,302 The stage is yours. 9 00:00:22,302 --> 00:00:25,350 (audience applauding) 10 00:00:25,350 --> 00:00:28,590 - Thank you all so much, it is an honor, 11 00:00:28,590 --> 00:00:32,433 and I'm so thrilled to be here at DEF CON, my first DEF CON. 12 00:00:33,540 --> 00:00:34,530 So I wanna talk to you about 13 00:00:34,530 --> 00:00:38,340 tracking the military ghost helicopters of Washington, D.C. 14 00:00:38,340 --> 00:00:41,910 And I'll start by taking you on a tour of Washington, D.C 15 00:00:41,910 --> 00:00:44,220 where you can see the Army National Guard 16 00:00:44,220 --> 00:00:46,560 practicing their rotor wash techniques 17 00:00:46,560 --> 00:00:48,450 over peaceful protestors 18 00:00:48,450 --> 00:00:52,110 or the Park Police practicing the same techniques 19 00:00:52,110 --> 00:00:55,440 on ice skaters on the National Mall. 20 00:00:55,440 --> 00:00:57,480 Maybe you wanna spend a quiet day inside. 21 00:00:57,480 --> 00:00:59,700 Well, if it's around inauguration, 22 00:00:59,700 --> 00:01:02,220 you can enjoy the Department of Energy 23 00:01:02,220 --> 00:01:04,260 sweeping for background radiation 24 00:01:04,260 --> 00:01:09,260 at 150 feet above your dwelling, back and forth, all day. 25 00:01:09,900 --> 00:01:11,520 And if that wasn't enough, 26 00:01:11,520 --> 00:01:14,490 we also have a top secret Army mission 27 00:01:14,490 --> 00:01:17,580 and the Night Vision and Electronic Sensors Directorate 28 00:01:17,580 --> 00:01:19,680 is based in nearby Fort Belvoir, 29 00:01:19,680 --> 00:01:21,933 so they stay pretty busy even at night. 30 00:01:22,800 --> 00:01:25,410 These are just a few of the helicopter operations 31 00:01:25,410 --> 00:01:29,880 over the District, but so began my helicopter obsession, 32 00:01:29,880 --> 00:01:33,780 kept up late at night, finding little historical information 33 00:01:33,780 --> 00:01:37,800 the following day but finding a lot of Twitter users 34 00:01:37,800 --> 00:01:41,310 with the same questions who could not identify a helicopter 35 00:01:41,310 --> 00:01:42,213 if they saw one. 36 00:01:43,680 --> 00:01:46,440 When I looked at libraries that would help me work 37 00:01:46,440 --> 00:01:48,630 with aircraft data and Twitter, 38 00:01:48,630 --> 00:01:50,340 Python was an obvious choice. 39 00:01:50,340 --> 00:01:53,100 There are many flavors of Python, as you know 40 00:01:53,100 --> 00:01:58,100 but as a novice coder, I decided to go with Bad Python. 41 00:01:58,350 --> 00:02:02,074 Some of the tenants of Bad Python use an outdated version. 42 00:02:02,074 --> 00:02:03,120 (audience laughing) 43 00:02:03,120 --> 00:02:04,605 God, I shouldn't tell you guys this. 44 00:02:04,605 --> 00:02:06,600 (Andrew laughing) 45 00:02:06,600 --> 00:02:09,033 Command line editor is always good. 46 00:02:09,960 --> 00:02:13,080 Don't consistently name your variables and functions. 47 00:02:13,080 --> 00:02:15,720 Leave your API keys in every file 48 00:02:15,720 --> 00:02:19,380 and an absolute minimum of white space. 49 00:02:19,380 --> 00:02:22,503 This does help when you're debugging on your phone. 50 00:02:24,210 --> 00:02:27,540 And with that, I built a basic ADS-B bot, 51 00:02:27,540 --> 00:02:30,540 not dissimilar from the famous Elon Jet, 52 00:02:30,540 --> 00:02:34,560 originally using free data from OpenSky API 53 00:02:34,560 --> 00:02:37,140 and mapping with Matplotlib. 54 00:02:37,140 --> 00:02:39,690 Now, my wife has a master's in geography 55 00:02:39,690 --> 00:02:41,190 and when I asked her what she thought 56 00:02:41,190 --> 00:02:44,997 of this map on the left, she said, "Looks good." 57 00:02:46,170 --> 00:02:48,660 She's very generous person. 58 00:02:48,660 --> 00:02:53,580 So now we're using Google Map Static API custom icons 59 00:02:53,580 --> 00:02:57,420 and we use data from ADSBExchange, which is much better. 60 00:02:57,420 --> 00:02:59,850 I highly recommend ADSBExchange. 61 00:02:59,850 --> 00:03:01,620 Anybody in the audience knows them. 62 00:03:01,620 --> 00:03:03,990 They don't filter military 63 00:03:03,990 --> 00:03:07,740 and they don't filter private operators for profit. 64 00:03:07,740 --> 00:03:11,370 And a little background on ADS-B, if you don't know, 65 00:03:11,370 --> 00:03:14,130 it's a transponder protocol that has been required 66 00:03:14,130 --> 00:03:18,360 in many of the busier air spaces since early 2020, 67 00:03:18,360 --> 00:03:20,640 and it's part of FAA NextGen plan 68 00:03:20,640 --> 00:03:24,000 to pack more flights into smaller spaces. 69 00:03:24,000 --> 00:03:28,470 It stands for Automatic Dependent Surveillance Broadcast. 70 00:03:28,470 --> 00:03:30,270 Automatic in that it does not require 71 00:03:30,270 --> 00:03:34,320 the pilot's intervention, dependent on a number of sensors, 72 00:03:34,320 --> 00:03:38,790 surveillance in that it reports those sensors via broadcast 73 00:03:38,790 --> 00:03:43,740 on 978 or 1090 megahertz, unencrypted for reception 74 00:03:43,740 --> 00:03:45,750 by ground stations like us. 75 00:03:45,750 --> 00:03:48,540 Well, it's actually intended for reception by the tower 76 00:03:48,540 --> 00:03:52,110 and rebroadcast to other planes, but we can receive it. 77 00:03:52,110 --> 00:03:55,830 So at the bottom, we have a chart on the evolution 78 00:03:55,830 --> 00:03:58,470 of transponder codes and their capabilities 79 00:03:58,470 --> 00:04:00,750 as taken from this DOD 80 00:04:00,750 --> 00:04:03,510 and Government Accountability Office report 81 00:04:03,510 --> 00:04:07,593 on the risks to military using these transponders. 82 00:04:08,460 --> 00:04:11,640 So it's no surprise also in this report 83 00:04:11,640 --> 00:04:14,640 you'll find the Code of Federal Regulations 84 00:04:14,640 --> 00:04:19,400 exemption from transponder use for agencies... 85 00:04:21,510 --> 00:04:25,320 Missions for national defense, homeland security, 86 00:04:25,320 --> 00:04:28,383 intelligence and law enforcement purposes. 87 00:04:29,400 --> 00:04:33,330 And I asked the Government Accountability Office directly, 88 00:04:33,330 --> 00:04:35,380 this is how I got on my first watch list. 89 00:04:37,320 --> 00:04:38,370 Who makes the decision 90 00:04:38,370 --> 00:04:40,530 as to whether a flight is sensitive or not? 91 00:04:40,530 --> 00:04:43,740 And they told me the FAA defers to the agency 92 00:04:43,740 --> 00:04:45,330 to make that designation. 93 00:04:45,330 --> 00:04:48,840 So as you can imagine, with the military 94 00:04:48,840 --> 00:04:51,420 self-exempting itself from transponders, 95 00:04:51,420 --> 00:04:55,740 it leaves very little for flight trackers in the DC Area. 96 00:04:55,740 --> 00:04:58,950 What we normally get is in the triangle, medical, 97 00:04:58,950 --> 00:05:03,570 news gathering, state and county police and park police. 98 00:05:03,570 --> 00:05:05,970 Everything else is a ghost helicopter 99 00:05:05,970 --> 00:05:08,490 for the purposes of this discussion. 100 00:05:08,490 --> 00:05:13,490 And so our flight data pyramid emerges with ADS-B at the top 101 00:05:14,010 --> 00:05:16,170 with the highest data quality, 102 00:05:16,170 --> 00:05:19,800 and only in the DC Area is it true that this provides 103 00:05:19,800 --> 00:05:22,110 the lowest data quantity 104 00:05:22,110 --> 00:05:24,033 when we're talking about helicopters. 105 00:05:24,990 --> 00:05:26,670 And it didn't feel right having a pyramid 106 00:05:26,670 --> 00:05:28,470 about government surveillance without this. 107 00:05:28,470 --> 00:05:29,320 So you have that. 108 00:05:30,360 --> 00:05:33,690 Now, we could start to chip away at this pretty easily 109 00:05:33,690 --> 00:05:36,000 by looking at the President's daily schedule, 110 00:05:36,000 --> 00:05:37,350 which is public. 111 00:05:37,350 --> 00:05:40,230 And we could scrape this with beautiful soup or selenium 112 00:05:40,230 --> 00:05:42,540 but they let you download a CSV, 113 00:05:42,540 --> 00:05:45,480 so we just do that every morning at 8:00 AM, 114 00:05:45,480 --> 00:05:48,840 parse for relevant terms like Joint Base Andrews 115 00:05:48,840 --> 00:05:50,880 where the helicopter flies to, 116 00:05:50,880 --> 00:05:53,130 and then convert those into Chron jobs 117 00:05:53,130 --> 00:05:55,050 that tweet later in the day, 118 00:05:55,050 --> 00:05:58,260 and voila you have automatic presidential arrivals 119 00:05:58,260 --> 00:06:00,870 and departures, unless they take the motorcade, 120 00:06:00,870 --> 00:06:02,580 which does happen. 121 00:06:02,580 --> 00:06:06,000 Now, this type of tracking what's publicly announced 122 00:06:06,000 --> 00:06:09,510 is also useful for things like military night 123 00:06:09,510 --> 00:06:11,223 at the local ballpark. 124 00:06:12,420 --> 00:06:14,310 And when you're surveilling the military, 125 00:06:14,310 --> 00:06:15,600 and before we go any further, 126 00:06:15,600 --> 00:06:18,180 it's good to set some ground rules. 127 00:06:18,180 --> 00:06:20,640 In researching this I relied on a talk 128 00:06:20,640 --> 00:06:23,910 by the National Geospatial Programs Office 129 00:06:23,910 --> 00:06:26,760 on how they make the decision to redact data 130 00:06:26,760 --> 00:06:28,800 from public datasets. 131 00:06:28,800 --> 00:06:30,420 So they consider first, 132 00:06:30,420 --> 00:06:33,750 is this data potentially useful to an adversary? 133 00:06:33,750 --> 00:06:37,980 And second, is this data unique before weighing the risks 134 00:06:37,980 --> 00:06:41,730 and benefits of redacting that information from the public? 135 00:06:41,730 --> 00:06:44,850 They note efforts to safeguard useful information 136 00:06:44,850 --> 00:06:47,340 that is readily available through open sources 137 00:06:47,340 --> 00:06:51,123 or observation are unlikely to reduce vulnerabilities. 138 00:06:52,110 --> 00:06:55,410 On the other side, we have basic tenants of good journalism. 139 00:06:55,410 --> 00:06:59,250 I try not to do things automatically, ADS-B bot aside, 140 00:06:59,250 --> 00:07:02,670 provide proof of user specific interest whenever possible 141 00:07:02,670 --> 00:07:05,700 and thus establishing the public interest, 142 00:07:05,700 --> 00:07:07,020 and source good data 143 00:07:07,020 --> 00:07:10,680 and link to primary sources whenever possible. 144 00:07:10,680 --> 00:07:14,040 A 1997 court case defined what a journalist is 145 00:07:14,040 --> 00:07:15,870 for the purposes of journalistic shield. 146 00:07:15,870 --> 00:07:17,610 And our use case is a little different 147 00:07:17,610 --> 00:07:19,650 but I find it informative. 148 00:07:19,650 --> 00:07:22,110 So they say a journalist is engaged 149 00:07:22,110 --> 00:07:26,610 with the intent to use material sought, gathered or received 150 00:07:26,610 --> 00:07:29,430 to disseminate information to the public 151 00:07:29,430 --> 00:07:32,520 and that such intent existed at the inception 152 00:07:32,520 --> 00:07:34,473 of the news gathering process. 153 00:07:35,340 --> 00:07:36,600 All of this is to say, 154 00:07:36,600 --> 00:07:39,510 as long as there's no smokey backroom discussion 155 00:07:39,510 --> 00:07:41,460 where we're trading helicopter secrets 156 00:07:41,460 --> 00:07:45,150 with no intent of surfacing this information to the public, 157 00:07:45,150 --> 00:07:47,160 I should be within my First Amendment rights 158 00:07:47,160 --> 00:07:48,843 for the duration of this talk. 159 00:07:50,250 --> 00:07:52,860 And I do a lot of reporting on helicopters 160 00:07:52,860 --> 00:07:54,930 and often the military. 161 00:07:54,930 --> 00:07:59,930 These are two of the most infamous, famous, 162 00:08:00,840 --> 00:08:03,420 they're the most popular operators in the DC Area. 163 00:08:03,420 --> 00:08:05,790 The Air Force 1st Helicopter Squadron 164 00:08:05,790 --> 00:08:08,670 responsible for VIP evacuations, 165 00:08:08,670 --> 00:08:11,250 but well known for flying very low 166 00:08:11,250 --> 00:08:15,180 and making emergency landings on local playgrounds 167 00:08:15,180 --> 00:08:17,343 in these Vietnam era Hues. 168 00:08:18,180 --> 00:08:22,110 And on the right we have the Army 12th Aviation Battalion 169 00:08:22,110 --> 00:08:23,790 who's responsible for transporting 170 00:08:23,790 --> 00:08:26,880 three and four star generals to and from the Pentagon, 171 00:08:26,880 --> 00:08:29,640 as well as the aforementioned night flights. 172 00:08:29,640 --> 00:08:32,310 Now, I wanna try and exercise at this point, 173 00:08:32,310 --> 00:08:36,300 the event on the left was a diversity recruiting event. 174 00:08:36,300 --> 00:08:39,000 And we recently saw the operator on the right 175 00:08:39,000 --> 00:08:43,440 doing an honorary military flyover at Arlington Cemetery. 176 00:08:43,440 --> 00:08:44,940 I'd like you to raise your hand 177 00:08:44,940 --> 00:08:48,420 if you believe either of those would require an exemption 178 00:08:48,420 --> 00:08:51,453 from transponder use as a sensitive flight. 179 00:08:54,030 --> 00:08:56,910 Oh my God, well, okay, that's what I thought too, 180 00:08:56,910 --> 00:09:00,300 but no transponder on either of those. 181 00:09:00,300 --> 00:09:03,780 So it would be easy to look at what we're doing 182 00:09:03,780 --> 00:09:05,467 so far on Twitter and say, 183 00:09:05,467 --> 00:09:07,560 "Well, you have an enormous data problem 184 00:09:07,560 --> 00:09:09,810 if you can't see these aircraft." 185 00:09:09,810 --> 00:09:11,310 But I wanted to approach this differently. 186 00:09:11,310 --> 00:09:14,490 I thought if we have hundreds or thousands of people 187 00:09:14,490 --> 00:09:16,350 looking at our Twitter feed on their phone 188 00:09:16,350 --> 00:09:19,140 that is sensor rich and high quality camera 189 00:09:19,140 --> 00:09:22,770 and we could just get them to square their hips 190 00:09:22,770 --> 00:09:24,720 and raise the phone above their head 191 00:09:24,720 --> 00:09:26,340 and crane their neck back. 192 00:09:26,340 --> 00:09:29,250 Well, we could solve the data problem 193 00:09:29,250 --> 00:09:31,600 and it might actually have health benefits too. 194 00:09:32,970 --> 00:09:35,610 So in October, 2020, we started CopterSpotter 195 00:09:35,610 --> 00:09:38,070 which is a platform for DC residents 196 00:09:38,070 --> 00:09:41,640 to self-report helicopter activity over their location. 197 00:09:41,640 --> 00:09:44,220 They do this with a couple pieces of data. 198 00:09:44,220 --> 00:09:47,730 The time, date and geolocation provided by Twitter 199 00:09:47,730 --> 00:09:52,680 and either a photo, video or the type of helicopter, 200 00:09:52,680 --> 00:09:53,670 if they know it. 201 00:09:53,670 --> 00:09:57,000 Now, this is a typical CopterSpotter on the right. 202 00:09:57,000 --> 00:09:58,920 And you all could be forgiven for thinking that 203 00:09:58,920 --> 00:10:02,130 this is a Blackhawk helicopter carrying armaments 204 00:10:02,130 --> 00:10:04,320 over a civilian population. 205 00:10:04,320 --> 00:10:07,950 These are in fact auxiliary fuel tanks. 206 00:10:07,950 --> 00:10:11,850 But it is a common concern amongst DC residents. 207 00:10:11,850 --> 00:10:16,850 And our bot retweets a spot like this with a map, 208 00:10:17,250 --> 00:10:20,130 a corresponding icon and probable operators, 209 00:10:20,130 --> 00:10:23,970 in this case for a Blackhawk helicopter, there are several. 210 00:10:23,970 --> 00:10:26,730 And this creates kind of a rolling feed 211 00:10:26,730 --> 00:10:28,920 of helicopter activity throughout the area. 212 00:10:28,920 --> 00:10:31,470 And I'm sure you would all say, that's great, 213 00:10:31,470 --> 00:10:34,110 but how do you get people to actually do this? 214 00:10:34,110 --> 00:10:39,110 Well, you make it a game and here's a recent leaderboard. 215 00:10:40,170 --> 00:10:42,930 Our users frequently joke that one day 216 00:10:42,930 --> 00:10:45,300 this could be tradeable as copter coin, 217 00:10:45,300 --> 00:10:47,160 a pseudo currency that can only be earned 218 00:10:47,160 --> 00:10:49,053 by taking photos of helicopters. 219 00:10:49,980 --> 00:10:51,570 That puts it much more in the tangible realm 220 00:10:51,570 --> 00:10:53,470 compared to a lot of cryptocurrencies. 221 00:10:54,720 --> 00:10:55,650 Quickly, I wanna tell you 222 00:10:55,650 --> 00:10:58,770 how Twitter handles location tags now. 223 00:10:58,770 --> 00:11:00,990 It used to be that you could tag a specific latitude 224 00:11:00,990 --> 00:11:02,310 and longitude on a map. 225 00:11:02,310 --> 00:11:07,310 And since 2019, they've in favor used four square locations, 226 00:11:07,560 --> 00:11:10,680 which gives you a bounding box, by default your city, 227 00:11:10,680 --> 00:11:12,480 which is too large for our purposes. 228 00:11:12,480 --> 00:11:15,540 So we ask users to tag a specific park or building 229 00:11:15,540 --> 00:11:18,570 and then we make sure that that is no wider than two miles 230 00:11:18,570 --> 00:11:19,743 in either dimension. 231 00:11:20,640 --> 00:11:23,940 Here is just one of the few problematic locations 232 00:11:23,940 --> 00:11:27,483 a park where the bounding box far exceeds the bounds. 233 00:11:28,380 --> 00:11:30,960 And once you have all of this location data 234 00:11:30,960 --> 00:11:33,120 you can start to solve some of those problems. 235 00:11:33,120 --> 00:11:36,690 This is the CopterSpotter map by my colleague, Sam Reese. 236 00:11:36,690 --> 00:11:39,030 And it lets you filter our dataset 237 00:11:39,030 --> 00:11:41,730 by time, date and operator. 238 00:11:41,730 --> 00:11:44,310 So you can find out who that helicopter was over you 239 00:11:44,310 --> 00:11:47,760 last night, last week or last month, 240 00:11:47,760 --> 00:11:50,220 even if it was the military. 241 00:11:50,220 --> 00:11:53,790 This also lets you submit directly to our dataset 242 00:11:53,790 --> 00:11:56,040 via a form in case you don't wanna give 243 00:11:56,040 --> 00:11:57,150 your Twitter location 244 00:11:57,150 --> 00:11:59,940 to whoever our Twitter overlord may be 245 00:11:59,940 --> 00:12:02,240 by the time you're all watching this on video. 246 00:12:03,630 --> 00:12:05,670 So residents really took heart with this project 247 00:12:05,670 --> 00:12:07,410 over the pandemic. 248 00:12:07,410 --> 00:12:11,220 One of our spotters, Cassie told us that it made her 249 00:12:11,220 --> 00:12:13,080 feel like she was included in a group 250 00:12:13,080 --> 00:12:15,030 that she didn't even know existed. 251 00:12:15,030 --> 00:12:17,220 And I recently found out how that felt 252 00:12:17,220 --> 00:12:19,803 here at my first DEF CON, so thank you all. 253 00:12:22,050 --> 00:12:24,540 Don Beyer, one of the members of the Congressional 254 00:12:24,540 --> 00:12:27,150 Quiet Skies Caucus recognized my efforts. 255 00:12:27,150 --> 00:12:31,620 And we even got a spot from a guy in a Blackhawk helicopter, 256 00:12:31,620 --> 00:12:33,033 that's pretty cool. 257 00:12:34,110 --> 00:12:38,520 Not everyone was so excited, but when someone calls you 258 00:12:38,520 --> 00:12:41,520 an anarchist and says the FBI needs to be watching you 259 00:12:41,520 --> 00:12:43,620 because of what your project is doing, 260 00:12:43,620 --> 00:12:46,785 everyone in this room knows you're on the right track. 261 00:12:46,785 --> 00:12:51,035 (audience laughing and applauding) 262 00:12:54,720 --> 00:12:59,720 And we collected over 10,000 copter spots in 2021. 263 00:12:59,820 --> 00:13:01,740 At the top you can see the small portion 264 00:13:01,740 --> 00:13:05,010 that would normally be available with ADS-B data. 265 00:13:05,010 --> 00:13:08,490 The gray area is the unknowns after we looked at the photos 266 00:13:08,490 --> 00:13:11,160 and tried to correlate operators to have all of them. 267 00:13:11,160 --> 00:13:15,093 And then 50% of our data is military operators. 268 00:13:15,990 --> 00:13:18,480 We do acknowledge a shortcoming with our dataset 269 00:13:18,480 --> 00:13:21,090 which is that they are voluntarily submitted. 270 00:13:21,090 --> 00:13:24,150 So they do not represent a measured random sample. 271 00:13:24,150 --> 00:13:26,100 However, you can reasonably expect 272 00:13:26,100 --> 00:13:27,900 that the actual number of events 273 00:13:27,900 --> 00:13:29,913 is higher than what is being reported. 274 00:13:30,810 --> 00:13:34,140 We did notice a drop off however of over several months, 275 00:13:34,140 --> 00:13:35,640 unique users were going down 276 00:13:35,640 --> 00:13:37,710 and unknown spots were going down as well. 277 00:13:37,710 --> 00:13:40,860 So people were getting better at identifying helicopters 278 00:13:40,860 --> 00:13:43,650 but we were serving more of a core group of spotters. 279 00:13:43,650 --> 00:13:48,210 And I wanted this to engage the whole DC Area 280 00:13:48,210 --> 00:13:49,710 and serve them. 281 00:13:49,710 --> 00:13:53,130 And I looked for ways to use the existing data to that end. 282 00:13:53,130 --> 00:13:56,070 And of course, once you have thousands of photos 283 00:13:56,070 --> 00:13:59,550 of helicopters submitted from the user's perspective, 284 00:13:59,550 --> 00:14:01,350 the next step's pretty obvious, 285 00:14:01,350 --> 00:14:03,240 you create a computer vision program 286 00:14:03,240 --> 00:14:06,420 to automatically identify the helicopters. 287 00:14:06,420 --> 00:14:08,640 These are two V-22 Osprey, 288 00:14:08,640 --> 00:14:11,040 part of the Marine Presidential Squadron 289 00:14:11,040 --> 00:14:13,620 and our computer vision program identified these 290 00:14:13,620 --> 00:14:17,370 with a 73.9% confidence 291 00:14:17,370 --> 00:14:21,513 when selecting from 19 distinct operators. 292 00:14:22,620 --> 00:14:25,350 If the user also includes location, we add them 293 00:14:25,350 --> 00:14:27,330 to the dataset and map it as we did 294 00:14:27,330 --> 00:14:30,090 with this Coast Guard MH-65, 295 00:14:30,090 --> 00:14:33,630 part of the Blackjack Flight Interdiction Program 296 00:14:33,630 --> 00:14:35,763 that keeps small planes out of NCR. 297 00:14:36,930 --> 00:14:38,550 This is done with the aid of Roboflow, 298 00:14:38,550 --> 00:14:39,990 which is a great startup 299 00:14:39,990 --> 00:14:41,970 and has been a great partner for us. 300 00:14:41,970 --> 00:14:44,130 They help beginners and small teams get started 301 00:14:44,130 --> 00:14:46,890 with computer vision and they have amazing tools 302 00:14:46,890 --> 00:14:49,920 for collaborative annotation, and they can even train 303 00:14:49,920 --> 00:14:52,860 and deploy your model nearly code free. 304 00:14:52,860 --> 00:14:56,130 They also have a Roboflow Universe that is a repository 305 00:14:56,130 --> 00:15:00,120 of open source models that you can use for your next project 306 00:15:00,120 --> 00:15:01,260 and our data's included. 307 00:15:01,260 --> 00:15:02,820 So I look forward to seeing 308 00:15:02,820 --> 00:15:06,003 all of your helicopter identification program soon. 309 00:15:07,530 --> 00:15:10,050 So with that, there's one box missing 310 00:15:10,050 --> 00:15:13,350 from our flight data pyramid here, 311 00:15:13,350 --> 00:15:16,020 and it has to do with the fact that visual identification 312 00:15:16,020 --> 00:15:18,510 is not that usable at night. 313 00:15:18,510 --> 00:15:20,700 And so we looked for someone who has more data 314 00:15:20,700 --> 00:15:21,660 that we could access. 315 00:15:21,660 --> 00:15:24,570 And we started capturing radio calls. 316 00:15:24,570 --> 00:15:28,290 Now, we thought about doing this with live ATC, 317 00:15:28,290 --> 00:15:31,830 but turns out separating by silence is not quite the same 318 00:15:31,830 --> 00:15:32,940 as squelch on a radio 319 00:15:32,940 --> 00:15:34,770 if you're trying to get individual calls. 320 00:15:34,770 --> 00:15:37,560 So instead we deployed a Raspberry Pi 321 00:15:37,560 --> 00:15:40,503 on a balcony near DCA Volunteers. 322 00:15:41,520 --> 00:15:42,805 He knows what we're doing 323 00:15:42,805 --> 00:15:43,638 (Andrew chuckling) 324 00:15:43,638 --> 00:15:48,240 and we use the excellent open source app RTLSDR-Airband 325 00:15:48,240 --> 00:15:51,000 to capture individual radio calls, 326 00:15:51,000 --> 00:15:56,000 upload them to an FTP server and tweet them at a sub-account 327 00:15:56,040 --> 00:15:58,773 from a sub-account called UFOs of DC. 328 00:16:00,000 --> 00:16:02,820 They're unidentified, but you get to identify them. 329 00:16:02,820 --> 00:16:07,470 And someone did, below, noting the call signs, way points, 330 00:16:07,470 --> 00:16:10,830 routes and zones that were mentioned in the radio call. 331 00:16:10,830 --> 00:16:13,710 Now the main account picks this up, builds a map 332 00:16:13,710 --> 00:16:17,160 of the described features and adds operator information 333 00:16:17,160 --> 00:16:20,920 and then uses FFM peg to tie the original audio file 334 00:16:22,230 --> 00:16:24,870 to this image to create a video, 335 00:16:24,870 --> 00:16:27,270 in what I think is a really powerful tool 336 00:16:27,270 --> 00:16:29,940 for citizen journalists to create stories 337 00:16:29,940 --> 00:16:31,803 from a difficult to use dataset. 338 00:16:33,000 --> 00:16:34,920 Quickly I wanna show you guys our Raspberry Pi. 339 00:16:34,920 --> 00:16:36,480 This was a very early version, 340 00:16:36,480 --> 00:16:39,480 we've since upgraded to an Airspy HF+. 341 00:16:39,480 --> 00:16:42,750 And the main thing I learned is that you cannot trust 342 00:16:42,750 --> 00:16:45,600 the Raspberry Pi's built in WiFi at all. 343 00:16:45,600 --> 00:16:48,870 So instead we use a GLI net router 344 00:16:48,870 --> 00:16:52,020 and the Good Cloud Interface allows you access 345 00:16:52,020 --> 00:16:54,510 a layer above the Pi and you can use something 346 00:16:54,510 --> 00:16:57,390 like the Shelly command line accessible switch, 347 00:16:57,390 --> 00:17:00,870 accessed from the router to hard reset the Pi 348 00:17:00,870 --> 00:17:02,613 in the event that it crashes. 349 00:17:03,810 --> 00:17:05,610 And with the completion of that box, 350 00:17:05,610 --> 00:17:08,580 we've completed our flight data pyramid, yay. 351 00:17:08,580 --> 00:17:10,620 Where do we go from here? 352 00:17:10,620 --> 00:17:14,250 Well, I'd like to look at connecting disparate data sources, 353 00:17:14,250 --> 00:17:17,520 whether that is the DC Police tweeting an incident report 354 00:17:17,520 --> 00:17:20,880 that includes location and tying that to ADS-B data 355 00:17:20,880 --> 00:17:23,010 to say "This helicopter's above you right now 356 00:17:23,010 --> 00:17:25,320 and this is what they're looking for." 357 00:17:25,320 --> 00:17:29,070 Similarly I'd like to look at news gathering helicopters 358 00:17:29,070 --> 00:17:33,750 and scrape local news sites just for the trending stories 359 00:17:33,750 --> 00:17:37,320 and identify aerial photos with computer vision 360 00:17:37,320 --> 00:17:38,970 so that we can say this is likely 361 00:17:38,970 --> 00:17:41,580 what they're over your house for. 362 00:17:41,580 --> 00:17:45,060 We're elevating helicopter air to air radio 363 00:17:45,060 --> 00:17:46,680 directly to the main feed as well. 364 00:17:46,680 --> 00:17:49,020 This is often two news gathering helicopters 365 00:17:49,020 --> 00:17:51,390 talking about how they're covering a story 366 00:17:51,390 --> 00:17:55,320 or two police agencies talking about an active pursuit. 367 00:17:55,320 --> 00:17:57,660 And I'm interested in noise monitoring. 368 00:17:57,660 --> 00:18:02,130 The DCA Airport has a noise monitoring program, 369 00:18:02,130 --> 00:18:03,750 but it's only along the river, 370 00:18:03,750 --> 00:18:06,390 and it's not publicly accessible via API. 371 00:18:06,390 --> 00:18:08,430 But I'm really curious to ask you guys 372 00:18:08,430 --> 00:18:10,620 how would you apply something like this 373 00:18:10,620 --> 00:18:13,500 to crowdsource a difficult to use dataset 374 00:18:13,500 --> 00:18:16,680 or give citizen journalists the power to make stories 375 00:18:16,680 --> 00:18:17,643 from that data? 376 00:18:18,480 --> 00:18:20,700 And we have a demonstration this weekend. 377 00:18:20,700 --> 00:18:23,370 If you go to helicoptersofLV on Twitter, 378 00:18:23,370 --> 00:18:25,890 you will see the ADS-B bot in action, 379 00:18:25,890 --> 00:18:28,110 mostly covering sight seeing helicopters 380 00:18:28,110 --> 00:18:29,700 over the Las Vegas region, 381 00:18:29,700 --> 00:18:31,260 but you can tweet your photos at it 382 00:18:31,260 --> 00:18:33,360 for automatic identification. 383 00:18:33,360 --> 00:18:36,750 And I'm gonna hang out at 5:00 PM 384 00:18:36,750 --> 00:18:39,480 right outside Caesars by the sign. 385 00:18:39,480 --> 00:18:42,420 And if you want to come do five minutes of copter spotting, 386 00:18:42,420 --> 00:18:45,300 say hello, maybe look at code and give me your ideas, 387 00:18:45,300 --> 00:18:47,070 I would love to hear them. 388 00:18:47,070 --> 00:18:48,762 Thank you all so much. 389 00:18:48,762 --> 00:18:51,353 (audience applauding)