Library usage ------------- Database know nothing about location of the source images, records addressed only by some numeric id. Example usage: #include #include #include #include #include int main() { simdb_t *sdb = NULL; simdb_search_t search; simdb_match_t *match = NULL; const char *path = "/tmp/test.sdb"; const char *files[] = { "/path/to/file/a.jpg", "/path/to/file/b.png", "/path/to/file/c.bmp", }; int ret = 0; if (!simdb_create(path)) { perror("can't create test database"); return 1; } sdb = simdb_open(path, SIMDB_FLAG_WRITE | SIMDB_FLAG_LOCKNB, &ret); if (!sdb) { fprintf(stderr, "can't open test simdb: %s\n", simdb_error(ret)); return 1; } for (int i = 0; i < sizeof(files); i++) { ret = simdb_record_add(sdb, i, files[i], 0); if (ret < 0) { fprintf(stderr, "can't add file from %s: %s\n", files[i], simdb_error(ret)); } } simdb_search_init(&search); /* tune search parameters */ search.d_ratio = 0.1; /* max difference in ratio -- 10% */ search.d_bitmap = 0.08; /* max difference in ratio -- 8% */ /* compare given file against database */ const char *sample = "/path/to/file/d.png"; simdb_search_file(sdb, &search, sample); /* show search results if any */ if (search.found) { printf("file %s similar to:\n", sample); for (int i = 0; i < search.found; i++) { match = &search.matches[i]; printf("- %s (%d %%)\n", files[match->num], (int) match->d_bitmap * 100); } /* free search results */ simdb_search_free(&search); } simdb_close(sdb); unlink(path); return 0; } You may build this example with next command: gcc -Wall -std=c99 -O0 -pedantic -lsimdb -o simdb-usage-test test.c