|
@@ -0,0 +1,142 @@
|
|
|
+<template>
|
|
|
+ <div class="demo-image__placeholder">
|
|
|
+ <div class="block">
|
|
|
+ <el-col :span="20">
|
|
|
+ <el-row>
|
|
|
+ <el-input type="file" v-model="fileName" @change="uploadImg"></el-input>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <!-- 用于展示图片 -->
|
|
|
+ <img id="show-img" class="show-area" />
|
|
|
+ <el-button type="primary" @click="predict" v-show="fileName">Predict</el-button>
|
|
|
+ <!-- 用于存放真实图片 -->
|
|
|
+ <img id="raw-img" style="display: none" />
|
|
|
+ </el-row>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+ <div class="block">
|
|
|
+ <el-col :span="20">
|
|
|
+ <el-row v-loading="loading" class="small-title">
|
|
|
+ <h2 v-if="loading">处理中</h2>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <section v-show="!loading"> 推理共耗时:{{ predictTime }} s</section>
|
|
|
+ </el-row>
|
|
|
+ <el-row v-show="!loading">
|
|
|
+ <img id="predict-img" class="show-area" />
|
|
|
+ </el-row>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { onMounted, ref } from "vue";
|
|
|
+import { IMMagicColor } from '../../../../api/api'
|
|
|
+
|
|
|
+let loading = ref(false)
|
|
|
+const fileName = ref(null);
|
|
|
+
|
|
|
+let predictTime = ref(0)
|
|
|
+
|
|
|
+const canvas = ref(null as unknown as HTMLCanvasElement);
|
|
|
+
|
|
|
+onMounted(async () => {
|
|
|
+ canvas.value = document.getElementById("canvas") as HTMLCanvasElement;
|
|
|
+});
|
|
|
+
|
|
|
+const uploadImg = () => {
|
|
|
+ const reader = new FileReader();
|
|
|
+ const showImg = document.getElementById("show-img") as HTMLImageElement;
|
|
|
+ const rawImg = document.getElementById("raw-img") as HTMLImageElement;
|
|
|
+ const predictImg = document.getElementById("predict-img") as HTMLImageElement;
|
|
|
+ const inputElement = document
|
|
|
+ .getElementsByClassName("el-input")[0]
|
|
|
+ .getElementsByTagName("input")[0];
|
|
|
+
|
|
|
+ try {
|
|
|
+ const file = inputElement.files![0];
|
|
|
+ reader.onload = () => {
|
|
|
+ showImg.src = URL.createObjectURL(file);
|
|
|
+ rawImg.src = URL.createObjectURL(file);
|
|
|
+ };
|
|
|
+ reader.readAsDataURL(file);
|
|
|
+ } catch (err) {
|
|
|
+ console.error(err);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const predict = () => {
|
|
|
+ const showImg = document.getElementById("show-img") as HTMLImageElement;
|
|
|
+ const predictImg = document.getElementById("predict-img") as HTMLImageElement;
|
|
|
+ const inputElement = document
|
|
|
+ .getElementsByClassName("el-input")[0]
|
|
|
+ .getElementsByTagName("input")[0];
|
|
|
+ const file = inputElement.files![0];
|
|
|
+ console.log(file)
|
|
|
+
|
|
|
+ loading.value = !loading.value
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = !loading.value
|
|
|
+ predictImg.src = "https://cdn.pixabay.com/photo/2021/03/14/18/03/cat-6095007_1280.jpg"
|
|
|
+ predictTime.value = Math.ceil(Math.random() * 10);
|
|
|
+ }, 2000);
|
|
|
+
|
|
|
+ // IMMagicColor({
|
|
|
+ // image: file,
|
|
|
+ // }).then(res => {
|
|
|
+ // console.log(res.code)
|
|
|
+ // predictImg.src = res.image
|
|
|
+ // predictTime.value = res.costTime
|
|
|
+
|
|
|
+ // loading.value = !loading.value
|
|
|
+ // })
|
|
|
+}
|
|
|
+
|
|
|
+let src = ''
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.demo-image__placeholder .block {
|
|
|
+ padding: 30px 0;
|
|
|
+ text-align: center;
|
|
|
+ border-right: solid 1px var(--el-border-color);
|
|
|
+ display: inline-block;
|
|
|
+ width: 50%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ vertical-align: top;
|
|
|
+}
|
|
|
+
|
|
|
+.demo-image__placeholder .demonstration {
|
|
|
+ display: block;
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
+ font-size: 14px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.demo-image__placeholder .el-image {
|
|
|
+ padding: 0 5px;
|
|
|
+ max-width: 300px;
|
|
|
+ max-height: 200px;
|
|
|
+}
|
|
|
+
|
|
|
+.demo-image__placeholder.image-slot {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background: var(--el-fill-color-light);
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
+ font-size: 14px;
|
|
|
+}
|
|
|
+
|
|
|
+.demo-image__placeholder .dot {
|
|
|
+ animation: dot 2s infinite steps(3, start);
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.show-area {
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+</style>
|