如何使用 JavaScript 从图像中提取文本
How to extract text from an image using JavaScript
我想从图像中提取我可以获得的所有信息,因此如果该图像包含:
Name : john doe
Dob : 12/12/2012
用户上传该图像后,我想提取两个变量上的这两条信息并将其存储在我的数据库中。我试过Orcad.js但这对我不起作用:(。有没有其他方法可以从图像中提取文本并通过JavaScript存储它?
Javascript是一种完整的计算机语言(尽管有人批评它),自从NodeJS问世以来,简单地说Javascript不会与社区沟通,无论你是在浏览器中还是在服务器上这样做。
您描述的功能是光学字符识别 (OCR)。Javacript 有内置的吗?没有。这是对你问题的简短回答。
可以使用Javascript语言来做到这一点吗?是的,但你必须努力让它工作。正如您已经发现的那样,有一些像 Ocrad 这样的项目.js它们在 Javascript 中实现了 OCR 算法并直接在您的浏览器中运行。该演示似乎对我来说效果很好。想详细说明您遇到的具体问题吗?
另一方面,更明显的一端是,如果你在服务器上运行Javascript,那么你可以使用Javascript编写OCR代码(很像Ocrad),或者你可以将其委托给一些你可以下载并在服务器上运行的应用程序,如OCR4Linux。
如果您想要一个在浏览器中工作的客户端解决方案(仅导入 cdn),您有两种可能性:
-
Tesseract,非常强大,但无法读取表格/网格中的文本https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html#tables-recognitions已知 tesseract 在识别表中的文本/数据方面存在问题
-
Ocrad.js,通常具有较弱的识别能力,您可以预处理图像(所以对我来说没关系),但是已经解决了表格/网格的这个大问题!为此,我编写了一个代码 https://github.com/desousar/OcradJS_use_strict我更正了原始存储库代码 (https://github.com/antimatter15/ocrad.js),以避免在"使用严格"环境中出现八进制文字
这是我的 Ocrad 代码.js
<!-- <script src="https://antimatter15.com/ocrad.js/ocrad.js"></script> -->
<script src="https://cdn.jsdelivr.net/gh/desousar/OcradJS_use_strict@v2/ocrad.js"></script>
<h1>Utilisation d'OCRad.js avec une image</h1>
<input type="file" id="imageInput">
<pre id="result"></pre>
<script>
function readImage(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
var image = new Image();
image.onload = function() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const upscaleBy = 1
canvas.width = image.width * upscaleBy;
canvas.height = image.height * upscaleBy;
ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
for (let i = 0; i < imageData.data.length; i += 4) {
const r = imageData.data[i];
const g = imageData.data[i + 1];
const b = imageData.data[i + 2];
const brightness = (r + g + b) / 3;
const bw = brightness < 128 ? brightness : 255;
imageData.data[i] = bw;
imageData.data[i + 1] = bw;
imageData.data[i + 2] = bw;
}
ctx.putImageData(imageData, 0, 0);
const base64Image = canvas.toDataURL('image/jpeg', 1);
const image2 = new Image();
image2.onload = function() {
const result = OCRAD(image2);
document.getElementById('result').textContent = result;
};
image2.src = base64Image;
};
image.src = e.target.result;
};
reader.readAsDataURL(input.files[0]);
}
}
document.getElementById('imageInput').addEventListener('change', function() {
readImage(this);
});
</script>
这是我的Tesseract代码
await Promise.all([
// Import Tesseract.js
import('https://unpkg.com/tesseract.js@4.0.2/dist/tesseract.min.js')
])
async function imageProcess(file){
// Load image and convert it to an image object
const img = new Image();
img.src = URL.createObjectURL(file);
// Wait for the image to load
await new Promise(resolve => {
img.onload = resolve;
});
// Create a canvas to draw the enlarged image
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const upscaleBy = 2
// Enlarge the image by doubling its size
canvas.width = img.width * upscaleBy;
canvas.height = img.height * upscaleBy;
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
// Convert canvas to Blob object
const blob = await new Promise(resolve => canvas.toBlob(resolve, 'image/jpeg', 1));
// Use Tesseract.js to recognize the text in the enlarged image
const result = await Tesseract.recognize(blob, 'eng');
const text = result?.data?.text;
return text;
}
- 使用 jQuery 从选择标签中抓取文本
- 如何从字符串中提取特定文本.最困难的部分是所需的文本会定期更改
- 使用 casperjs 抓取文本节点的最快方法
- 如何分析 XML 文件和抓取文本值
- 从 URL 中抓取文本和媒体
- Javascript从字符串中提取特定文本的最佳方法
- 使用 JavaScript 从锚标记中提取锚文本
- 用于从锚标签中提取锚文本的 Javascript
- 在提取的文本 JavaScript 中搜索关键字
- 从几乎相同的dom结构中提取内部文本
- 如何从URL中抓取文本并放置在JS数组中
- JS从文本框中抓取文本,传递给asp.net mvc ActionResult,但ActionResult参数显示为nu
- 如何在事件onclick中抓取文本
- 使用JavaScript书签从图像链接中提取alt文本
- 如何从文本src抓取文本
- 使用正则表达式提取特定文本
- Imacros从提取的文本中剪切TXT的一部分
- 从span标签中抓取文本
- jQuery迭代类元素,抓取文本,插入别处
- 从多个输入字段抓取文本