npm 包 ocrad.js 使用教程

在前端开发中,处理图像和文本数据是非常常见的需求,其中,OCR(Optical Character Recognition,光学字符识别)技术可以将图片中的文字内容自动识别出来,为我们节省了大量的人力和时间成本。而 ocrad.js 则是一款基于 JavaScript 的 OCR 技术库,可以让我们在前端实现 OCR 功能。下面,本文就来详细介绍 ocrad.js 的使用方法。

安装 ocrad.js

首先需要使用 npm 安装 ocrad.js,打开命令行终端,输入以下命令即可:

--- ------- -----

安装成功后,在项目中引入 ocrad.js:

------- ---------------------------------------------

实现 OCR 功能

使用 ocrad.js 实现 OCR 功能的主要步骤如下:

  1. 加载图片数据
  2. 对图片数据进行处理和裁剪
  3. 使用 ocrad.js 实现 OCR

加载图片数据

首先,我们需要将图片数据加载到前端中。我们可以使用 FileReader API 来读取本地的图片文件,也可以通过 URL 来加载远程的图片。

下面是一个读取本地图片文件并将图片数据转换为 base64 格式的示例代码:

----- ------------ - --------------------------------
----------------- - -------
------------------- - ----------
--------------------------------------- ------- -- -
  ----- ---- - ----------------------
  ----- ------ - --- -------------
  ---------------------------
  ------------- - ------- -- -
    ----- --------- - --------------------
    -- ----- ------
  --
---
----------------------------------------

处理图片数据

接下来,我们需要对图片数据进行处理,以便 ocrad.js 可以识别出图片中的文字。其中,我们需要将图片转换成 grayscale 格式,并进行二值化处理,使得背景为白色、文字为黑色,这样才能方便地进行 OCR 识别。

这里我们使用 canvas 来处理图片数据。先创建一个 canvas 元素,并将其插入到文档中:

------- ---------------------

然后,可以在 JavaScript 中使用以下代码,将图片数据绘制到 canvas 上,并对其进行处理:

----- ------------- - ----------------------------------
----- ------- - -------------------------------
----- ------------ - --- --------
---------------- - ----------
------------------- - -- -- -
  ------------------- - -------------------
  -------------------- - --------------------
  ------------------------------- -- ---
  ----- --------- - ----------------------- -- -------------------- ----------------------
  ----- ---- - ---------------
  --- ---- - - -- - - ------------ - -- -- -
    ----- - - --------
    ----- - - ------ - ---
    ----- - - ------ - ---
    ----- ---- - ----- - - - ----- - - - ----- - --
    ------- - -----
    ------ - -- - -----
    ------ - -- - -----
  -
  ------------------------------- -- ---
  ----- ------------------ - ----------------------- -- -------------------- ----------------------
  ----- ------ - ---
  --- ---- - - -- - - ------------------------------- - -- -- -
    ----- - - ---------------------------
    ----- - - ------------------------- - ---
    ----- - - ------------------------- - ---
    ----- ---- - ----- - - - ----- - - - ----- - --
    ----------------- - ---- - - - ---
  -
  -- ----- --------- -------- -- ---
--

在上面的代码中,我们将图片转换成 grayscale 格式,并进行了二值化处理,将像素值小于 128 的位置设为 1,大于等于 128 的位置设为 0,这样就得到了一份二值图。接下来,我们需要对二值图进行裁剪,将无用的边框部分去除掉,以减小 ocrad.js 的处理压力。

裁剪图片数据

由于 ocrad.js 需要处理的图片的背景为白色、文字为黑色,因此我们需要将二值图进行反转,即将黑色变成白色、白色变成黑色。然后,我们需要找到二值图中的所有文字所在的范围,也就是二值图中的最小包围矩形,将这个矩形中的数据作为 ocrad.js 需要处理的数据。

下面是一个简单的图像裁剪代码示例:

----- ----- - --------------------
----- ------ - ---------------------
----- -------- - --------------- -- -----------------
----- -------- - --- ----------- - -----------
------------------------------
---------------------------
--- ---- --- - -- --- - ------ - -- ------ -
  ----- ---------- - --- - ------ - ---
  ----- -------- - ---------- - ------
  ------------------- - -- - --
  ------------------ - --
