bugfixes
This commit is contained in:
parent
a49483f9d7
commit
bf4e1f19e9
@ -220,7 +220,7 @@ func applyVideoMAEPositionClipsForAnalyze(
|
|||||||
predictions, err := predictVideoMAEPositionClipsForAnalyze(ctx, clips)
|
predictions, err := predictVideoMAEPositionClipsForAnalyze(ctx, clips)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if ctx.Err() == nil {
|
if ctx.Err() == nil {
|
||||||
appLogln("VideoMAE Clip-Analyse uebersprungen:", err)
|
appLogln("VideoMAE Clip-Analyse übersprungen:", err)
|
||||||
}
|
}
|
||||||
return highlightHits, positionEvidence
|
return highlightHits, positionEvidence
|
||||||
}
|
}
|
||||||
|
|||||||
@ -249,7 +249,7 @@ Beenden:
|
|||||||
nsfwapp-stop
|
nsfwapp-stop
|
||||||
|
|
||||||
Desktop:
|
Desktop:
|
||||||
Der Launcher "NSFW App" startet das Backend und oeffnet https://localhost:9999.
|
Der Launcher "NSFW App" startet das Backend und öffnet https://localhost:9999.
|
||||||
Per Rechtsklick auf "NSFW App" gibt es Aktionen fuer Frontend, Datenordner,
|
Per Rechtsklick auf "NSFW App" gibt es Aktionen fuer Frontend, Datenordner,
|
||||||
Log und Beenden, sofern die Desktop-Umgebung Desktop Actions anzeigt.
|
Log und Beenden, sofern die Desktop-Umgebung Desktop Actions anzeigt.
|
||||||
|
|
||||||
|
|||||||
BIN
backend/dist/nsfwapp-linux-amd64
vendored
BIN
backend/dist/nsfwapp-linux-amd64
vendored
Binary file not shown.
BIN
backend/dist/nsfwapp.exe
vendored
BIN
backend/dist/nsfwapp.exe
vendored
Binary file not shown.
BIN
backend/dist/nsfwapp_amd64.deb
vendored
BIN
backend/dist/nsfwapp_amd64.deb
vendored
Binary file not shown.
@ -200,7 +200,7 @@ func settingsDatabaseBackupHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
f, err := os.Open(tmpPath)
|
f, err := os.Open(tmpPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "Backup-Datei konnte nicht geoeffnet werden: "+err.Error(), http.StatusInternalServerError)
|
http.Error(w, "Backup-Datei konnte nicht geöffnet werden: "+err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
@ -230,7 +230,7 @@ func settingsSQLiteDatabaseBackupHandler(w http.ResponseWriter, r *http.Request,
|
|||||||
|
|
||||||
db, err := sql.Open("sqlite", storeConfig.SQLitePath)
|
db, err := sql.Open("sqlite", storeConfig.SQLitePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "SQLite konnte nicht geoeffnet werden: "+err.Error(), http.StatusInternalServerError)
|
http.Error(w, "SQLite konnte nicht geöffnet werden: "+err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
@ -252,7 +252,7 @@ func settingsSQLiteDatabaseBackupHandler(w http.ResponseWriter, r *http.Request,
|
|||||||
|
|
||||||
f, err := os.Open(tmpPath)
|
f, err := os.Open(tmpPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "Backup-Datei konnte nicht geoeffnet werden: "+err.Error(), http.StatusInternalServerError)
|
http.Error(w, "Backup-Datei konnte nicht geöffnet werden: "+err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|||||||
@ -233,7 +233,7 @@ func settingsDatabaseMigrateHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
refreshedStore := NewModelStore(targetConfig)
|
refreshedStore := NewModelStore(targetConfig)
|
||||||
if err := refreshedStore.Load(); err != nil {
|
if err := refreshedStore.Load(); err != nil {
|
||||||
http.Error(w, "Ziel-Datenbank konnte nach Migration nicht geoeffnet werden: "+err.Error(), http.StatusInternalServerError)
|
http.Error(w, "Ziel-Datenbank konnte nach Migration nicht geöffnet werden: "+err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,13 +297,13 @@ func migrateModelStoreData(sourceConfig, targetConfig ModelStoreConfig) (int64,
|
|||||||
|
|
||||||
source := NewModelStore(sourceConfig)
|
source := NewModelStore(sourceConfig)
|
||||||
if err := source.Load(); err != nil {
|
if err := source.Load(); err != nil {
|
||||||
return 0, appErrorf("Quelle konnte nicht geoeffnet werden: %w", err)
|
return 0, appErrorf("Quelle konnte nicht geöffnet werden: %w", err)
|
||||||
}
|
}
|
||||||
defer source.Close()
|
defer source.Close()
|
||||||
|
|
||||||
target := NewModelStore(targetConfig)
|
target := NewModelStore(targetConfig)
|
||||||
if err := target.Load(); err != nil {
|
if err := target.Load(); err != nil {
|
||||||
return 0, appErrorf("Ziel konnte nicht geoeffnet werden: %w", err)
|
return 0, appErrorf("Ziel konnte nicht geöffnet werden: %w", err)
|
||||||
}
|
}
|
||||||
defer target.Close()
|
defer target.Close()
|
||||||
|
|
||||||
|
|||||||
@ -2767,7 +2767,7 @@ func trainingRunJob(ctx context.Context, root string, count int) {
|
|||||||
} else if poseStatus != "failed" {
|
} else if poseStatus != "failed" {
|
||||||
poseStatus = "skipped_no_pose_data"
|
poseStatus = "skipped_no_pose_data"
|
||||||
poseOutput = fmt.Sprintf(
|
poseOutput = fmt.Sprintf(
|
||||||
"YOLO26 Pose uebersprungen: zu wenige Skeleton-Beispiele. Train=%d, Val=%d. Benoetigt: mindestens %d Train und %d Val.",
|
"YOLO26 Pose übersprungen: zu wenige Skeleton-Beispiele. Train=%d, Val=%d. Benoetigt: mindestens %d Train und %d Val.",
|
||||||
poseTrainCount,
|
poseTrainCount,
|
||||||
poseValCount,
|
poseValCount,
|
||||||
minPoseTrainCount,
|
minPoseTrainCount,
|
||||||
@ -2865,7 +2865,7 @@ func trainingRunJob(ctx context.Context, root string, count int) {
|
|||||||
} else if videoMAEStatus != "failed" {
|
} else if videoMAEStatus != "failed" {
|
||||||
videoMAEStatus = "skipped_no_videomae_data"
|
videoMAEStatus = "skipped_no_videomae_data"
|
||||||
videoMAEOutput = fmt.Sprintf(
|
videoMAEOutput = fmt.Sprintf(
|
||||||
"VideoMAE uebersprungen: zu wenige Clip-Beispiele. Train=%d, Val=%d. Benoetigt: mindestens %d Train und %d Val.",
|
"VideoMAE übersprungen: zu wenige Clip-Beispiele. Train=%d, Val=%d. Benoetigt: mindestens %d Train und %d Val.",
|
||||||
videoMAETrainCount,
|
videoMAETrainCount,
|
||||||
videoMAEValCount,
|
videoMAEValCount,
|
||||||
minVideoMAETrainCount,
|
minVideoMAETrainCount,
|
||||||
@ -2905,7 +2905,7 @@ func trainingRunJob(ctx context.Context, root string, count int) {
|
|||||||
} else if poseStatus == "trained" && detectorStatus != "failed" {
|
} else if poseStatus == "trained" && detectorStatus != "failed" {
|
||||||
message = "Training abgeschlossen. YOLO26 Pose wurde trainiert."
|
message = "Training abgeschlossen. YOLO26 Pose wurde trainiert."
|
||||||
} else if poseStatus == "skipped_no_pose_data" && detectorStatus == "trained" {
|
} else if poseStatus == "skipped_no_pose_data" && detectorStatus == "trained" {
|
||||||
message += " YOLO26 Pose wurde uebersprungen: zu wenige Skeleton-Beispiele."
|
message += " YOLO26 Pose wurde übersprungen: zu wenige Skeleton-Beispiele."
|
||||||
} else if poseStatus == "failed" {
|
} else if poseStatus == "failed" {
|
||||||
if detectorStatus == "failed" {
|
if detectorStatus == "failed" {
|
||||||
message += " YOLO26 Pose ist ebenfalls fehlgeschlagen."
|
message += " YOLO26 Pose ist ebenfalls fehlgeschlagen."
|
||||||
@ -2925,7 +2925,7 @@ func trainingRunJob(ctx context.Context, root string, count int) {
|
|||||||
message += " VideoMAE wurde trainiert."
|
message += " VideoMAE wurde trainiert."
|
||||||
} else if videoMAEStatus == "skipped_no_videomae_data" {
|
} else if videoMAEStatus == "skipped_no_videomae_data" {
|
||||||
if detectorStatus == "trained" || poseStatus == "trained" {
|
if detectorStatus == "trained" || poseStatus == "trained" {
|
||||||
message += " VideoMAE wurde uebersprungen: zu wenige Clip-Beispiele."
|
message += " VideoMAE wurde übersprungen: zu wenige Clip-Beispiele."
|
||||||
}
|
}
|
||||||
} else if videoMAEStatus == "failed" {
|
} else if videoMAEStatus == "failed" {
|
||||||
message += " VideoMAE ist fehlgeschlagen."
|
message += " VideoMAE ist fehlgeschlagen."
|
||||||
|
|||||||
@ -1351,7 +1351,7 @@ export default function RecorderSettings({ onAssetsGenerated }: Props) {
|
|||||||
|
|
||||||
const ok = window.confirm(
|
const ok = window.confirm(
|
||||||
`Datenbank-Backup "${file.name}" wiederherstellen?\n\n` +
|
`Datenbank-Backup "${file.name}" wiederherstellen?\n\n` +
|
||||||
'Das ueberschreibt die aktuelle Datenbank. Dieser Schritt kann nicht automatisch rueckgaengig gemacht werden.'
|
'Das überschreibt die aktuelle Datenbank. Dieser Schritt kann nicht automatisch rueckgaengig gemacht werden.'
|
||||||
)
|
)
|
||||||
if (!ok) return
|
if (!ok) return
|
||||||
|
|
||||||
@ -1414,7 +1414,7 @@ export default function RecorderSettings({ onAssetsGenerated }: Props) {
|
|||||||
|
|
||||||
const ok = window.confirm(
|
const ok = window.confirm(
|
||||||
`Aktive Datenbank von ${databaseTypeLabel(loadedDatabaseType)} nach ${databaseTypeLabel(databaseType)} migrieren?\n\n` +
|
`Aktive Datenbank von ${databaseTypeLabel(loadedDatabaseType)} nach ${databaseTypeLabel(databaseType)} migrieren?\n\n` +
|
||||||
'Die Ziel-Datenbank wird mit den aktuellen Model-Daten ueberschrieben. Danach wird die App auf die Ziel-Datenbank umgestellt.'
|
'Die Ziel-Datenbank wird mit den aktuellen Model-Daten überschrieben. Danach wird die App auf die Ziel-Datenbank umgestellt.'
|
||||||
)
|
)
|
||||||
if (!ok) return
|
if (!ok) return
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user