Raspberry Pi Camera Comparison

I use a number of Raspberry Pi 3 Model B ARM-based Linux computers to help simplify my day-to-day life. Because I live in an urban area, I have been interested in setting up a security camera that could alert me to any issues that might arise when I’m not in the house. Most recent Raspberry Pis also include a CSI connector, meaning that it is easy to connect a high-resolution camera that can be easily accessed via python or via bash. This would also be helpful for any other computer vision setup, including OctoPrint. Since the Raspberry Pi runs OpenCV, I can use open source computer vision source code to quick and easily setup a security system. The first step is selecting a camera.

I plan on using a Raspberry Pi 3 or Raspberry Pi Zero v1.3 (with camera connector) as the base machine. However, there are a number of 3rd party cameras available. As is often the case, I was not able to find a comparison of the options available online, so today I am going to do a quick and dirty look at the following cameras:

Model Chipset Megapixels Advertised FOV
Raspberry Pi Camera OV5647 5MP 54° (h) x 41° (v)
Raspberry Pi v2 Camera IMX219 8MP 62.2° (h) x 48.8° (v)
Arducam 5MP RPi Camera OV5647 5MP 54° (h) x 41° (v)
Waveshare RPi Camera (I) OV5647 5MP 170°
Waveshare RPi Camera (J) OV5647 5MP 222°
Waveshare RPi Camera IR-CUT OV5647 5MP 75.7°

In this post, I provide some demonstration photos for outdoor, indoor, and low-light scenarios for the modules.

Read More

Replacing Battery in Apple MacBook Pro Retina (Late 2012)

The battery on my Late 2012 Apple MacBook Pro Retina is garbage. It holds a charge for no more than 20 minutes, completely dies at approximately 50% reported battery charge remaining, and the menu has an exclamation point noting that I need to service my battery. Admittedly, this is after over four years of continuous usage for my research and studies and I’ve downplayed the warnings for almost a year now. I have avoided replacing the battery because I was nowhere near the maximum number of cycles that Apple claims I should be able to reach before the battery is considered “consumed” (~600 charge cycles vs. Apple’s stated max. of 1000). But I could not stand the fact that I can’t use my laptop without a power cable and none of the fixes suggested online were working (e.g., resetting the SMC). So, it was time to replace the battery.

Read More

2016 VSS DNA

This year, I am not attending the Vision Sciences Society annual meeting. Although I wish I could be there, a number of life events meant that I was not able to submit an abstract this year. However, I was able to generate an updated force-directed diagram of co-authorships (see last year’s 2015 VSS DNA and the year before’s 2014 VSS DNA). This year, we have 1462 abstracts being analyzed (43 more than last year). As with the previous visualizations, the graph was generated in Python using NetworkX, with authors and abstracts as nodes and edges corresponding to authorship. Individuals who are authors on more than one abstract will have edges connecting to those abstracts.

Illustration of the co-authorships for the Vision Sciences Society 2016 annual meeting abstracts.

In this visualization, orange dots are abstracts, light blue dots correspond to individuals who are first authors, and dark blue dots correspond to the other author(s). You can view an interactive force-directed d3.js version here. The code for the graph and force-directed diagram generation is available on GitHub here. The scraping is notably faster this year because I am using Python 3.4+’s asyncio package. The notebooks can also be viewed using nbviewer.ipython.org:

Upgrading SSD in Apple MacBook Pro Retina (Late 2012)

For some time now, I have hit the storage limit on the 256GB SSD in my Late 2012 Apple MacBook Pro Retina. I’ve needed to move a significant chunk of data to external drives, which impedes access and frankly is a pain in the butt. I’ve considered a number of methods to upgrade the SSD, but Apple decided to use a proprietary connector for the SSD (rather than using the mSATA or, more recently, the M.2 standards), which has made upgrading more difficult/expensive than it should be. However, even though there were a few minor roadblocks, I ended up successfully upgrading the SSD using a combination of 3rd party modules. Since I could not find anecdotal reports of similar upgrades, I wanted to throw mine out into the ether.
Read More

2015 VSS DNA

Another year, another Vision Sciences Society force-directed diagram of co-authorships (see last year’s 2014 VSS DNA). This year, we have 1419 abstracts being analyzed. The graph was generated in Python using NetworkX, with authors and abstracts as nodes and edges corresponding to authorship. Individuals who are authors on more than one abstract will have edges connecting to those abstracts.

