This is the
first second of some of my look back on 2014 posts. To see the other ones, take a look at the
I tracked my location data with OpenPaths since the beginning of 2014. OpenPaths comes as an application for your phone, which tracks its location, uploads it to the OpenPath servers, where you can donate your data for scientific research, and look at the data yourself.
To do this, we grab a .CSV file with the location data. Log in to OpenPaths, and click on CSV under Download my data, which gives you a comma separated list of your location data, which can then visualize with R, which is what we’ve done here.
We want to plot the location points on a map, which we can do with the wonderful
ggmap library. First, we load the CSV file and display a summary of the data.
library(ggmap) data summary(data$lat) summary(data$lon) summary(data$alt)
## lat ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 34.6 46.9 47.2 46.0 47.5 53.6 ## lon ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 4.76 7.50 8.20 21.80 8.22 141.00 ## alt ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## -48 353 380 463 546 2670
## device ## iPhone4,1 iPhone6,2 ## 13453 1093 ## os ## 7.0.4 7.0.6 7.1 7.1.1 7.1.2 8.0 8.0.2 8.1 8.1.1 8.1.2 ## 829 261 2238 2065 1551 145 6095 479 449 434
Interesting points in our data are
- The minimal and maximal latitudes of 34.601 and 53.5866, South and North.
- the minimal and maximal longitudes of 4.762 to 141.1744, East and West.
- as well as the altitude, which ranges from -48 AMSL to 2671 AMSL.
We can get the extreme points out of the data pretty easily. To do so, we
subset the data depending on the value we want to have, build a
Location from these points, grab the map from that location, display this map and add a pointer.
For the most northern point, this goes like so:
NLocation = c(lon = subset(data, lat == max(data$lat))$lon, lat = subset(data, lat == max(data$lat))$lat) mapImage zoom = 15) ggmap(mapImage) + geom_point(aes(x = subset(data, lat == max(data$lat))$lon, y = subset(data, lat == max(data$lat))$lat), alpha = 0.5, color = "darkred", size = 10) + ggtitle("Northmost point in 2014")
We see that in 2014 I was in Hamburg, which is the northmost point. Correctly, the northmost point would be in Oslo, where I spent New Years Eve 2013/2014, but I’ve only really started to use OpenPaths in mid-January 2014…
The rest of the extremes can be extracted accordingly.
The highest peak I reached in 2014 was the Bettmerhorn, probably while skiing. The lowest point at -48 AMSL was at home and is probably a fluke in the GPS data :)
Where was I in Switzerland?
To plot the obtained data on a map, we have to center the resulting map location. Since I only want to show the data points in Switzerland, we center the map on that. Afterwards, we can simply plot all the
data points on top of that image, and you can see where I was in Switzerland in 2014.
HomeBase zoom = 8) AllPoints ggmap(HomeBase) + geom_point(aes(x = lon, y = lat), data = AllPoints, size = 3, alpha = 0.25)
is this a known problem for other iphone-owning readers of my blog?
iTunes tells me that there are updates for iPhone applications, I click on the “check for updates”-button and iTunes tells me – sometimes twice – that updates for my programs are available. i thus have to click multiple times to see the updates of which I already know that they’re available… quite annoying, don’t you think? does one of my readers have the same problem and even knows a resolution? I’d like to hear your tips.
a short screencast describing the problem can be seen below:
oh, and this post is also a test of jing :)
whenever i’m spending a day outdoor, i love to take pictures, many of them turn out to be panoramas.
sometimes i leave my camera at home and only have my mobile phone with me. shoothing panoramas with the iphone is possible with panolab [link opens itunes], but very cumbersome. and i try to keep the annoyance of nina as low as possible while stopping on the slopes, so fiddling with my phone for longer than a minute or two is not an option.
recently i was thinking about a quick-and-dirty way of creating panorams with the iphone: wouldn’t it be possible to extract the images of a movie shot while panning the scenery and stitch those together to generate a panorama? today was the perfect way to test this out, on the slopes of the wonderful stockhorn.
the whole process is fairly easy, you only need
- an iphone, jailbroken (or any other movie source :) ) with cycoder installed
- cyberduck or winscp, depending on your platform
- imageJ and
all these – very fine – pieces of software are freely available, most of them even free as in beer and as in speech.
shoot a movie.
below are the movies i’ve used for this tutorial. both are made with the excellent cycoder.app, only for jailbroken iphones. use any other movie if you don’t have an iphone :) the movies are 384×288 pixels in size, as shown below, just press the play-button.
get the movies off your iphone.
cyberduck and SFTP are my weapons of choice, YMMV, but there are tons of tutorials on the web, here’s one for the mac and here’s one for windows.
now you should have some movies on your hard-disk. cycoder has the nice feature to produce quicktime-compatible .mov-files, if you don’t have one of those handy, again, YMMV. (use the excellent handbrake to convert to and fro). quicktime is nice for the next step.
import the movies into imageJ.
if you’re on a mac, this is just simple drag-and-drop, on windows you might be quicker altogether if you convert your movies to .avi-files, since installing quicktime for java can be a bit of a hassle, but can be done.
this opens your quicktime movie as a stack of images you can then scroll through. this image-stack can then easily be exported as an image-sequence using “File > Save as > Image Sequence…”. rotate the images if you’ve been dumb enough to hold the iphone wrong :)
then you’ll have a bunch of single images on your harddisk. if you’ve panned quite slowly like i have done, you’re probably gonna have much too many images (167 for the first and 139 for the second movie) to easily stich a panorama. for these movies, i’ve removed some images from the stack using the slice remover plugin. remove slices that are unnecessary like the ones at the beginning and the end, where your glove covers the lens. now having 20 and 32 images from both movies, proceed to the next step.
import the images from the step above into hugin, align and stitch.
yes, that’s it, it’s really that easy. for the movies shown above i’ve also deleted some bad control points and stitched the panoramas normally and enfused, but this is entirely optional.the end-result looks like the images below. click them to see them bigger.
i know that both panoramas are not perfect. both are quite small, especially the second one has some artifacts and both have varying exposure. but keep in mind that i’ve only bothered nina for 29 seconds, the total time of both movies. not too shabby!
since i couldn’t find it, i asked him to outline it for me via email. he agreed that i share his howto, which you can find below:
Extract frames in VLC:
- Open VLC preferences, select “all” (as opposed to “basic”)
- Go to Video->Output modules
- Select ‘Image video output’ (this must be reverted to ‘standard’ when you’re done, to use VLC as a normal video player again)
- Flip down the subgroup next to Output modules and select ‘Image file’
- Choose ‘PNG’ as format (JPEG works too, but there will be some unnecessary quality loss)
- Set ‘recording ratio’ to 10 (determines the number of video frames skipped between images – may need to experiment with this value if images don’t overlap correctly)
- Press ‘save’ to exit VLC preferences
- Open and play the video in question as you normally would (notice: there will be no picture – sound however, if applicable, and the VLC controls will move to show you the progress of the conversion)
- Images are saved to the root of the main HDD on Mac OS X ( / ), on Windows I can only assume it will be C:
- Don’t forget to reset step 2 to ‘Standard’ when you’re done
- Throw images into Hugin and run one of the autopano scripts, and so forth
Thanks for that info, Arru!