From 189a355033515e36f2f86f305f823d7b020b4c48 Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Sun, 5 Jan 2020 19:54:30 -0800 Subject: [PATCH] Added scanner updates Signed-off-by: James Ketrenos --- scanner/Makefile | 9 +++++++ scanner/README.md | 11 +++++++++ scanner.c => scanner/scanner.c | 45 ++++++++++++++++++++++++++++------ 3 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 scanner/Makefile create mode 100644 scanner/README.md rename scanner.c => scanner/scanner.c (66%) diff --git a/scanner/Makefile b/scanner/Makefile new file mode 100644 index 0000000..d1b0397 --- /dev/null +++ b/scanner/Makefile @@ -0,0 +1,9 @@ +all: scanner + +ifeq ("$(wildcard /usr/include/sqlite3.h)","") + @echo "Install libsqlite3-dev" + @false +endif + +scanner: scanner.c + gcc -o scanner scanner.c -lm -lsqlite3 diff --git a/scanner/README.md b/scanner/README.md new file mode 100644 index 0000000..d4d614f --- /dev/null +++ b/scanner/README.md @@ -0,0 +1,11 @@ +# To use it... + +```bash +cd scanner +make +cd .. +scanner/scanner /multimedia/Pictures > sql +echo ".read sql" | sqlite3 db/photos.db +rm sql +``` + diff --git a/scanner.c b/scanner/scanner.c similarity index 66% rename from scanner.c rename to scanner/scanner.c index 14ab99e..d6d5075 100644 --- a/scanner.c +++ b/scanner/scanner.c @@ -4,6 +4,7 @@ #include #include #include +//#include typedef struct Face { long double descriptor[128]; @@ -104,24 +105,54 @@ int main(int argc, char *argv[]) { len++; pLink = pLink->next; } + + printf("DELETE FROM facedistances;\n"); + printf("BEGIN TRANSACTION;\n"); + + /* Allocate storage for all distances */ pLink = pChain; while (pLink) { pLink->distances = (long double *)malloc(sizeof(long double) * len); - int index = 0; + pLink = pLink->next; + } + + pLink = pChain; + int sourceIndex = 0; + while (pLink) { + int targetIndex = 0; Face *pTarget = pChain; while (pTarget) { - if (pTarget == pLink) { - pLink->distances[index] = 0.0; + if (targetIndex == sourceIndex) { + pLink->distances[targetIndex] = 0.0; + pTarget->distances[sourceIndex] = 0.0; } else { - pLink->distances[index] = euclideanDistance(pLink->descriptor, pTarget->descriptor); - if (pLink->distances[index] < 0.4) { - printf("%Lf: %5d -> %5d\n", pLink->distances[index], pLink->faceId, pTarget->faceId); + if (pLink->distances[targetIndex] == 0.0) { + pLink->distances[targetIndex] = + pTarget->distances[sourceIndex] = euclideanDistance(pLink->descriptor, pTarget->descriptor); + printf("INSERT INTO facedistances (face1Id,face2Id,distance) VALUES (%d,%d,%Lf);\n", + ((pLink->faceId < pTarget->faceId) ? pLink->faceId : pTarget->faceId), + ((pLink->faceId < pTarget->faceId) ? pTarget->faceId : pLink->faceId), + pLink->distances[targetIndex]); } } pTarget = pTarget->next; + targetIndex++; } pLink = pLink->next; + sourceIndex++; } - printf("%d faces.\n", len); + printf("COMMIT;\n"); +/* + sqlite3 *db; + sqlite3_stmt *res; + + int rc = sqlite3_open("db/photos.db", &db); + if (rc != SQLITE_OK) { + fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return 1; + } + sqlite3_close(db); +*/ return 0; } \ No newline at end of file