feat: temp

This commit is contained in:
mozzie 2024-09-23 13:02:38 +08:00
parent 72aae0c40f
commit db8ba53589
5 changed files with 77 additions and 44 deletions

View File

@ -0,0 +1,53 @@
import { downloadSeriesDicomFiles } from "../../core/pacs";
import { executeInferTask } from "../../core/alg";
import { InferDeviceEnum, InferStructuralEnum } from "../../core/alg.type";
import { db } from "../../core/db";
import log from "electron-log";
import path from "node:path";
import { app, ipcMain } from "electron";
export const registerAlgHandler = () => {
ipcMain.handle("device:infer:set", async (_event, inferDevice) => {
try {
await db.update(({ setting }) => ({ ...setting, inferDevice }));
return { success: true, msg: `推理硬件修改为${inferDevice}` };
} catch (error) {
await db.update(({ setting }) => ({ ...setting, inferDevice }));
log.error(error);
return { success: false, msg: `操作失败` };
}
});
ipcMain.on("model:infer", async (event, SeriesInstanceUIDs) => {
// 构造推理任务参数列表
const pu = InferDeviceEnum.GPU;
const module = InferStructuralEnum.AORTA;
const turbo = true;
const seg_schedule = true;
for (let i = 0; i < SeriesInstanceUIDs.length; i++) {
const SeriesInstanceUID = SeriesInstanceUIDs[i];
// 下载dicom到本地获取文件夹路径
const img_path = await downloadSeriesDicomFiles(SeriesInstanceUID);
const save_path = path.join(
app.getPath("userData"),
"output",
SeriesInstanceUID
);
const task = { save_path, pu, module, turbo, seg_schedule, img_path };
console.log("infer task: ", task);
await executeInferTask(task, (data) => {
console.log(data);
event.reply("infer:progress", data);
});
}
});
ipcMain.handle("alg:assets", (_event, SeriesInstanceUID) => {
const assetsPath = path.join(
app.getPath("userData"),
"output",
SeriesInstanceUID
);
console.log("assetsPath", assetsPath);
});
};

View File

@ -1,11 +1,8 @@
import { app, ipcMain, shell } from "electron"; import { ipcMain, shell } from "electron";
import { mkdir, stat } from "fs/promises"; import { mkdir, stat } from "fs/promises";
import { db } from "../../core/db"; import { db } from "../../core/db";
import log from "electron-log"; import log from "electron-log";
import path from "node:path"; import path from "node:path";
import { downloadSeriesDicomFiles } from "../../core/pacs";
import { executeInferTask } from "../../core/alg";
import { InferDeviceEnum, InferStructuralEnum } from "../../core/alg.type";
export const registerCommonHandler = () => { export const registerCommonHandler = () => {
ipcMain.handle("output:open", async () => { ipcMain.handle("output:open", async () => {
@ -22,41 +19,4 @@ export const registerCommonHandler = () => {
shell.openPath(resolvedPath); shell.openPath(resolvedPath);
} }
}); });
ipcMain.handle("device:infer:set", async (_event, inferDevice) => {
try {
await db.update(({ setting }) => ({ ...setting, inferDevice }));
return { success: true, msg: `推理硬件修改为${inferDevice}` };
} catch (error) {
await db.update(({ setting }) => ({ ...setting, inferDevice }));
log.error(error);
return { success: false, msg: `操作失败` };
}
});
ipcMain.on("model:infer", async (event, SeriesInstanceUIDs) => {
console.log('SeriesInstanceUIDs', SeriesInstanceUIDs)
// 构造推理任务参数列表
const pu = InferDeviceEnum.GPU;
const module = InferStructuralEnum.AORTA;
const turbo = true;
const seg_schedule = true;
for (let i = 0; i < SeriesInstanceUIDs.length; i++) {
const SeriesInstanceUID = SeriesInstanceUIDs[i];
// 下载dicom到本地获取文件夹路径
const img_path = await downloadSeriesDicomFiles(SeriesInstanceUID);
const save_path = path.join(
app.getPath("userData"),
"output",
SeriesInstanceUID
);
const task = { save_path, pu, module, turbo, seg_schedule, img_path };
console.log('infer task: ', task);
const result = await executeInferTask(task, (data) => {
console.log(data)
event.reply('infer:progress', data)
});
console.log("end: ", result);
}
});
}; };

View File

@ -1,6 +1,7 @@
import { ipcMain } from "electron"; import { ipcMain } from "electron";
import { registerDicomHandler } from "./dicom/handler"; import { registerDicomHandler } from "./dicom/handler";
import { registerCommonHandler } from "./common"; import { registerCommonHandler } from "./common";
import { registerAlgHandler } from "./alg";
export const registerIpcMainHandlers = (mainWindow: Electron.BrowserWindow) => { export const registerIpcMainHandlers = (mainWindow: Electron.BrowserWindow) => {
ipcMain.removeAllListeners(); ipcMain.removeAllListeners();
@ -12,4 +13,5 @@ export const registerIpcMainHandlers = (mainWindow: Electron.BrowserWindow) => {
registerCommonHandler(); registerCommonHandler();
registerDicomHandler(); registerDicomHandler();
registerAlgHandler();
}; };

View File

@ -74,7 +74,7 @@ function createWindow() {
win.loadURL(VITE_DEV_SERVER_URL); win.loadURL(VITE_DEV_SERVER_URL);
registerIpcMainHandlers(win); registerIpcMainHandlers(win);
runOrthancServer(getPacsPath(platform, true)); runOrthancServer(getPacsPath(platform, true));
startALGServer(); if (platform !== "macos") startALGServer();
} else { } else {
// if (platform !== "macos") { // if (platform !== "macos") {
// python_process = spawn(path.join(process.env.VITE_PUBLIC!, "main.exe")); // python_process = spawn(path.join(process.env.VITE_PUBLIC!, "main.exe"));

View File

@ -1,3 +1,21 @@
export const Model3DViewer = () => { import { useEffect, useState } from "react";
return <div>3d model</div>; import { useLocation } from "react-router-dom";
interface Model3DViewerProps {}
export const Model3DViewer = (props: Model3DViewerProps) => {
const [assets, setAssets] = useState();
const location = useLocation();
const queryParams = new URLSearchParams(location.search);
const SeriesInstanceUID = queryParams.get("SeriesInstanceUID");
useEffect(() => {
window.ipcRenderer.invoke("alg:assets", SeriesInstanceUID).then((res) => {
console.log(res);
});
});
return (
<div>{SeriesInstanceUID ? <div>3d</div> : <div>AI分析该数据</div>}</div>
);
}; };