使用Node.js实现提取图片中的文字

171 阅读1分钟

1、环境准备与安装

  • 安装Node.js
    确保系统已安装 Node.js(建议版本 ≥ v14),可通过node -v验证安装,这里不做详细说明。
  • 新建main.js文件
  • 安装依赖
yarn add tesseract.js
yarn add sharp

2、代码实现

const sharp = require("sharp");
const { createWorker } = require("tesseract.js");

// 图片预处理
async function preprocessImage(path) {
  // 灰度化、对比度增强和二值化处理
  return await sharp(path)
         .greyscale() // 转为灰度图
         .normalise() // 增强对比度
         .threshold(128) // 二值化(阈值 0-255,值越大越严格)
         .toBuffer();
}

// 核心识别代码
async function imageToText(imageBuffer) {
  // eng:英文 chi_sim:简体中文 chi_tra:繁体中文
  // 如果知道识别的是那种语言,可只写一种,识别速度会有所提升
  const worker = await createWorker(["eng", "chi_sim", "chi_tra"], 1, {
    logger: m => console.log(m), // 进度监控
    errorHandler: err => console.error(err), // 错误信息输出
  });

  const {
    data: { text },
  } = await worker.recognize(imageBuffer);
  await worker.terminate();
  return text.replace(/\s+/g, " ").trim(); // 去除多余空格
}

async function main() {
  console.time("图片转文字耗时");
  const image = await preprocessImage(
    "C:/Users/Mi/Desktop/study-demo/Node Demo/imageToText/img/zh1.jpg"
  );
  const text = await imageToText(image);
  console.log(text);
  console.timeEnd("图片转文字耗时");
}

main();

将以上代码复制到main.js文件中,在控制台执行node ./main.js,即可进行文字提取