On 1/12/18 3:29 AM, Heiko Bauke wrote:

At the moment, one can collect images by specific criteria.  Some of these criteria can be expressed by numerical values, e.g., focal length or ISO.  It would be nice if one could collect not only images taken at a specific ISO, let's say, but also taken at an ISO larger/greater than a specific given value.

In a next step one could add the possibility to collect images of a width/height larger/smaller than a specific value.  The possibility to collect images of a particular size only would not be powerful enough for most use cases.  There are too many possible sizes.

A really, really good solution to this would be to dump all available image metadata into a full-text indexer and allow the user to filter using queries.  Done right, it gives users immense flexibility and saves having to write and maintain application-specific filtering infrastructure.

I've used Lucene to do similar things on several projects over the last 15 years, some indexing tens of millions of records, with a great deal of success.  It's fast, reasonably lightweight, solid, makes a very small index relative to the corpus if you're not using it as a document store and has a query language that can't be beat. Lucene supports fields, which would allow search on specific attributes in addition to free-form, Google-style queries.  For example, a query to pull images taken with a Nikon at ISOs up to 1000 taken during 2017, have five stars, contain the word "green" (maybe as a result of having the green label applied) and not containing the word "wedding" anywhere would look like this:

        maker:nikon iso:[0 TO 1000] createdate:[20170101 TO 20171231] stars:5 green -wedding

The down side is that Lucene is written in Java, and I'm pretty sure the last thing anyone wants to do is try to integrate it directly with DT.  There are ports to other languages (including C++, which could be wrapped in C) that are binary-compatible with the Java version's indexes and, of course, other indexers that could be considered.  It would also be possible to integrate with an external program that takes insertions, updates, deletions and queries from DT and returns results via a pipe or socket.  The presence or absence of the program could be used a switch for whether or not DT enables its indexing features.

I don't have the spare cycles to take on the complete project, but I would be more than happy to provide guidance on how to organize the index, evaluate indexing software and do enough at-the-edges integration work to make the indexing work easy to incorporate into DT.

--Mark

___________________________________________________________________________
darktable developer mailing list
to unsubscribe send a mail to darktable-dev+unsubscr...@lists.darktable.org

Reply via email to