opencv:
For object detection, you're just trying to figure out whether the object is in the frame, and approximately where it's located. The OpenCv features framework is great for this
tesseract:
If your documents have a fixed structured (consistent layout of text fields) then tesseract-ocr is all you need.
I found tesseract easy to use for font based OCR while OpenCV is good for recognizing hand writing.
The following steps worked well with me:
1.Obtain grayscale of image.
2.Perform canny edge detection on grayscale image.
3.Apply gaussian blur on grayscale image(store in seperate matrix)
4.Input matrices from steps 2 & 3 into SWT algorithm
5.Binarize(threshhold) resulting image.
6.Feed image to tesseract.
Please note, for step 4 you will need to build the c++ library in the link and then import into your android project with JNI wrappers. Also, you will need to do micro tweaking for all steps to get the best results. But, this should at least get you started.
some discuss about opencv vs tesseract on ocr
http://stackoverflow.com/questions/11489824/how-do-i-choose-between-tesseract-and-opencv
image processing to improve tesseract OCR accuracy
1.fix DPI (if needed) 300 DPI is minimum
2.fix text size (e.g. 12 pt should be ok)
3.try to fix text lines (deskew and dewarp text)
4.try to fix illumination of image (e.g. no dark part of image
5.binarize and de-noise image
and some advice
Three points to improve the readability of the image: 1)Resize the image with variable height and width(multiply 0.5 and 1 and 2 with image height and width). 2)Convert the image to Gray scale format(Black and white). 3)Remove the noise pixels and make more clear(Filter the image).
//Resize
public Bitmap Resize(Bitmap bmp, int newWidth, int newHeight)
{
Bitmap temp = (Bitmap)bmp;
Bitmap bmap = new Bitmap(newWidth, newHeight, temp.PixelFormat);
double nWidthFactor = (double)temp.Width / (double)newWidth;
double nHeightFactor = (double)temp.Height / (double)newHeight;
double fx, fy, nx, ny;
int cx, cy, fr_x, fr_y;
Color color1 = new Color();
Color color2 = new Color();
Color color3 = new Color();
Color color4 = new Color();
byte nRed, nGreen, nBlue;
byte bp1, bp2;
for (int x = 0; x < bmap.Width; ++x)
{
for (int y = 0; y < bmap.Height; ++y)
{
fr_x = (int)Math.Floor(x * nWidthFactor);
fr_y = (int)Math.Floor(y * nHeightFactor);
cx = fr_x + 1;
if (cx >= temp.Width) cx = fr_x;
cy = fr_y + 1;
if (cy >= temp.Height) cy = fr_y;
fx = x * nWidthFactor - fr_x;
fy = y * nHeightFactor - fr_y;
nx = 1.0 - fx;
ny = 1.0 - fy;
color1 = temp.GetPixel(fr_x, fr_y);
color2 = temp.GetPixel(cx, fr_y);
color3 = temp.GetPixel(fr_x, cy);
color4 = temp.GetPixel(cx, cy);
// Blue
bp1 = (byte)(nx * color1.B + fx * color2.B);
bp2 = (byte)(nx * color3.B + fx * color4.B);
nBlue = (byte)(ny * (double)(bp1) + fy * (double)(bp2));
// Green
bp1 = (byte)(nx * color1.G + fx * color2.G);
bp2 = (byte)(nx * color3.G + fx * color4.G);
nGreen = (byte)(ny * (double)(bp1) + fy * (double)(bp2));
// Red
bp1 = (byte)(nx * color1.R + fx * color2.R);
bp2 = (byte)(nx * color3.R + fx * color4.R);
nRed = (byte)(ny * (double)(bp1) + fy * (double)(bp2));
bmap.SetPixel(x, y, System.Drawing.Color.FromArgb
(255, nRed, nGreen, nBlue));
}
}
bmap = SetGrayscale(bmap);
bmap = RemoveNoise(bmap);
return bmap;
}
//SetGrayscale
public Bitmap SetGrayscale(Bitmap img)
{
Bitmap temp = (Bitmap)img;
Bitmap bmap = (Bitmap)temp.Clone();
Color c;
for (int i = 0; i < bmap.Width; i++)
{
for (int j = 0; j < bmap.Height; j++)
{
c = bmap.GetPixel(i, j);
byte gray = (byte)(.299 * c.R + .587 * c.G + .114 * c.B);
bmap.SetPixel(i, j, Color.FromArgb(gray, gray, gray));
}
}
return (Bitmap)bmap.Clone();
}
//RemoveNoise
public Bitmap RemoveNoise(Bitmap bmap)
{
for (var x = 0; x < bmap.Width; x++)
{
for (var y = 0; y < bmap.Height; y++)
{
var pixel = bmap.GetPixel(x, y);
if (pixel.R < 162 && pixel.G < 162 && pixel.B < 162)
bmap.SetPixel(x, y, Color.Black);
}
}
for (var x = 0; x < bmap.Width; x++)
{
for (var y = 0; y < bmap.Height; y++)
{
var pixel = bmap.GetPixel(x, y);
if (pixel.R > 162 && pixel.G > 162 && pixel.B > 162)
bmap.SetPixel(x, y, Color.White);
}
}
return bmap;
}
分享到:
相关推荐
Tesseract 是一个开源的光学字符识别(OCR)引擎,由 Google 开发。Qt 是一个跨平台的应用程序开发框架,提供了一个完整的开发环境。下面将详细介绍如何使用 OpenCV、Tesseract 和 Qt 实践篇实现文本识别。 一、...
OpenCV与Tesseract OCR是两种强大的工具,它们在图像处理和光学字符识别(OCR)领域有着广泛的应用。本文将深入探讨这两个技术以及如何将它们结合使用。 OpenCV(开源计算机视觉库)是一个跨平台的库,它包含了各种...
【作品名称】:基于OpenCV和TesseractOCRiOS的银行卡号识别 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于...
在这个项目中,结合了OpenCV和Tesseract-OCR两个强大的工具来实现这一功能。OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和模式识别功能;Tesseract-OCR则是一个由Google维护的开源OCR(光学字符识别)...
基于Git上的MAImage lib及Tesseract-OCR-iOS lib整合起来的OCR识别Demo, http://blog.csdn.net/ouq68/article/details/44015483
基于OPENCV和tesseract的中文扫描票据OCR识别源码+全部数据(毕业设计).zip已获导师认可并高分通过的毕业设计项目,代码完整,该资源代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!...
**基于OpenCV&Tesseract的OCR银行卡号识别技术详解** 在当今数字化时代,自动识别银行卡号的需求日益增长,尤其是在金融支付、银行服务自动化等场景中。本文将深入探讨如何结合OpenCV图像处理库与Tesseract OCR...
在本教程中,我们将学习如何在 VS2015 中配置 OpenCV、Tesseract 和 Qt,以便于开发基于计算机视觉和 OCR 技术的应用程序。我们将分三个部分讲解如何配置 Qt、OpenCV 和 Tesseract,同时也会讲解如何在 VS2015 中...
基于python+Opencv和Tesseract-OCR开发的图像文字识别程序源码+报告文档+演示视频(高分项目),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶...
本源码采用VS2010编写,其中包含了OPENCV 处理图片的多种方法,如 二值化、多种方式去噪点算法,图片翻转,该源码生成为DLL文件,作为研究OPENCV 以及 Tesseract3.02 的图像处理和识别学习采用,该源码以成功应用...
在iOS开发中,为了实现身份证号码的自动识别,开发者经常结合OpenCV和Tesseract OCR这两个强大的工具。OpenCV,全称Open Source Computer Vision Library,是一个开源的计算机视觉库,提供了丰富的图像处理和计算机...
用opencv2,tesseract-ocr和一些机器学习算法识别验证码
基于python+Opencv和Tesseract-OCR开发的图像文字识别程序+源码+开发文档+视频演示+设计报告(高分项目)专为大学期间课程设计和期末大作业开发的高分设计项目,可作为高分课程设计和期末大作业的参考,含有代码注释...
**Tesseract OCR 4.0版本与VS2015编译详解** Tesseract OCR(Optical Character Recognition,光学字符识别)是一款强大的开源OCR引擎,最初由HP开发,后由Google维护并持续更新。Tesseract 4.0是其一个重要的版本...
【OpenCV和Tesseract OCR文本识别】 OpenCV和Tesseract结合使用可以实现高效的OCR(Optical Character Recognition,光学字符识别)和文本识别功能。OCR技术主要用于自动从图像中识别和提取文字,这对于处理扫描...
OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV...
基于python+Opencv和Tesseract-OCR开发的图像文字识别程序+源码+开发文档+视频演示+设计报告,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python+Opencv和...
基于OpenCV+TesseractOCRiOS的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCV+TesseractOCRiOS的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCV+TesseractOCRiOS的银行卡号识别源码...
基于Python+OpenCV+tesseract的中文扫描票据OCR识别。源码+使用文档+全部资料(优秀项目).zip基于Python+OpenCV+tesseract的中文扫描票据OCR识别。源码+使用文档+全部资料(优秀项目).zip基于Python+OpenCV+...
- **依赖库**:编译Tesseract 5.0需要安装一些依赖库,如Leptonica、OpenCV、ICU(国际化和本地化库)等。 - **源码获取**:从GitHub上下载Tesseract的源代码,并确保获取到5.0版本。 - **配置与编译**:使用...