-
--- --- - --
--- ------ - --
--- ---- - --
--- ----- - --
--- ------- - ------
--- ---------- - ------
--- -------- - ------
--- --------- - ------
--- ---- --- - -- --- - ------ - -- ------ -
  ----- ---------- - --- - ------ - ---
  ----- -------- - ---------- - ------
  ----- ------- - ------------------------- - -- -------- - ---
  --- ---------- - -----
  --- ---- --- - -- --- - ------ ------ -
    -- ------------- --- -- -
      ---------- - ------
      ------
    -
  -
  -- ----------- -- --------- -
    --- - ----
  - ---- -- ------------- -
    ------- - -----
  -
  -- ------------ -- ------------ -
    ------ - ----
  - ---- -- ----------- -- ---------- -- ------- - -- - ---- -
    -------- - ------
    --------- - ------
    ------
  -
-
--- ---- --- - -- --- - ------ ------ -
  --- ---------- - -----
  --- ---- --- - ---- --- - ------- ------ -
    -- ------------- - ------ - -- - --- - -- --- -- -
      ---------- - ------
      ------
    -
  -
  -- ----------- -- ---------- -
    ---- - ----
  - ---- -- ------------- -
    -------- - -----
  -
  -- ------------ -- ----------- -
    ----- - ----
  - ---- -- ----------- -- --------- -- ------ - -- - ----- -
    ------
  -
-
----- --------- - ----- - -----
----- ---------- - ------ - ----
----- ---------- - ---------------------------------
----- ----------- - ----------------------------
---------------- - ----------
----------------- - -----------
--------------------- - -------
----------------------- -- ----------------- -------------------
----- ------------- - --------------------------- -- ---------- ------------
--- ---- --- - ---- --- - ------- ------ -
  ----- ---------- - --- - ------ - -- - ---- - --
  ----- -------- - ---------- - ----------
  ----- ------- - ------------------------ ----------
  ----- ----------- - ----------------------------- - ---- - --------- - -- ---- - --- - -- - --------- - ---
  --- ---- --- - -- --- - ---------- ------ -
    ----- ------- - ------------ --- --
    ----- ------ - --- - --
    ------------------- - ------- - - - ----
    ------------------ - -- - ------- - - - ----
    ------------------ - -- - ------- - - - ----
    ------------------ - -- - ----
  -
  ----------------------------------- ---- - ---- - --------- - ---
-
--------------------------------------- -- ---
----- ---------------- - ----------------------------------
-- ----- -- -------- -- ---

在上面的代码中,我们首先将二值图进行了反转,然后找到了所有文字所在的范围,计算出需要裁剪的图像尺寸。然后创建一个新的 canvas 元素,将裁剪后的图像绘制到这个 canvas 上,将其转换成 base64 格式,用作 ocrad.js 的输入数据。

使用 ocrad.js 进行 OCR

接下来,我们需要使用 ocrad.js 进行 OCR。ocrad.js 可以接收一个像素矩阵数据(即一个二维数组),返回图片中的所有文字内容。

下面是一个简单的 OCR 识别代码示例:

----- --------- - ------------------------------
----------------------------------

示例代码

最后,让我们将前面的代码整合到一起,形成一个完整的 ocrad.js 使用示例:

--------- -----
------
------
  --------------- ------------
  ----- ----------------
