我正在进行签名验证,我想使用Keras / OpenCV / PIL做很多事情,但找不到相关信息。我已经使用加载了数据集文件夹Keras.preprocessing.image_dataset_from_directory
,现在需要:
图片示例:
因为我在Keras工作,所以我想到了使用它的功能,但找不到任何功能。如何在已加载的数据集中自动裁剪/提取签名?关于图像增强,我应该在此图像预处理阶段执行此操作,还是在我使用的CNN模型中实现此功能?我是图像处理和Keras的新手。
另外,由于将整个训练文件夹作为数据集加载,因此标签为“正版”和“伪造”。但是,一个人有多个真实的和伪造的签名,并且有多个人。如何分割数据?
如下组织目录
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的人员。你可以尝试将所有伪图像放在一个类目录中,并将所有真实图像放在另一个类目录中并对其进行训练,但我怀疑在一般情况下,从假冒中分辨出真假效果不佳。
你好!感谢您的回答!它解决了我的大部分疑问。为了使它能够从真实签名中找到虚假签名,我将提供一些真实签名和另一个人的虚假签名作为输入。