npm 包 ocrad.js 使用教程

阅读时长 20 分钟读完

在前端开发中,处理图像和文本数据是非常常见的需求,其中,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

纠错
反馈