-------
------
  ------ ----------- ---------------- -------------------
  ------- ---------------------
  ------- ---------------------------------------------
  --------
    ----- ------------ - -----------------------------------------
    --------------------------------------- ------- -- -
      ----- ---- - ----------------------
      ----- ------ - --- -------------
      ---------------------------
      ------------- - ------- -- -
        ----- --------- - --------------------
        ----- ------------- - ----------------------------------
        ----- ------- - -------------------------------
        ----- ------------ - --- --------
        ---------------- - ----------
        ------------------- - -- -- -
          ------------------- - -------------------
          -------------------- - --------------------
          ------------------------------- -- ---
          ----- --------- - ----------------------- -- -------------------- ----------------------
          ----- ---- - ---------------
          --- ---- - - -- - - ------------ - -- -- -
            ----- - - --------
            ----- - - ------ - ---
            ----- - - ------ - ---
            ----- ---- - ----- - - - ----- - - - ----- - --
            ------- - -----
            ------ - -- - -----
            ------ - -- - -----
          -
          ------------------------------- -- ---
          ----- ------------------ - ----------------------- -- -------------------- ----------------------
          ----- ------ - ---
          --- ---- - - -- - - ------------------------------- - -- -- -
            ----- - - ---------------------------
            ----- - - ------------------------- - ---
            ----- - - ------------------------- - ---
            ----- ---- - ----- - - - ----- - - - ----- - --
            ----------------- - ---- - - - ---
          -
          ----- ----- - --------------------
          ----- ------ - ---------------------
          ----- -------- - ---------------
          ----- -------- - --- ----------- - -----------
          ------------------------------
          ---------------------------
          --- ---- --- - -- --- - ------ - -- ------ -
            ----- ---------- - --- - ------ - ---
            ----- -------- - ---------- - ------
            ------------------- - -- - --
            ------------------ - --
          -
          --- --- - --
          --- ------ - --
          --- ---- - --
          --- ----- - --
          --- ------- - ------
          --- ---------- - ------
          --- -------- - ------
          --- --------- - ------
          --- ---- --- - -- --- - ------ - -- ------ -
            ----- ---------- - --- - ------ - ---
            ----- -------- - ---------- - ------
            ----- ------- - ------------------------- - -- -------- - ---
            --- ---------- - -----
            --- ---- --- - -- --- - ------ ------ -
              -- ------------- --- -- -
                ---------- - ------
                ------
              -
            -
            -- ----------- -- --------- -
              --- - ----
            - ---- -- ------------- -
              ------- - -----
            -
            -- ------------ -- ------------ -
              ------ - ----
            - ---- -- ----------- -- ---------- -- ------- - -- - ---- -
              -------- - ------
              --------- - ------
              ------
            -
          -
          --- ---- --- - -- --- - ------ ------ -
            --- ---------- - -----
            --- ---- --- - ---- --- - ------- ------ -
              -- ------------- - ------ - -- - --- - -- --- -- -
                ---------- - ------
                ------
              -
            -
            -- ----------- -- ---------- -
              ---- - ----
            - ---- -- ------------- -
              -------- - -----
            -
            -- ------------ -- ----------- -
              ----- - ----
            - ---- -- ----------- -- --------- -- ------ - -- - ----- -
              ------
            -
          -
          ----- --------- - ----- - -----
          ----- ---------- - ------ - ----
          ----- ---------- - ---------------------------------
          ----- ----------- - ----------------------------
          ---------------- - ----------
          ----------------- - -----------
          --------------------- - -------
          ----------------------- -- ----------------- -------------------
          ----- ------------- - --------------------------- -- ---------- ------------
          --- ---- --- - ---- --- - ------- ------ -
            ----- ---------- - --- - ------ - -- - ---- - --
            ----- -------- - ---------- - ----------
            ----- ------- - ------------------------ ----------
            ----- ----------- - ----------------------------- - ---- - --------- - -- ---- - --- - -- - --------- - ---
            --- ---- --- - -- --- - ---------- ------ -
              ----- ------- - ------------ --- --
              ----- ------ - --- - --
              ------------------- - ------- - - - ----
              ------------------ - -- - ------- - - - ----
              ------------------ - -- - ------- - - - ----
              ------------------ - -- - ----
            -
            ----------------------------------- ---- - ---- - --------- - ---
          -
          --------------------------------------- -- ---
          ----- ---------------- - ----------------------------------
          ----- --------- - ------------------------------
          ----------------------------------
        --
      --
    ---
  ---------
-------
-------

在上面的代码中,当用户选择一张图片文件后,对其进行预处理和裁剪,并进行 OCR,将 OCR 识别结果输出到浏览器控制台。这里,我们使用了 FileReader API、canvas API 和 ocrad.js 技术,实现了一个简单的 OCR 应用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60066fac3d1de16d83a671b4


