浮世絵作者予測

Open Review Competition

賞金: 150,000 参加チーム数: 147 終了まで: 55日

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

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
  • Favicon
    new user
    コメントするには 新規登録 もしくは ログイン が必要です。