0
点赞
收藏
分享

微信扫一扫

实战-高拍仪使用

项目所需联调高拍仪接口:

前端小白看demo晕

由于不懂vue3,总觉得和vue3有关的代码都很高深

一看 setUp() defineComponent ref 就方寸大乱

后来经过前辈帮助搜索 vue2  替代 vue3 的ref 函数的用法 出来的结果,有了思路

实战-高拍仪使用_视频模式

原来就是ref创建响应式数据呀,简单!我直接将定义的ref数据放到data里了然后将setUp方法里的函数移到methods里,完美实现接口联调!

改后的代码:

<script type="text/babel">
  const baseURL = "<%=basePath%>";
  const service = axios.create({
    baseURL: baseURL,
    timeout: 10000, // 超时时间
    withCredentials: true,
  })
  service.interceptors.request.use(config => {
    // 请求头中携带token数据 - 需要注意后端配置
    // config.headers['sid'] = token
    /* 兼容ie缓存问题 */
    if (config.method === 'get') {
      if (config.params) {
        config.params['date'] = new Date().getTime()
      } else {
        config.url = config.url + `?date=` + new Date().getTime()
      }
    }
    return config
  }, error => {
    ELEMENT.Message({
      message: '错误信息:' + error,
      type: 'warning'
    });
    return Promise.reject(error)
  })
  service.interceptors.response.use(resData => {
    //将响应文件名信息直接添加挂载rea.data
    if (resData.headers['content-disposition']) {
      resData.data.contentDisposition = resData.headers['content-disposition']
    }
    /**
     * response.status 为 HTTP 状态码
     */
    if (resData.status >= 200 && resData.status < 300) {
      /**
       * 获取响应数据,处理前后端接口规范内容
       */
      const {code, result, msg} = resData.data
      if (code === 1) {  // 成功code==1
        return result
      } else if (code === 10012) {
        ELEMENT.Message({
          message: 'token已过期,请您重新登录!',
          type: 'warning'
        });
        location.reload()
      } else {
        // 提示框 code非1
        if (msg == undefined) {
          return resData // blob数据流返回没有msg
        }
        ELEMENT.Message({
          message: msg,
          type: 'warning'
        });
      }
    }
  }, error => {
    ELEMENT.Message({
      message: '错误信息:' + error,
      type: 'warning'
    });
    return Promise.reject(error)
  })

  const app = new Vue({
      el: '#cardOutSide',
      name: "cardOutSide",
      data: function () {
        return {
          view1_mode_list:[],
          view1_mode_selected:'1',
          view1_resolution_selected:'',
          view2_mode_list:[],
          view2_mode_selected:'1',
          view2_resolution_list:[],
          view2_resolution_selected:'',
          view1_resolution_list:[]
        }
      },
      computed: {},
      created() {
        const that = this;
        // 加载主摄像头视频模式
        let view1_mode_data1 = {"camidx": "0", "mode": "0"};
        let view1_mode_data2 = {"camidx": "0", "mode": "1"};
        axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(view1_mode_data2)).then((res) => {
          if (res.data.data.split("|").length > 1) {
            let data = new Object()
            data.key = '1'
            data.value = 'MJPG'
            this.view1_mode_list.push(data)
          }
        })
        axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(view1_mode_data1)).then((res) => {
          if (res.data.data.split("|").length > 1) {
            let data = new Object()
            data.key = '0'
            data.value = 'YUY2'
            this.view1_mode_list.push(data)
          }
        })

        // 加载主摄像头分辨率
        let view1_resolution_power_data = {"camidx": "0", "mode": this.view1_mode_selected}
        axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(view1_resolution_power_data)).then((res) => {
          let resolution_list = res.data.data.split("|");
          this.view1_resolution_selected = resolution_list[0]
          for (var i = 0; i < resolution_list.length; i++) {
            this.view1_resolution_list.push(resolution_list[i])
          }
        })

        // 加载副摄像头视频模式
        let view2_mode_data1 = {"camidx": "1", "mode": "0"};
        let view2_mode_data2 = {"camidx": "1", "mode": "1"};
        axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(view2_mode_data2)).then((res) => {
          if (res.data.data.split("|").length > 1) {
            let data = new Object()
            data.key = '1'
            data.value = 'MJPG'
            this.view2_mode_list.push(data)
          }
        })
        axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(view2_mode_data1)).then((res) => {
          if (res.data.data.split("|").length > 1) {
            let data = new Object()
            data.key = '0'
            data.value = 'YUY2'
            this.view2_mode_list.push(data)
          }
        })

        // 加载副摄像头分辨率
        let view2_resolution_power_data = {"camidx": "1", "mode": this.view2_mode_selected}
        axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(view2_resolution_power_data)).then((res) => {
          let resolution_list = res.data.data.split("|");
          this.view2_resolution_selected = resolution_list[0]
          for (var i = 0; i < resolution_list.length; i++) {
            this.view2_resolution_list.push(resolution_list[i])
          }
        })
      },
      // setup() {



        // let view1_mode_list = ref([])              // 主摄像头视频模式
        // let view1_mode_selected = ref('1')         // 主摄像头视频模式当前选项
        // let view1_resolution_list = ref([])        // 主摄像头分辨率
        // let view1_resolution_selected = ref('')    // 主摄像头分辨率当前选项
        //
        // let view2_mode_list = ref([])              // 副摄像头视频模式
        // let view2_mode_selected = ref('1')         // 副摄像头视频模式当前选项
        // let view2_resolution_list = ref([])        // 副摄像头分辨率
        // let view2_resolution_selected = ref('')    // 副摄像头分辨率当前选项


        // 打开主摄像头


        // 关闭主摄像头


        // 打开副摄像头




        // return {
        //   mylog, add_image,
        //   view1_mode_list, view1_mode_selected, view1_resolution_list, view1_resolution_selected,
        //   view2_mode_list, view2_mode_selected, view2_resolution_list, view2_resolution_selected,
        //   view1_mode_change, view2_mode_change,
        //   open_view1, close_view1, open_view2, close_view2, rotate,
        //   view1_scan, view2_scan, flat_scan, open_auto_scan, close_auto_scan,
        //   getcode, getbiokey, getidcard, sign_a, sign_a_get,
        //   start_video, end_video, get_state_video, get_audio,
        //   open_a3a4, close_a3a4,
        //   add_pdf, save_pdf,
        //   is_living_person, person_and_IDCard, ocr,
        //   getequipmenttype, getsonixserialnumber, get_state, is_con,
        //   open_serialport, close_serialport, sign_r, sign_r_get
        // }
      // },
      mounted() {
        // 监听页面大小
        let that = this
        window.onresize = () => {
          return (() => {
            window.screenWidth = document.body.clientWidth
            that.screenWidth = window.screenWidth
          })()
        }
      },
      watch: {
        screenWidth(val) {
          // 为了避免频繁触发resize函数导致页面卡顿,使用定时器
          if (!this.timer) {
            // 一旦监听到的screenWidth值改变,就将其重新赋给data里的screenWidth
            this.screenWidth = val
            this.timer = true
            let that = this
            setTimeout(function () {
              // 打印screenWidth变化的值
              if (that.screenWidth < 1000) {
                that.isShrink = false;
              } else {
                that.isShrink = true;
              }
              that.timer = false
            }, 400)
          }
        }
      },
      methods: {
        // 打印日志
         mylog  (val)  {
          let element = document.getElementById('mylog')
          let old_val = element.innerHTML
          let date = new Date().toString().slice(16, 24)
          element.innerHTML = date + '  ' + val + '<br>' + old_val;
        },

        // 添加缩略图
         add_image  (img_base64)  {
          let img = document.createElement('img');
          img.src = "data:image/jpg;base64," + img_base64;
          img.style.width = '80px';
          img.style.height = '80px';
          document.getElementById('suoluetu').appendChild(img)
        },

        // 切换主摄像头视频模式,重新加载主摄像头分辨率
         view1_mode_change  (val)  {
          let data = {"camidx": '0', "mode": val}
          axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(data)).then((res) => {
            let resolution_list = res.data.data.split("|");
            view1_resolution_selected = resolution_list[0]
            view1_resolution_list = []
            for (var i = 0; i < resolution_list.length; i++) {
              view1_resolution_list.push(resolution_list[i])
            }
          })
        },

        // 切换副摄像头视频模式,重新加载副摄像头分辨率
         view2_mode_change  (val)  {
          let data = {"camidx": '1', "mode": val}
          axios.post("http://192.168.101.171:38088/device=getresolution", JSON.stringify(data)).then((res) => {
            let resolution_list = res.data.data.split("|");
            view2_resolution_selected = resolution_list[0]
            view2_resolution_list = []
            for (var i = 0; i < resolution_list.length; i++) {
              view2_resolution_list.push(resolution_list[i])
            }
          })
        },
        open_view1  () {
           console.log('打开主摄像头成功')
          document.getElementById('view1').src = 'http://192.168.101.171:38088/video=stream&camidx=0?1'
          this.mylog('打开主摄像头成功')
        },
        close_view1  () {
          const that = this
          let data = {"camidx": "0"}
          axios.post("http://192.168.101.171:38088/video=close", JSON.stringify(data)).then(() => {
            document.getElementById('view1').src = ''
            that.mylog('关闭主摄像头成功')
          })
        },
         open_view2 ()  {
          document.getElementById('view2').src = 'http://192.168.101.171:38088/video=stream&camidx=1?1'
          this.mylog('打开副摄像头成功')
        },
        // 关闭副摄像头
         close_view2  ()  {
           const that = this
          let data = {"camidx": "1"}
          axios.post("http://192.168.101.171:38088/video=close", JSON.stringify(data)).then(() => {
            document.getElementById('view2').src = ''
            that.mylog('关闭副摄像头成功')
          })
        },

        // 旋转
        rotate  (angle) {
           const that = this
          let data = {"camidx": '0', "rotate": String(angle)}
          axios.post("http://192.168.101.171:38088/video=rotate", JSON.stringify(data)).then((res) => {
            that.mylog("旋转" + String(angle) + "度成功")
          })
        },

        // 主头拍照
         view1_scan  ()  {
           const that = this;
          let data = {
            "filepath": "base64",
            "rotate": "0",
            "cutpage": "0",
            "camidx": "0",
            "ColorMode": "0",
            "quality": "3"
          }
          axios.post("http://192.168.101.171:38088/video=grabimage", JSON.stringify(data)).then((res) => {
            that.add_image(res.data.photoBase64)
            that.mylog("主头拍照成功")
            that.mylog('图片base64: ' + res.data.photoBase64)
            that.mylog('图片: ' + res.data)
            const imageUpload = {
              "content": res.data.photoBase64,
              "name": "1.jpg"
            }
            axios.post("http://visitor-boot-local.hc.com:9090/TEMPORARY_VISITOR/wxUpload/uploadBase64", imageUpload).then((res) => {
              that.mylog(res)
            })
          })
        },

        // 副头拍照
        view2_scan () {
           const that = this;
          let data = {
            "filepath": "base64",
            "rotate": "0",
            "cutpage": "0",
            "camidx": "1",
            "ColorMode": "0",
            "quality": "3"
          }
          axios.post("http://192.168.101.171:38088/video=grabimage", JSON.stringify(data)).then((res) => {
            that.add_image(res.data.photoBase64)
            that.mylog("副头拍照成功")
            that.mylog('图片base64: ' + res.data.photoBase64)
          })
        },

        // 展平拍照
         flat_scan  ()  {
           const that = this;
          let data = {
            "filepath": "",
            "rotate": "0",
            "camidx": "0",
            "cutpage": "0",
            "autoflat": {
              "flat": "1",
              "leftfilepath": "D://left.jpg",
              "rightfilepath": "D://right.jpg",
              "removefinger": "1",
              "doublepage": "1"
            }
          }
          axios.post("http://192.168.101.171:38088/video=autoflat", JSON.stringify(data)).then((res) => {
            that.add_image(res.data.photoBase64)
            that.add_image(res.data.leftphotoBase64)
            that.add_image(res.data.rightphotoBase64)
            that.mylog("展平拍照成功")
          })
        },

        // 开启自动拍照
        open_auto_scan  ()  {
           const that = this;
          let data = {
            "movedetecflag": "1",
            "listpath": "D://a",
            "filepath": "hy"
          }
          axios.post("http://192.168.101.171:38088/video=movedetec", JSON.stringify(data)).then(() => {
            that.add_image(res.data.data)
            that.mylog("这是自动拍摄的图片")
          })
        },

        // 关闭自动拍照
         close_auto_scan  ()  {
           const that = this
          let data = {"movedetecflag": "0"}
          axios.post("http://192.168.101.171:38088/video=movedetec", JSON.stringify(data)).then(() => {
            that.mylog('关闭自动拍照成功')
          })
        },

        // 条码识别
         getcode  ()  {
           const that = this;
          let data = {"time": "20"}
          axios.post("http://192.168.101.171:38088/barcode=get", JSON.stringify(data)).then((res) => {
            for (let i = 0; i < res.data.data.length; i++) {
              that.mylog(res.data.data[i].barcodedata)
            }
            that.mylog("识别成功,条码数量" + res.data.data.length + "个,分别是:")
          })
        },

        // 获取指纹
         getbiokey ()  {
           const that = this;
          let data = {"time": "20"}
          axios.post("http://192.168.101.171:38088/biokey=get", JSON.stringify(data)).then((res) => {
            that.add_image(res.data.data)
            that.mylog("获取指纹成功")
          })
        },

        // 读取身份证
         getidcard  ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/card=idcard").then((res) => {
            that.add_image(res.data.IDCardInfo.photoBase64)
            that.add_image(res.data.IDCardInfo.photoBase64_Z)
            that.add_image(res.data.IDCardInfo.photoBase64_F)
            that.mylog('身份证UID:' + res.data.IDCardInfo.strIDUID)
            that.mylog('身份证附加信息:' + res.data.IDCardInfo.appendMsg)
            that.mylog('身份证民族代码:' + res.data.IDCardInfo.nationCode)
            that.mylog('身份证性别代码:' + res.data.IDCardInfo.sexCode)
            that.mylog('身份证有效终止日期:' + res.data.IDCardInfo.validEnd)
            that.mylog('身份证有效起始日期:' + res.data.IDCardInfo.validStart)
            that.mylog('身份证发卡机构:' + res.data.IDCardInfo.issueOrgan)
            that.mylog('身份证号码:' + res.data.IDCardInfo.cardID)
            that.mylog('身份证地址:' + res.data.IDCardInfo.address)
            that.mylog('身份证生日:' + res.data.IDCardInfo.birthday)
            that.mylog('身份证性别:' + res.data.IDCardInfo.sex)
            that.mylog('身份证姓名:' + res.data.IDCardInfo.name)
          })
        },

        // 弹出签字窗口: GW500A & GW1000A
         sign_a  () {
           const that =  this;
          let data = {
            "pos": {
              "top": "250",
              "left": "280",
              "width": "600",
              "height": "250"
            },
            "remark": "开始签名"
          }
          axios.post("http://192.168.101.171:38088/serialport=sign", JSON.stringify(data)).then((res) => {
            that.mylog(res.data.message)
          })
        },

        // 获取签字图片:GW500A & GW1000A
         sign_a_get ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/pendisplay=getsigndata").then((res) => {
            that.add_image(res.data.data)
            that.mylog("获取签字图片成功")
          })
        },

        //---------------------------------------------视频录制-------------------------------------
        // 开始录制视频
         start_video  ()  {
           const that = this;
          let data = {
            "action": "start",
            "parameter": {
              "camidx": "0",
              "width": "640",
              "height": "480",
              "audio": "",
              "framerate": "10",
              "filepath": "",
              "bit_rate": "400000"
            }
          }
          axios.post("http://192.168.101.171:38088/video=record", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog("视频录制中..., 文件存储地址:" + res.data.filepath)
            } else {
              that.mylog("开始录制失败")
            }
          })
        },

        // 结束录制视频
         end_video  ()  {
           const that = this;
          let data = {"action": "stop"}
          axios.post("http://192.168.101.171:38088/video=record", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog('录制时长:' + res.data.time)
            } else {
              that.mylog("结束录制视频失败")
            }
          })
        },

        // 获取录制视频状态
         get_state_video  ()  {
           const that = this
          let data = {"action": "status"}
          axios.post("http://192.168.101.171:38088/video=record", JSON.stringify(data)).then((res) => {
            that.mylog("提示:设备状态,100:空闲,101:录像中,102:设备错误")
            that.mylog("当前状态:" + res.data.status)
          })
        },

        // 获取音频列表
         get_audio  ()  {
           const that = this;
          let data = {"action": "audio"}
          axios.post("http://192.168.101.171:38088/video=record", JSON.stringify(data)).then((res) => {
            that.mylog("音频设备列表:" + res.data.audio)
          })
        },

        //---------------------------------------------A3A4幅面自动切换-----------------------------
        // 开启A3A4幅面自动切换
         open_a3a4  ()  {
           const that = this;
          let data = {
            "switchflag": "1",
            "a3size": "0.5",
            "a4size": "0.9"
          }
          axios.post("http://192.168.101.171:38088/device=a3a4switch", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog("开启幅面自动切换成功")
            } else {
              that.mylog("开启幅面自动切换失败")
            }
          })
        },

        // 关闭A3A4幅面自动切换
         close_a3a4  ()  {
           const that = this;
          let data = {
            "switchflag": "0",
            "a3size": "0.5",
            "a4size": "0.9"
          }
          axios.post("http://192.168.101.171:38088/device=a3a4switch", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog("关闭幅面自动切换成功")
            } else {
              that.mylog("关闭幅面自动切换失败")
            }
          })
        },

        //---------------------------------------------pdf-----------------------------------------
        // 拍照并加入PDF队列
         add_pdf  ()  {
           const that = this;
          let data1 = {
            "filepath": "base64",
            "rotate": "0",
            "cutpage": "0",
            "camidx": "0",
            "quality": "5"
          }
          axios.post("http://192.168.101.171:38088/video=grabimage", JSON.stringify(data1)).then((res1) => {
            if (res1.data.code == '0') {
              that.add_image(res1.data.photoBase64)

              let data2 = {
                "ImagePath": "",
                "ImageBase64": res1.data.photoBase64
              }
              axios.post("http://192.168.101.171:38088/pdf=addimage", JSON.stringify(data2)).then((res2) => {
                if (res2.data.code == '0') {
                  that.mylog("拍照成功,并加入到PDF队列中")
                } else {
                  that.mylog("加入PDF队列失败")
                }
              })
            } else {
              that.mylog("拍照失败,请重新拍摄")
            }
          })
        },

        // 生成PDF文件
         save_pdf  ()  {
           const that = this;
          let data = {"PdfPath": "D://pdf.pdf"}
          axios.post("http://192.168.101.171:38088/pdf=save", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog("PDF保存成功")
            }
          })
        },

        //---------------------------------------------人脸-----------------------------------------
        // 活体检测
         is_living_person  ()  {
           const that = this;
          let data = {"time": "20"}
          axios.post("http://192.168.101.171:38088/faceLive=start", JSON.stringify(data)).then((res) => {
            that.mylog("提示:比对结果,-1:失败;0:图片;1:成功")
            that.mylog("检测结果:" + res.data.data)
          })
        },

        // 人证比对
         person_and_IDCard  ()  {
           const that = this;
          // 1.读取身份证
          axios.post("http://192.168.101.171:38088/card=idcard").then((res1) => {
            if (res1.data.code == '0') {
              that.add_image(res1.data.IDCardInfo.photoBase64)
              // 2.拍摄人脸
              let data2 = {
                "filepath": "base64",
                "rotate": "0",
                "cutpage": "0",
                "camidx": "1",
                "quality": "5"
              }
              axios.post("http://192.168.101.171:38088/video=grabimage", JSON.stringify(data2)).then((res2) => {
                that.add_image(res2.data.photoBase64)
                // 3.比对
                let data3 = {
                  "FaceOne": res1.data.IDCardInfo.photoBase64,
                  "FaceTwo": res2.data.photoBase64
                }
                axios.post("http://192.168.101.171:38088/comparison=imgdata", JSON.stringify(data3)).then((res3) => {
                  that.mylog("提示:比对值大于50可以认为是同一个人")
                  that.mylog("比对值:" + res3.data.data)
                })
              })
            } else {
              that.mylog("请放身份证,重新点击此按钮")
            }
          })
        },

        // ocr
         ocr  ()  {
           const that = this;
          // ocr 是从图片中识别的,所以需要先拍一张图片保存本地,然后在做ocr识别
          let data1 = {
            "filepath": "",
            "rotate": "0",
            "cutpage": "0",
            "camidx": "0"
          }
          axios.post("http://192.168.101.171:38088/video=grabimage", JSON.stringify(data1)).then((res1) => {
            that.add_image(res1.data.photoBase64)
            that.mylog("识别中。。。")
            let data2 = {
              "ocrflag": "1",
              "picfilepath": res1.data.filepath,
              "savefilepath": "D://ocr.pdf"
            }
            axios.post("http://192.168.101.171:38088/video=ocr", JSON.stringify(data2)).then((res2) => {
              if (res2.data.code == '0') {
                that.mylog("识别成功")
              } else {
                that.mylog("识别失败")
              }
            })
          })
        },

        //---------------------------------------------设备-----------------------------------------
        // 获取设备型号
        getequipmenttype  ()  {
          const that = this;
          axios.post("http://192.168.101.171:38088/device=getequipmenttype").then((res) => {
            that.mylog("设备型号:" + res.data.data)
          })
        },

        // 获取设备序列号
         getsonixserialnumber ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/device=getsonixserialnumber").then((res) => {
            that.mylog("设备序列号:" + res.data.data)
          })
        },

        // 获取设备状态
         get_state  ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/video=status").then((res) => {
            that.mylog("提示:no:未连接;ok:已连接;run:已连接且运行")
            that.mylog("副摄像头:" + res.data.video1)
            that.mylog("主摄像头:" + res.data.video0)
          })
        },

        // 判断设备是否连接
         is_con  ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/device=isconnect").then((res) => {
            that.mylog("设备连接数:" + res.data.data)
          })
        },

        //---------------------------------------------串口-----------------------------------------
        // 打开串口
         open_serialport  ()  {
           const that = this;
          let data = {
            "port": "0",
            "baud": "115200",
            "parity": "0",
            "databits": "8",
            "stopbits": "0"
          }
          axios.post("http://192.168.101.171:38088/serialport=initserialport", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog("打开串口成功")
            }
          })
        },

        // 关闭串口
         close_serialport ()  {
           const that = this;
          let data = {"port": "0"}
          axios.post("http://192.168.101.171:38088/serialport=deinitserialport", JSON.stringify(data)).then((res) => {
            if (res.data.code == '0') {
              that.mylog("关闭串口成功")
            }
          })
        },

        // 弹出签字窗口: GW500R & GW1000R
         sign_r  ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/serialport=sign").then((res) => {
            if (res.data.code == '0') {
              that.mylog('弹出签字窗口成功')
            }
          })
        },

        // 获取签名图片
         sign_r_get ()  {
           const that = this;
          axios.post("http://192.168.101.171:38088/serialport=getdata").then((res) => {
            that.add_image(res.data.data)
            that.mylog("获取签名图片成功")
          })
        },
      }
    })
  ;
