mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-12-07 22:05:44 +03:00
Fix deletion of classification images and library
This commit is contained in:
parent
88b6bd7535
commit
ca91d3d82b
@ -662,8 +662,11 @@ def delete_classification_dataset_images(
|
|||||||
if os.path.isfile(file_path):
|
if os.path.isfile(file_path):
|
||||||
os.unlink(file_path)
|
os.unlink(file_path)
|
||||||
|
|
||||||
|
if os.path.exists(folder) and not os.listdir(folder):
|
||||||
|
os.rmdir(folder)
|
||||||
|
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
content=({"success": True, "message": "Successfully deleted faces."}),
|
content=({"success": True, "message": "Successfully deleted images."}),
|
||||||
status_code=200,
|
status_code=200,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -723,7 +726,7 @@ def categorize_classification_image(request: Request, name: str, body: dict = No
|
|||||||
os.unlink(training_file)
|
os.unlink(training_file)
|
||||||
|
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
content=({"success": True, "message": "Successfully deleted faces."}),
|
content=({"success": True, "message": "Successfully categorized image."}),
|
||||||
status_code=200,
|
status_code=200,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -761,7 +764,7 @@ def delete_classification_train_images(request: Request, name: str, body: dict =
|
|||||||
os.unlink(file_path)
|
os.unlink(file_path)
|
||||||
|
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
content=({"success": True, "message": "Successfully deleted faces."}),
|
content=({"success": True, "message": "Successfully deleted images."}),
|
||||||
status_code=200,
|
status_code=200,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -183,11 +183,12 @@ export default function ModelTrainingView({ model }: ModelTrainingViewProps) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const onDelete = useCallback(
|
const onDelete = useCallback(
|
||||||
(ids: string[], isName: boolean = false) => {
|
(ids: string[], isName: boolean = false, category?: string) => {
|
||||||
|
const targetCategory = category || pageToggle;
|
||||||
const api =
|
const api =
|
||||||
pageToggle == "train"
|
targetCategory == "train"
|
||||||
? `/classification/${model.name}/train/delete`
|
? `/classification/${model.name}/train/delete`
|
||||||
: `/classification/${model.name}/dataset/${pageToggle}/delete`;
|
: `/classification/${model.name}/dataset/${targetCategory}/delete`;
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.post(api, { ids })
|
.post(api, { ids })
|
||||||
@ -432,7 +433,7 @@ type LibrarySelectorProps = {
|
|||||||
dataset: { [id: string]: string[] };
|
dataset: { [id: string]: string[] };
|
||||||
trainImages: string[];
|
trainImages: string[];
|
||||||
setPageToggle: (toggle: string) => void;
|
setPageToggle: (toggle: string) => void;
|
||||||
onDelete: (ids: string[], isName: boolean) => void;
|
onDelete: (ids: string[], isName: boolean, category?: string) => void;
|
||||||
onRename: (old_name: string, new_name: string) => void;
|
onRename: (old_name: string, new_name: string) => void;
|
||||||
};
|
};
|
||||||
function LibrarySelector({
|
function LibrarySelector({
|
||||||
@ -448,7 +449,7 @@ function LibrarySelector({
|
|||||||
// data
|
// data
|
||||||
|
|
||||||
const [confirmDelete, setConfirmDelete] = useState<string | null>(null);
|
const [confirmDelete, setConfirmDelete] = useState<string | null>(null);
|
||||||
const [renameClass, setRenameFace] = useState<string | null>(null);
|
const [renameClass, setRenameClass] = useState<string | null>(null);
|
||||||
const pageTitle = useMemo(() => {
|
const pageTitle = useMemo(() => {
|
||||||
if (pageToggle != "train") {
|
if (pageToggle != "train") {
|
||||||
return pageToggle;
|
return pageToggle;
|
||||||
@ -463,12 +464,12 @@ function LibrarySelector({
|
|||||||
|
|
||||||
// interaction
|
// interaction
|
||||||
|
|
||||||
const handleDeleteFace = useCallback(
|
const handleDeleteCategory = useCallback(
|
||||||
(name: string) => {
|
(name: string) => {
|
||||||
// Get all image IDs for this face
|
// Get all image IDs for this category
|
||||||
const imageIds = dataset?.[name] || [];
|
const imageIds = dataset?.[name] || [];
|
||||||
|
|
||||||
onDelete(imageIds, true);
|
onDelete(imageIds, true, name);
|
||||||
setPageToggle("train");
|
setPageToggle("train");
|
||||||
},
|
},
|
||||||
[dataset, onDelete, setPageToggle],
|
[dataset, onDelete, setPageToggle],
|
||||||
@ -476,7 +477,7 @@ function LibrarySelector({
|
|||||||
|
|
||||||
const handleSetOpen = useCallback(
|
const handleSetOpen = useCallback(
|
||||||
(open: boolean) => {
|
(open: boolean) => {
|
||||||
setRenameFace(open ? renameClass : null);
|
setRenameClass(open ? renameClass : null);
|
||||||
},
|
},
|
||||||
[renameClass],
|
[renameClass],
|
||||||
);
|
);
|
||||||
@ -503,7 +504,7 @@ function LibrarySelector({
|
|||||||
className="text-white"
|
className="text-white"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (confirmDelete) {
|
if (confirmDelete) {
|
||||||
handleDeleteFace(confirmDelete);
|
handleDeleteCategory(confirmDelete);
|
||||||
setConfirmDelete(null);
|
setConfirmDelete(null);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
@ -521,7 +522,7 @@ function LibrarySelector({
|
|||||||
description={t("renameCategory.desc", { name: renameClass })}
|
description={t("renameCategory.desc", { name: renameClass })}
|
||||||
onSave={(newName) => {
|
onSave={(newName) => {
|
||||||
onRename(renameClass!, newName);
|
onRename(renameClass!, newName);
|
||||||
setRenameFace(null);
|
setRenameClass(null);
|
||||||
}}
|
}}
|
||||||
defaultValue={renameClass || ""}
|
defaultValue={renameClass || ""}
|
||||||
regexPattern={/^[\p{L}\p{N}\s'_-]{1,50}$/u}
|
regexPattern={/^[\p{L}\p{N}\s'_-]{1,50}$/u}
|
||||||
@ -588,7 +589,7 @@ function LibrarySelector({
|
|||||||
className="size-7 lg:opacity-0 lg:transition-opacity lg:group-hover:opacity-100"
|
className="size-7 lg:opacity-0 lg:transition-opacity lg:group-hover:opacity-100"
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
setRenameFace(id);
|
setRenameClass(id);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<LuPencil className="size-4 text-primary" />
|
<LuPencil className="size-4 text-primary" />
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user