Notes on the Shotwell Faces tool
Introducing myself
My name is Valentín Barros Puertas and I’m Spanish. I’m 24 years old and I study Degree in Computer Engineering in Santiago de Compostela. I also work as a freelance developer and I’ve studying (self-taught) programing and other computer-related stuff since I was 16.
My principal programing language is PHP, but I’m also comfortable with C, Vala and some others. I know a bit of GTK+ (using it from C, Python and Vala) and I’ve also played with Cairo and Clutter (but I’ve never done anything big with those because at this time my main occupations are work and the studies. Maybe the most representative application I’ve wrote is a very simple image viewer/organizer written in Python with PyGTK) it has a people tagging functionality similar to the one in Facebook. Writing it I have improved my skills with Python and I’ve learned how to create custom GTK widgets — and the most representative work I did is my last Google Summer of Code participation in Shotwell.
Short description: Last GSoC I started a new feature to Shotwell called “Faces tool”, which consist in the ability to mark that a certain person is in a certain photo, and where is her/his face —i.e. the same you can do, for example, in Facebook. And even my GSoC project was successful, the tool isn’t included in Shotwell stable because it lacks some interesting functionality.
Upcoming Shotwell Faces Tool Integration Milestones
August 6, 2012
Restore Faces UI from last year’s Summer of Code project and update the user interface for Gtk+ 3.0. Use new Gtk+ 3.0 feature like CSS-based styling to solve some layout and focus problems that affected the UI as it stood at the end of last summer’s coding period.
August 13, 2012
Implement face detection in Shotwell. The Faces palette will contain a “Detect” button. When pressed, the the external, C++ face recognition program will be spawned and the filesystem location of the image in view will be passed to it. Shotwell will display a “Wait” dialog. When the external face recognition program completes detection, it will output a series of rectangles. These rectangles will be parsed by Shotwell and introduced as faces into the current view with names like “Unknown Face 1”, “Unknown Face 2”, etc.
August 27, 2012
Implement face recognition in Shotwell. When a face rectangle is detected by the face detection helper program as described in the previous milestone, attempt to recognize the identity of the face. We will only attempt to recognize faces for which we have enough training data available.
Abstract
Last GSoC I started a new feature to Shotwell called “Faces tool”, which consist in the ability to mark that a certain person is in a certain photo, and where is her/his face — i.e. the same you can do, for example, in Facebook. And even my GSoC project was successful, the tool isn’t included in Shotwell stable because it lacks some interesting functionality.
So, the goal of this project is pretty simply: Get a really useful state to Shotwell Faces tool.
Motivation
I think that this feature would benefit Shotwell (and thus GNOME) because it is a very simply to understand feature (you can do the same thing in a well known social network) and a very powerfull organization tool.
I’d like to do this project because I started it last year and I want to finish it to bring to Shotwell the functionality I imagined in the first place and I couldn’t completely implement last year. Moreover, I have thousands of photos and I found that Shotwell is a great program to manage them, but I’d like so much to have this functionality and the ability to tag people in my photos in a very comfortable way.
That’s also the reason for my interest in improving GNOME: I use it and I like all the GNOME stack — one of my areas of interest for future studying is Vala and some of the GNOME-related libraries that can be used with that language (e.g. Clutter, GStreamer, Grilo and GTK+ in general).
I think I am the best person to work on this project because I started it last year, so I already know how to get into the Shotwell’s code and, even more, how to dive into the code I wrote myself.
Also, I like Shotwell because I will use it to organize my entire collection of photos when it has some functionalities I miss — the most important for me: Faces.
Proposal timeline
NOTE: This is only a proposal, as you can see it in my project sent to Google Summer of Code if you want to know how I’m doing, you have links to my weekly reports in the section below.
April 24 - May 21 [Community bonding period]:
- Reading Shotwell documentation again.
- Re-familiarizing myself with Shotwell internals.
- Get used to Vala coding again.
May 21 - June 17
- Try to get some bugs closed — improving my already sent patchs if necessary:
Faces UI can be confusing → [http://redmine.yorba.org/issues/3910 #3910]
Faces name box should be active after drawing it → [http://redmine.yorba.org/issues/3916 #3916]
Show directory of all faces when I select Faces in sidebar → [http://redmine.yorba.org/issues/3939 #3939]
Photos don’t recover their Faces when restored from trash → [http://redmine.yorba.org/issues/3991 #3991]
Face name entry broken (in Oneiric) → [http://redmine.yorba.org/issues/3920 #3920]
Don’t display face names in fixed-width font → [http://redmine.yorba.org/issues/3933 #3933]
Tags and Faces do not update in saved searches → [http://redmine.yorba.org/issues/3908 #3908]
Autocomplete for Faces tool → [http://redmine.yorba.org/issues/3897 #3897]
June 18 - July 1
Face detection using OpenCV → [http://redmine.yorba.org/issues/1702 #1702]
- Keyboard control. The application must be able to jump between autodetected faces using tab key, like when filling forms.
July 2 - July 13
- Time to rigorous testing and bug fixes.
Mid-term evaluations
July 14 - July 29
- Publishing to Flickr.
- Publishing to Facebook → #3934
July 30 - August 5
- Documentation.
- Time to rigorous testing and bug fixes.
A Buffer of two weeks has been kept for any unpredictable delay [If I get enough time, I would start to implement (or at least investigate — and document such investigation) face recognition]
Weekly Reports
Shotwell Faces Tool: Weekly Report 01 & 02 → [http://sanva.net/blog/106 http://sanva.net/blog/106]/ [ Spanish translation [http://sanva.net/blog/107 http://sanva.net/blog/107]/ ]
Shotwell Faces Tool: Weekly Report 03 & 04 → [http://sanva.net/blog/108 http://sanva.net/blog/108]/ [ Spanish translation [http://sanva.net/blog/109 http://sanva.net/blog/109]/ ]
Shotwell Faces Tool: Weekly Report 05 & 06 → [http://sanva.net/blog/110 http://sanva.net/blog/110]/ [ Spanish translation [http://sanva.net/blog/111 http://sanva.net/blog/111]/ ]
Shotwell Faces Tool: Weekly Report 07 & 08 → [http://sanva.net/blog/112 http://sanva.net/blog/112]/ [ Spanish translation [http://sanva.net/blog/113 http://sanva.net/blog/113]/ ]
Shotwell Faces Tool: Weekly Report 09, 10 & 11 → [http://sanva.net/blog/114 http://sanva.net/blog/114]/ [ Spanish translation [http://sanva.net/blog/115 http://sanva.net/blog/115]/ ]
Shotwell Faces Tool: Weekly Report 12 & 13 (Final GSoC report) → [http://sanva.net/blog/116 http://sanva.net/blog/116]/ [ Spanish translation [http://sanva.net/blog/117 http://sanva.net/blog/117]/ ]
Repositories
Simple face detection and recognition programs using OpenCV → https://github.com/Sanva/facedetect
Clone of the Shotwell repository to work during GSoC → https://github.com/Sanva/shotwell-gsoc/tree/faces-tool
More info
Compiling Shotwell with Faces support in Ubuntu 12.10 → http://sanva.net/blog/118 http://sanva.net/blog/118