Added scanner updates

Signed-off-by: James Ketrenos <james_gitlab@ketrenos.com>
This commit is contained in:
James Ketrenos 2020-01-05 19:54:30 -08:00
parent 78ab17acd8
commit 189a355033
3 changed files with 58 additions and 7 deletions

9
scanner/Makefile Normal file
View File

@ -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

11
scanner/README.md Normal file
View File

@ -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
```

View File

@ -4,6 +4,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
//#include <sqlite3.h>
typedef struct Face { typedef struct Face {
long double descriptor[128]; long double descriptor[128];
@ -104,24 +105,54 @@ int main(int argc, char *argv[]) {
len++; len++;
pLink = pLink->next; pLink = pLink->next;
} }
printf("DELETE FROM facedistances;\n");
printf("BEGIN TRANSACTION;\n");
/* Allocate storage for all distances */
pLink = pChain; pLink = pChain;
while (pLink) { while (pLink) {
pLink->distances = (long double *)malloc(sizeof(long double) * len); 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; Face *pTarget = pChain;
while (pTarget) { while (pTarget) {
if (pTarget == pLink) { if (targetIndex == sourceIndex) {
pLink->distances[index] = 0.0; pLink->distances[targetIndex] = 0.0;
pTarget->distances[sourceIndex] = 0.0;
} else { } else {
pLink->distances[index] = euclideanDistance(pLink->descriptor, pTarget->descriptor); if (pLink->distances[targetIndex] == 0.0) {
if (pLink->distances[index] < 0.4) { pLink->distances[targetIndex] =
printf("%Lf: %5d -> %5d\n", pLink->distances[index], pLink->faceId, pTarget->faceId); 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; pTarget = pTarget->next;
targetIndex++;
} }
pLink = pLink->next; 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; return 0;
} }