使用js截图组件screenShotPlugin.js截图和前端文字识别组件tesseract.js识别截取区域内容
screenShotPlugin
github地址: https://github.com/likaia/js-screen-shot/tree/master
<script src="../plugins/screenShotPlugin.umd.js"></script>
<div id="app">
<div>截图插件文字展示</div>
<br />
<button onclick="changeScreenShot()">点击截图</button>
<p>图片展示</p>
<img src="../images/1.jpg" alt="" id="img-shot" width="300" />
</div>
<script type="text/javascript">
// 截图确认按钮回调函数
const callback = ({ base64, cutInfo }) => {
console.log(base64, cutInfo);
document.querySelector("#img-shot").src = base64;
};
// 截图取消时的回调函数
const closeFn = () => {
console.log("截图窗口关闭");
};
const config = {
enableWebRtc: false, //是否启用webrtc,值为boolean类型,值为false则使用html2canvas来截图
completeCallback: callback,
closeCallback: closeFn,
};
const changeScreenShot = () => {
new screenShotPlugin(config);
};
</script>
截图界面显示如下

更换配置
const config = {
enableWebRtc: true,//启用webrtc
wrcWindowMode: true,//启用窗口截图模式,值为boolean类型,默认为false,即当前标签页截图。如果标签页截图的内容有滚动条或者底部有空缺,可以考虑启用此模式。
completeCallback: callback,
closeCallback: closeFn,
};
截图界面显示如下:可以截取其它标签页和窗口,需要用户授权。截图操作稍显卡顿,和pc端截图软件相比,操作不是很流畅

tesseract.js
github地址: https://github.com/naptha/tesseract.js https://github.com/naptha/tesseract.js-core https://github.com/naptha/tessdata 训练数据
采用本地安装的形式,把训练数据和库代码下载到本地,可离线使用
<!DOCTYPE html>
<html>
<head>
<script src="../plugins/tesseract.js/tesseract.min.js"></script>
</head>
<body>
<input type="file" id="imageUpload" accept="image/*" />
<div id="result" style="margin-top: 20px; border: 1px solid #ccc; padding: 15px"></div>
<script>
let worker;
(async function init() {
try {
worker = await Tesseract.createWorker("chi_sim", 1, {
workerPath: "../plugins/tesseract.js/worker.min.js",
langPath: "../plugins/tesseract.js/lang",
corePath: "../plugins/tesseract.js-core",
});
console.log("OCR 引擎就绪");
} catch (err) {
console.error("初始化失败:", err);
}
})();
document.getElementById("imageUpload").addEventListener("change", async (e) => {
const file = e.target.files[0];
if (!file) return;
const resultDiv = document.getElementById("result");
resultDiv.innerHTML = '<div style="color:gray">识别中...</div>';
try {
const {
data: { text },
} = await worker.recognize(file);
resultDiv.innerHTML = `
<h3 style="color:#2c3e50">识别结果:</h3>
<pre style="white-space: pre-wrap;">${text.replaceAll(" ", "").trim()}</pre>
`;
} catch (err) {
resultDiv.innerHTML = `<div style="color:red">错误: ${err.message}</div>`;
}
});
</script>
</body>
</html>
测试用例

识别结果:中文汉字基本准确,偶尔会有部分汉字识别错误,标点符号会有识别失误,比较容易出现空格问题,因此上面的代码中会替换空格。

截图识别
<script src="../plugins/screenShotPlugin.umd.js"></script>
<script src="../plugins/tesseract.js/tesseract.min.js"></script>
<div id="app">
<div>截图插件文字展示</div>
<div>截图插件文字展示</div>
<div>Detection Date</div>
<div>Detection Status</div>
<br />
<button onclick="changeScreenShot()">点击截图</button>
<div id="result" style="margin-top: 20px; border: 1px solid #ccc; padding: 15px"></div>
</div>
<script type="text/javascript">
let worker;
(async function init() {
try {
worker = await Tesseract.createWorker("chi_sim", 1, {
workerPath: "../plugins/tesseract.js/worker.min.js",
langPath: "../plugins/tesseract.js/lang",
corePath: "../plugins/tesseract.js-core",
});
console.log("OCR 引擎就绪");
} catch (err) {
console.error("初始化失败:", err);
}
})();
// 截图确认按钮回调函数
const callback = async ({ base64, cutInfo }) => {
const resultDiv = document.getElementById("result");
resultDiv.innerHTML = '<div style="color:gray">识别中...</div>';
try {
const {
data: { text },
} = await worker.recognize(base64, {
oem: 1,
psm: 6,
preserve_interword_spaces: "0",
});
resultDiv.innerHTML = `
<h3 style="color:#2c3e50">识别结果:</h3>
<pre style="white-space: pre-wrap;">${text.trim()}</pre>
`;
} catch (err) {
resultDiv.innerHTML = `<div style="color:red">错误: ${err.message}</div>`;
}
};
// 截图取消时的回调函数
const closeFn = () => {
console.log("截图窗口关闭");
};
const config = {
enableWebRtc: true,
wrcWindowMode: true,
completeCallback: callback,
closeCallback: closeFn,
};
const changeScreenShot = () => {
new screenShotPlugin(config);
};
</script>
中英文字符一起识别时中文字符会出现空格问题。

浙公网安备 33010602011771号