Tesseract.js如何识别英阿双语证件或忽略指定语言识别?
Tesseract.js多语言识别问题解决方案
问题场景
使用Tesseract.js处理同时包含英文、阿拉伯文的证件图像时,仅加载英文模型会导致阿拉伯文内容识别结果错乱,破坏最终输出。原有仅加载英文模型的代码如下:
const convertImageToText = useCallback(async () => { if (!selectedImage) return; await worker.load(); // 加载tesseract.js工作线程 await worker.loadLanguage("eng"); // 加载英文语言包 await worker.initialize("eng"); // 初始化英文识别配置 const { data } = await worker.recognize(selectedImage); setTextResult(data.text); }
可选处理方案
根据实际需求选择对应方案即可:
- 方案一:同时识别英文+阿拉伯文
Tesseract.js原生支持多语言同时识别,只需要在加载、初始化语言包时,传入用+拼接的多语言代码即可,阿拉伯文对应的语言代码为ara。
修改后代码:
const convertImageToText = useCallback(async () => { if (!selectedImage) return; await worker.load(); // 同时加载英文、阿拉伯文语言包 await worker.loadLanguage("eng+ara"); // 用双语言配置初始化识别器 await worker.initialize("eng+ara"); const { data } = await worker.recognize(selectedImage); setTextResult(data.text); }
提示:双语言模式会增加首次运行的语言包下载体积,识别耗时也会略高于单语言模式。
- 方案二:忽略阿拉伯文,仅保留英文识别结果
如果不需要提取阿拉伯文内容,可以通过设置识别字符白名单的方式,强制识别器只匹配英文字符、数字和常用英文标点,彻底避免阿拉伯文产生的乱码:
const convertImageToText = useCallback(async () => { if (!selectedImage) return; await worker.load(); await worker.loadLanguage("eng"); await worker.initialize("eng"); // 配置字符白名单,仅允许识别指定范围内的英文字符 await worker.setParameters({ tessedit_char_whitelist: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,-:;()/\'"' }); const { data } = await worker.recognize(selectedImage); setTextResult(data.text); }
如果证件上英文、阿拉伯文的区域边界清晰,也可以提前通过图像裁剪去掉阿拉伯文所在区域后再做识别,能进一步提升英文识别的准确率。
内容的提问来源于stack exchange,提问作者חזי ראובני
相关产品推荐
相关产品推荐