Illustrating co-authorship for the Vision Sciences Society abstracts

Orange dots are abstracts, light blue dots correspond to individuals who are first authors, and dark blue dots correspond to the other author(s). This visualisation should not to be interpreted as sets of in-groups/out-groups. It ignores past/future VSS co-authorships, casual collaborations, professional collaborations outside of VSS, and likely has inaccuracies due to the way authors’ names are analysed (see after the break for more). I am intrigued by the “scholarly social network” and this visualization is just one piece of a very incomplete puzzle.

Read More

Backpack and Canon T3i lost/stolen in Frankfurt (Main) Hauptbahnhof

I had a red and black The North Face backpack/Rucksack taken from a train in Frankfurt, Germany this past Monday, so I’m posting this online with the hope, however remote, to contact the individual(s) who removed the bag from the train and to see if they can contact me to return it. It contained my DSLR camera, lenses, and a number of personal keepsakes that have really hurt to lose.

Lost/Stolen The North Face Hot Shot Backpack

Here is a short run-down of what happened: On Monday, December 29th, 2014, I went down to the Frankfurt central train station (Hauptbahnhof) with my wife and friends to go ice skating at the Eissporthalle Frankfurt. We took a Deutsche Bahn (DB) train from Giessen, Germany to Frankfurt, Germany, departing at 3:22 PM and
 arriving at 4:02 PM. At the beginning of the trip, I placed my backpack on the 
luggage rack above the seat. About 10 minutes after exiting the train, after having taken an S-Bahn train to Hauptwache, I realized I did not have my bag. I immediately took another S-Bahn back to Frankfurt Hbf, ran up to the train platform, and found my train still waiting at the track (total time from departing the train to returning was approximately 20 minutes). I quickly searched the train because it was about to leave to head northward, but the backpack was gone.

I immediately notified the DB lost property office (Fundbüro) and made a 
claim. I also notified the police but will need to wait 1 week before I can officially file a police report (which I plan on doing on Monday if the bag has not been found).

Unfortunately, I don’t know how much identifying information was in the backpack (it did not contain any IDs), but in the future, I will make sure to include contact information on the camera to help the person who finds my things to reach out to me, if this were to ever happen again.

Read More

Calories as a function of alcohol in popular beers

In the USA, a standard drink is defined as including 0.6 fluid ounce (18 mL or 14 g) of ethanol (see Alcohol equivalence), meaning that a “standard” 12 oz beer has about 5% ABV. However, beers vary quite a bit in their alcohol content as well as their caloric content, so it seems reasonable to ask: If I have a beer with a given ABV, approximately how many calories does it have?

While browsing the web, I found a table listing the calories in a number of beers and thought it would be interesting to visualize using Python and plot.ly. It is a simple visualization, but one I find neat. Without further adieu:

Each blue point on the plot is a beer from the beer100.com domestic and international tables — feel free to explore the plot with your mouse. As you can see, unsurprisingly, as a beer’s alcohol content increases, so do the number of calories. Fitting a linear regression to the data, we see that a linear trend fits quite well: f(x) = (28.2)*x + (8.25), where x is the beer’s ABV (in percent). This means that if a beer has an alcoholic content of 5%, we can expect it to have approximately 150 calories (149.25 as predicted by the fit). However, there is quite a bit of variability between different beers of the same ABV. For example, Bud Ice Light and Kronenbourg Imported Dark Beer (whose label is a bit ambiguous, but I am assuming may be Kronenbourg 1664 Brune) are both 5% ABV, but have 115 and 163 calories per 12 oz, respectively.

Read More

Full Moon – December 6, 2014

Last night there was a great full moon, so I tried to capture it with my DSLR, a Canon T3i (which is discontinued, replaced as of today with the T5i), and a Tamron 18-250mm F/3.5-6.3 Macro lens.

To capture it, I setup a tripod inside, facing out an (admittedly) dirty window, disabled the len’s optical stabilization, turned on the T3i’s 3x digital crop zoom, and composed the shot. Only post-processing was to speed up the captured clip because the original was ~10 minutes long, shifting the movie to vertically center the moon’s precession, and adding an ambient background track. I’m impressed with what I was able to capture with such an inexpensive lens.