猜你喜欢

  • npm 包 redux-transfer 使用教程

    在前端开发中,redux 是一个非常流行的状态管理库。它能够帮助我们有效地管理应用程序的状态,使得数据流动变得简单易懂。然而,在实际开发中,我们有时候会需要将应用程序的状态从一个 redux 实例传递...

    4 年前
  • npm 包 redux-tree 使用教程

    前言:随着 Web 应用程序变得越来越复杂,我们发现其状态管理变得非常复杂。Redux 是一个优秀的 JavaScript 应用程序状态管理库。Redux 把应用状态储存在单一的 store 中,以此...

    4 年前
  • npm包 redux-trigger 使用教程

    如果你有经验开发React应用或已经熟悉Redux概念,那么你很有可能使用或听说过 Redux。Redux是一个非常有用的库,可以全局管理应用程序的状态。然而,在实际开发中,Redux有时过于“笨重”...

    4 年前
  • npm 包 redux-trigger-middleware 使用教程

    前言 Redux 是一个非常流行的 JavaScript 状态管理库,可以使应用的状态管理更加清晰和可预测。在实际开发过程中,经常需要在触发某个 action 后执行一些额外操作,比如向后端服务器发送...

    4 年前
  • TypeScript TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'

    在使用 TypeScript 进行开发时,我们可能会遇到 "TS7015" 错误,该错误消息通常是指在使用索引数组时没有正确地定义索引类型,从而导致出现隐式的 any 类型。

    4 年前
  • npm 包 redux-typed-modules 使用教程

    前言 在前端开发中,状态管理是一个非常重要的问题,为了解决这个问题,Redux 就应运而生。Redux 是一个用于 JavaScript 应用程序的可预测状态容器,Redux 可以让我们按照一定的规律...

    4 年前
  • NPM 包 redux-types 使用教程

    前言 Redux 是目前使用最广泛的状态容器库之一,它为应用程序提供了可预测的状态管理能力。然而,在 Redux 中定义业务逻辑所需的 Action Types 却经常比较繁琐的定义方式。

    4 年前
  • npm 包 reduxr-async 使用教程

    前言 reduxr-async 是一个基于 Redux 的异步动作处理的中间件。它使得在 Redux 应用程序中使用异步的操作更加容易。 如果你正在学习 Redux,掌握 reduxr-async 可...

    4 年前
  • npm包reduxr-mix使用教程

    Reduxr-mix是一个帮助你快速编写 Redux 应用程序的NPM包。 它可以帮助你更容易地协调执行 Redux 类型的异步操作。本教程将介绍如何使用 reducer-mix 构建一个典型的 Re...

    4 年前
  • npm 包 reduxr-obj-actions 使用教程

    reduxr-obj-actions 是一个非常实用的 npm 包,用于简化 Redux Action 创建的流程。在本篇文章中,我们将探讨如何使用它来提高前端应用程序的开发效率。

    4 年前
  • npm包:reduxr-obj-reducer使用教程

    如果你是一名前端开发人员,很可能你正在使用Redux来管理你的应用程序的状态。Redux是一个非常流行的状态管理库,但是有时你会发现你需要重复编写大量的reducer代码。

    4 年前
  • npm 包 redux-trazor 使用教程

    前言 redux-trazor 是一个基于 Redux 的状态管理器工具。它可以帮助你更轻松地理解和管理 Redux 状态中的数据流,提高代码的可维护性和可读性。本文将详细介绍 redux-trazo...

    4 年前
  • NPM 包 Regex-Router 使用教程

    在前端开发中,我们时常需要使用路由来完成页面之间的跳转和数据传递。而 Regex-Router 是一个可以根据 URL 正则表达式匹配来进行路由匹配的 npm 包,其让前端路由匹配更加灵活和高效。

    4 年前
  • npm 包 regex-safer 使用教程

    正则表达式在前端开发中非常重要,但是不规范或者错误的正则表达式也可能导致严重的安全漏洞。Regex-safer 是一个使用简单的npm 包,可以帮助我们快速检测和过滤危险的正则表达式。

    4 年前
  • npm 包 regex-stringify 使用教程

    前言 在前端开发中,正则表达式是必不可少的工具之一,可以用于搜索、过滤、替换等操作。而在使用正则表达式时,我们经常需要将其转换成字符串,以便于传递到服务端或者存储到本地。

    4 年前
  • npm 包 redux-promised 使用教程

    在前端开发中,我们经常需要使用 Redux 进行状态管理。Redux 是一个很好的解决方案,但在处理一些异步请求时,代码可能会变得有点复杂和冗长。这时,我们可以使用 Redux-promised 这个...

    4 年前
  • npm 包 redux-promise-track 使用教程

    简介 redux-promise-track 是一个 Redux 中间件,可以帮助开发者跟踪解决 Redux thunk 代码中的 promise 操作,并生成 action 以表明它们何时开始和完成...

    4 年前
  • NPM 包 redux-promised-thunk 使用教程

    redux-promised-thunk 是一个便于管理 Redux 异步请求的 npm 包。本文将详细介绍该包的使用方法、用途及其高级功能。 安装 --- ------- -------------...

    4 年前
  • npm 包 redux-promises 使用教程

    Redux 是一个非常流行的 JavaScript 应用程序状态管理工具,而 redux-promises 是一个与 Redux 无缝集成的 npm 包,用于处理异步操作。

    4 年前
  • npm 包 reduxr-scoped-reducer 使用教程

    在开发 Web 应用程序时,使用 Redux 进行状态管理非常常见。Redux 允许我们编写可维护、可扩展的应用程序,同时保持应用程序状态的不可变性。但是,Redux 的 reducer 函数通常很难...

    4 年前

相关推荐

    暂无文章