Ver Fonte

1、ai编辑优化

bakamaka.guan há 1 ano atrás
pai
commit
193ce55c35

+ 8 - 1
lib/interfaces/process/workspace/exam_info.dart

@@ -36,5 +36,12 @@ class ExamImageInfo {
   /// 预览图链接
   final String previewUrl;
 
-  ExamImageInfo(this.url, this.previewUrl);
+  /// ai图像编辑code
+  final String? remedicalAISelectedInfoCode;
+
+  ExamImageInfo(
+    this.url,
+    this.previewUrl, {
+    this.remedicalAISelectedInfoCode,
+  });
 }

+ 3 - 1
lib/process/workspace/measure_data_controller.dart

@@ -17,10 +17,12 @@ class MeasureImageData {
   final String? patientCode;
   final String? remedicalCode;
   final String? recordCode;
+  final String? remedicalAISelectedInfoCode;
   MeasureImageData({
     this.patientCode,
     this.recordCode,
     this.remedicalCode,
+    this.remedicalAISelectedInfoCode,
   });
 }
 
@@ -545,7 +547,7 @@ class MeasureDataController implements IMeasureDataController {
         dto.recommendedDownloadMode == RecommendedDownloadModeEnum.Origin &&
             dto.originImageUrl != null &&
             dto.originImageUrl!.isNotEmpty;
-    final imageUrl = useOrigin ? dto.originImageUrl! : dto.imageUrl!;
+    final imageUrl = !useOrigin ? dto.originImageUrl! : dto.imageUrl!;
     return imageUrl;
   }
 

+ 27 - 16
lib/view/ai_result_modifier/controller.dart

@@ -3,11 +3,13 @@ import 'dart:math';
 import 'dart:typed_data';
 import 'dart:ui' as ui;
 
+import 'package:fis_common/index.dart';
 import 'package:fis_common/logger/logger.dart';
 import 'package:fis_i18n/i18n.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:fis_measure/process/language/measure_language.dart';
 import 'package:fis_measure/process/visual/visual.dart';
+import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/process/workspace/rpc_helper.dart';
 import 'package:fis_measure/process/workspace/visual_loader.dart';
 import 'package:fis_measure/utils/prompt_box.dart';
