uni-app安卓端离线图片识别

uni-app安卓端离线图片识别

  • 技术选择
  • 干货内容

技术选择

  1. 前端框架:当然是uni-app了
    uni-app官网

  2. 图片识别:tesseract.js
    介绍一下:Pure Javascript OCR for more than 100 Languages.
    (支持100多种语言的纯JS图片识别库)
    github地址

干货内容

  1. 示例源码和APK在github,可以自行下载体验。
    源码和APK

  2. tesseract.js GitHub官网上有离线的demo,
    很容易在web端跑起来运行。但是在APP端,不支持document、DOM等,无法直接运行(花费好长时间才懂~)。

  3. uniapp官方推荐使用renderjs,可以在视图层操作dom,运行for web的js库,示例通过renderjs,在APP端使用echarts。

  4. 本机调试时终于实现了图片识别(高兴坏了我)。结果又遇到个大坑,差点做不下去了。

  5. 发布正式包,真机运行时,老是报错。“Netword error"。通过调试发现引不到识别用的js文件。

  6. 我以为这条路走不通了,就上GitHub搜别的ocr仓库,试了下EasyOCR,尝试用API实现识别,但是识别速度太慢了,还必须联网…

  7. 看tesseract.js源码发现是动态引用js文件,怀疑是不是没有把js文件打包到APK。

// js地址 tesseract.js\src\worker\browser\spawnWorker.js
module.exports = ({ workerPath, workerBlobURL }) => {
 let worker;
 if (Blob && URL && workerBlobURL) {
 // 注意这里 importScripts 动态引入worker.js
   const blob = new Blob([`importScripts("${workerPath}");`], {
     type: 'application/javascript',
   });
   worker = new Worker(URL.createObjectURL(blob));
 } else {
   worker = new Worker(workerPath);
 }
 return worker;
};
  1. 查看打包后APK中的文件(APK重命名加上.zip,再解压),发现有js文件(路径:\assets\apps__UNI__041F311\www\static\ocr\ ),但是没有训练数据(.gz结尾文件)。
  2. 查资料得知:uniapp在系统应用目录的基础设计了应用沙盒目录,分为私有和公共目录,私有目录仅应用自身可以访问,公共目录在多应用环境时所有应用都可访问详情。(本机调试成功是因为将电脑上js文件同步到了手机公共目录)
  3. 尝试HbuilderX本地打包,再用AndroidStudio将js文件本地打包到APK,试了半天没搞明白,失败~~!。
  4. 尝试APP启动时下载文件,页面能引用js并识别图片。但是下载文件方式太low,还要维护资源很麻烦。
  5. 最终解决办法:启动时,将js文件从私有目录复制到公共目录。既可以不联网,应用也可以访问到js文件。
// fileName 是文件名称worker.min.js、tesseract-core.wasm.js、eng.traineddata
// _downloads/ 目标公共目录
// _www/static/ocr/ 静态资源私有目录
plus.io.resolveLocalFileSystemURL( '_downloads/' + fileName, function() {
	// 公共目录已有文件,跳过
}, function () {
	// 没有文件, 从私有目录移动过来
	plus.io.resolveLocalFileSystemURL( '_www/static/ocr/' + fileName, function( entry ) {
		entry.copyTo( {"fullPath":plus.io.convertLocalFileSystemURL('_downloads/')}, fileName);
	});
});
  1. 还有个小坑,训练数据是.gz结尾文件,打包时打不进去APK,解压后成eng.traineddata格式才可以。
  2. demo中只有英文训练数据集,想要别的语言,点这里。

你可能感兴趣的:(uni-app,ocr,vue)