浮世絵の重複画像について

ukiyoe-train-imgs.npz / ukiyoe-test-imgs.npz共に重複画像が存在しました。 それら重複画像をどうやって調べたかまた各自で再現できるよう下記コードに記します。

import numpy as np
from PIL import Image
from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
from pathlib import Path
dataset_path = Path("/content/drive/My Drive/competition/ProbSpace/ukiyoe")
list(dataset_path.glob("*"))
[PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/ukiyoe-train-imgs.npz'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/ukiyoe-test-imgs.npz'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/ukiyoe-train-labels.npz'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/eda.ipynb'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/submit.csv'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/label_counts.png'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/ukiyoe.ipynb'),
 PosixPath('/content/drive/My Drive/competition/ProbSpace/ukiyoe/duplicate_images.ipynb')]
train_image_path = dataset_path / "ukiyoe-train-imgs.npz"
train_label_path = dataset_path / "ukiyoe-train-labels.npz"
test_image_path = dataset_path / "ukiyoe-test-imgs.npz"
Y_train = np.load(train_label_path)["arr_0"].astype(np.int)
X_train = np.load(train_image_path)["arr_0"].astype(np.float)
test = np.load(test_image_path)["arr_0"].astype(np.float)
X_train = X_train / 255.0
test = test / 255.0

GoogleColabで動作させる場合ここでKernelの再起動を促されるので再起動してください。 再起動後、再起動前に初期化した変数等はすべてクリアされているのでこちらのJupyterNotebooksの先頭から再度セルを実行し直してください。

ただし注意点として下記pipインストールは再起動後のセル実行ではスキップするようにしてください。

# https://github.com/idealo/imagededup
!pip install imagededup
train_path = Path("train_images")
test_path = Path("test_images")

if not train_path.exists():
    train_path.mkdir()
if not test_path.exists():
    test_path.mkdir()
num_classes = 10
for label in range(num_classes):
    label_index = np.where(Y_train == label)[0]
    for idx, data in enumerate(X_train[label_index]):
        image_path = train_path / "{}_{}.jpg".format(label, idx)
        Image.fromarray(np.uint8(data * 255)).save(image_path)

画像の重複を見つけるためにPHashというアルゴリズムを用いていますが一例でPHashを用いているだけでDHash/AHashなどでも重複は見つけられると思います。各自で別のアルゴリズムを試してみてください。

またしきい値もデフォルト値にしていますがこれも各自で調整してみてください。

詳細はhttps://github.com/idealo/imagededupを参照してください。

from imagededup.methods import PHash
phasher = PHash()
encodings = phasher.encode_images(image_dir=str(train_path))
duplicates = phasher.find_duplicates(encoding_map=encodings)
Start: Calculating hashes...
100%|██████████| 3158/3158 [00:11<00:00, 278.30it/s]
End: Calculating hashes!
Start: Evaluating hamming distances for getting duplicates
Start: Retrieving duplicates using BKTree algorithm
100%|██████████| 3158/3158 [05:11<00:00, 10.14it/s]
End: Retrieving duplicates using BKTree algorithm
End: Evaluating hamming distances for getting duplicates

以下で重複画像を表示しています。こちらは訓練画像(ukiyoe-train-imgs.npz)について重複を探しています。比較の仕方として0-9までのラベルがついた画像全て混ぜたディレクトリを作り、その中で重複がないか探しています。

from imagededup.utils import plot_duplicates
plot_duplicates(image_dir=str(train_path), 
                duplicate_map=duplicates, 
                filename='0_0.jpg')
/usr/local/lib/python3.6/dist-packages/imagededup/utils/plotter.py:66: UserWarning: tight_layout : falling back to Agg renderer
  gs.tight_layout(fig)

重複であると判断した画像のファイル名一覧を表示しています。ファイル名は{label}_{index}.jpgというフォーマットになっています。

for k, v in duplicates.items():
    if v:
        print(k, v)
