JS-OCR-demo加载本地文件

[复制链接]
发表于 2025-9-22 05:27:17 | 显示全部楼层 |阅读模式
配景:

在相识 Tesseract 的识别效果的时间,有个demo项目很好用。有个小弊端,就是没事都要从摄像头抓取图片,然后举行识别。如果可以从本地读取图,就更方便了。
实现:


  • 下载项目代码:https://github.com/kdzwinel/JS-OCR-demo
  • 在页面index.html增加选择文件的input组件
    1. 51|<input type="file" id="uploadImage" accept="image/*" class="btn btn-lg btn-default" style="justify-self: center;
    2.     margin-top: 10px;">
    复制代码
  • 在main.js修改方法:


  • 增加加载本地图片的逻辑。
    1.    // 新增:本地图片上传
    2.    $('#uploadImage').on('change', function (e) {
    3.        var file = e.target.files[0];
    4.        if (!file) return;
    5.        var reader = new FileReader();
    6.        reader.onload = function (evt) {
    7.            var img = document.querySelector('#step2 img');
    8.            img.onload = function () {
    9.                // 将图片绘制到canvas
    10.                var canvas = document.querySelector('#step2 canvas');
    11.                canvas.width = pictureWidth;
    12.                canvas.height = pictureHeight;
    13.                
    14.                var ctx = canvas.getContext('2d');
    15.                ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    16.                texture = fxCanvas.texture(canvas);
    17.                fxCanvas.draw(texture)
    18.                    .hueSaturation(-1, -1)//grayscale
    19.                    .unsharpMask(20, 2)
    20.                    .brightnessContrast(0.2, 0.9)
    21.                    .update();
    22.                $('.jcrop-holder img').attr('src', fxCanvas.toDataURL());
    23.                $(img).attr('src', fxCanvas.toDataURL());
    24.            };
    25.            img.src = evt.target.result;
    26.        };
    27.        reader.readAsDataURL(file);
    28.        step2(false);
    29.        changeStep(2);
    30.       
    31.    });
    复制代码
  • 修改step2方法:增加参数判定,区分利用的相机截图,还是本地文件;截图时,利用图片真实像素为基准。
    1. function step2(usevideo=true) {
    2.     var canvas = document.querySelector('#step2 canvas');
    3.     var img = document.querySelector('#step2 img');
    4.    
    5.     //setup canvas
    6.     canvas.width = pictureWidth;
    7.     canvas.height = pictureHeight;
    8.     var ctx = canvas.getContext('2d');
    9.     if(usevideo){
    10.     //draw picture from video on canvas
    11.     ctx.drawImage(video, 0, 0);
    12.     console.log('draw picture from video on canvas');
    13.     }
    14.     //modify the picture using glfx.js filters
    15.     texture = fxCanvas.texture(canvas);
    16.     fxCanvas.draw(texture)
    17.         .hueSaturation(-1, -1)//grayscale
    18.         .unsharpMask(20, 2)
    19.         .brightnessContrast(0.2, 0.9)
    20.         .update();
    21.     window.texture = texture;
    22.     window.fxCanvas = fxCanvas;
    23.     $(img)
    24.         //setup the crop utility
    25.         .one('load', function () {
    26.             if (!$(img).data().Jcrop) {
    27.                 $(img).Jcrop({
    28.                     onSelect: function () {
    29.                         //Enable the 'done' button
    30.                         $('#adjust').removeAttr('disabled');
    31.                     },
    32.                     trueSize: [img.naturalWidth || img.width, img.naturalHeight || img.height]
    33.                 });
    34.             } else {
    35.                 //update crop tool (it creates copies of <img> that we have to update manually)
    36.                 $('.jcrop-holder img').attr('src', fxCanvas.toDataURL());
    37.             }
    38.         })
    39.         //show output from glfx.js
    40.         .attr('src', fxCanvas.toDataURL());
    41. }
    复制代码
  • 修改step3方法:截图地区不再利用缩放系数计算;修改识别语言为中文chi_sim
    1. function step3() {
    2.         var canvas = document.querySelector('#step3 canvas');
    3.         var step2Image = document.querySelector('#step2 img');
    4.         var cropData = $(step2Image).data().Jcrop.tellSelect();
    5.         
    6.         // 直接使用裁剪区域的宽高
    7.         canvas.width = cropData.w;
    8.         canvas.height = cropData.h;
    9.         var ctx = canvas.getContext('2d');
    10.         ctx.drawImage(
    11.             step2Image,
    12.             cropData.x, cropData.y, cropData.w, cropData.h, // 源区域
    13.             0, 0, cropData.w, cropData.h                    // 目标区域
    14.         );
    15.         var spinner = $('.spinner');
    16.         spinner.show();
    17.         $('blockquote p').text('');
    18.         $('blockquote footer').text('');
    19.         
    20.         // do the OCR!
    21.         // 设置参数
    22.         var options = 'chi_sim+eng';
    23.         Tesseract.recognize(ctx, options).then(function (result) {
    24.             var resultText = result.text ? result.text.trim() : '';
    25.             //show the result
    26.             spinner.hide();
    27.             $('blockquote p').html('&bdquo;' + resultText + '&ldquo;');
    28.             $('blockquote footer').text('(' + resultText.length + ' characters)');
    29.         });
    30.     }
    复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表