Separate classes to file

This commit is contained in:
Christoph Hagen
2023-03-20 15:25:58 +01:00
parent 289e927c6a
commit 3ed5f0e0ff
4 changed files with 63 additions and 17 deletions

View File

@ -156,6 +156,12 @@ final class ClassifierCreator {
}
let changedMainImages = changedImageList.filter { $0.image == 0 }.map { $0.cap }
let classes = imageCounts.keys.sorted()
// Delete any image folders not present as caps
guard deleteUnnecessaryImageFolders(caps: classes) else {
return nil
}
return (classes, missingImageList.count + changedImageList.count, changedMainImages)
}
@ -176,6 +182,33 @@ final class ClassifierCreator {
}
}
private func deleteUnnecessaryImageFolders(caps: [Int]) -> Bool {
let validNames = caps.map { String(format: "%04d", $0) }
let folders: [String]
do {
folders = try FileManager.default.contentsOfDirectory(atPath: imageDirectory.path)
} catch {
print("[ERROR] Failed to get list of image folders: \(error)")
return false
}
for folder in folders {
if validNames.contains(folder) {
continue
}
// Not a valid cap folder
let url = imageDirectory.appendingPathComponent(folder)
do {
try FileManager.default.removeItem(at: url)
print("[ERROR] Removed unused image folder '\(folder)'")
} catch {
print("[ERROR] Failed to delete unused image folder \(folder): \(error)")
return false
}
}
return true
}
private func imageUrl(base: URL, cap: Int, image: Int) -> URL {
base.appendingPathComponent(String(format: "%04d/%04d-%02d.jpg", cap, cap, image))
}
@ -329,7 +362,7 @@ final class ClassifierCreator {
let dateString = df.string(from: lastUpdate)
return await post(
url: server.appendingPathComponent("classes/\(dateString)"),
body: classes.map(String.init).joined(separator: "\n").data(using: .utf8)!)
body: classes.map(String.init).joined(separator: ",").data(using: .utf8)!)
}
// MARK: Step 7: Create thumbnails