@@ -24,12 +26,13 @@ import 'package:http/http.dart' as http;
 
 class AiResultModifierController extends GetxController {
   final rpcHelper = Get.find<RPCHelper>();
+  MeasureDataController get measureData => Get.find<MeasureDataController>();
 
   /// 后台语言包控制器
   // final languageService = Get.find<LanguageService>();
   final state = AiResultModifierState();
 
-  /// 传入参数 [图像code,图像帧下标,图像元数据]
+  /// 传入参数 [图像code,图像帧下标,图像元数据, 图像编辑过的code]
   final String remedicalCode;
   final int currFrameIndex;
   final VidUsImage currFrame;
@@ -102,10 +105,11 @@ class AiResultModifierController extends GetxController {
   /// 测量语言包
   final measureLanguage = MeasureLanguage();
 
-  AiResultModifierController(
-      {required this.remedicalCode,
-      required this.currFrameIndex,
-      required this.currFrame}) {
+  AiResultModifierController({
+    required this.remedicalCode,
+    required this.currFrameIndex,
+    required this.currFrame,
+  }) {
     print('创建 AiResultModifierController');
   }
 
@@ -267,8 +271,9 @@ class AiResultModifierController extends GetxController {
   }
 
   @override
-  void onInit() {
+  void onInit() async {
     super.onInit();
+    await _getDiagnosisEnumItemsAsync();
     _updateModifierInteractiveLayerSize();
     _updateImagePhysicalSize();
     _initAIResult();
@@ -397,15 +402,22 @@ class AiResultModifierController extends GetxController {
   /// 加载AI结果并调用绘制
   Future<void> _initAIResult() async {
     try {
-      final result =
-          await rpcHelper.rpc.remedical.getRemedicalDiagnosisDataAsync(
-        GetRemedicalDiagnosisDataRequest(
-          token: rpcHelper.userToken,
-          remedicalCode: remedicalCode,
-          frameIndex: currFrameIndex,
-        ),
-      );
-      resultDTO = AIDiagnosisPerImageDTO.fromJson(jsonDecode(result));
+      if (measureData
+          .measureImageData.remedicalAISelectedInfoCode.isNotNullOrEmpty) {
+        resultDTO = AIDiagnosisPerImageDTO.fromJson(
+            jsonDecode(measureData.aiResults)[0]);
+      } else {
+        final result =
+            await rpcHelper.rpc.remedical.getRemedicalDiagnosisDataAsync(
+          GetRemedicalDiagnosisDataRequest(
+            token: rpcHelper.userToken,
+            remedicalCode: remedicalCode,
+            frameIndex: currFrameIndex,
+          ),
+        );
+        resultDTO = AIDiagnosisPerImageDTO.fromJson(jsonDecode(result));
+      }
+
       modifiedDataDTO = resultDTO;
       contours = resultDTO.diagResultsForEachOrgan![0]
               .detectedObjects![currentAiDetectedObjectIndex].contours ??
@@ -425,7 +437,6 @@ class AiResultModifierController extends GetxController {
       _canvasAffectedKeyPoints.clear();
       _updateCurrContoursPoints();
       _updateCurrKeyPoints();
-      await _getDiagnosisEnumItemsAsync();
       update(['ai_result_canvas', 'ai_result_panel', 'ai_index_tag']);
     } catch (e) {
       logger.e('load ai result failed', e);

+ 10 - 9
lib/view/ai_result_modifier/view.dart

@@ -16,12 +16,12 @@ import 'index.dart';
 
 class AiResultModifierDialog extends FisView<AiResultModifierController>
     implements FInteractiveContainer {
-  const AiResultModifierDialog(
-      {Key? key,
-      required this.remedicalCode,
-      required this.currFrameIndex,
-      required this.currFrame})
-      : super(key: key);
+  const AiResultModifierDialog({
+    Key? key,
+    required this.remedicalCode,
+    required this.currFrameIndex,
+    required this.currFrame,
+  }) : super(key: key);
   final String remedicalCode;
   final int currFrameIndex;
   final VidUsImage currFrame;
@@ -32,9 +32,10 @@ class AiResultModifierDialog extends FisView<AiResultModifierController>
   FWidget build(BuildContext context) {
     return FisBuilder<AiResultModifierController>(
       init: AiResultModifierController(
-          remedicalCode: remedicalCode,
-          currFrameIndex: currFrameIndex,
-          currFrame: currFrame),
+        remedicalCode: remedicalCode,
+        currFrameIndex: currFrameIndex,
+        currFrame: currFrame,
+      ),
       id: "ai_result_modifier",
       builder: (_) {
         return FDialog(

+ 2 - 0
lib/view/measure/measure_images_bar.dart

@@ -236,6 +236,8 @@ class _ScrollableImageListState extends State<ScrollableImageList> {
       patientCode: measureData.measureImageData.patientCode,
       recordCode: measureData.measureImageData.recordCode,
       remedicalCode: remedicalCode,
+      remedicalAISelectedInfoCode:
+          measureData.measureImageData.remedicalAISelectedInfoCode,
     );
     measureHandler.currSelectedImage = CurrImageInfo(
       imageUrl,

+ 7 - 7
lib/view/measure/measure_view.dart

@@ -126,7 +126,6 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
           .call(_curRemedicalCode, _curToken, _curRemedicalAISelectedInfoCode);
       if (remedicalInfo != null) {
         measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
-        print('🍧');
         if (remedicalInfo.terminalImages != null) {
           _hideFullScreenLoading = true;
           measureData.itemCurrentImage =
@@ -144,11 +143,11 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
 
   /// 将当前的图像信息同步到 measureData 中
   void _setCurImageData() {
-    print('🍪');
     measureData.measureImageData = MeasureImageData(
       patientCode: _curPatientCode,
       recordCode: _curRecordCode,
       remedicalCode: _curRemedicalCode,
+      remedicalAISelectedInfoCode: _curRemedicalAISelectedInfoCode,
     );
   }
 
@@ -338,8 +337,6 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
         measureData.itemCurrentImage = measureData.chooseImageUrl(imgInfo);
         getExamImageInfoList(remedicals);
       }
-
-      print('🥐');
     }
 
     measureController.imageLoaded.removeListener(_onImageLoaded);
@@ -352,7 +349,11 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
     List<ExamImageInfo> examImageInfoList = remedicals.map((e) {
       final imgInfo = e.terminalImages!;
       final vidUrl = measureData.chooseImageUrl(imgInfo);
-      return ExamImageInfo(vidUrl, imgInfo.previewUrl!);
+      return ExamImageInfo(
+        vidUrl,
+        imgInfo.previewUrl!,
+        remedicalAISelectedInfoCode: e.remedicalCode,
+      );
     }).toList();
 
     Get.delete<MeasureController>();
@@ -391,9 +392,8 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
       var remedicalInfo = await measureData.getImageInfo(
         currentImage.remedicalCode ?? '',
         _curToken,
-        _curRemedicalAISelectedInfoCode,
+        e!.remedicalAISelectedInfoCode,
       );
-      print('🍇');
       if (remedicalInfo != null) {
         measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
         measure3DViewController.initParams();

+ 5 - 2
lib/view/paint/parts/ai_result.dart

@@ -18,8 +18,11 @@ class AIResultPanel extends StatefulWidget {
   /// ai部位
   final DiagnosisOrganEnum diagnosisOrgan;
 
-  const AIResultPanel(this.aiDetectedObject, this.diagnosisOrgan, {Key? key})
-      : super(key: key);
+  const AIResultPanel(
+    this.aiDetectedObject,
+    this.diagnosisOrgan, {
+    Key? key,
+  }) : super(key: key);
 
   @override
   State<AIResultPanel> createState() => _AIResultPanelState();