ElectronOCR:基于Electron+React+Tesseract的MACOS下的OCR工具

Github Repo 地址
文章地址
MAXOS Darwin x64下载

笔者一直在MacOS上没找到太顺心的OCR工具,导致看书的时候很多东西只能手打,略烦。正好前段时间用了Tesseract,就用Electron封装了一个,这里简要记述下开发当中的一些坑和要点,日后有空把Electron整理好也出个系列

Introduction

这东西,大概是这个样子:

超级产品经理

在渲染进程中引入本地模块

const {dialog} = window.require('electron').remote;const fs = window.require("fs");

首先为了避免Webpack在打包时报错electron不存在,建议是将所有Node或者Electron提供的模块用window.require方式,这样Webpack会忽略引入。

Native部分

创建本地窗口

/

  • Created by apple on 16/6/3.
    */
    const electron = require('electron');
    // 用于控制应用生命周期
    const {app} = electron;
    // 用于创建本地窗口
    const {BrowserWindow} = electron;

//为Window对象创建一个全局的引用,否则可能被JavaScript的垃圾回收机制自动回收
let win;

/

  • @function 创建窗口
    */
    function createWindow() {
    // 创建类似于浏览器的窗口
    win = new BrowserWindow({width: 800, height: 600});

    // 加载应用入口文件,本文件为测试文件,因此加载的是测试
    win.loadURL(file://${__dirname}/dist/app.html);

    // 启动调试工具,如果是开发环境下则不需要开启
    // win.webContents.openDevTools();

    // 设置窗口关闭事件
    win.on('closed', () => {
    //因为上面是设置了一个全局引用,因此这里需要对该对象解除引用
    //如果你的应用支持打开多窗口,可以把所有的引用存入一个数组中,然后在这里动态删除
    win = null;
    });
    }

// 在基本环境准备好之后的回调
app.on('ready', createWindow);

// 所有窗口都关闭之后的回调
app.on('window-all-closed', () => {
//在OSX中经常是用户虽然关闭了主窗口,但是仍然希望使用Menu Bar,因此这里不进行强行关闭
// On OS X it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit();
}
});

// 应用被重新激活之后的回调
app.on('activate', () => {
// 在Dock中的Menu Bar被点击之后重新激活应用
if (win === null) {
createWindow();
}
});

打包

一般来说,Electron推荐的打包方式有三种,这里笔者使用的是electron-packager这个便捷工具,不过碰到一个蛋疼的问题是Electron一直下载不下来,挂了SS加上proxychains4都不行。因此最终还是用编程方式进行打包:

require('babel-polyfill');const exec = require('child_process').exec;const argv = require('minimist')(process.argv.slice(2));const platform = argv._[0];//编译的目标平台const packager = require('electron-packager');console.log("Current NODE_ENV = " + process.env.NODE_ENV);//判断编译时环境const arch = "x64";packager({    dir: "./",    platform,    arch,    out: `release/`,    override: true,    prune: true,    download: {        mirror: "https://npm.taobao.org/mirrors/electron/" //设定Electron的下载地址    }}, function done_callback(err, appPaths) { /* … */});

然后将脚本封装到package.json中:

"package-osx": "npm run clean-electron && NODE_ENV=production node -r babel-register package.js darwin",

避免打包node_modules

在Web开发中我们会将譬如React、Redux等等依赖项加入到package.json的dependencies中,不过Electron Packager会将node_modules也打包到应用中。然后代码都已经通过Webpack打包编译到统一的js脚本中,因此首先可以设置prune为true,这样可以避免打包所有的dev-dependencies。同样,我们也需要将非本地模块全部放到dev-dependencies中。

关键字:electron, react.js, tesseract

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部