Browse Source

[web_demo] ocr支持检测与识别结果双向点击,路由重定向,Predict按钮交互

yanxin 1 year ago
parent
commit
f448e1c366

File diff suppressed because it is too large
+ 1 - 1
src/dist/assets/index-f7424683.css


File diff suppressed because it is too large
+ 36 - 36
src/dist/assets/index-088c9830.js


+ 2 - 2
src/dist/index.html

@@ -4,8 +4,8 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>DocumentAI Web Demo</title>
-    <script type="module" crossorigin src="./assets/index-088c9830.js"></script>
-    <link rel="stylesheet" href="./assets/index-f7424683.css">
+    <script type="module" crossorigin src="./assets/index-5b454dba.js"></script>
+    <link rel="stylesheet" href="./assets/index-0239e196.css">
   </head>
   <body>
     <div id="app"></div>

+ 20 - 0
src/pages/main/router/index.ts

@@ -36,4 +36,24 @@ const router = createRouter({
   ],
 });
 
+let isAuthenticated = false; // 初始化用户登录状态
+
+function check_login()
+{
+  if (isAuthenticated) { // 根据需要判断用户是否已经登录
+    return true;
+  } else {
+    isAuthenticated = true;
+    return false;
+  }
+}
+
+router.beforeEach((to, from, next) => {
+  if (from.path === '/' && !check_login()) { // 如果目标路径为根路径,则放行请求
+    next('/')
+  } else { // 否则将目标路径重定向到根路径
+    next()
+  }
+})
+
 export default router;

+ 29 - 6
src/pages/main/views/Detection/LayoutAnalysis.vue

@@ -13,7 +13,7 @@
       <div class="common-layout">
         <el-container>
           <el-input type="file" v-model="fileName" @change="uploadImg"></el-input>
-          <el-button type="primary" @click="predict">Predict</el-button>
+          <el-button type="primary" @click="predict" :loading="loading">Predict</el-button>
         </el-container>
       </div>
       <div v-show="is_pdf">
@@ -279,7 +279,7 @@ const uploadImg = () => {
 
 type RectWithId = fabric.Rect & { id: number };
 
-function CreateRect(canvas: any, i: number, left: number, top: number, width: number, height: number, highlight: boolean) {
+function CreateRect(canvas: any, i: number, left: number, top: number, width: number, height: number, highlight: boolean, label: number) {
   var rect = new fabric.Rect({
     left: left,
     top: top,
@@ -293,6 +293,27 @@ function CreateRect(canvas: any, i: number, left: number, top: number, width: nu
     name: highlight ? 'high' : 'normal',
   }) as RectWithId;
   rect.set('id', i);
+  // rect.on('mouseup', function () {
+  //   if (label == 1) {
+  //     figureSelectedItem.value = i;
+  //   } else if (label == 2) {
+  //     tableSelectedItem.value = i;
+  //   }
+
+  //   let objects = fa_canvas.getObjects();
+  //   for (let i = 0; i < objects.length; i++) {
+  //     if (objects[i].name === 'high') {
+  //       // 找到名为 rectName 的矩形元素,执行删除操作等
+  //       fa_canvas.remove(objects[i]);
+  //       break;
+  //     }
+  //   }
+  //   if (label == 1) {
+  //     CreateRect(fa_canvas, i, figure_rects[i].left, figure_rects[i].top, figure_rects[i].width, figure_rects[i].height, true, label);
+  //   } else if (label == 2) {
+  //     CreateRect(fa_canvas, i, table_rects[i].left, table_rects[i].top, table_rects[i].width, table_rects[i].height, true, label);
+  //   }
+  // });
   canvas.add(rect);
 }
 
@@ -341,11 +362,12 @@ const predict = async () => {
             if (tmp_labels[i] == "Figure") {
               figureArr.value.push("图片" + String(figureArr.value.length + 1));
               figure_rects.push(rect);
+              CreateRect(fa_canvas, i, left, top, width, height, false, 1);
             } else if (tmp_labels[i] == "Table_0" || tmp_labels[i] == "Table_std") {
               tableArr.value.push("表格" + String(tableArr.value.length + 1));
               table_rects.push(rect);
+              CreateRect(fa_canvas, i, left, top, width, height, false, 2);
             }
-            CreateRect(fa_canvas, i, left, top, width, height, false);
           }
           // if (figureArr.value.length == 0)
           //   figureArr.value.push("无");
@@ -390,11 +412,12 @@ const predict = async () => {
           if (tmp_labels[i] == "Figure") {
             figureArr.value.push("图片");
             figure_rects.push(rect);
+            CreateRect(fa_canvas, i, left, top, width, height, false, 1);
           } else if (tmp_labels[i] == "Table_0" || tmp_labels[i] == "Table_std") {
             tableArr.value.push("表格(" + tmp_labels[i] + ")");
             table_rects.push(rect);
+            CreateRect(fa_canvas, i, left, top, width, height, false, 2);
           }
-          CreateRect(fa_canvas, i, left, top, width, height, false);
         }
         figureArr.value.reverse();
         tableArr.value.reverse();
@@ -448,7 +471,7 @@ async function figureHandleClick(index: any, item: any, rects: any) {
       break;
     }
   }
-  CreateRect(fa_canvas, index, rects[index].left, rects[index].top, rects[index].width, rects[index].height, true);
+  CreateRect(fa_canvas, index, rects[index].left, rects[index].top, rects[index].width, rects[index].height, true, 1);
 }
 
 async function tableHandleClick(index: any, item: any, rects: any) {
@@ -462,7 +485,7 @@ async function tableHandleClick(index: any, item: any, rects: any) {
       break;
     }
   }
-  CreateRect(fa_canvas, index, rects[index].left, rects[index].top, rects[index].width, rects[index].height, true);
+  CreateRect(fa_canvas, index, rects[index].left, rects[index].top, rects[index].width, rects[index].height, true, 2);
 }
 </script>
 