</script>

高拍仪demo样例

<template>
  <!-- 高拍仪视频预览区 -->
  <div id="view">
    <img id="view1" src="http://127.0.0.1:38088/video=stream&camidx=0" alt="主摄像头">
    <img id="view2" src="http://127.0.0.1:38088/video=stream&camidx=1" alt="副摄像头">
  </div>
  <!-- 缩略图 -->
  <div id="suoluetu"></div>
  <!-- 功能按钮 -->
  <div id="myactive">
    主摄像头视频模式:<select id="view1_mode" v-model="view1_mode_selected" @change="view1_mode_change(view1_mode_selected)"><option v-for="item in view1_mode_list" :key="item.key" :value="item.key">{{item.value}}</option></select>
    主摄像头分辨率:<select id="view1_resolution_power" v-model="view1_resolution_selected"><option v-for="(item, index) in view1_resolution_list" :key="index" :value="item">{{item}}</option></select>
    副摄像头视频模式:<select id="view2_mode" v-model="view2_mode_selected" @change="view2_mode_change(view2_mode_selected)"><option v-for="item in view2_mode_list" :key="item.key" :value="item.key">{{item.value}}</option></select>
    副摄像头分辨率:<select id="view2_resolution_power" v-model="view2_resolution_selected"><option v-for="(item, index) in view2_resolution_list" :key="index" :value="item">{{item}}</option></select>
    <br>
    <button @click="open_view1">打开主摄像头视频</button>
    <button @click="close_view1">关闭主摄像头视频</button>
    <button @click="open_view2">打开副摄像头视频</button>
    <button @click="close_view2">关闭副摄像头视频</button>
    <button @click="rotate(90)">左转</button>
    <button @click="rotate(270)">右转</button>
    <br>
    <button @click="view1_scan">主摄像头拍照</button>
    <button @click="view2_scan">副摄像头拍照</button>
    <button @click="flat_scan">展平拍照</button>
    <button @click="open_auto_scan">开启自动拍照</button>
    <button @click="close_auto_scan">关闭自动拍照</button>
    <br>
    <button @click="getcode">条码识别</button>
    <button @click="getbiokey">获取指纹</button>
    <button @click="getidcard">读取身份证</button>
    <button @click="sign_a">弹出签字窗口:GW500A & GW1000A</button>
    <button @click="sign_a_get">获取签名图片:GW500A & GW1000A</button>
    <br>
    <button @click="start_video">开始录制视频</button>
    <button @click="end_video">结束录制视频</button>
    <button @click="get_state_video">获取视频录制状态</button>
    <button @click="get_audio">获取音频设备列表</button>
    <br>
    <button @click="open_a3a4">开启A3A4幅面自动切换:S1840</button>
    <button @click="close_a3a4">关闭A3A4幅面自动切换:S1840</button>
    <br>
    <button @click="add_pdf">拍照并加入PDF队列</button>
    <button @click="save_pdf">生成PDF文件</button>
    <br>
    <button @click="is_living_person">活体检测</button>
    <button @click="person_and_IDCard">人证比对</button>
    <br>
    <button @click="ocr">OCR</button>
    <br>
    <button @click="getequipmenttype">获取设备型号</button>
    <button @click="getsonixserialnumber">获取设备序列号</button>
    <button @click="get_state">获取设备状态</button>
    <button @click="is_con">判断设备是否连接</button>
    <br>
    <button @click="open_serialport">打开串口</button>
    <button @click="close_serialport">关闭串口</button>
    <!-- <button>评价窗口弹出</button> -->
    <button @click="sign_r">签字窗口弹出:GW500R & GW1000R</button>
    <button @click="sign_r_get">获取签名图片: GW500R & GW1000R</button>
  </div>
  <!-- 操作日志 -->
  <div id="mylog">首次打开页面,没有显示出分辨率信息?不要急,刷新下页面就可以了<br>我是操做日志,如果我出现问题,请看控制台信息......</div>
