modelmakerlibrary 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,614 @@
1
+ from src.packages import torch, tsv, csv, json, pd, os, datasets, v2, DataLoader
2
+
3
+ class _FolderDataset(torch.utils.data.Dataset):
4
+ def __init__(self, path, model_type):
5
+ extensions = {
6
+ "text": {".txt"},
7
+ "video": {".mp4", ".mkv", ".avi", ".mov", ".webm", ".mpeg", ".mpg"},
8
+ "audio": {".wav", ".mp3", ".flac", ".ogg", ".m4a", ".aac"},
9
+ }[model_type]
10
+ self.path = path
11
+ self.model_type = model_type
12
+ self.classes = sorted(
13
+ name for name in os.listdir(path)
14
+ if os.path.isdir(os.path.join(path, name))
15
+ )
16
+ if not self.classes:
17
+ self.classes = [""]
18
+ self.class_to_idx = {name: index for index, name in enumerate(self.classes)}
19
+ self.samples = []
20
+ for class_name in self.classes:
21
+ class_path = os.path.join(path, class_name) if class_name else path
22
+ for root, _, files in os.walk(class_path):
23
+ for filename in files:
24
+ if os.path.splitext(filename)[1].lower() in extensions:
25
+ self.samples.append((os.path.join(root, filename), self.class_to_idx[class_name]))
26
+ self.samples.sort()
27
+
28
+ def __len__(self):
29
+ return len(self.samples)
30
+
31
+ def __getitem__(self, index):
32
+ path, label = self.samples[index]
33
+ if self.model_type == "text":
34
+ with open(path, encoding="utf-8") as file:
35
+ value = file.read()
36
+ else:
37
+ value = path
38
+ return value, torch.tensor(label)
39
+
40
+
41
+ class _TextDataset(torch.utils.data.Dataset):
42
+ def __init__(self, dataset_path):
43
+ supported_extensions = {".txt", ".json", ".csv", ".tsv"}
44
+ if os.path.isfile(dataset_path):
45
+ paths = [dataset_path]
46
+ root = os.path.dirname(dataset_path)
47
+ else:
48
+ root = dataset_path
49
+ paths = sorted(
50
+ os.path.join(directory, filename)
51
+ for directory, _, filenames in os.walk(root)
52
+ for filename in filenames
53
+ if os.path.splitext(filename)[1].lower() in supported_extensions
54
+ )
55
+
56
+ self.samples = []
57
+ self.classes = []
58
+ class_indices = {}
59
+ empty_files = []
60
+ for path in paths:
61
+ extension = os.path.splitext(path)[1].lower()
62
+ relative = os.path.relpath(path, root)
63
+ parent = os.path.dirname(relative)
64
+ label = parent.split(os.sep, 1)[0] if parent else ""
65
+
66
+ if os.path.getsize(path) == 0:
67
+ empty_files.append(path)
68
+ continue
69
+ if extension == ".txt":
70
+ with open(path, encoding="utf-8") as file:
71
+ text = file.read()
72
+ records = [(text, label)] if text.strip() else []
73
+ elif extension == ".json":
74
+ with open(path, encoding="utf-8") as file:
75
+ data = json.load(file)
76
+ if isinstance(data, dict):
77
+ data = data.get("data", [data])
78
+ if not isinstance(data, list):
79
+ raise ValueError(f"Expected a JSON object or list of text records in '{path}'.")
80
+ records = [
81
+ (item["text"], item.get("label", label))
82
+ for item in data
83
+ if isinstance(item, dict) and isinstance(item.get("text"), str) and item["text"].strip()
84
+ ]
85
+ else:
86
+ with open(path, encoding="utf-8", newline="") as file:
87
+ reader = csv.DictReader(file, delimiter="\t" if extension == ".tsv" else ",")
88
+ if not reader.fieldnames or "text" not in reader.fieldnames:
89
+ raise ValueError(f"Expected a 'text' column in '{path}'.")
90
+ records = [
91
+ (row["text"], row.get("label", label))
92
+ for row in reader
93
+ if row.get("text") and row["text"].strip()
94
+ ]
95
+
96
+ for text, record_label in records:
97
+ if record_label not in class_indices:
98
+ class_indices[record_label] = len(self.classes)
99
+ self.classes.append(record_label)
100
+ self.samples.append((text, class_indices[record_label]))
101
+ if not self.samples:
102
+ if empty_files:
103
+ details = ", ".join(f"'{path}'" for path in empty_files[:5])
104
+ raise ValueError(f"No non-empty text records found. Empty text file(s): {details}. Add text to the file(s) or use a dataset file containing text records.")
105
+ raise ValueError(f"No supported text files found under '{os.path.abspath(dataset_path)}'.")
106
+
107
+ def __len__(self):
108
+ return len(self.samples)
109
+
110
+ def __getitem__(self, index):
111
+ text, label = self.samples[index]
112
+ return text, torch.tensor(label)
113
+
114
+
115
+ # Initialize the dataset by checking if the dataset path exists and replacing the dataset name accordingly
116
+ def init_dataset(dataset_name, dataset_path):
117
+ dataset_path = os.fspath(dataset_path)
118
+ print("Initialized dataset with name '{}' and path '{}'.".format(dataset_name, os.path.abspath(dataset_path)))
119
+ return dataset_name, dataset_path
120
+
121
+
122
+
123
+ def load_dataset(dataset_path, model_type="text"):
124
+ """Load a file or folder dataset for use with split_dataset or data_loader."""
125
+ if dataset_path is None or not os.path.exists(dataset_path):
126
+ raise ValueError(f"Dataset path does not exist: {dataset_path!r}.")
127
+ if model_type == "image":
128
+ if not os.path.isdir(dataset_path):
129
+ raise ValueError("Image datasets must be directories organized in class folders.")
130
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
131
+ elif model_type == "text":
132
+ dataset = _TextDataset(os.fspath(dataset_path))
133
+ elif model_type in {"video", "audio"}:
134
+ if not os.path.isdir(dataset_path):
135
+ raise ValueError(f"{model_type.capitalize()} datasets must be directories.")
136
+ dataset = _FolderDataset(dataset_path, model_type)
137
+ else:
138
+ raise ValueError("Model type must be one of: image, text, video, audio.")
139
+ if len(dataset) == 0:
140
+ raise ValueError(f"No {model_type} dataset files found under '{os.path.abspath(dataset_path)}'.")
141
+ print("Loaded dataset with {} samples from '{}'.".format(len(dataset), os.path.abspath(dataset_path)))
142
+ return dataset
143
+
144
+
145
+
146
+ # Split the dataset into 2 parts - training and testing datasets
147
+ def split_dataset(dataset, train_ratio):
148
+ if dataset is None:
149
+ raise ValueError("Dataset is None. Please provide a valid dataset.")
150
+ if isinstance(train_ratio, bool) or not isinstance(train_ratio, (int, float)) or not 2 <= train_ratio <= 98:
151
+ raise ValueError("Train ratio must be between 2 and 98.")
152
+ dataset_size = len(dataset)
153
+ if dataset_size < 2:
154
+ raise ValueError("At least two dataset samples are required to create non-empty train and test splits.")
155
+ train_size = int(train_ratio / 100 * dataset_size)
156
+ test_size = dataset_size - train_size
157
+ train_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_size, test_size])
158
+ print("Dataset split into {} training samples and {} testing samples.".format(len(train_dataset), len(test_dataset)))
159
+ return train_dataset, test_dataset
160
+
161
+
162
+ def data_loader(dataset, batch_size, shuffle):
163
+ if dataset is None:
164
+ raise ValueError("Dataset is None. Please provide a valid dataset.")
165
+ if batch_size <= 0:
166
+ raise ValueError("Batch size must be greater than 0.")
167
+ if not isinstance(shuffle, bool):
168
+ raise ValueError("Shuffle must be a boolean value.")
169
+ data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=shuffle)
170
+ print("Data loader created with batch size {} and shuffle setting {}.".format(batch_size, shuffle))
171
+ return data_loader
172
+
173
+
174
+ def dataset_convert(dataset_path, out_path, convert_type, model_type):
175
+ if dataset_path is None or out_path is None or convert_type is None or model_type is None:
176
+ raise ValueError("Dataset path, output path, type, and model type must not be None.")
177
+ if not os.path.exists(dataset_path):
178
+ raise ValueError("Dataset path does not exist.")
179
+ if model_type not in {"image", "text", "video", "audio"}:
180
+ raise ValueError("Model type must be one of: image, text, video, audio.")
181
+ if convert_type not in ['json', 'csv', 'tsv', 'xml', 'parquet', 'orc', 'feather', 'hdf5', 'pickle']:
182
+ raise ValueError("Convert type must be one of the following: 'json', 'csv', 'tsv', 'xml', 'parquet', 'orc', 'feather', 'hdf5', 'pickle'.")
183
+ output_parent = os.path.dirname(os.path.abspath(os.fspath(out_path)))
184
+ os.makedirs(output_parent, exist_ok=True)
185
+ if model_type == "image":
186
+ if convert_type == 'json':
187
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
188
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
189
+ data_list = []
190
+ for images, labels in data_loader:
191
+ for i in range(len(images)):
192
+ image = images[i].numpy().tolist()
193
+ label = labels[i].item()
194
+ data_list.append({'image': image, 'label': label})
195
+ with open(out_path, 'w') as f:
196
+ json.dump(data_list, f)
197
+
198
+ elif convert_type == 'csv':
199
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
200
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
201
+ with open(out_path, 'w', newline='') as f:
202
+ writer = csv.writer(f)
203
+ writer.writerow(['image', 'label'])
204
+ for images, labels in data_loader:
205
+ for i in range(len(images)):
206
+ image = images[i].numpy().flatten().tolist()
207
+ label = labels[i].item()
208
+ writer.writerow([image, label])
209
+ f.flush()
210
+ elif convert_type == 'tsv':
211
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
212
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
213
+ with open(out_path, 'w', newline='') as f:
214
+ writer = csv.writer(f, delimiter='\t')
215
+ writer.writerow(['image', 'label'])
216
+ for images, labels in data_loader:
217
+ for i in range(len(images)):
218
+ image = images[i].numpy().flatten().tolist()
219
+ label = labels[i].item()
220
+ writer.writerow([image, label])
221
+ f.flush()
222
+ elif convert_type == 'xml':
223
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
224
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
225
+ with open(out_path, 'w') as f:
226
+ f.write('<dataset>\n')
227
+ for images, labels in data_loader:
228
+ for i in range(len(images)):
229
+ image = images[i].numpy().flatten().tolist()
230
+ label = labels[i].item()
231
+ f.write(f' <data>\n <image>{image}</image>\n <label>{label}</label>\n </data>\n')
232
+ f.write('</dataset>')
233
+ elif convert_type == 'parquet':
234
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
235
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
236
+ data_list = []
237
+ for images, labels in data_loader:
238
+ for i in range(len(images)):
239
+ image = images[i].numpy().flatten().tolist()
240
+ label = labels[i].item()
241
+ data_list.append({'image': image, 'label': label})
242
+ df = pd.DataFrame(data_list)
243
+ df.to_parquet(out_path, index=False)
244
+
245
+ elif convert_type == 'orc':
246
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
247
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
248
+ data_list = []
249
+ for images, labels in data_loader:
250
+ for i in range(len(images)):
251
+ image = images[i].numpy().flatten().tolist()
252
+ label = labels[i].item()
253
+ data_list.append({'image': image, 'label': label})
254
+ df = pd.DataFrame(data_list)
255
+ df.to_orc(out_path, index=False)
256
+
257
+ elif convert_type == 'feather':
258
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
259
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
260
+ data_list = []
261
+ for images, labels in data_loader:
262
+ for i in range(len(images)):
263
+ image = images[i].numpy().flatten().tolist()
264
+ label = labels[i].item()
265
+ data_list.append({'image': image, 'label': label})
266
+ df = pd.DataFrame(data_list)
267
+ df.to_feather(out_path)
268
+
269
+ elif convert_type == 'hdf5':
270
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
271
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
272
+ data_list = []
273
+ for images, labels in data_loader:
274
+ for i in range(len(images)):
275
+ image = images[i].numpy().flatten().tolist()
276
+ label = labels[i].item()
277
+ data_list.append({'image': image, 'label': label})
278
+ df = pd.DataFrame(data_list)
279
+ df.to_hdf(out_path, key='data', mode='w')
280
+
281
+ elif convert_type == 'pickle':
282
+ dataset = datasets.ImageFolder(dataset_path, transform=v2.ToTensor())
283
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
284
+ data_list = []
285
+ for images, labels in data_loader:
286
+ for i in range(len(images)):
287
+ image = images[i].numpy().flatten().tolist()
288
+ label = labels[i].item()
289
+ data_list.append({'image': image, 'label': label})
290
+ df = pd.DataFrame(data_list)
291
+ df.to_pickle(out_path)
292
+
293
+ if model_type == "text":
294
+ if convert_type == 'json':
295
+ dataset = _FolderDataset(dataset_path, "text")
296
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
297
+ data_list = []
298
+ for texts, labels in data_loader:
299
+ for i in range(len(texts)):
300
+ text = texts[i]
301
+ label = labels[i].item()
302
+ data_list.append({'text': text, 'label': label})
303
+ with open(out_path, 'w') as f:
304
+ json.dump(data_list, f)
305
+ elif convert_type == 'csv':
306
+ dataset = _FolderDataset(dataset_path, "text")
307
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
308
+ with open(out_path, 'w', newline='') as f:
309
+ writer = csv.writer(f)
310
+ writer.writerow(['text', 'label'])
311
+ for texts, labels in data_loader:
312
+ for i in range(len(texts)):
313
+ text = texts[i]
314
+ label = labels[i].item()
315
+ writer.writerow([text, label])
316
+ elif convert_type == 'tsv':
317
+ dataset = _FolderDataset(dataset_path, "text")
318
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
319
+ with open(out_path, 'w', newline='') as f:
320
+ writer = csv.writer(f, delimiter='\t')
321
+ writer.writerow(['text', 'label'])
322
+ for texts, labels in data_loader:
323
+ for i in range(len(texts)):
324
+ text = texts[i]
325
+ label = labels[i].item()
326
+ writer.writerow([text, label])
327
+ elif convert_type == 'xml':
328
+ dataset = _FolderDataset(dataset_path, "text")
329
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
330
+ with open(out_path, 'w') as f:
331
+ f.write('<dataset>\n')
332
+ for texts, labels in data_loader:
333
+ for i in range(len(texts)):
334
+ text = texts[i]
335
+ label = labels[i].item()
336
+ f.write(f' <data>\n <text>{text}</text>\n <label>{label}</label>\n </data>\n')
337
+ f.write('</dataset>')
338
+ elif convert_type == 'parquet':
339
+ dataset = _FolderDataset(dataset_path, "text")
340
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
341
+ data_list = []
342
+ for texts, labels in data_loader:
343
+ for i in range(len(texts)):
344
+ text = texts[i]
345
+ label = labels[i].item()
346
+ data_list.append({'text': text, 'label': label})
347
+ df = pd.DataFrame(data_list)
348
+ df.to_parquet(out_path, index=False)
349
+ elif convert_type == 'orc':
350
+ dataset = _FolderDataset(dataset_path, "text")
351
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
352
+ data_list = []
353
+ for texts, labels in data_loader:
354
+ for i in range(len(texts)):
355
+ text = texts[i]
356
+ label = labels[i].item()
357
+ data_list.append({'text': text, 'label': label})
358
+ df = pd.DataFrame(data_list)
359
+ df.to_orc(out_path, index=False)
360
+ elif convert_type == 'feather':
361
+ dataset = _FolderDataset(dataset_path, "text")
362
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
363
+ data_list = []
364
+ for texts, labels in data_loader:
365
+ for i in range(len(texts)):
366
+ text = texts[i]
367
+ label = labels[i].item()
368
+ data_list.append({'text': text, 'label': label})
369
+ df = pd.DataFrame(data_list)
370
+ df.to_feather(out_path)
371
+ elif convert_type == 'hdf5':
372
+ dataset = _FolderDataset(dataset_path, "text")
373
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
374
+ data_list = []
375
+ for texts, labels in data_loader:
376
+ for i in range(len(texts)):
377
+ text = texts[i]
378
+ label = labels[i].item()
379
+ data_list.append({'text': text, 'label': label})
380
+ df = pd.DataFrame(data_list)
381
+ df.to_hdf(out_path, key='data', mode='w')
382
+ elif convert_type == 'pickle':
383
+ dataset = _FolderDataset(dataset_path, "text")
384
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
385
+ data_list = []
386
+ for texts, labels in data_loader:
387
+ for i in range(len(texts)):
388
+ text = texts[i]
389
+ label = labels[i].item()
390
+ data_list.append({'text': text, 'label': label})
391
+ df = pd.DataFrame(data_list)
392
+ df.to_pickle(out_path)
393
+
394
+ if model_type == "video":
395
+ if convert_type == 'json':
396
+ dataset = _FolderDataset(dataset_path, "video")
397
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
398
+ data_list = []
399
+ for videos, labels in data_loader:
400
+ for i in range(len(videos)):
401
+ video = videos[i]
402
+ label = labels[i].item()
403
+ data_list.append({'video': video, 'label': label})
404
+ with open(out_path, 'w') as f:
405
+ json.dump(data_list, f)
406
+
407
+ elif convert_type == 'csv':
408
+ dataset = _FolderDataset(dataset_path, "video")
409
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
410
+ with open(out_path, 'w', newline='') as f:
411
+ writer = csv.writer(f)
412
+ writer.writerow(['video', 'label'])
413
+ for videos, labels in data_loader:
414
+ for i in range(len(videos)):
415
+ video = videos[i]
416
+ label = labels[i].item()
417
+ writer.writerow([video, label])
418
+ elif convert_type == 'tsv':
419
+ dataset = _FolderDataset(dataset_path, "video")
420
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
421
+ with open(out_path, 'w', newline='') as f:
422
+ writer = csv.writer(f, delimiter='\t')
423
+ writer.writerow(['video', 'label'])
424
+ for videos, labels in data_loader:
425
+ for i in range(len(videos)):
426
+ video = videos[i]
427
+ label = labels[i].item()
428
+ writer.writerow([video, label])
429
+
430
+ elif convert_type == 'xml':
431
+ dataset = _FolderDataset(dataset_path, "video")
432
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
433
+ with open(out_path, 'w') as f:
434
+ f.write('<dataset>\n')
435
+ for videos, labels in data_loader:
436
+ for i in range(len(videos)):
437
+ video = videos[i]
438
+ label = labels[i].item()
439
+ f.write(f' <data>\n <video>{video}</video>\n <label>{label}</label>\n </data>\n')
440
+ f.write('</dataset>')
441
+
442
+ elif convert_type == 'parquet':
443
+ dataset = _FolderDataset(dataset_path, "video")
444
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
445
+ data_list = []
446
+ for videos, labels in data_loader:
447
+ for i in range(len(videos)):
448
+ video = videos[i]
449
+ label = labels[i].item()
450
+ data_list.append({'video': video, 'label': label})
451
+ df = pd.DataFrame(data_list)
452
+ df.to_parquet(out_path, index=False)
453
+
454
+ elif convert_type == 'orc':
455
+ dataset = _FolderDataset(dataset_path, "video")
456
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
457
+ data_list = []
458
+ for videos, labels in data_loader:
459
+ for i in range(len(videos)):
460
+ video = videos[i]
461
+ label = labels[i].item()
462
+ data_list.append({'video': video, 'label': label})
463
+ df = pd.DataFrame(data_list)
464
+ df.to_orc(out_path, index=False)
465
+
466
+ elif convert_type == 'feather':
467
+ dataset = _FolderDataset(dataset_path, "video")
468
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
469
+ data_list = []
470
+ for videos, labels in data_loader:
471
+ for i in range(len(videos)):
472
+ video = videos[i]
473
+ label = labels[i].item()
474
+ data_list.append({'video': video, 'label': label})
475
+ df = pd.DataFrame(data_list)
476
+ df.to_feather(out_path)
477
+
478
+ elif convert_type == 'hdf5':
479
+ dataset = _FolderDataset(dataset_path, "video")
480
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
481
+ data_list = []
482
+ for videos, labels in data_loader:
483
+ for i in range(len(videos)):
484
+ video = videos[i]
485
+ label = labels[i].item()
486
+ data_list.append({'video': video, 'label': label})
487
+ df = pd.DataFrame(data_list)
488
+ df.to_hdf(out_path, key='data', mode='w')
489
+
490
+ elif convert_type == 'pickle':
491
+ dataset = _FolderDataset(dataset_path, "video")
492
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
493
+ data_list = []
494
+ for videos, labels in data_loader:
495
+ for i in range(len(videos)):
496
+ video = videos[i]
497
+ label = labels[i].item()
498
+ data_list.append({'video': video, 'label': label})
499
+ df = pd.DataFrame(data_list)
500
+ df.to_pickle(out_path)
501
+
502
+ if model_type == "audio":
503
+ if convert_type == 'json':
504
+ dataset = _FolderDataset(dataset_path, "audio")
505
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
506
+ data_list = []
507
+ for audios, labels in data_loader:
508
+ for i in range(len(audios)):
509
+ audio = audios[i]
510
+ label = labels[i].item()
511
+ data_list.append({'audio': audio, 'label': label})
512
+ with open(out_path, 'w') as f:
513
+ json.dump(data_list, f)
514
+
515
+ elif convert_type == 'csv':
516
+ dataset = _FolderDataset(dataset_path, "audio")
517
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
518
+ with open(out_path, 'w', newline='') as f:
519
+ writer = csv.writer(f)
520
+ writer.writerow(['audio', 'label'])
521
+ for audios, labels in data_loader:
522
+ for i in range(len(audios)):
523
+ audio = audios[i]
524
+ label = labels[i].item()
525
+ writer.writerow([audio, label])
526
+ elif convert_type == 'tsv':
527
+ dataset = _FolderDataset(dataset_path, "audio")
528
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
529
+ with open(out_path, 'w', newline='') as f:
530
+ writer = csv.writer(f, delimiter='\t')
531
+ writer.writerow(['audio', 'label'])
532
+ for audios, labels in data_loader:
533
+ for i in range(len(audios)):
534
+ audio = audios[i]
535
+ label = labels[i].item()
536
+ writer.writerow([audio, label])
537
+ elif convert_type == 'xml':
538
+ dataset = _FolderDataset(dataset_path, "audio")
539
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
540
+ with open(out_path, 'w') as f:
541
+ f.write('<dataset>\n')
542
+ for audios, labels in data_loader:
543
+ for i in range(len(audios)):
544
+ audio = audios[i]
545
+ label = labels[i].item()
546
+ f.write(f' <data>\n <audio>{audio}</audio>\n <label>{label}</label>\n </data>\n')
547
+ f.write('</dataset>')
548
+
549
+ elif convert_type == 'parquet':
550
+ dataset = _FolderDataset(dataset_path, "audio")
551
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
552
+ data_list = []
553
+ for audios, labels in data_loader:
554
+ for i in range(len(audios)):
555
+ audio = audios[i]
556
+ label = labels[i].item()
557
+ data_list.append({'audio': audio, 'label': label})
558
+ df = pd.DataFrame(data_list)
559
+ df.to_parquet(out_path, index=False)
560
+
561
+
562
+ elif convert_type == 'orc':
563
+ dataset = _FolderDataset(dataset_path, "audio")
564
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
565
+ data_list = []
566
+ for audios, labels in data_loader:
567
+ for i in range(len(audios)):
568
+ audio = audios[i]
569
+ label = labels[i].item()
570
+ data_list.append({'audio': audio, 'label': label})
571
+ df = pd.DataFrame(data_list)
572
+ df.to_orc(out_path, index=False)
573
+
574
+
575
+ elif convert_type == 'feather':
576
+ dataset = _FolderDataset(dataset_path, "audio")
577
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
578
+ data_list = []
579
+ for audios, labels in data_loader:
580
+ for i in range(len(audios)):
581
+ audio = audios[i]
582
+ label = labels[i].item()
583
+ data_list.append({'audio': audio, 'label': label})
584
+ df = pd.DataFrame(data_list)
585
+ df.to_feather(out_path)
586
+
587
+ elif convert_type == 'hdf5':
588
+ dataset = _FolderDataset(dataset_path, "audio")
589
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
590
+ data_list = []
591
+ for audios, labels in data_loader:
592
+ for i in range(len(audios)):
593
+ audio = audios[i]
594
+ label = labels[i].item()
595
+ data_list.append({'audio': audio, 'label': label})
596
+ df = pd.DataFrame(data_list)
597
+ df.to_hdf(out_path, key='data', mode='w')
598
+
599
+
600
+ elif convert_type == 'pickle':
601
+ dataset = _FolderDataset(dataset_path, "audio")
602
+ data_loader = DataLoader(dataset, batch_size=1, shuffle=False)
603
+ data_list = []
604
+ for audios, labels in data_loader:
605
+ for i in range(len(audios)):
606
+ audio = audios[i]
607
+ label = labels[i].item()
608
+ data_list.append({'audio': audio, 'label': label})
609
+ df = pd.DataFrame(data_list)
610
+ df.to_pickle(out_path)
611
+
612
+ output_path = os.path.abspath(os.fspath(out_path))
613
+ print(f"Converted {model_type} dataset to '{output_path}'.")
614
+ return output_path