
本教程旨在解决在使用 tesseract.js 进行光学字符识别(ocr)时遇到的 `typeerror: worker.load is not a function` 错误。文章将深入分析该错误产生的原因,并提供针对 tesseract.js 新版本 api 的正确工作器初始化方法,通过简洁的代码示例指导开发者如何一次性加载语言并初始化工作器,从而有效解决此类型错误,确保文本提取功能正常运行。
在使用 Tesseract.js 进行图片或 PDF 文件中的文本提取时,开发者可能会遇到 TypeError: worker.load is not a function 这样的错误。这通常是由于 Tesseract.js 库版本更新,其工作器(Worker)的初始化 API 发生了变化所致。本文将详细解释此错误的原因,并提供现代 Tesseract.js 版本的正确初始化方法。
当尝试使用 Tesseract.js 从图片中提取文本时,如果代码结构如下所示,可能会触发 worker.load 错误:
async parseFile() {
if (this.uploadedFile) {
const fileType = this.getFileType(this.uploadedFile.name);
if (fileType === "image") {
const worker = createWorker(); // 创建工作器实例
await worker.load(); // 尝试加载工作器(此处可能出错)
await worker.loadLanguage("eng"); // 加载语言包
await worker.initialize("eng"); // 初始化工作器
const {
data: { text },
} = await worker.recognize(this.uploadedFile);
console.log(text);
await worker.terminate();
} else if (fileType === "pdf") {
// PDF 处理逻辑
const fileReader = new FileReader();
fileReader.onload = async () => {
const typedArray = new Uint8Array(fileReader.result);
const pdf = await pdfjsLib.getDocument(typedArray).promise;
const numPages = pdf.numPages;
let pdfText = "";
for (let i = 1; i <= numPages; i++) {
const page = await pdf.getPage(i);
const content = await page.getTextContent();
const pageText = content.items.map((item) => item.str).join(" ");
pdfText += pageText + "\n";
}
console.log(pdfText);
};
fileReader.readAsArrayBuffer(this.uploadedFile);
}
}
}上述代码中,await worker.load() 这一行是导致 TypeError 的关键。在较新版本的 Tesseract.js 中,worker.load() 方法已被废弃或其功能已合并到 createWorker 函数中。
Tesseract.js 库在不断演进,其 API 设计也随之更新。在早期版本中,开发者需要分步创建工作器、加载核心库、加载语言包,然后初始化工作器。然而,为了简化 API 并提高易用性,新版本的 Tesseract.js 将这些步骤整合到了 createWorker 函数中。
因此,当使用新版本的 Tesseract.js 库,却沿用了旧版本的初始化方法(即显式调用 worker.load()、worker.loadLanguage() 和 worker.initialize())时,就会因为 worker 对象上不存在 load 方法而抛出 TypeError。
解决此问题的核心在于采用 Tesseract.js 推荐的现代初始化语法。新版本的 createWorker 函数允许在创建工作器时直接指定语言,从而一步完成工作器的创建、加载核心库、加载语言包和初始化操作。
将以下旧代码:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
508
const worker = createWorker();
await worker.load();
await worker.loadLanguage("eng");
await worker.initialize("eng");替换为:
const worker = await createWorker("eng");这条简洁的语句将完成所有必要的设置:
结合上述解决方案,修正后的 parseFile 方法中的图片处理部分应如下所示:
import { createWorker } from 'tesseract.js'; // 确保正确导入 createWorker
// import * as pdfjsLib from 'pdfjs-dist'; // 如果需要处理PDF,也需要导入
async parseFile() {
if (this.uploadedFile) {
const fileType = this.getFileType(this.uploadedFile.name);
if (fileType === "image") {
try {
// 使用新版 Tesseract.js API 初始化工作器
const worker = await createWorker("eng"); // 一步到位:创建、加载、初始化英文工作器
// 执行文本识别
const {
data: { text },
} = await worker.recognize(this.uploadedFile);
console.log("提取到的图片文本:", text);
// 识别完成后终止工作器
await worker.terminate();
} catch (error) {
console.error("Tesseract.js 图像识别失败:", error);
}
} else if (fileType === "pdf") {
// PDF 处理逻辑保持不变
const fileReader = new FileReader();
fileReader.onload = async () => {
try {
const typedArray = new Uint8Array(fileReader.result);
// 确保 pdfjsLib 已正确配置和导入
const pdf = await pdfjsLib.getDocument(typedArray).promise;
const numPages = pdf.numPages;
let pdfText = "";
for (let i = 1; i <= numPages; i++) {
const page = await pdf.getPage(i);
const content = await page.getTextContent();
const pageText = content.items.map((item) => item.str).join(" ");
pdfText += pageText + "\n";
}
console.log("提取到的PDF文本:", pdfText);
} catch (error) {
console.error("PDF 文本提取失败:", error);
}
};
fileReader.readAsArrayBuffer(this.uploadedFile);
}
}
}注意事项:
TypeError: worker.load is not a function 错误是 Tesseract.js API 变更的常见表现。通过将分步式的工作器初始化代码替换为 const worker = await createWorker("language_code"); 这种简洁的单行语句,可以有效解决此问题,并使代码更符合 Tesseract.js 现代版本的最佳实践。在进行任何库的更新或使用时,查阅其官方文档以了解最新的 API 变更始终是避免此类问题的关键。
以上就是解决 Tesseract.js 中 worker.load 不是函数错误的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号