Tesseract 简单文字识别

  最近一直在搞图形图像处理与识别,之前做了人脸检测识别和车牌识别,用的是C++和OpenCV,最终只实现了人脸检测和车牌的简单处理,最后的人脸识别和车牌号码的正确识别没有成功,搞了一段时间也没有头绪,只好先继续做其它的,可能会在某处有新的发现,等做好了,有时间整理完后会公布出来。

   今天记录的是用Tesseract的文字识别,从网上资料看来,字符识别领域Tesseract还是挺不错的,但网上大部分都是c#和tesseract的资料,就先作C#的例子了。从昨天搞到现在,经历了n多坑,终于搞出来了,总结一下,如果建议,请私信,共同进步。

工具: C#(windowsForm), Tesseract 3.0.2, VS2017

  1. 打开vs2017 新建一个C# windowsForm项目,建一个简单的界面,包含控件 picturebox1, button1, opendialog1, lable1
  2. 进入button1中准备写代码。
  3. 安装Tesseract,我用的是NuGet安装,在里面搜索tesseract。
  4. 这时候注意了,只装 Tesseract,不要装 Tesseract-OCR, 不知其他人为什么要装Tesseract-OCR,因为装好这个之后, 之前装的Tesseract 引用会出现黄色的警告标志,导致不能用。还有 Tesseract我装的是 3.0.2版本,因为 3.3.0版本装上之后也出了点问题。我在这个地方被坑了一个上午,真心难啊。
  5. 等下面输出来源显示 Tesseract 安装完毕后,可以查看左边多出了两个文件夹 x64, x86, 而且在引用里多了一个 Tesseract的引用
  6. 之后再从网上下载字符集,github里 https://github.com/tesseract-ocr/tesseract/wiki/Data-Files#data-files-for-version-302
  7. 把下载下来的字符集放入到自己指定的文件夹下,一般都叫 Tessdata。别忘了解压缩,这里网上都没说,我以为直接用 tar.gz就行了,没解压缩,程序一直抱错到怀疑人生。。。。
  8. 之后就是写代码了,只要前面做对了,代码就是很简单了。由于是在公司,自己的电脑不能上网,所以先附上网上的代码,我的就是根据这个改编的,都一样的。
  9. 别忘了,在开头引用 using tesseract;
  10. private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    //PictureBox控件显示图片
                    Image.Load(openFileDialog.FileName);
                    //获取用户选择文件的后缀名 
                    string extension = Path.GetExtension(openFileDialog.FileName);
                    //声明允许的后缀名 
                    string[] str = new string[] { ".jpg", ".png" };
                    if (!str.Contains(extension))
                    {
                        MessageBox.Show("仅能上传jpg,png格式的图片!");
                    }
                    else
                    {
                        //识别图片文字
                        var img = new Bitmap(openFileDialog.FileName);
                        var ocr = new TesseractEngine("./tessdata", "eng", EngineMode.TesseractAndCube);
                        var page = ocr.Process(img);
                        label1.Text = page.GetText();
                    }
                }
            }

     

  11. 代码很简单,但不能识别倾斜和模糊的字体,需要进行优化。

以上就是自己做文字识别的一点心得,有比较好的建议的话欢迎一块讨论,共同进步。

 

 

 

你可能感兴趣的:(C#,Tesseract)