</template>

<script>
import {defineComponent, ref} from 'vue'
import axios from 'axios'
export default defineComponent({
  name: 'App',
  created(){
    // 加载主摄像头视频模式
    let view1_mode_data1 = { "camidx": "0", "mode": "0" };
    let view1_mode_data2 = { "camidx": "0", "mode": "1" };
    axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(view1_mode_data2)).then((res)=>{
      if(res.data.data.split("|").length > 1){
        let data = new Object()
        data.key = '1'
        data.value = 'MJPG'
        this.view1_mode_list.push(data)
      }
    })
    axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(view1_mode_data1)).then((res)=>{
      if(res.data.data.split("|").length > 1){
        let data = new Object()
        data.key = '0'
        data.value = 'YUY2'
        this.view1_mode_list.push(data)
      }
    })

    // 加载主摄像头分辨率
    let view1_resolution_power_data = {"camidx": "0", "mode": this.view1_mode_selected}
    axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(view1_resolution_power_data)).then((res)=>{
      let resolution_list = res.data.data.split("|");
      this.view1_resolution_selected = resolution_list[0]
      for(var i=0; i<resolution_list.length; i++){
        this.view1_resolution_list.push(resolution_list[i])
      }
    })

    // 加载副摄像头视频模式
    let view2_mode_data1 = { "camidx": "1", "mode": "0" };
    let view2_mode_data2 = { "camidx": "1", "mode": "1" };
    axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(view2_mode_data2)).then((res)=>{
      if(res.data.data.split("|").length > 1){
        let data = new Object()
        data.key = '1'
        data.value = 'MJPG'
        this.view2_mode_list.push(data)
      }
    })
    axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(view2_mode_data1)).then((res)=>{
      if(res.data.data.split("|").length > 1){
        let data = new Object()
        data.key = '0'
        data.value = 'YUY2'
        this.view2_mode_list.push(data)
      }
    })

    // 加载副摄像头分辨率
    let view2_resolution_power_data = {"camidx": "1", "mode": this.view2_mode_selected}
    axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(view2_resolution_power_data)).then((res)=>{
      let resolution_list = res.data.data.split("|");
      this.view2_resolution_selected = resolution_list[0]
      for(var i=0; i<resolution_list.length; i++){
        this.view2_resolution_list.push(resolution_list[i])
      }
    })
  },
  setup(){
    // 打印日志
    let mylog = (val)=>{
      let element = document.getElementById('mylog')
      let old_val = element.innerHTML
      let date = new Date().toString().slice(16, 24)
      element.innerHTML = date + '  ' + val + '<br>' + old_val;
    }

    // 添加缩略图
    let add_image = (img_base64)=>{
      let img = document.createElement('img');
      img.src = "data:image/jpg;base64," + img_base64;
      img.style.width = '80px';
      img.style.height = '80px';
      document.getElementById('suoluetu').appendChild(img)
    }

    let view1_mode_list = ref([])              // 主摄像头视频模式
    let view1_mode_selected = ref('1')         // 主摄像头视频模式当前选项
    let view1_resolution_list = ref([])        // 主摄像头分辨率
    let view1_resolution_selected = ref('')    // 主摄像头分辨率当前选项

    let view2_mode_list = ref([])              // 副摄像头视频模式
    let view2_mode_selected = ref('1')         // 副摄像头视频模式当前选项
    let view2_resolution_list = ref([])        // 副摄像头分辨率
    let view2_resolution_selected = ref('')    // 副摄像头分辨率当前选项

    // 切换主摄像头视频模式,重新加载主摄像头分辨率
    let view1_mode_change = (val)=>{
      let data = {"camidx": '0', "mode": val}
      axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(data)).then((res)=>{
        let resolution_list = res.data.data.split("|");
        view1_resolution_selected = resolution_list[0]
        view1_resolution_list = []
        for(var i=0; i<resolution_list.length; i++){
          view1_resolution_list.push(resolution_list[i])
        }
      })
    }

    // 切换副摄像头视频模式,重新加载副摄像头分辨率
    let view2_mode_change = (val)=>{
      let data = {"camidx": '1', "mode": val}
      axios.post("http://127.0.0.1:38088/device=getresolution", JSON.stringify(data)).then((res)=>{
        let resolution_list = res.data.data.split("|");
        view2_resolution_selected = resolution_list[0]
        view2_resolution_list = []
        for(var i=0; i<resolution_list.length; i++){
          view2_resolution_list.push(resolution_list[i])
        }
      })
    }

    // 打开主摄像头
    let open_view1 = ()=>{
      document.getElementById('view1').src = 'http://127.0.0.1:38088/video=stream&camidx=0?1'
      mylog('打开主摄像头成功')
    }

    // 关闭主摄像头
    let close_view1 = ()=>{
      let data = {"camidx": "0"}
      axios.post("http://127.0.0.1:38088/video=close", JSON.stringify(data)).then(()=>{
        document.getElementById('view1').src = ''
        mylog('关闭主摄像头成功')
      })
    }

    // 打开副摄像头
    let open_view2 = ()=>{
      document.getElementById('view2').src = 'http://127.0.0.1:38088/video=stream&camidx=1?1'
      mylog('打开副摄像头成功')
    }

    // 关闭副摄像头
    let close_view2 = ()=>{
      let data = {"camidx": "1"}
      axios.post("http://127.0.0.1:38088/video=close", JSON.stringify(data)).then(()=>{
        document.getElementById('view2').src = ''
        mylog('关闭副摄像头成功')
      })
    }

    // 旋转
    let rotate = (angle)=>{
      let data = {"camidx": '0', "rotate": String(angle)}
      axios.post("http://127.0.0.1:38088/video=rotate", JSON.stringify(data)).then((res)=>{
        mylog("旋转" + String(angle) + "度成功")
      })
    }

    // 主头拍照
    let view1_scan = ()=>{
      let data = {
        "filepath": "base64",
        "rotate": "0",
        "cutpage": "0",
        "camidx": "0",
        "ColorMode": "0",
        "quality": "3"
      }
      axios.post("http://127.0.0.1:38088/video=grabimage", JSON.stringify(data)).then((res)=>{
        add_image(res.data.photoBase64)
        mylog("主头拍照成功")
        mylog('图片base64: ' + res.data.photoBase64)
      })
    }

    // 副头拍照
    let view2_scan = ()=>{
      let data = {
        "filepath": "base64",
        "rotate": "0",
        "cutpage": "0",
        "camidx": "1",
        "ColorMode": "0",
        "quality": "3"
      }
      axios.post("http://127.0.0.1:38088/video=grabimage", JSON.stringify(data)).then((res)=>{
        add_image(res.data.photoBase64)
        mylog("副头拍照成功")
        mylog('图片base64: ' + res.data.photoBase64)
      })
    }

    // 展平拍照
    let flat_scan = ()=>{
      let data = {
        "filepath": "",
        "rotate": "0",
        "camidx": "0",
        "cutpage": "0",
        "autoflat": {
          "flat": "1",
          "leftfilepath": "D://left.jpg",
          "rightfilepath": "D://right.jpg",
          "removefinger": "1",
          "doublepage": "1"
        }
      }
      axios.post("http://127.0.0.1:38088/video=autoflat", JSON.stringify(data)).then((res)=>{
        add_image(res.data.photoBase64)
        add_image(res.data.leftphotoBase64)
        add_image(res.data.rightphotoBase64)
        mylog("展平拍照成功")
      })
    }

    // 开启自动拍照
    let open_auto_scan = ()=>{
      let data = {
        "movedetecflag": "1",
        "listpath": "D://a",
        "filepath": "hy"
      }
      axios.post("http://127.0.0.1:38088/video=movedetec", JSON.stringify(data)).then(()=>{
        add_image(res.data.data)
        mylog("这是自动拍摄的图片")
      })
    }

    // 关闭自动拍照
    let close_auto_scan = ()=>{
      let data = {"movedetecflag": "0"}
      axios.post("http://127.0.0.1:38088/video=movedetec", JSON.stringify(data)).then(()=>{
        mylog('关闭自动拍照成功')
      })
    }

    // 条码识别
    let getcode = ()=>{
      let data = {"time": "20"}
      axios.post("http://127.0.0.1:38088/barcode=get", JSON.stringify(data)).then((res)=>{
        for(let i=0; i<res.data.data.length; i++){
          mylog(res.data.data[i].barcodedata)
        }
        mylog("识别成功,条码数量" + res.data.data.length + "个,分别是:")
      })
    }

    // 获取指纹
    let getbiokey = ()=>{
      let data = {"time": "20"}
      axios.post("http://127.0.0.1:38088/biokey=get", JSON.stringify(data)).then((res)=>{
        add_image(res.data.data)
        mylog("获取指纹成功")
      })
    }

    // 读取身份证
    let getidcard = ()=>{
      axios.post("http://127.0.0.1:38088/card=idcard").then((res)=>{
        add_image(res.data.IDCardInfo.photoBase64)
        add_image(res.data.IDCardInfo.photoBase64_Z)
        add_image(res.data.IDCardInfo.photoBase64_F)
        mylog('身份证UID:' + res.data.IDCardInfo.strIDUID)
        mylog('身份证附加信息:' + res.data.IDCardInfo.appendMsg)
        mylog('身份证民族代码:' + res.data.IDCardInfo.nationCode)
        mylog('身份证性别代码:' + res.data.IDCardInfo.sexCode)
        mylog('身份证有效终止日期:' + res.data.IDCardInfo.validEnd)
        mylog('身份证有效起始日期:' + res.data.IDCardInfo.validStart)
        mylog('身份证发卡机构:' + res.data.IDCardInfo.issueOrgan)
        mylog('身份证号码:' + res.data.IDCardInfo.cardID)
        mylog('身份证地址:' + res.data.IDCardInfo.address)
        mylog('身份证生日:' + res.data.IDCardInfo.birthday)
        mylog('身份证性别:' + res.data.IDCardInfo.sex)
        mylog('身份证姓名:' + res.data.IDCardInfo.name)
      })
    }

    // 弹出签字窗口: GW500A & GW1000A
    let sign_a = ()=>{
      let data = {
        "pos": {
          "top": "250",
          "left": "280",
          "width": "600",
          "height": "250"
        },
        "remark": "开始签名"
      }
      axios.post("http://127.0.0.1:38088/serialport=sign", JSON.stringify(data)).then((res)=>{
        mylog(res.data.message)
      })
    }

    // 获取签字图片:GW500A & GW1000A
    let sign_a_get = ()=>{
      axios.post("http://127.0.0.1:38088/pendisplay=getsigndata").then((res)=>{
        add_image(res.data.data)
        mylog("获取签字图片成功")
      })
    }

    //---------------------------------------------视频录制-------------------------------------
    // 开始录制视频
    let start_video = ()=>{
      let data = {
        "action": "start",
        "parameter": {
          "camidx": "0",
          "width": "640",
          "height": "480",
          "audio": "",
          "framerate": "10",
          "filepath": "",
          "bit_rate": "400000"
        }
      }
      axios.post("http://127.0.0.1:38088/video=record", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog("视频录制中..., 文件存储地址:" + res.data.filepath)
        }else{
          mylog("开始录制失败")
        }
      })
    }

    // 结束录制视频
    let end_video = ()=>{
      let data = {"action": "stop"}
      axios.post("http://127.0.0.1:38088/video=record", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog('录制时长:' + res.data.time)
        }else{
          mylog("结束录制视频失败")
        }
      })
    }

    // 获取录制视频状态
    let get_state_video = ()=>{
      let data = {"action": "status"}
      axios.post("http://127.0.0.1:38088/video=record", JSON.stringify(data)).then((res)=>{
        mylog("提示:设备状态,100:空闲,101:录像中,102:设备错误")
        mylog("当前状态:" + res.data.status)
      })
    }

    // 获取音频列表
    let get_audio = ()=>{
      let data = {"action": "audio"}
      axios.post("http://127.0.0.1:38088/video=record", JSON.stringify(data)).then((res)=>{
        mylog("音频设备列表:" + res.data.audio)
      })
    }

    //---------------------------------------------A3A4幅面自动切换-----------------------------
    // 开启A3A4幅面自动切换
    let open_a3a4 = ()=>{
      let data = {
        "switchflag": "1",
        "a3size": "0.5",
        "a4size": "0.9"
      }
      axios.post("http://127.0.0.1:38088/device=a3a4switch", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog("开启幅面自动切换成功")
        }else{
          mylog("开启幅面自动切换失败")
        }
      })
    }

    // 关闭A3A4幅面自动切换
    let close_a3a4 = ()=>{
      let data = {
        "switchflag": "0",
        "a3size": "0.5",
        "a4size": "0.9"
      }
      axios.post("http://127.0.0.1:38088/device=a3a4switch", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog("关闭幅面自动切换成功")
        }else{
          mylog("关闭幅面自动切换失败")
        }
      })
    }

    //---------------------------------------------pdf-----------------------------------------
    // 拍照并加入PDF队列
    let add_pdf = ()=>{
      let data1 = {
        "filepath": "base64",
        "rotate": "0",
        "cutpage": "0",
        "camidx": "0",
        "quality": "5"
      }
      axios.post("http://127.0.0.1:38088/video=grabimage", JSON.stringify(data1)).then((res1)=>{
        if(res1.data.code == '0'){
          add_image(res1.data.photoBase64)
          
          let data2 = {
            "ImagePath": "",
            "ImageBase64": res1.data.photoBase64
          }
          axios.post("http://127.0.0.1:38088/pdf=addimage", JSON.stringify(data2)).then((res2)=>{
            if(res2.data.code == '0'){
              mylog("拍照成功,并加入到PDF队列中")
            }else{
              mylog("加入PDF队列失败")
            }
          })
        }else{
          mylog("拍照失败,请重新拍摄")
        }
      })
    }

    // 生成PDF文件
    let save_pdf = ()=>{
      let data = {"PdfPath": "D://pdf.pdf"}
      axios.post("http://127.0.0.1:38088/pdf=save", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog("PDF保存成功")
        }
      })
    }

    //---------------------------------------------人脸-----------------------------------------
    // 活体检测
    let is_living_person = ()=>{
      let data = {"time": "20"}
      axios.post("http://127.0.0.1:38088/faceLive=start", JSON.stringify(data)).then((res)=>{
        mylog("提示:比对结果,-1:失败;0:图片;1:成功")
        mylog("检测结果:" + res.data.data)
      })
    }

    // 人证比对
    let person_and_IDCard = ()=>{
      // 1.读取身份证
      axios.post("http://127.0.0.1:38088/card=idcard").then((res1)=>{
        if(res1.data.code == '0'){
          add_image(res1.data.IDCardInfo.photoBase64)
          // 2.拍摄人脸
          let data2 = {
            "filepath": "base64",
            "rotate": "0",
            "cutpage": "0",
            "camidx": "1",
            "quality": "5"
          }
          axios.post("http://127.0.0.1:38088/video=grabimage", JSON.stringify(data2)).then((res2)=>{
            add_image(res2.data.photoBase64)
            // 3.比对
            let data3 = {
              "FaceOne": res1.data.IDCardInfo.photoBase64,
              "FaceTwo": res2.data.photoBase64
            }
            axios.post("http://127.0.0.1:38088/comparison=imgdata", JSON.stringify(data3)).then((res3)=>{
              mylog("提示:比对值大于50可以认为是同一个人")
              mylog("比对值:" + res3.data.data)
            })
          })
        }else{
          mylog("请放身份证,重新点击此按钮")
        }
      })
    }

    // ocr
    let ocr = ()=>{
      // ocr 是从图片中识别的,所以需要先拍一张图片保存本地,然后在做ocr识别
      let data1 = {
        "filepath": "",
        "rotate": "0",
        "cutpage": "0",
        "camidx": "0"
      } 
      axios.post("http://127.0.0.1:38088/video=grabimage", JSON.stringify(data1)).then((res1)=>{
        add_image(res1.data.photoBase64)
        mylog("识别中。。。")
        let data2 = {
          "ocrflag": "1",
          "picfilepath": res1.data.filepath,
          "savefilepath": "D://ocr.pdf"
        }
        axios.post("http://127.0.0.1:38088/video=ocr", JSON.stringify(data2)).then((res2)=>{
          if(res2.data.code == '0'){
            mylog("识别成功")
          }else{
            mylog("识别失败")
          }
        })
      })
    }

    //---------------------------------------------设备-----------------------------------------
    // 获取设备型号
    let getequipmenttype = ()=>{
      axios.post("http://127.0.0.1:38088/device=getequipmenttype").then((res)=>{
        mylog("设备型号:" + res.data.data)
      })
    }

    // 获取设备序列号
    let getsonixserialnumber = ()=>{
      axios.post("http://127.0.0.1:38088/device=getsonixserialnumber").then((res)=>{
        mylog("设备序列号:" + res.data.data)
      })
    }

    // 获取设备状态
    let get_state = ()=>{
      axios.post("http://127.0.0.1:38088/video=status").then((res)=>{
        mylog("提示:no:未连接;ok:已连接;run:已连接且运行")
        mylog("副摄像头:" + res.data.video1)
        mylog("主摄像头:" + res.data.video0)
      })
    }

    // 判断设备是否连接
    let is_con = ()=>{
      axios.post("http://127.0.0.1:38088/device=isconnect").then((res)=>{
        mylog("设备连接数:" + res.data.data)
      })
    }

    //---------------------------------------------串口-----------------------------------------
    // 打开串口
    let open_serialport = ()=>{
      let data = {
        "port": "0",
        "baud": "115200",
        "parity": "0",
        "databits": "8",
        "stopbits": "0"
      }
      axios.post("http://127.0.0.1:38088/serialport=initserialport", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog("打开串口成功")
        }
      })
    }

    // 关闭串口
    let close_serialport = ()=>{
      let data = {"port": "0"}
      axios.post("http://127.0.0.1:38088/serialport=deinitserialport", JSON.stringify(data)).then((res)=>{
        if(res.data.code == '0'){
          mylog("关闭串口成功")
        }
      })
    }

    // 弹出签字窗口: GW500R & GW1000R
    let sign_r = ()=>{
      axios.post("http://127.0.0.1:38088/serialport=sign").then((res)=>{
        if(res.data.code == '0'){
          mylog('弹出签字窗口成功')
        }
      })
    }

    // 获取签名图片
    let sign_r_get = ()=>{
      axios.post("http://127.0.0.1:38088/serialport=getdata").then((res)=>{
        add_image(res.data.data)
        mylog("获取签名图片成功")
      })
    }

    return {
      mylog, add_image,
      view1_mode_list, view1_mode_selected, view1_resolution_list, view1_resolution_selected, 
      view2_mode_list, view2_mode_selected, view2_resolution_list, view2_resolution_selected,
      view1_mode_change, view2_mode_change,
      open_view1, close_view1, open_view2, close_view2, rotate,
      view1_scan, view2_scan, flat_scan, open_auto_scan, close_auto_scan,
      getcode, getbiokey, getidcard, sign_a, sign_a_get,
      start_video, end_video, get_state_video, get_audio,
      open_a3a4, close_a3a4, 
      add_pdf, save_pdf, 
      is_living_person, person_and_IDCard, ocr,
      getequipmenttype, getsonixserialnumber, get_state, is_con,
      open_serialport, close_serialport, sign_r, sign_r_get
    }
  }
})
</script>

<style>
/* 全局 */
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
  margin-top: 10px;
}
/* 视频预览 */
#view1, #view2{
    width: 400px;
    height: 300px;
    border: 1px solid red;
    margin-right: 5px;
}
/* 缩略图 */
#suoluetu{
  width: 100%;
  height: 85px;
  border: 1px solid blue;
}
#suoluetu img{
  margin-right: 10px;
}
/* 操作按钮 */
#myactive{
  border: 1px solid yellowgreen;
  margin-top: 10px;
  padding: 10px 5px;
}
/* 操作日志 */
#mylog{
  border: 1px solid black;
  padding: 10px;
  margin-top: 10px;
  overflow: auto;
}
</style>

举报

相关推荐

0 条评论