Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

iPhoto 2009 introduced face recognition. It will try and detect and recognise faces in photos that you import.

You can create a Smart Album to find all untagged faces in your Library using the following condition:

Face is unnamed

However, is it possible to create a Smart Album to find all untagged faces which iPhoto thinks it can recognise?

share|improve this question

The easiest way to accomplish tagging the untagged photos -- is to do it progressively. Here is how I do it.

Manually create "faces" for all the people who are important to you. Create at least 10 samples of each person. Go through the normal tagging process, but as you go, faces will undoubtedly recommend incorrect matches. This is to be expected. As opposed to double clicking and rejecting the incorrect possible match, control-click it and select "name". If you know who this person is, you can apply their pre-existing "faces" name at this point. Faces will even automatically create a new faces entry if this person does not exist in the database. This is just slightly more work than rejecting the incorrect match, but by naming it, you take it off the list of unknown matches, which lowers the number of outstanding faces to match, adds more face samples to the newly added person's confirmed recognitions list and culls the database on-the-fly. In my book, this equals tagging untagged photos as you go.

This does not guarantee that you will eventually name every person in every picture in iPhoto, but it does work extremely well -- since you know certain pictures have not come up as possible matches yet... and if you see a shot or a person you recognize -- even if they are a proposed match for someone else, use the opportunity to name them immediately and correctly -- which makes the whole recognition process work smoother -- one face at a time.

share|improve this answer

AppleScript would be one approach here. Since I don't have time to actually implement this right now I'll give an outline of what I'm imagining in case you or somebody else on here wants to take a crack at it. Or maybe there's a simpler solution:

Write a script that looks for untagged detected faces and creates an album (but not a smart album, unfortunately) with all of those pictures. It could delete the old version of the album before beginning so that it behaves mostly like a smart album, except you'll need to run the script to update it. It might be possible to set it up to automatically run on some trigger.

To make things complicated, iPhoto '09 doesn't expose the Faces feature through the AppleScript library. So you'll have to open the sqlite database within the library bundle and read that manually. Somebody has already done some of the work involved there and created a script for interacting with Faces.

But those scripts are parsing the faces that are already attached to a photo. We're interested in the potential matches. The faces.db sqlite database has a similar_faces table which appears to list all the unconfirmed faces that it has detected. You would want to select the image_key for all the rows in that table with ignored = 0.

There are sometimes multiple faces listed for a single face in a photo. Those possible matches show on the page for the face ("John Doe may also be in the photos below"). If you're only interested in faces that iPhoto is confidant enough in to suggest a name straight from the picture, then only select the rows from similar_faces with score greater than some threshold, 0.80 or something. You might also need to look up the seed_face_key in face_name to make sure that the strong match is to somebody that it already knows about, I only have two untagged faces to examine right now so I'm not sure.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .