Warm tip: This article is reproduced from serverfault.com, please click

python 3.x-Keras:加载数据集并自动裁剪图像的相关区域

(python 3.x - Keras: Load dataset and autocrop relevant area of image)

发布于 2020-12-01 19:43:49

我正在进行签名验证,我想使用Keras / OpenCV / PIL做很多事情,但找不到相关信息。我已经使用加载了数据集文件夹Keras.preprocessing.image_dataset_from_directory,现在需要:

  • 从存储在数据集中的图像中裁剪签名。可能有矩形边框(或边框的一侧),并且边框像素在所有图像中都不相同。
  • 调整图像大小,并注意增加签名中的内容。

图片示例:

第一张图片

第二张图片

因为我在Keras工作,所以我想到了使用它的功能,但找不到任何功能。如何在已加载的数据集中自动裁剪/提取签名?关于图像增强,我应该在此图像预处理阶段执行此操作,还是在我使用的CNN模型中实现此功能?我是图像处理和Keras的新手。

另外,由于将整个训练文件夹作为数据集加载,因此标签为“正版”和“伪造”。但是,一个人有多个真实的和伪造的签名,并且有多个人。如何分割数据?

Questioner
Aryan
Viewed
0
Gerry P 2020-12-02 11:19:07

如下组织目录

main_dir
-train_dir
``person1_fake_dir
```person1 fake image
```person1 fake image
---etc
``person1_real_dir
---person1 real image
---person1 real image
--- etc
--person2_fake_dir
--- person2 fake image
--- person2 fake image
--- etc
--person2_real_dir
---person2 real image
---person2 real image
---etc
.
.
.
--personN_fake_dir
---personN fake image
---personN fake image
---etc
--personN_real_dir
---personN real image
---personN real image
--- etc

-test_dir
same structure as train_dir but put test images here

-valid_dir
same structure as train_dir but put validation images here

如果你有N个人,那么你将有2个XN班级

然后,你可以使用tf.keras.preprocessing.image.ImageDataGenerator()。flow_from_directory()输入数据。文档在这里。你不必担心裁剪图像,只需将流中的图像大小设置为(256,256)。下面的代码显示了你需要的其余代码

data_gen=tf.keras.preprocessing.image.ImageDataGenerator(resize=1/255)
train_gen=data_gen.flow_from_directory(train_dir, target_size=(224,224), color-mode='grayscale')
valid_gen=data_gen.flow_from_directory(valid_dir, target_size=(224,224), color-mode='grayscale', shuffle=False)
test_gen=data_gen.flow_from_directory(test_dir, target_size=(224,224), color-mode='grayscale', shuffle=False)
model.compile(optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.CategoricalCrossentropy(), metrics='accuracy')
history=model.fit(train_gen, epochs=20, verbose=1)
accuracy=model.evaluate (test_gen)[1]*100
print ('Model accuracy is ', accuracy)

请注意,在一般情况下,你的模型将无法辨别真伪。它应该适用于从1到N的人员。你可以尝试将所有伪图像放在一个类目录中,并将所有真实图像放在另一个类目录中并对其进行训练,但我怀疑在一般情况下,从假冒中分辨出真假效果不佳。