【WinForm】关于截图识别数字并计算的桌面程序实现方案

在计算机办公场景中,处理非电子表的统计表文件时,通常需要手动输入数字,用计算器计算,这种操作无需自己效劳,可以拍照上图,或者截图下来,用现有OCR功能识别图中的数字,最后自动完成计算,这些是可以交给计算机自动完成的,不知道网上有没有这样的程序,有条件的就自己动手来实现吧

  1. 接下来,软件开发用C#语言编写程序,打开Visual Studio开发工具,建一个WinForm项目,建桌面程序,要实现一下三个功能
  1. 桌面截图
  2. 数字识别
  3. 计算器
  1. 关于桌面截图的实现,请参考这个文章【截屏工具窗口简单实现原理,附详细代码】,截图工具的运行效果
    在这里插入图片描述

  2. 关于数字识别,有很多现成的OCR插件,这里用的插件是NuGet程序包中的 Spire.OCR,但只能用在64位机系统环境上
    在这里插入图片描述

💡 安装Spire.OCR注意事项
点安装后,还需要将其中packages\Spire.OCR.1.8.0\runtimes\win-x64\native 文件夹下所有文件复制到运行文件夹中(通常是Debug)

  1. 下面是调用图文识别方法的相关代码
/// <summary>
/// Spire.OCR
/// </summary>
/// <param name="imgFileName"></param>
/// <param name="result"></param>
/// <returns></returns>
private bool UseSpireOCR(String imgFileName, out string result)
{
    //创建一个OcrScanner类的实例
    OcrScanner scanner = new OcrScanner();

    //调用OcrScanner.Scan(string fileName)方法扫描图片上的文字
    scanner.Scan(imgFileName);
    //识别结果
    string text = scanner.Text.ToString();

    //测试,保存识别文字到txt文件
    //File.WriteAllText("output.txt", text);
    //System.Diagnostics.Process.Start("output.txt");
    if (!String.IsNullOrEmpty(text))
    {
        //使用这个 会多出提示 仅用于评估目的
        int lastIndex = text.LastIndexOf("Evaluation Warning : The version can be used only for evaluation purpose...");
        if (lastIndex == 0) text = "";
        else if (lastIndex > 0) text = text.Substring(0, lastIndex);//去掉提示
        result = text;
        return true;
    }
    result = "";
    return false;
}
  1. 关于计算器,这里实现就简单,基本是由用户选择如何计算,默认是将识别到所有数字相加,求其和,或者求其平均数,求和实现代码如下
//传入图片文件 fileName, 识别结果赋值到 result
if (UseSpireOCR(fileName, out result))
{
    var reg = new Regex(@"\d+(.\d+)\s*");
    MatchCollection mes = reg.Matches(result);
    if (mes.Count>0)
    {
        var text = new StringBuilder();
        foreach(Match m in mes)
        {
            if (text.Length > 0) text.Append("+" + m.Value.Trim());
            else text.Append(m.Value.Trim());
        }
        textBox1.Text = text.ToString();
        text.Clear();
        return;
    }
    textBox1.Text = "";

    result = "识别非数字\n" + result;

    MessageBox.Show(result, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
  1. 计算器的实现代码这里就不列举了,很简单的,请自己实现,界面布局大致如下图
    在这里插入图片描述

💡 小提示
上面思路是将识别结果输出到文本编辑框中,用于计算器上显示的,其中的计算逻辑就是将用户输入框中的数字和运算符提取出来处理,然后参与运算,最后得出结果显示

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA远方

谢谢!收到你的爱╮(╯▽╰)╭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值