diff --git a/datasets/raise/attribute_source_camera.py b/datasets/raise/attribute_source_camera.py index 340d6bd..def1d0c 100755 --- a/datasets/raise/attribute_source_camera.py +++ b/datasets/raise/attribute_source_camera.py @@ -24,7 +24,7 @@ PREDICT_ONLY_ON_WHOLE_TRAINING_SET = False setting = ','.join([escapeFilePath(imageCameraFolder) for imageCameraFolder in IMAGES_CAMERAS_FOLDER]) + f'_{DENOISER}' -imagesCamerasFileNames = {camera: os.listdir(imageCameraFolder) for camera, imageCameraFolder in IMAGES_CAMERAS_FOLDER.items()} +imagesCamerasFileNames = {camera: [imageCameraFile for imageCameraFile in os.listdir(imageCameraFolder) if imageCameraFile.endswith('.NEF') or imageCameraFile.endswith('.ARW')] for camera, imageCameraFolder in IMAGES_CAMERAS_FOLDER.items()} # Fix randomness for reproducibility. random.seed(0) # Randomize order to not have a bias (chronological for instance) when split to make training and testing sets. @@ -104,15 +104,20 @@ from utils import silentTqdm returnSingleColorChannelImage = lambda singleColorChannelImage, _minColor, _maxColor: singleColorChannelImage # Assume to have `{min,max}Color` hardcoded. -print('Load training images to memory') +# Can just load to memory `getSingleColorChannelImages`, see [Robust_image_source_identification_on_modern_smartphones/issues/62#issuecomment-1861](https://gitea.lemnoslife.com/Benjamin_Loison/Robust_image_source_identification_on_modern_smartphones/issues/62#issuecomment-1861). rescaleIfNeeded = rescaleRawImageForDenoiser cameraTrainingImages = {} -for cameraTrainingImageIndex in tqdm(range(numberOfTrainingImages), 'Camera training image index'): - for cameraIndex, camera in enumerate(tqdm(IMAGES_CAMERAS_FOLDER, 'Camera')): +for cameraTrainingImageIndex in tqdm(range(numberOfTrainingImages), 'Load to memory camera training image'): + for cameraIndex, camera in enumerate(IMAGES_CAMERAS_FOLDER): singleColorChannelImages = getSingleColorChannelImages(camera, cameraTrainingImageIndex) multipleColorsImage = getMultipleColorsImage(singleColorChannelImages) cameraTrainingImages[camera] = cameraTrainingImages.get(camera, []) + [multipleColorsImage] -print('Training images loaded to memory') + +singleColorChannelTestingImages = {camera: [] for camera in IMAGES_CAMERAS_FOLDER} +for camera in IMAGES_CAMERAS_FOLDER: + for cameraTestingImageIndex in tqdm(range(numberOfTestingImages), 'Load to memory camera testing image'): + singleColorChannelImages = getSingleColorChannelImages(camera, numberOfTrainingImages + cameraTestingImageIndex) + singleColorChannelTestingImages[camera] += [singleColorChannelImages] # 2 loops: # - the first one is about computing `{min,max}Color` @@ -128,7 +133,7 @@ for computeExtremes in tqdm(([True] if minColor is None or maxColor is None else for cameraTestingImageIndex in tqdm(range(numberOfTestingImages), 'Camera testing image index'): print(f'{camera=} {numberOfTrainingImages + cameraTestingImageIndex=}') - singleColorChannelImages = getSingleColorChannelImages(camera, numberOfTrainingImages + cameraTestingImageIndex) + singleColorChannelImages = singleColorChannelTestingImages[camera][cameraTestingImageIndex]#getSingleColorChannelImages(camera, numberOfTrainingImages + cameraTestingImageIndex) multipleColorsImage = getMultipleColorsImage(singleColorChannelImages) imagePrnuEstimateNpArray = getImagePrnuEstimateNpArray(singleColorChannelImages, multipleColorsImage, camera) @@ -171,7 +176,7 @@ for computeExtremes in tqdm(([True] if minColor is None or maxColor is None else if DENOISER != Denoiser.MEAN: cameraTestingImageNoise = cameraTestingImagesNoise[actualCamera][cameraTestingImageIndex] else: - singleColorChannelImages = getSingleColorChannelImages(camera, numberOfTrainingImages + cameraTestingImageIndex) + singleColorChannelImages = singleColorChannelTestingImages[camera][cameraTestingImageIndex]#getSingleColorChannelImages(camera, numberOfTrainingImages + cameraTestingImageIndex) multipleColorsImage = getMultipleColorsImage(singleColorChannelImages) cameraTestingImageNoise = getImagePrnuEstimateNpArray(singleColorChannelImages, multipleColorsImage, camera) diff --git a/datasets/raise/utils.py b/datasets/raise/utils.py index d38fdea..1250784 100644 --- a/datasets/raise/utils.py +++ b/datasets/raise/utils.py @@ -90,11 +90,9 @@ def isARawImage(imageFilePath): def getColorChannel(imageFilePath, color): if isARawImage(imageFilePath): - numpyFilePath = f'{imageFilePath}.npy' + numpyFilePath = f'{imageFilePath}.{color}.npy' if os.path.isfile(numpyFilePath): - imageNpArray = np.load(numpyFilePath, allow_pickle = True).item()#[color] - print(imageNpArray) - #exit(1) + imageNpArray = np.load(numpyFilePath) else: with rawpy.imread(imageFilePath) as raw: imageNpArray = getRawColorChannel(raw, color)