8_126.jpg ['8_128.jpg']
8_125.jpg ['7_48.jpg', '8_140.jpg']
3_167.jpg ['3_168.jpg']
0_6.jpg ['0_339.jpg', '0_586.jpg']
1_487.jpg ['1_590.jpg']
1_93.jpg ['1_205.jpg', '1_534.jpg']
1_119.jpg ['1_308.jpg']
0_255.jpg ['0_423.jpg', '0_329.jpg']
3_163.jpg ['3_187.jpg']
6_108.jpg ['6_237.jpg']
1_597.jpg ['1_517.jpg', '1_368.jpg']
8_57.jpg ['8_12.jpg']
1_636.jpg ['1_351.jpg']
1_231.jpg ['1_475.jpg']
0_229.jpg ['0_463.jpg']
4_275.jpg ['4_284.jpg']
6_354.jpg ['6_298.jpg']
4_280.jpg ['4_125.jpg']
3_213.jpg ['7_6.jpg']
0_456.jpg ['0_325.jpg', '0_500.jpg']
6_84.jpg ['6_291.jpg', '6_13.jpg', '1_133.jpg']
4_276.jpg ['4_366.jpg']
6_218.jpg ['6_321.jpg', '6_366.jpg']
6_235.jpg ['6_221.jpg', '6_124.jpg', '6_389.jpg', '6_337.jpg', '6_86.jpg']
0_147.jpg ['0_247.jpg']
5_169.jpg ['5_44.jpg']
0_335.jpg ['0_196.jpg']
0_500.jpg ['0_325.jpg', '0_456.jpg']
1_139.jpg ['1_232.jpg']
6_21.jpg ['6_299.jpg']
0_230.jpg ['0_468.jpg']
1_589.jpg ['1_217.jpg', '1_343.jpg', '1_473.jpg']
4_292.jpg ['4_303.jpg']
8_62.jpg ['8_97.jpg']
7_48.jpg ['8_125.jpg']
4_232.jpg ['4_254.jpg']
0_346.jpg ['0_326.jpg']
0_262.jpg ['0_533.jpg']
4_347.jpg ['4_108.jpg']
0_418.jpg ['0_439.jpg']
4_32.jpg ['4_46.jpg']
4_67.jpg ['4_132.jpg']
1_13.jpg ['1_204.jpg', '1_291.jpg']
0_348.jpg ['0_428.jpg', '0_465.jpg']
0_560.jpg ['0_19.jpg']
7_50.jpg ['7_33.jpg']
4_224.jpg ['4_155.jpg', '4_169.jpg']
1_205.jpg ['1_93.jpg']
4_104.jpg ['4_269.jpg']
8_102.jpg ['8_135.jpg']
4_78.jpg ['4_362.jpg']
1_342.jpg ['1_0.jpg']
4_345.jpg ['4_263.jpg']
0_9.jpg ['0_357.jpg']
0_516.jpg ['0_212.jpg']
0_519.jpg ['1_320.jpg']
0_461.jpg ['0_450.jpg']
1_451.jpg ['1_263.jpg']
1_221.jpg ['1_157.jpg']
6_233.jpg ['6_225.jpg']
1_567.jpg ['1_370.jpg']
2_80.jpg ['0_96.jpg']
1_263.jpg ['1_451.jpg']
1_232.jpg ['1_139.jpg']
6_141.jpg ['6_337.jpg']
0_324.jpg ['0_466.jpg']
1_360.jpg ['1_257.jpg']
0_109.jpg ['0_554.jpg']
0_406.jpg ['0_45.jpg']
1_618.jpg ['1_42.jpg', '1_573.jpg', '1_563.jpg']
1_61.jpg ['1_323.jpg']
4_12.jpg ['4_297.jpg']
3_70.jpg ['3_131.jpg']
6_337.jpg ['6_235.jpg', '6_141.jpg']
4_362.jpg ['4_78.jpg']
1_413.jpg ['0_86.jpg']
6_327.jpg ['6_39.jpg']
4_83.jpg ['4_160.jpg']
0_475.jpg ['0_448.jpg', '0_546.jpg']
0_403.jpg ['0_393.jpg']
1_291.jpg ['1_204.jpg', '1_13.jpg']
4_160.jpg ['4_83.jpg']
0_371.jpg ['0_359.jpg']
1_233.jpg ['0_86.jpg']
0_517.jpg ['0_521.jpg']
1_264.jpg ['1_381.jpg']
3_54.jpg ['3_210.jpg']
6_170.jpg ['6_121.jpg']
5_44.jpg ['5_169.jpg']
0_441.jpg ['0_610.jpg']
1_189.jpg ['3_214.jpg']
1_533.jpg ['1_173.jpg']
1_4.jpg ['1_283.jpg']
6_159.jpg ['6_120.jpg']
0_588.jpg ['0_368.jpg']
0_323.jpg ['0_545.jpg']
8_128.jpg ['8_126.jpg']
3_40.jpg ['3_1.jpg']
4_358.jpg ['4_234.jpg']
4_270.jpg ['4_158.jpg']
7_33.jpg ['7_50.jpg']
4_0.jpg ['4_69.jpg', '4_306.jpg']
4_269.jpg ['4_104.jpg']
1_245.jpg ['1_514.jpg', '1_524.jpg']
4_366.jpg ['4_276.jpg']
0_359.jpg ['0_371.jpg']
0_247.jpg ['0_147.jpg']
4_306.jpg ['4_69.jpg', '4_0.jpg']
0_83.jpg ['0_55.jpg']
0_149.jpg ['0_508.jpg']
6_255.jpg ['6_173.jpg']
1_201.jpg ['6_48.jpg']
2_295.jpg ['2_42.jpg']
0_615.jpg ['0_55.jpg']
0_545.jpg ['0_323.jpg']
0_326.jpg ['0_346.jpg']
5_121.jpg ['5_107.jpg']
0_5.jpg ['0_584.jpg']
4_63.jpg ['4_314.jpg']
0_428.jpg ['0_348.jpg', '0_465.jpg']
6_209.jpg ['6_48.jpg']
0_212.jpg ['0_516.jpg']
0_96.jpg ['2_80.jpg']
0_325.jpg ['0_500.jpg', '0_456.jpg']
4_291.jpg ['4_80.jpg']
0_550.jpg ['0_479.jpg']
0_339.jpg ['0_586.jpg', '0_6.jpg']
6_76.jpg ['6_222.jpg']
0_265.jpg ['0_58.jpg']
1_560.jpg ['1_283.jpg', '1_622.jpg']
4_190.jpg ['4_48.jpg']
1_7.jpg ['1_478.jpg']
0_307.jpg ['0_427.jpg']
0_521.jpg ['0_517.jpg']
4_98.jpg ['4_320.jpg']
4_176.jpg ['4_58.jpg']
4_284.jpg ['4_154.jpg', '4_275.jpg']
0_304.jpg ['0_108.jpg']
0_310.jpg ['0_180.jpg']
1_73.jpg ['1_356.jpg']
0_55.jpg ['0_83.jpg', '0_615.jpg']
1_123.jpg ['1_552.jpg']
4_169.jpg ['4_224.jpg', '4_155.jpg']
1_56.jpg ['1_5.jpg']
0_123.jpg ['0_133.jpg']
1_42.jpg ['1_563.jpg', '1_618.jpg', '1_573.jpg']
0_137.jpg ['0_496.jpg', '0_48.jpg']
0_135.jpg ['0_118.jpg']
1_107.jpg ['1_36.jpg']
1_427.jpg ['7_131.jpg']
4_252.jpg ['4_203.jpg']
6_373.jpg ['6_32.jpg', '6_165.jpg']
0_317.jpg ['0_506.jpg']
6_32.jpg ['6_373.jpg']
2_42.jpg ['2_295.jpg']
0_423.jpg ['0_255.jpg']
9_55.jpg ['0_352.jpg']
6_120.jpg ['6_159.jpg']
1_478.jpg ['1_7.jpg']
0_352.jpg ['9_55.jpg']
8_134.jpg ['8_52.jpg']
3_181.jpg ['1_410.jpg']
4_303.jpg ['4_292.jpg']
6_152.jpg ['0_11.jpg']
4_77.jpg ['4_127.jpg']
1_406.jpg ['1_130.jpg']
1_392.jpg ['1_3.jpg']
4_254.jpg ['4_232.jpg']
0_118.jpg ['0_135.jpg']
6_95.jpg ['6_263.jpg', '6_304.jpg']
0_496.jpg ['0_137.jpg', '0_48.jpg']
8_98.jpg ['8_147.jpg']
0_292.jpg ['0_266.jpg']
0_539.jpg ['0_410.jpg']
6_263.jpg ['6_95.jpg', '6_304.jpg', '6_291.jpg', '6_107.jpg']
0_62.jpg ['0_0.jpg']
3_120.jpg ['3_195.jpg']
1_36.jpg ['1_107.jpg']
7_131.jpg ['1_427.jpg']
6_13.jpg ['6_291.jpg', '6_84.jpg']
0_554.jpg ['0_109.jpg']
2_128.jpg ['2_277.jpg']
1_308.jpg ['1_119.jpg']
0_448.jpg ['0_475.jpg', '0_546.jpg']
4_48.jpg ['4_190.jpg']
1_401.jpg ['1_526.jpg']
6_62.jpg ['6_9.jpg']
4_46.jpg ['4_32.jpg']
4_168.jpg ['4_110.jpg']
0_546.jpg ['0_475.jpg', '0_448.jpg']
6_379.jpg ['6_158.jpg']
5_107.jpg ['5_121.jpg']
0_393.jpg ['0_403.jpg']
1_534.jpg ['1_93.jpg']
4_80.jpg ['4_291.jpg']
1_514.jpg ['1_245.jpg', '1_524.jpg']
1_473.jpg ['1_589.jpg']
1_283.jpg ['1_465.jpg', '1_560.jpg', '1_622.jpg', '1_4.jpg']
1_414.jpg ['1_153.jpg', '1_225.jpg']
0_574.jpg ['0_446.jpg']
0_266.jpg ['0_292.jpg']
0_282.jpg ['0_501.jpg']
1_610.jpg ['1_472.jpg']
0_264.jpg ['0_306.jpg']
1_320.jpg ['0_519.jpg']
0_0.jpg ['0_62.jpg']
0_86.jpg ['1_233.jpg', '1_413.jpg']
6_9.jpg ['6_62.jpg']
5_88.jpg ['5_30.jpg']
1_5.jpg ['1_56.jpg']
9_79.jpg ['0_538.jpg']
0_573.jpg ['0_218.jpg']
6_321.jpg ['6_218.jpg']
1_410.jpg ['3_101.jpg', '3_181.jpg']
0_58.jpg ['0_265.jpg']
1_377.jpg ['1_125.jpg']
3_11.jpg ['3_208.jpg']
0_466.jpg ['0_324.jpg']
6_366.jpg ['6_218.jpg', '6_302.jpg']
6_75.jpg ['6_385.jpg', '6_124.jpg']
1_111.jpg ['1_145.jpg']
0_506.jpg ['0_317.jpg']
0_48.jpg ['0_496.jpg', '0_137.jpg']
8_52.jpg ['8_134.jpg']
1_180.jpg ['1_280.jpg']
6_48.jpg ['1_201.jpg', '6_209.jpg']
3_35.jpg ['3_178.jpg']
6_225.jpg ['6_233.jpg']
5_109.jpg ['1_411.jpg']
1_504.jpg ['1_267.jpg']
6_385.jpg ['6_75.jpg']
0_501.jpg ['0_282.jpg']
3_1.jpg ['3_40.jpg']
1_99.jpg ['1_641.jpg']
6_158.jpg ['6_379.jpg']
1_667.jpg ['1_3.jpg']
0_358.jpg ['0_526.jpg']
3_195.jpg ['3_120.jpg', '1_163.jpg']
3_208.jpg ['3_11.jpg']
2_218.jpg ['2_203.jpg']
6_187.jpg ['6_228.jpg', '6_144.jpg']
4_132.jpg ['4_67.jpg']
3_210.jpg ['3_54.jpg']
0_168.jpg ['0_125.jpg']
0_494.jpg ['0_178.jpg']
4_92.jpg ['0_387.jpg']
1_204.jpg ['1_291.jpg', '1_13.jpg']
0_298.jpg ['0_367.jpg']
6_222.jpg ['6_76.jpg']
0_415.jpg ['0_562.jpg']
1_368.jpg ['1_597.jpg', '1_517.jpg']
0_306.jpg ['0_264.jpg']
0_59.jpg ['0_481.jpg']
0_481.jpg ['0_59.jpg']
6_165.jpg ['6_373.jpg']
6_140.jpg ['6_173.jpg']
4_314.jpg ['4_63.jpg']
6_205.jpg ['6_318.jpg']
1_491.jpg ['1_259.jpg']
0_252.jpg ['0_445.jpg']
4_335.jpg ['4_216.jpg']
0_613.jpg ['0_387.jpg']
6_228.jpg ['6_187.jpg']
0_412.jpg ['0_188.jpg']
3_178.jpg ['3_35.jpg']
0_108.jpg ['0_304.jpg', '0_534.jpg']
1_552.jpg ['1_123.jpg']
1_659.jpg ['1_580.jpg']
6_173.jpg ['6_140.jpg', '6_255.jpg']
0_439.jpg ['0_418.jpg']
0_610.jpg ['0_441.jpg']
3_131.jpg ['3_70.jpg']
8_132.jpg ['8_115.jpg']
0_368.jpg ['0_588.jpg']
1_434.jpg ['1_280.jpg']
1_622.jpg ['1_560.jpg', '1_283.jpg']
6_291.jpg ['6_13.jpg', '6_84.jpg', '6_263.jpg']
1_517.jpg ['1_597.jpg', '1_368.jpg']
0_533.jpg ['0_262.jpg']
8_140.jpg ['8_125.jpg']
0_367.jpg ['0_298.jpg']
0_221.jpg ['0_617.jpg']
4_206.jpg ['4_50.jpg', '4_279.jpg']
0_596.jpg ['0_538.jpg']
1_356.jpg ['1_73.jpg']
1_225.jpg ['1_414.jpg']
3_101.jpg ['1_410.jpg']
6_389.jpg ['6_235.jpg']
0_445.jpg ['0_252.jpg']
4_203.jpg ['4_252.jpg']
0_387.jpg ['0_613.jpg', '4_92.jpg']
0_224.jpg ['0_510.jpg']
0_45.jpg ['0_406.jpg']
4_349.jpg ['4_152.jpg']
6_318.jpg ['6_205.jpg']
1_130.jpg ['1_406.jpg']
8_110.jpg ['2_269.jpg']
8_135.jpg ['8_102.jpg']
2_269.jpg ['8_110.jpg']
1_0.jpg ['1_342.jpg']
1_173.jpg ['1_533.jpg']
0_375.jpg ['0_515.jpg']
0_468.jpg ['0_230.jpg']
0_541.jpg ['0_236.jpg']
7_6.jpg ['3_213.jpg']
0_508.jpg ['0_149.jpg']
1_267.jpg ['1_504.jpg']
0_617.jpg ['0_221.jpg']
4_108.jpg ['4_347.jpg']
1_125.jpg ['1_377.jpg']
1_103.jpg ['2_289.jpg']
0_472.jpg ['0_111.jpg']
6_221.jpg ['6_235.jpg']
4_297.jpg ['4_12.jpg']
1_475.jpg ['1_231.jpg']
5_30.jpg ['5_88.jpg']
0_463.jpg ['0_229.jpg']
2_289.jpg ['1_103.jpg']
4_127.jpg ['4_77.jpg']
1_471.jpg ['1_172.jpg']
0_19.jpg ['0_560.jpg']
6_121.jpg ['6_170.jpg']
0_427.jpg ['0_307.jpg']
1_133.jpg ['6_84.jpg']
1_259.jpg ['1_491.jpg']
4_69.jpg ['4_306.jpg', '4_0.jpg']
0_125.jpg ['0_168.jpg']
4_155.jpg ['4_224.jpg', '4_169.jpg']
0_538.jpg ['0_596.jpg', '9_79.jpg']
4_158.jpg ['4_270.jpg']
6_304.jpg ['6_263.jpg', '6_95.jpg']
1_641.jpg ['1_99.jpg', '1_540.jpg']
1_145.jpg ['1_111.jpg']
1_383.jpg ['1_503.jpg']
0_357.jpg ['0_9.jpg']
0_196.jpg ['0_335.jpg']
0_562.jpg ['0_415.jpg']
0_465.jpg ['0_348.jpg', '0_428.jpg']
3_89.jpg ['7_26.jpg']
8_115.jpg ['8_132.jpg']
0_584.jpg ['0_5.jpg']
4_73.jpg ['4_76.jpg']
6_131.jpg ['6_298.jpg']
6_237.jpg ['6_108.jpg']
0_134.jpg ['0_299.jpg']
4_125.jpg ['4_280.jpg']
4_152.jpg ['4_349.jpg']
0_586.jpg ['0_339.jpg', '0_6.jpg']
6_107.jpg ['6_263.jpg']
1_540.jpg ['1_641.jpg']
4_234.jpg ['4_358.jpg']
8_147.jpg ['8_98.jpg']
1_343.jpg ['1_217.jpg', '1_589.jpg']
1_257.jpg ['1_360.jpg']
1_465.jpg ['1_283.jpg']
0_236.jpg ['0_541.jpg']
0_157.jpg ['0_284.jpg']
1_526.jpg ['1_401.jpg']
0_299.jpg ['0_134.jpg']
1_460.jpg ['1_172.jpg']
1_163.jpg ['3_195.jpg']
0_293.jpg ['8_93.jpg']
1_573.jpg ['1_563.jpg', '1_618.jpg', '1_42.jpg']
0_526.jpg ['0_358.jpg']
6_144.jpg ['6_187.jpg']
0_39.jpg ['0_43.jpg']
6_39.jpg ['6_327.jpg']
4_263.jpg ['4_345.jpg']
1_280.jpg ['1_434.jpg', '1_180.jpg']
8_71.jpg ['8_161.jpg']
8_97.jpg ['8_62.jpg']
0_188.jpg ['0_412.jpg']
0_283.jpg ['0_133.jpg']
0_410.jpg ['0_539.jpg']
4_58.jpg ['4_176.jpg']
0_111.jpg ['0_472.jpg']
8_161.jpg ['8_71.jpg']
7_26.jpg ['3_89.jpg']
3_214.jpg ['1_189.jpg']
0_180.jpg ['0_310.jpg']
1_323.jpg ['1_61.jpg']
4_76.jpg ['4_73.jpg']
2_203.jpg ['2_218.jpg']
1_157.jpg ['1_221.jpg']
0_329.jpg ['0_255.jpg']
0_43.jpg ['0_39.jpg']
4_154.jpg ['4_284.jpg']
4_110.jpg ['4_168.jpg']
1_370.jpg ['1_567.jpg']
0_11.jpg ['6_152.jpg']
0_133.jpg ['0_123.jpg', '0_283.jpg']
2_277.jpg ['2_128.jpg']
1_503.jpg ['1_383.jpg']
1_3.jpg ['1_392.jpg', '1_667.jpg']
6_86.jpg ['6_235.jpg']
1_563.jpg ['1_573.jpg', '1_42.jpg', '1_618.jpg']
4_216.jpg ['4_335.jpg']
0_450.jpg ['0_461.jpg']
3_168.jpg ['3_167.jpg']
0_534.jpg ['0_108.jpg']
1_580.jpg ['1_659.jpg']
4_320.jpg ['4_98.jpg']
3_187.jpg ['3_163.jpg']
6_124.jpg ['6_235.jpg', '6_75.jpg']
0_510.jpg ['0_224.jpg']
4_50.jpg ['4_206.jpg', '4_279.jpg']
0_479.jpg ['0_550.jpg']
6_298.jpg ['6_354.jpg', '6_131.jpg']
1_217.jpg ['1_343.jpg', '1_589.jpg']
0_515.jpg ['0_375.jpg']
0_284.jpg ['0_157.jpg']
1_472.jpg ['1_610.jpg']
1_381.jpg ['1_264.jpg']
4_279.jpg ['4_50.jpg', '4_206.jpg']
6_299.jpg ['6_21.jpg']
1_411.jpg ['5_109.jpg']
8_12.jpg ['8_57.jpg']
0_178.jpg ['0_494.jpg']
1_524.jpg ['1_514.jpg', '1_245.jpg']
0_446.jpg ['0_574.jpg']
0_218.jpg ['0_573.jpg']
8_93.jpg ['0_293.jpg']
1_590.jpg ['1_487.jpg']
6_302.jpg ['6_366.jpg']
1_172.jpg ['1_460.jpg', '1_471.jpg']
1_153.jpg ['1_414.jpg']
1_351.jpg ['1_636.jpg']
for idx, data in enumerate(test):
    Image.fromarray(np.uint8(data*255)).save(test_path / "{}.jpg".format(idx))

