以vue-element-admin为例:

//一、安装tesseract.js
npm install tesseract.js

html:

<template>
  <div class="app1-container" v-loading="onceDialogLoading" :element-loading-text="loadingText">
    <div class="filter-container">
      <el-form ref="form" :inline="true" label-position="right" >
        <div class="upload-item">
          <div class="title">图片识别</div>
          <div class="upload">
            <el-upload
              action="#"
              list-type="picture-card"
              :auto-upload="false" :limit="3" :on-change="changeImg">
                <i slot="default" class="el-icon-plus"></i>
                <div slot="file" slot-scope="{file}">
                  <img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
                  <span class="el-upload-list__item-actions">
                    <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
                      <i class="el-icon-zoom-in"></i>
                    </span>
                  </span>
                </div>
            </el-upload>
            <el-dialog :visible.sync="dialogVisible" append-to-body>
              <img width="100%" :src="dialogImageUrl" alt="">
            </el-dialog>
          </div>
        </div>
        <div class="form-item-box">
          <el-form-item label="识别内容" style="width:100%;">
            <el-input type="textarea" :rows="5" v-model="queryData.onceKeyword"
            ref="onceInput" style="width:100%" placeholder="识别的内容"></el-input>
          </el-form-item>
        </div>
      </el-form>
    </div>
  </div>
</template>

JS部分:

<script>
    import { createWorker } from 'tesseract.js';
  let worker = null
  export default {
    name: 'onceInsert',
    data() {
      return {
        onceDialogLoading:false,
        queryData:{
          onceKeyword:'',
          dwbm:''
        },
        dialogImageUrl: '',
        dialogVisible: false,
        disabled: false,
        loadingText:'拼命加载中',
      }
    },
    mounted() {
      worker = createWorker({
        logger: m => {
          if(m.status === 'recognizing text' && m.progress == 1){
            this.$message.success('图片识别完成')
            this.onceDialogLoading = false
          }
        }
      });
    },
    methods: {
      imageToText(url){
        (async () => {
          await worker.load();
          await worker.loadLanguage('chi_sim');
          await worker.initialize('chi_sim');
          const { data: { text } } = await worker.recognize(url);
          //转小写并去除空格
          let content = text.toLowerCase().replace(/\s*/g, '')
          this.queryData.onceKeyword += content
          console.log(text)
        })();
      },
      changeImg(file, fileList){
        if(fileList.length>0){
          this.loadingText = '正在识别图片,请稍后......'
          this.onceDialogLoading = true
          this.imageToText(file.url)
        }
      },
   }
}
</script>

 

最后:

项目打包放服务器后发现第一次转换时由于中文语言包太大,导致太耗时了,花了几分钟才把中文包加载完成,所以把语言包放到public目录下,这样相对就快了很多

具体步骤:

一、下载语言包,并放入到公共目录一般最多只需要中英文两种就足够了

二、修改node_modules目录下的配置(node_modules/tesseract.js/src/constants/defaultOptions.js)

module.exports = {
  /*
   * default path for downloading *.traineddata
   */
  // langPath: 'https://tessdata.projectnaptha.com/4.0.0',
//改成放置语言包的目录
  langPath: './static/tesseract/lang-data',
  /*
   * Use BlobURL for worker script by default
   * TODO: remove this option
   *
   */
  workerBlobURL: true,
  logger: () => {},
};