This is the ideas page for Public Lab's Google Summer of Code program. Many are slightly out of date or have already been built! Please go ahead and edit these if you see things that need changing, as well as add your new ideas. For a quick flashback, see [our 2013 GSOC page](/wiki/gsoc-2013) and [2013 mentor & student proposals](/wiki/gsoc-2013-mentors-and-student-proposals) ###Who to contact with ideas/proposals * **[plots-gsoc]()** - the GSoC discussion list. You can sign up in the left sidebar of this page. If you have questions about a particular project, consider emailing the relevant topical lists for input: * **[grassrootsmapping](https://groups.google.com/group/grassrootsmapping)** - balloon and kite-mapping specific list. Lots of healthy overlap with **publiclaboratory** (784 members as of 2/21) * **[plots-spectrometry](https://groups.google.com/group/plots-spectrometry)** - spectrometry and spectral analysis discussion list. Lots of healthy overlap with **publiclaboratory** (439 members as of 2/21) * **[plots-infrared](https://groups.google.com/group/plots-infrared)** - near-infrared and vegetation monitoring discussion list. Lots of healthy overlap with **publiclaboratory** (18 members as of 1/13) * **[laboratoriopublico](https://groups.google.com/group/laboratoriopublico)** - la lista de correo en castellano -- inactivo por ahora ##High priorities See more detail on these in the full ideas descriptions below; or add a more fleshed-out description if one is lacking. **Spectral Workbench** * the macros system * the module which extracts the spectral data from an image * auto-calibration **MapKnitter** * Re-implementation of image warping as a Leaflet plugin * reading of image GPS (and tilt) EXIF data for initial image placement **Infragram** * User interface overhaul * Offline functionality (via HTML5 manifest) for in-the-field use * Commenting, tagging, and RSS feeds for images * OpenID integration with PublicLab.org ##Spectrometry Projects _Related to the SpectralWorkbench.org open source spectral analysis platform_ ** Links:** https://spectralworkbench.org, http://github.com/jywarren/spectral-workbench **GPLv3** ###Project: automated spectrometer calibration **Description:** Currently, in SpectralWorkbench.org, users manually click on known features in a fluorescent lightbulb spectrum to [calibrate their spectrometer](http://publiclab.org/wiki/spectral-workbench-calibration). Much better, easier, and more precise might be an automated way to pattern-match/recognize the mercury spectrum (such as this: ) and to auto-calibrate the spectrometer. The [Capture interface](https://spectralworkbench.org/capture) could automatically recognize a mercury spectrum whenever you pointed the spectrometer at one, and prompt you to recalibrate. This could be developed in pure JavaScript using the [Spectral Workbench API](/wiki/spectral-workbench-api) **List:** plots-spectrometry **Links:** * http://publiclab.org/wiki/spectral-workbench-calibration * http://publiclab.org/wiki/spectrometer * https://github.com/jywarren/spectral-workbench/issues/45 **Prerequisites:** JavaScript, optional Ruby on Rails **Difficulty level:** medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: import open spectral databases### **Description:** Determine which spectral databases can be used in an open source manner (such as perhaps the HITRAN and ASTER datasets) and import them, tagging them with their source and relevant metadata. Focus on near-infrared, visible, and ultraviolet ranges. **List:** plots-spectrometry ** Links:** https://github.com/jywarren/spectral-workbench/issues/54 **Prerequisites:** Ruby/Rails, familiarity with open data licensing and database parsing/scripting **Difficulty level:** easy **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: find closest matched spectra from database### **Description:** Given a spectrum from http://SpectralWorkbench.org, develop a search function for similar spectra. **List:** plots-spectrometry **Links:** https://github.com/jywarren/spectral-workbench/issues/53 **Prerequisites:** Ruby/Rails, some familiarity with (spectral) pattern matching **Difficulty level:** hard **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: Baseline Macro to reset a baseline light source### **Description:** Use the JavaScript [Spectral Workbench API](/wiki/spectral-workbench-api) and possibly some Ruby on Rails to develop a way to zero out baseline noise and input light source in the [Spectral Workbench capture interface](https://spectralworkbench.org/capture). This could simply involve storing the existing spectrum as an array and subtracting it from any new readings. It might involve a callback in the SpectralWorkbench API to filter incoming data from the device using a given function. **List:** plots-spectrometry **Links:** https://github.com/jywarren/spectral-workbench/issues/119 https://github.com/jywarren/spectral-workbench/issues/61 https://github.com/jywarren/spectral-workbench/issues/44 **Prerequisites:** JavaScript, Ruby on Rails **Difficulty level:** Easy **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: Spectral Workbench API v1.0 **Description:** Expand and refine the API to a version 1.0, cleaning up existing functions and providing functions and good documentation for basic spectrometry analysis, data manipulation and visualization tools for the spectral data matching/search. Bonus: install an in-line JavaScript editor to make macro editing easier at https://spectralworkbench.org/macros **List:** plots-spectrometry **Links:** * https://github.com/jywarren/spectral-workbench/issues?labels=matching&page=1&state=open * [Spectral Workbench API](/wiki/spectral-workbench-api) * https://spectralworkbench.org/macros **Prerequisites:** **Difficulty level:** Easy **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: offline version of SpectralWorkbench### **Description:** We need an offline version of spectralworkbench.org, , hopefully based on our HTML/JavaScript code. **Links:** https://github.com/jywarren/spectral-workbench/issues/74 https://github.com/jywarren/spectral-workbench/issues/73 **List:** plots-spectrometry **Prerequisites:** **Difficulty level:** Medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: iOS version of SpectralWorkbench in PhoneGap### **Description:** The current mobile version is web-based, and only runs on Opera for Android right now. But it is pretty nice: https://spectralworkbench.org/capture. The ideal is to wrap this already-working system in a native app so that any future interface changes can simply be pushed out on all platforms at once. **List:** plots-spectrometry **Links:** https://github.com/jywarren/spectral-workbench/issues/116 **Prerequisites:** PhoneGap, Cordova **Difficulty level:** Medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: Mobile interface and cross-mobile-browser compatibility for SpectralWorkbench.org **Description:** A fuller mobile implementation of SpectralWorkbench would be a great, and might share a lot with the iOS project above or simply be a complete refit of the web-based version (https://spectralworkbench.org/capture, visit on Android device), since webcam APIs are now supported on versions of Chrome, Opera, and Firefox on Android. **List:** plots-spectrometry **Links:** https://github.com/jywarren/spectral-workbench/issues/205 **Prerequisites:** JavaScript, Bootstrap, HTML/CSS, some Ruby on Rails, familiarity with getUserMedia() webcam API **Difficulty level:** Medium **Mentor:** Jeff Warren (jeff@publiclab.org) ------- ##Mapmaking Projects ###MapMill Offline: cross-platform aerial image sorting app **Description:** a desktop app that helps you sort big batches of aerial images quickly, with built-in filters: Upon getting images from a camera: * you'd plug the SD card in and drag the images into the app * it'd plot the images' filesizes to help you find those with the sharpest focus * it could do analysis to find if many images display the same region redundantly * it'd offer to upload the images to MapKnitter for you as a batch, or copy them to a folder to share with other folks by SD card **List:** grassrootsmapping, publiclaboratory **Prerequisites:** desktop app design, or offline manifests for webapps **Difficulty level:** easy-medium ###Project: Android Aerial Acquisition App (Completed!) **Description:** Android app that does continuous image shooting, taking a photograph automatically every 5-10 seconds, for attaching to a kite or balloon to take aerial photos. * using accelerometer to take images only when the camera is not swinging (we usually hang the camera from a kite or balloon so pictures can be motion-blurry) * auto-discard (or at least mark) blurry images * auto-emailing previews of pictures to a given address so they can be viewed while the Android phone is in the air (and so that the camera can be found if it's lost: email could have GPS coords) * tilt/compass data embedded as EXIF tags * Bonus feature: KML output for the image overlay locations. * Capture gps and other sensor data (yaw, pitch, roll, etc.) and simultaneously drive an interface to trigger a pair of Canon cameras in synch using CHDK. * Offer user the choice to also, or instead, just capture this data and trigger the phone camera at specified intervals. * If can, write all the location and sensor data to the smartphone photo EXIFs. If not, at least write the basic gps data to the EXIF for each photo and capture all of it in a timestamped CVS file.This will allow the user to post-process the images, location and sensor data based on matching the timestamp of each image and the corresponding data point. * Consider ways to accommodate and record additional sensor inputs such as temperature and barometric pressure sensor. See (http://publiclaboratory.org/notes/cfastie/10-8-2012/flight-temperature#comment-1635) * CHDK on the cameras has remote triggering enabled, so the pair shoot on the second pulse. Being able to vary the interval between pulses could be useful to allow for camera model variations in time to respond to first pulse and then to save image, especially if shooting in RAW format (very big files). For example: wait a specified interval (maybe 2 seconds) after the first pulse and then signal the cameras to shoot, but then wait a longer specified interval (maybe 10-15 seconds more) to allow time to save image before sending the next pair of signals. * http://www.palentier.com/ is relevant since it uses gps information and a set of photos to automatically display them on Google Earth. However, most geotagged images don't capture heading, which is necessary for auto-orienting the images. Info that'd be useful just before you launch: * wind direction for your location (and/or a link to a website that shows it for any location) * a link to our website for getting the materials to do a balloon or kite flight http://publiclab.org/wiki/balloon-mapping For after a flight (these are easy; just text and links): * a link to MapKnitter.org and basic outline of how to make your images into a map **List:** grassrootsmapping, publiclaboratory **Prerequisites:** Processing and/or Java, Android **Difficulty level:** easy-medium **Mentor:** Stewart Long (stewart@publiclaboratory.org), Jeff Warren (jeff@publiclaboratory.org) **MapKnitter open source image rectification and GIS** **Goal:** spectrum pattern matching to identify oil contamination **List:** publiclaboratory, grassrootsmapping **Links:** http://github.com/jywarren/mapknitter * GPLv3 ###Project: optimize and improve high-resolution stitching interface### **Description:** This could take the form of several ideas/approaches -- from [caching the warped images as dataURLs in the canvas element](https://github.com/jywarren/mapknitter/issues/13) to speed up interactivity, to [implementing the Client Zoom feature in the most recent OpenLayers](https://github.com/jywarren/mapknitter/issues/75). **List:** publiclaboratory, grassrootsmapping **Prerequisites:** JavaScript/Prototype/Canvas element, Ruby/Rails **Difficulty level: ** medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org), Stewart Long (stewart@publiclaboratory.org) ###Project: Clashifier open source image classification. abstract Classifiers class to make different classifiers more pluggable### **Goal:** identify wetlands species and/or oil contamination **List:** publiclaboratory, grassrootsmapping, plots-infrared **Links:** http://github.com/jywarren/clashifier * GPLv3 **Description:** Some structural changes are necessary to allow people to develop and add new classifiers to the system. It should be as easy as having a "classifier.classify()" function which accepts an RGB (or more colors) pixel value, or perhaps an image and x,y coordinates. Some of this work has been started in the /lib/ directory, but it will require some architectural changes. **Links:** https://github.com/jywarren/clashifier/issues/4 https://github.com/jywarren/clashifier/issues/3 **Prerequisites:** Ruby/Rails, some familiarity with classification algorithms like naive bayes or cartesian, or anything else **Difficulty level:** medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org) ###Project: add annotations layer to Mapknitter### **Description:** This could include adding polygonal overlays to highlight regions, adding notes, and linking discussions/data directly into maps. **List:** publiclaboratory, grassrootsmapping **Links:** https://github.com/jywarren/spectral-workbench/issues/89 **Prerequisites:** JavaScript/Prototype/Canvas element, Ruby/Rails **Difficulty level:** medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org), Stewart Long (stewart@publiclaboratory.org) ###Project: georeferencing in Mapknitter without base image data### **Description:** investigate and implement different methods of georeferencing images besides overlaying on existing aerial data. GPS, ground-target, or EXIF-embedded data could all be used. **List:** publiclaboratory, grassrootsmapping **Links:** https://github.com/jywarren/mapknitter/issues/64 https://github.com/jywarren/mapknitter/issues/10 https://github.com/jywarren/mapknitter/issues/65 https://github.com/jywarren/mapknitter/issues/73 **Prerequisites:** JavaScript/Prototype/Canvas element, Ruby/Rails **Difficulty level:** medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org), Stewart Long (stewart@publiclaboratory.org), Ned Horning (horning@amnh.org) ###Project: Align and analyze overlapping visible and near infra-red images### **Description:** A utility to process large numbers (dozens or hundreds) of pairs of visible and infra-red images, including those taken by users with matched visible and IR cameras. The utility could automate a subset of the processes below. It could be based on the experimental multispectral features of MapKnitter, with a focus on analysis and NDVI. Such a utility could greatly improve the quality, consistency, and usefulness of the NDVI maps made by Grassroots Mappers. **List:** publiclaboratory, plots-infrared * Align pairs of overlapping visible and near IR photographs * Crop the result to the area of overlap * Compute NDVI for each pixel of the layered image and produce a third layer of the NDVI values. * Modify the assignment of colors to the NDVI values * Downsample the NDVI layer by averaging (e.g., blocks of 4 to 256 pixels) to account for alignment error * Interactively display the NDVI value for mouse-selected pixels or polygons * Output the NDVI layer (e.g., as jpeg) for aligning with adjacent overlapping images (e.g., MapKnitter) or stitching into a seamless aerial image (e.g., MS ICE, Gigapan Stitch) **Prerequisites:** JavaScript/Prototype/Canvas element, Ruby/Rails, GDAL and/or ImageMagick/RMagick, familiarity with remote sensing would be nice **Difficulty level:** hard **Mentor:** Arlene Ducao (arlduc@mit.edu), Jeff Warren (jeff@publiclaboratory.org), Ned Horning (horning@amnh.org) ###Project: ability to upload just an image without making a map (drag-drop or from a phone), and it auto-geocodes and starts a map for you (prototype for MapKnitter.org 2.0)### **Description:** A simpler version of MapKnitter.org which streamlines the process of turning an aerial image into a georectified map -- this could use all the existing backend systems of MapKnitter, but would dramatically simplify the process of making a map out of a single image. It could even be done from a mobile phone. **List:** publiclaboratory, grassrootsmapping **Links:** https://github.com/jywarren/mapknitter/, https://github.com/jywarren/mapknitter/issues/73 **Prerequisites:** Ruby/Ruby on Rails, JavaScript **Difficulty level:** Medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org), Stewart Long (stewart@publiclaboratory.org) ###Project: implementing rubbersheeting in Leaflet, as a first step to porting the whole interface to Leaflet### **Description:** MapKnitter.org is built on lots of old, legacy code and uses OpenLayers for it's editing interface. We would like to port the editor (and the image-distortion interface) to Leaflet, and the first step would be to port the image distortion class (and matrix class) currently used in MapKnitter into a new Leaflet plugin. **List:** publiclaboratory, grassrootsmapping **Links:** https://github.com/jywarren/mapknitter/, https://github.com/jywarren/mapknitter/tree/master/public/cartagen/src/warper **Prerequisites:** Javascript **Difficulty level:** Medium **Mentor:** Jeff Warren (jeff@publiclaboratory.org), Stewart Long (stewart@publiclaboratory.org) ###Project: MapMill.org crowdsourced image sorting. Shift image storage to Amazon S3### **Description:** MapMill uses vast amounts of storage and we can't support large #s of uploads currently; this is better security and archiving too. Probably use paperclip gem in Rails along with jQuery Multiple File Upload: http://blueimp.github.io/jQuery-File-Upload/ So, batch upload with progress bars for each image. **List:** grassrootsmapping **Links:** http://github.com/jywarren/mapmill, https://github.com/jywarren/mapmill/issues/6 **Prerequisites:** Ruby on Rails, jQuery, Amazon S3 **Difficulty level:** Easy **Mentor:** Stewart Long (stewart@publiclaboratory.org), Jeff Warren (jeff@publiclaboratory.org) ###Improve warnings and provide alternatives when too many images to export a map with MapKnitter### **List:** grassrootsmapping **Description:** One approach could be to warn user the number of images is more than can be exported and offer capability to clone map so user can delete images reduce the number to an exportable number. Another could warn user maximum number of images has been reached and not allow additional ones to be uploaded. **Links:** TBD **Prerequisites:** JavaScript, Ruby on Rails **Difficulty level:** Easy **Mentor:** Stewart Long (stewart@publiclaboratory.org), Jeff Warren (jeff@publiclaboratory.org), Pat Coyle (pat@coyles.com) ------ ##Infrared Projects ###Project: Web service to composite infrared and visible images _Revised from "Update code to composite side-by-side video from a webcam"_ **Description:** Create a simple web service for people to upload 2 images -- one near-infrared and one visible -- which auto-aligns them and provides a composite image such as described on the [Near-infrared Camera page](/tool/near-infrared-camera) **List:** plots-infrared, publiclaboratory **Prerequisites:** web programming -- HTML/CSS and some server side system (Python, Ruby, PHP, etc), ImageMagick or another image handling library **Difficulty level:** easy **Mentor:** Craig Versek ( cversek@physics.umass.edu), Jeff Warren (jeff@publiclaboratory.org)