+ 2 - 2
src/pages/main/views/ImageProcess/magicColor.vue

@@ -13,7 +13,7 @@
       <div class="common-layout">
         <el-container>
           <el-input type="file" v-model="fileName" @change="uploadImg"></el-input>
-          <el-button type="primary" @click="predict">Predict</el-button>
+          <el-button type="primary" @click="predict" :loading="loading">Predict</el-button>
         </el-container>
       </div>
       <el-row v-show="!is_pdf">
@@ -48,7 +48,7 @@
         <h4></h4>
         <h4></h4>
       </div>
-      <el-row v-loading="loading" class="small-title">
+      <el-row class="small-title">
         <h4></h4>
         <h4></h4>
       </el-row>

+ 13 - 3
src/pages/main/views/Recognize/ocr.vue

@@ -16,7 +16,7 @@
           <el-container>
             <el-input type="file" v-model="fileName" @change="uploadImg"></el-input>
             <OcrLangList />
-            <el-button type="primary" @click="predict">Predict</el-button>
+            <el-button type="primary" @click="predict" :loading="loading">Predict</el-button>
           </el-container>
         </div>
       </el-row>
@@ -45,8 +45,6 @@
       <el-row class="small-title">
         <h2>文字区域检测</h2>
       </el-row>
-      <el-row v-loading="loading" class="small-title">
-      </el-row>
       <el-row>
         <div>
           <img id="show-img" class="show-area" />
@@ -306,6 +304,18 @@ function CreateRect(canvas: any, i: number, left: number, top: number, width: nu
     name: highlight ? 'high' : 'normal',
   }) as RectWithId;
   rect.set('id', i);
+  rect.on('mouseup', function () {
+    selectedItem.value = i;
+    let objects = fa_canvas.getObjects();
+    for (let i = 0; i < objects.length; i++) {
+      if (objects[i].name === 'high') {
+        // 找到名为 rectName 的矩形元素,执行删除操作等
+        fa_canvas.remove(objects[i]);
+        break;
+      }
+    }
+    CreateRect(fa_canvas, i, rects[i].left, rects[i].top, rects[i].width, rects[i].height, true);
+  });
   canvas.add(rect);
   // canvas.renderAll();
 }

+ 3 - 6
src/pages/main/views/Recognize/tableRec.vue

@@ -1,7 +1,7 @@
 <!--  -->
 <template>
   <el-row :gutter="20">
-    <el-col :span="12" class="place">
+    <el-col :span="8" class="place">
       <el-row class="small-title">
         <h2>通用表格识别</h2>
       </el-row>
@@ -15,7 +15,7 @@
         <el-container>
           <el-input type="file" v-model="fileName" @change="uploadImg"></el-input>
           <OcrLangList />
-          <el-button type="primary" @click="predict">Predict</el-button>
+          <el-button type="primary" @click="predict" :loading="loading">Predict</el-button>
         </el-container>
       </div>
       <el-row v-show="!is_pdf">
@@ -38,14 +38,11 @@
       </div>
       <canvas id="canvas" style="display: none;"></canvas>
     </el-col>
-    <el-col :span="12" class="place">
+    <el-col :span="16" class="place">
       <el-row class="small-title">
         <h2 style="margin-right: 100;">识别结果展示</h2>
         <el-button type="danger" @click="submitBug" disabled>提交bug</el-button>
       </el-row>
-      <el-row v-loading="loading" class="small-title">
-        <!-- <p v-if="loading">处理中</p> -->
-      </el-row>
       <div class="demo-collapse">
         <el-collapse v-model="activeName" accordion>
           <el-collapse-item title="JSON识别结果" name="1">