Javascript Tensorflow.js批量加载和调整图像大小
你知道如何达到与之相同的效果吗 在node.js下的tensorflow.js中?我看不出如何加载子文件夹中的图像,调整它们的大小,并将它们转换为张量 本教程是关于图像分类的,我们有两个文件夹/标签:猫和狗,在两个子文件夹“training”和“validation”中 如有任何帮助,将不胜感激。文件夹结构:Javascript Tensorflow.js批量加载和调整图像大小,javascript,node.js,classification,tensorflow.js,Javascript,Node.js,Classification,Tensorflow.js,你知道如何达到与之相同的效果吗 在node.js下的tensorflow.js中?我看不出如何加载子文件夹中的图像,调整它们的大小,并将它们转换为张量 本教程是关于图像分类的,我们有两个文件夹/标签:猫和狗,在两个子文件夹“training”和“validation”中 如有任何帮助,将不胜感激。文件夹结构: 资料 训练 猫 狗 验证 猫 狗 脚本成功地扫描了“数据”目录及其子文件夹,调整了图像大小,将它们保存在“已调整大小”目录的相应文件夹中,并返回带有“标签”和“路径”
- 训练
- 猫
- 狗
- 验证
- 猫
- 狗
脚本成功地扫描了“数据”目录及其子文件夹,调整了图像大小,将它们保存在“已调整大小”目录的相应文件夹中,并返回带有“标签”和“路径”的“图像”数组
如何将此数据加载并传递到tensorflow.js?文件夹结构:
- 训练
- 猫
- 狗
- 验证
- 猫
- 狗
脚本成功地扫描了“数据”目录及其子文件夹,调整了图像大小,将它们保存在“已调整大小”目录的相应文件夹中,并返回带有“标签”和“路径”的“图像”数组
如何将这些数据加载并传递到tensorflow.js?目前还没有像python中那样在nodejs中创建数据管道的包。你可以自己写,这里有一些包@edkeveked-比如我自己的
超音速燃烧冲压发动机。然后必须将数据加载到tensorflow.js。我可以帮上忙,但我们需要从一些可测试的例子开始——如果你给我指一个回购协议——我很乐意去看看。@Edkevek Yep,我可以看到,如果我们能为node.js开发人员实现类似的数据管道,那就太好了。@MichałKapracki这是一个git,我修改了脚本以存储带有标签和目录的图像。@HamzSider我将在周末对此进行研究。:)目前还没有像python中那样在nodejs中创建数据管道的包。你可以自己写,这里有一些包@edkeveked-比如我自己的超音速燃烧冲压发动机。然后必须将数据加载到tensorflow.js。我可以帮上忙,但我们需要从一些可测试的例子开始——如果你给我指一个回购协议——我很乐意去看看。@Edkevek Yep,我可以看到,如果我们能为node.js开发人员实现类似的数据管道,那就太好了。@MichałKapracki这是一个git,我修改了脚本以存储带有标签和目录的图像。@HamzSider我将在周末对此进行研究。:)请参阅本文暂停将图像数据集加载到tensorflow.js中–请参阅本文暂停将图像数据集加载到tensorflow.js中–
let path = require('path');
let fs = require('fs');
let sd = require('scandirectory');
let sharp = require('sharp');
// params
const IMG_HEIGHT = 150
const IMG_WIDTH = 150
const options = {}
let uniq_labels = []
let images = []
// let images_tensor = {}
const data_path = path.join(__dirname, '../data/');
const resized_path = path.join(__dirname, '../resized/');
// resize images
sd(data_path, options, scanDirCb);
function scanDirCb(err, list, tree) {
let labels = []
if (err) {
console.log('Unable to scan directory: ' + err);
return
} else {
// loop
Object.entries(tree).forEach(([folder, label]) => {
// create sub folder
if (!fs.existsSync(resized_path + folder)) {
fs.mkdirSync(resized_path + folder);
}
Object.entries(label).forEach(([label_name, content]) => {
// new image
let new_image = {
"label": label_name
};
// save labels
labels.push(label_name);
if (!fs.existsSync(resized_path + folder + '/' + label_name)) {
fs.mkdirSync(resized_path + folder + '/' + label_name);
}
// saving images
for (let image in content) {
if (content.hasOwnProperty(image)) {
// console.log(`Resizing image: ${image}`)
// save image path
new_image.path = resized_path + folder + '/' + label_name + '/' + image;
sharp(path.join(data_path + folder + '/' + label_name, '/' + image))
.resize(IMG_HEIGHT, IMG_WIDTH)
.jpeg({
quality: 90
}).toFile(path.join(resized_path + folder + '/' + label_name, '/' + image));
images.push(new_image)
}
}
});
});
};
// remove dublicate labels
uniq_labels = [...new Set(labels)];
// console.log(images)
// results:
// { label: 'cats',
// path: '/Users/mac/MachineLearning/cats-dogs/resized/train/cats/cat.999.jpg'
// }, {
// label: 'cats',
// path: '/Users/mac/MachineLearning/cats-dogs/resized/train/cats/cat.999.jpg'
// } ...more lines
}