こちらはテスト画像(ukiyoe-test-imgs.npz)について重複を探しています。

encodings = phasher.encode_images(image_dir=str(test_path))
duplicates = phasher.find_duplicates(encoding_map=encodings)
Start: Calculating hashes...
100%|██████████| 397/397 [00:02<00:00, 183.28it/s]
End: Calculating hashes!
Start: Evaluating hamming distances for getting duplicates
Start: Retrieving duplicates using BKTree algorithm
100%|██████████| 397/397 [00:04<00:00, 87.79it/s]
End: Retrieving duplicates using BKTree algorithm
End: Evaluating hamming distances for getting duplicates
for k, v in duplicates.items():
    if v:
        print(k, v)
349.jpg ['1.jpg']
1.jpg ['349.jpg']
229.jpg ['197.jpg']
197.jpg ['229.jpg']
plot_duplicates(image_dir=str(test_path), 
                duplicate_map=duplicates, 
                filename='1.jpg')
/usr/local/lib/python3.6/dist-packages/imagededup/utils/plotter.py:66: UserWarning: tight_layout : falling back to Agg renderer
  gs.tight_layout(fig)
plot_duplicates(image_dir=str(test_path), 
                duplicate_map=duplicates, 
                filename='197.jpg')
/usr/local/lib/python3.6/dist-packages/imagededup/utils/plotter.py:66: UserWarning: tight_layout : falling back to Agg renderer
  gs.tight_layout(fig)

添付データ

  • duplicate_images.ipynb?X-Amz-Expires=10800&X-Amz-Date=20241221T123441Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIP7GCBGMWPMZ42PQ
  • Favicon
    new user
    コメントするには 新規登録 もしくは ログイン が必要です。