static void processFile()

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();
    }
  }