Log changed images for classification
This commit is contained in:
parent
e0e3919d69
commit
c983cbc1b3
@ -18,12 +18,17 @@ final class CapServer: ServerOwner {
|
|||||||
|
|
||||||
private let classifierFile: URL
|
private let classifierFile: URL
|
||||||
|
|
||||||
|
private let changedImagesFile: URL
|
||||||
|
|
||||||
private let fm = FileManager.default
|
private let fm = FileManager.default
|
||||||
|
|
||||||
// MARK: Caps
|
// MARK: Caps
|
||||||
|
|
||||||
private var writers: Set<String>
|
private var writers: Set<String>
|
||||||
|
|
||||||
|
/// The changed images not yet written to disk
|
||||||
|
private var unwrittenImageChanges: [(cap: Int, image: Int)] = []
|
||||||
|
|
||||||
var classifierVersion: Int = 0 {
|
var classifierVersion: Int = 0 {
|
||||||
didSet {
|
didSet {
|
||||||
writeClassifierVersion()
|
writeClassifierVersion()
|
||||||
@ -70,6 +75,7 @@ final class CapServer: ServerOwner {
|
|||||||
self.htmlFile = folder.appendingPathComponent("count.html")
|
self.htmlFile = folder.appendingPathComponent("count.html")
|
||||||
self.classifierVersionFile = folder.appendingPathComponent("classifier.version")
|
self.classifierVersionFile = folder.appendingPathComponent("classifier.version")
|
||||||
self.classifierFile = folder.appendingPathComponent("classifier.mlmodel")
|
self.classifierFile = folder.appendingPathComponent("classifier.mlmodel")
|
||||||
|
self.changedImagesFile = folder.appendingPathComponent("changes.txt")
|
||||||
self.writers = Set(writers)
|
self.writers = Set(writers)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,9 +249,54 @@ final class CapServer: ServerOwner {
|
|||||||
}
|
}
|
||||||
try data.write(to: f)
|
try data.write(to: f)
|
||||||
caps[cap]!.count = try count(of: cap)
|
caps[cap]!.count = try count(of: cap)
|
||||||
|
addChangedImageToLog(cap: cap, image: id)
|
||||||
log("Added image \(id) for cap \(cap)")
|
log("Added image \(id) for cap \(cap)")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func writeChangedImagesToDisk() throws {
|
||||||
|
guard !unwrittenImageChanges.isEmpty else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !fm.fileExists(atPath: changedImagesFile.path) {
|
||||||
|
try Data().write(to: changedImagesFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
let handle = try FileHandle(forWritingTo: changedImagesFile)
|
||||||
|
try handle.seekToEnd()
|
||||||
|
var entries = unwrittenImageChanges
|
||||||
|
defer {
|
||||||
|
unwrittenImageChanges = entries
|
||||||
|
try? handle.close()
|
||||||
|
}
|
||||||
|
let df = DateFormatter()
|
||||||
|
df.dateFormat = "yy-MM-dd-HH-mm-ss"
|
||||||
|
let dateString = df.string(from: Date())
|
||||||
|
while let entry = entries.popLast() {
|
||||||
|
let content = "\(dateString):\(entry.cap):\(entry.image)".data(using: .utf8)!
|
||||||
|
try handle.write(contentsOf: content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func addChangedImageToLog(cap: Int, image: Int) {
|
||||||
|
unwrittenImageChanges.append((cap, image))
|
||||||
|
do {
|
||||||
|
try writeChangedImagesToDisk()
|
||||||
|
} catch {
|
||||||
|
log("Failed to save changed image list: \(error)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func deleteChangedImageListFile() {
|
||||||
|
guard fm.fileExists(atPath: changedImagesFile.path) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
try fm.removeItem(at: changedImagesFile)
|
||||||
|
} catch {
|
||||||
|
log("Failed to delete changed images file: \(error)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func switchMainImage(to version: Int, for cap: Int) throws {
|
func switchMainImage(to version: Int, for cap: Int) throws {
|
||||||
let file2 = file(of: cap, version: version)
|
let file2 = file(of: cap, version: version)
|
||||||
guard fm.fileExists(atPath: file2.path) else {
|
guard fm.fileExists(atPath: file2.path) else {
|
||||||
|
@ -78,4 +78,10 @@ func routes(_ app: Application) {
|
|||||||
}
|
}
|
||||||
server.updateTrainedClasses(content: content)
|
server.updateTrainedClasses(content: content)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset the changed images list
|
||||||
|
app.postCatching("changes") { request in
|
||||||
|
try authorize(request)
|
||||||
|
server.deleteChangedImageListFile()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user