You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中使用Tesseract时出现ERR_INVALID_CALLBACK错误

解决Node.js中使用node-tesseract时的ERR_INVALID_CALLBACK错误

问题描述

我在Node.js中使用Tesseract处理图片时遇到如下错误:

fs.js:132
throw new ERR_INVALID_CALLBACK(); ^
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
at makeCallback (fs.js:132:11)
at Object.fs.unlink (fs.js:1002:14)
at /home/bakedpanda/Documents/BTP/node_modules/node-tesseract/lib/tesseract.js:99:14
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:408:3)

我的代码如下:

var tesseract = require('node-tesseract');
tesseract.process('cap.jpg',function (err, text){
 if(err) {
 console.error(err);
 } else {
 console.log(text);
 }
});

//cap.jpg与代码文件在同一目录下。

请问该如何解决这个回调函数无效的问题?


解决方案

这个问题我之前也碰到过,本质是旧版node-tesseract库的代码和Node.js新版本的fs API不兼容导致的:新版本Node.js要求fs.unlink必须传入回调函数,但旧库在清理临时文件的逻辑里(也就是报错信息里的tesseract.js:99行),某些分支下没传回调,直接触发了这个错误。

这里有两种可行的解决办法:

方法一:改用维护活跃的替代库(推荐)

原node-tesseract已经很久没更新了,建议换成更活跃的分支node-tesseract-ocr,它修复了这类API兼容问题,还支持Promise风格调用,用起来更顺手:

  1. 先卸载旧库:
    npm uninstall node-tesseract
    
  2. 安装新库:
    npm install node-tesseract-ocr
    
  3. 修改代码适配新库API:
    const tesseract = require('node-tesseract-ocr');
    
    // 可根据需求配置语言、识别模式等参数
    const config = {
      lang: 'eng',
      oem: 1,
      psm: 3,
    };
    
    tesseract.recognize('cap.jpg', config)
      .then(text => {
        console.log('识别结果:', text);
      })
      .catch(err => {
        console.error('识别出错:', err);
      });
    

方法二:手动修复旧库代码(临时应急)

如果一定要继续用旧版node-tesseract,可以临时修改库文件:

  1. 找到报错路径下的tesseract.js:/home/bakedpanda/Documents/BTP/node_modules/node-tesseract/lib/tesseract.js
  2. 定位到第99行的fs.unlink调用,补全回调函数,比如改成:
    fs.unlink(tmpFile, function(err) {
      if (err) console.warn('清理临时文件失败:', err);
    });
    

注意:这种方法的缺点是,重新安装依赖或更新库时,修改会被覆盖,只适合临时救急。


内容的提问来源于stack exchange,提问作者bakedpanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:27:05