in pdq/java/src/main/java/pdqhashing/tools/PDQPhotoHasherTool.java [163:312]
static void processFile(
PDQHasher pdqHasher,
String filename,
boolean doPDQHash,
boolean doPDQDih,
boolean doPDQDihAcross,
boolean doDetailedOutput,
boolean doTimings,
boolean keepGoingAfterErrors,
Context context)
{
Hash256 hash = null;
HashAndQuality hashAndQuality = null;
HashesAndQuality dihedralBag = null;
int quality;
int norm;
int delta;
PDQHasher.HashingMetadata hashingMetadata = new PDQHasher.HashingMetadata ();
if (doPDQHash) {
try {
hashAndQuality = pdqHasher.fromFile(filename, hashingMetadata);
} catch (IOException e) {
context.hadError = true;
System.err.printf("%s: could not read image file %s.\n", PROGNAME, filename);
if (keepGoingAfterErrors) {
return;
} else {
System.exit(1);
}
}
hash = hashAndQuality.getHash();
quality = hashAndQuality.getQuality();
norm = hash.hammingNorm();
delta = (context.numPDQHash == 1)
? 0
: hash.hammingDistance(context.pdqHashPrev);
if (!doDetailedOutput) {
System.out.printf("%s,%d,%s\n", hash.toString(), quality, filename);
} else {
System.out.printf("hash=%s", hash.toString());
System.out.printf(",norm=%d", norm);
System.out.printf(",delta=%d", delta);
System.out.printf(",quality=%d", quality);
if (doTimings) {
System.out.printf(",dims=%d", hashingMetadata.imageHeightTimesWidth);
System.out.printf(",readSeconds=%.6f", hashingMetadata.readSeconds);
System.out.printf(",hashSeconds=%.6f", hashingMetadata.hashSeconds);
}
System.out.printf(",filename=%s\n", filename);
}
context.pdqHashPrev = hash;
}
if (doPDQDih) {
try {
dihedralBag = pdqHasher.dihedralFromFile(
filename,
hashingMetadata,
PDQHasher.PDQ_DO_DIH_ALL
);
} catch (IOException e) {
context.hadError = true;
System.err.printf("%s: could not read image file %s.\n", PROGNAME, filename);
if (keepGoingAfterErrors) {
return;
} else {
System.exit(1);
}
}
if (!doDetailedOutput) {
if (doPDQDihAcross) {
System.out.printf("%s,%s,%s,%s,%s,%s,%s,%s,%d,%s\n",
dihedralBag.hash.toString(),
dihedralBag.hashRotate90.toString(),
dihedralBag.hashRotate180.toString(),
dihedralBag.hashRotate270.toString(),
dihedralBag.hashFlipX.toString(),
dihedralBag.hashFlipY.toString(),
dihedralBag.hashFlipPlus1.toString(),
dihedralBag.hashFlipMinus1.toString(),
dihedralBag.quality,
filename);
} else {
int bquality = dihedralBag.quality;
System.out.printf("%s,%d,%s\n", dihedralBag.hash.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashRotate90.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashRotate180.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashRotate270.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashFlipX.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashFlipY.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashFlipPlus1.toString(), bquality, filename);
System.out.printf("%s,%d,%s\n", dihedralBag.hashFlipMinus1.toString(), bquality, filename);
}
} else {
if (doPDQDihAcross) {
System.out.printf("hash=%s", dihedralBag.hash.toString());
System.out.printf(",quality=%d", dihedralBag.quality);
if (doTimings) {
System.out.printf(",dims=%d", hashingMetadata.imageHeightTimesWidth);
System.out.printf(",readSeconds=%.6f", hashingMetadata.readSeconds);
System.out.printf(",hashSeconds=%.6f", hashingMetadata.hashSeconds);
}
System.out.printf(",orig=%s", dihedralBag.hash.toString());
System.out.printf(",rot90=%s", dihedralBag.hashRotate90.toString());
System.out.printf(",rot180=%s", dihedralBag.hashRotate180.toString());
System.out.printf(",rot270=%s", dihedralBag.hashRotate270.toString());
System.out.printf(",flipx=%s", dihedralBag.hashFlipX.toString());
System.out.printf(",flipy=%s", dihedralBag.hashFlipY.toString());
System.out.printf(",flipp=%s", dihedralBag.hashFlipPlus1.toString());
System.out.printf(",flipm=%s", dihedralBag.hashFlipMinus1.toString());
System.out.printf(",filename=%s\n", filename);
} else {
System.out.printf("hash=%s", dihedralBag.hash.toString());
System.out.printf(",quality=%d", dihedralBag.quality);
if (doTimings) {
System.out.printf(",dims=%d", hashingMetadata.imageHeightTimesWidth);
System.out.printf(",readSeconds=%.6f", hashingMetadata.readSeconds);
System.out.printf(",hashSeconds=%.6f", hashingMetadata.hashSeconds);
}
System.out.printf(",filename=%s\n", filename);
System.out.printf("hash=%s,xform=orig,filename=%s\n",
dihedralBag.hash.toString(), filename);
System.out.printf("hash=%s,xform=rot90,filename=%s\n",
dihedralBag.hashRotate90.toString(), filename);
System.out.printf("hash=%s,xform=rot180,filename=%s\n",
dihedralBag.hashRotate180.toString(), filename);
System.out.printf("hash=%s,xform=rot270,filename=%s\n",
dihedralBag.hashRotate270.toString(), filename);
System.out.printf("hash=%s,xform=flipx,filename=%s\n",
dihedralBag.hashFlipX.toString(), filename);
System.out.printf("hash=%s,xform=flipy,filename=%s\n",
dihedralBag.hashFlipY.toString(), filename);
System.out.printf("hash=%s,xform=flipp,filename=%s\n",
dihedralBag.hashFlipPlus1.toString(), filename);
System.out.printf("hash=%s,xform=flipm,filename=%s\n",
dihedralBag.hashFlipMinus1.toString(), filename);
}
}
context.pdqHashPrev = dihedralBag.hash.clone();
}
}