欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 10分钟完成百度图片提取文字(文字识别)——入门篇

程序员文章站 2022-08-28 14:11:50
现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的、文字数量大的、或者不能赋值的值进行二次可复制功能。 我们现在就基于百度Ai开放平台进行个人文字识别,demo使用的是C#控制台应用程序,后续有需要的可以嫁接到指定项目中使用,比如提供选择图片,点击识别, 获 ......

  现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的、文字数量大的、或者不能赋值的值进行二次可复制功能。

我们现在就基于百度ai开放平台进行个人文字识别,demo使用的是c#控制台应用程序,后续有需要的可以嫁接到指定项目中使用,比如提供选择图片,点击识别,

获取返回的值。废话不多说,上干货:


 

总体为:

  1. 注册百度账号api,创建自己的应用;
  2. 创建vs控制台应用程序,引入动态链接库;
  3. 编写代码调试,效果图查看;
  4. 总结。

 

1、创建百度ai文字识别应用

  在百度ai开放平台中,登录自己的百度账号,点击“文字识别”服务中的“通用场景文字识别”,选择“创建应用”,填好应用名称,选择应用类型,填好应用描述,这样就创建好了“通用场景文字识别”服务。

具体不废话,不知道的小伙伴可以移步看这里:c# 10分钟完成百度人脸识别——入门篇

创建完成后会生成appid、app key、secret key,这些是关键内容,后面要用。

2、创建vs控制台应用程序,引入动态链接库

首先我们创建一个vs控制台应用程序,这里就不详细说明。

然后引入百度baidu.ai动态链接库,步骤如下,小编使用2017,所以直接在nuget中搜索baidu.ai安装即可。

安装文字识别 c# sdk

c# sdk 现已开源! https://github.com/baidu-aip/dotnet-sdk

** 支持平台:.net framework 3.5 4.0 4.5, .net core 2.0 **

方法一:使用nuget管理依赖 (推荐)

在nuget中搜索 baidu.ai,安装最新版即可。

packet地址 https://www.nuget.org/packages/baidu.ai/

方法二:下载安装

文字识别 c# sdk目录结构

baidu.aip
    ├── net35
    │   ├── aipsdk.dll             // 百度ai服务 windows 动态库
    │   ├── aipsdk.xml             // 注释文件
    │   └── newtonsoft.json.dll    // 第三方依赖
    ├── net40
    ├── net45
    └── netstandard2.0
        ├── aipsdk.deps.json
        └── aipsdk.dll

如果需要在 unity 平台使用,可引用工程源码自行编译。

安装

1.在下载c# sdk压缩工具包。

2.解压后,将 aipsdk.dll 和 newtonsoft.json.dll 中添加为引用。


 

3、编写代码调试,效果图查看

  创建一个空文件夹,命名为image,存一个张有文字的图片,做调试。

在program.cs中编写代码,代码编写如下,可以直接拷贝进行调试。

using system;
using system.collections.generic;
using system.io;
using system.linq;
using system.net;
using system.text;
using system.threading.tasks;

namespace recognition
{
   public class program
    {
       static void main(string[] args)
        {
            //ak/sk
            var api_key = "fgpi0qpcbzxzxban6dvqt87x";
            var secret_key = "hunnq6xsljf3a7acauirvavqo7ckbuww";

            var client = new baidu.aip.ocr.ocr(api_key, secret_key);
            client.timeout = 60000;  // 修改超时时间


            var image = file.readallbytes("e:\\work demo\\图片提取文字\\recognition\\recognition\\image\\img.jpg");
            var url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1564654456007&di=7832dd6f515e654bdf5074e47b6803b1&imgtype=0&src=http%3a%2f%2fpic.962.net%2fup%2f2018-5%2f2018527102938219310.jpg";
            
            // 调用通用文字识别, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
            //用户向服务请求识别某张图中的所有文字
            var result = client.generalbasic(image);        //本地图图片
            //var result = client.generalbasicurl(url);     //网络图片
            //var result = client.accurate(image);          //本地图片:相对于通用文字识别该产品精度更高,但是识别耗时会稍长。

            //var result = client.general(image);           //本地图片:通用文字识别(含位置信息版)
            //var result = client.generalurl(url);          //网络图片:通用文字识别(含位置信息版)

            //var result = client.generalenhanced(image);   //本地图片:调用通用文字识别(含生僻字版)
            //var result = client.generalenhancedurl(url);  //网络图片:调用通用文字识别(含生僻字版)

            //var result = client.webimage(image);          //本地图片:用户向服务请求识别一些背景复杂,特殊字体的文字。
            //var result = client.webimageurl(url);         //网络图片:用户向服务请求识别一些背景复杂,特殊字体的文字。

            console.writeline(result);
        }
    }
}

下面注释了的每一行都是一种识别,更多识别请看官网:https://ai.baidu.com/docs#/ocr-csharp-sdk/top

调用两个,一个精准,一个不精准,先看精准的:

调用的是:var result = client.generalbasic(image);,最后一个字没识别出来

C# 10分钟完成百度图片提取文字(文字识别)——入门篇

 

 我的图片文字是“做个快乐读书人”,最后的“人”没识别出来,我们换一个能后识别复杂背景的,

调用的是:var result = client.generalenhanced(image);

 

C# 10分钟完成百度图片提取文字(文字识别)——入门篇

 


 

4、总结

   具体业务使用看场景使用不同的接口即可。

这只是一个简单的识别,针对不能赋值、文字繁多、不认识的字都可以做一个简单的文字识别,更多内容需要大家去摸索入坑

拜拜,下次再见咯!