我正在编写一个应用程序来扫描图像中的数字.
这些数字是使用OCR-B字体,并且还可以含有+和>字符.
这是我的源图片:

即使将字符集限制为上述字符,使用Tesseract的扫描也不是很好.由于我没有找到任何针对Tesseract的OCRB培训文件,我决定自己进行培训.
我创建了这个训练图像并从中制作了一个盒子文件.盒子文件是正确的,所有字母都正确匹配.
然后我完成了这里描述的所有步骤来创建其他必要的文件.
使用这个新训练的OCR-B tessdata-set,我在源图像上得到了相当不错的结果,有一个小错误:所有1s都被误认为8s,反之亦然.用于处理图像的命令是
$ tesseract esr2c.tif ocrb-esr2c -l ocrb
Run Code Online (Sandbox Code Playgroud)
并且源图像的输出是
0800000001456> 8 00000195731208 8 01050008 023+ 08 0301226> 20
如果你交换所有1s和8s并将它与源图像进行比较,输出将是正确的(除了我可以忽略的最后两个字母).
怎么会发生这种情况?我在培训过程中是否犯了一些错误?我该如何解决?
我在网上搜了几个小时.我得到了许多答案,说我们需要使用NDK等来为WINDOWS的"Tesseract".
但是我没有逐步/正确地解释安装NDK时应该做什么.如何获取.so文件?我已经完成安装NDK和Cygwin.为了检查它是否正确完成,我输入make -v并给出了预期的输出.
任何使用过"Tesseract"的人都可以告诉我他们是如何做到的吗?(我已下载"Mezzofanti",但在那里我没有找到任何"Tesseract"文件.)
有没有好的手写识别API来帮助在Android平台上开发应用程序?Google已发布(2012年7月左右http://www.google.com/insidesearch/features/search/handwritinginput/index.html)一项功能,使用手写功能在触摸屏设备中进行搜索,看起来很棒,是否有可能获得访问这些API以便在Android应用中使用?
我是"光学字符识别"的新手,需要更多的信息和建议,因为我无法找到可以做我需要的东西.
我有以下任务:
是否可以使用一些OCR php库创建一个函数,并只选择一些带有文本的区域?
如果PHP没有好的OCR库,你能推荐一些其他语言吗?
下面的例子展示了我想要做的事情(这只是一个例子,我不是试图通过金钱进行法律操作):
这是示例图片:

这是输出(用红色矩形包围的文本):
欢迎所有文章和建议.
以前曾经问过,但我真的不知道这些答案对我有帮助.这是我的问题:我得到了一堆(10,000左右)pdf文件.有些是使用adobe的打印功能保存的文本文件(所以他们的文本是完美的,我不想冒险搞砸它们).有些是扫描图像(所以他们没有任何文字,我将不得不接受OCR).文件在同一目录中,我无法分辨哪个是哪个.最终我想将它们转换为.txt文件,然后对它们进行字符串处理.所以我希望最准确的OCR成为可能.
似乎有人建议:
我也是编程的n00b所以如果要花几周的时间来学习如何做,我宁愿支付$$$.感谢输入/体验.
顺便说一下,我正在运行Linux Mint 11 64位和/或Windows 7 64位.
以下是其他主题:
https://superuser.com/questions/107678/batch-ocr-for-many-pdf-files-not-already-ocred
任何人都可以描述我如何使用opencv或simplecv在python中实现SWT?
我正在使用tesseract ocr从图像中提取文本.保留文档的结构对我来说非常重要.目前tesseract不保留结构,实际上它改变了文本的顺序.我的输入是下图.

我得到的输出如下:
Someto the left
Someto the left
Some in the middle
Some in the middle
Some with some tab
Some with some tab
Some with some space between them
Some with some space between them
Sometext here
Sometext here
this much
this much
Run Code Online (Sandbox Code Playgroud)
如何获得图像中相同结构的所需输出?
即如下:
Some text here
Some text here
Some to the left
Some to the left
Some in the middle
Some in the middle
Some with some tab
Some with some tab
Some with some …Run Code Online (Sandbox Code Playgroud) 我有几千个包含数字化纸张形式的黑白图像(1位)的PDF文件.我正在尝试OCR一些字段,但有时写作太微弱了:
我刚刚学习了形态变换.他们真的很酷!!! 我觉得我在滥用它们(就像我在学习Perl时用正则表达式做的那样).
我只对日期感兴趣,07-06-2017:
im = cv2.blur(im, (5, 5))
plt.imshow(im, 'gray')
Run Code Online (Sandbox Code Playgroud)
ret, thresh = cv2.threshold(im, 250, 255, 0)
plt.imshow(~thresh, 'gray')
Run Code Online (Sandbox Code Playgroud)
填写此表单的人似乎对网格有些不屑,所以我试图摆脱它.我可以用这个变换来隔离水平线:
horizontal = cv2.morphologyEx(
~thresh,
cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_RECT, (100, 1)),
)
plt.imshow(horizontal, 'gray')
Run Code Online (Sandbox Code Playgroud)
我也可以得到垂直线:
plt.imshow(horizontal ^ ~thresh, 'gray')
ret, thresh2 = cv2.threshold(roi, 127, 255, 0)
vertical = cv2.morphologyEx(
~thresh2,
cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_RECT, (2, 15)),
iterations=2
)
vertical = cv2.morphologyEx(
~vertical,
cv2.MORPH_ERODE,
cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))
)
horizontal = cv2.morphologyEx(
~horizontal,
cv2.MORPH_ERODE,
cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
)
plt.imshow(vertical & horizontal, 'gray')
Run Code Online (Sandbox Code Playgroud)
现在我可以摆脱网格:
plt.imshow(horizontal & vertical …Run Code Online (Sandbox Code Playgroud) 我正在运行的问题是从图像中提取文本,为此我使用了Tesseract v3.02.我必须提取文本的样本图像与仪表读数有关.其中一些具有实心纸张背景,其中一些具有LED显示器.我已经训练了固体纸张背景的数据集,结果是有效的.
我现在遇到的主要问题是具有LED/LCD背景的文本图像,Tesseract无法识别,因此不会生成训练集.
任何人都可以指导我如何使用Tesseract与七段显示器(LCD/LED背景)正确的方向或是否有任何其他替代我可以使用而不是Tesseract.

我正在使用OpenCV从iPhone相机准备OCR图像,我一直无法获得准确的OCR扫描所需的结果.这是我现在使用的代码.
cv::cvtColor(cvImage, cvImage, CV_BGR2GRAY);
cv::medianBlur(cvImage, cvImage, 0);
cv::adaptiveThreshold(cvImage, cvImage, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 5, 4);
Run Code Online (Sandbox Code Playgroud)
这种方法需要花费太长时间,并没有给我带来好的结果.

关于如何使这更有效的任何建议?这些图像来自iPhone相机.
在使用安德里的建议之后.

cv::Mat cvImage = [self cvMatFromUIImage:image];
cv::Mat res;
cv::cvtColor(cvImage, cvImage, CV_RGB2GRAY);
cvImage.convertTo(cvImage,CV_32FC1,1.0/255.0);
CalcBlockMeanVariance(cvImage,res);
res=1.0-res;
res=cvImage+res;
cv::threshold(res,res, 0.85, 1, cv::THRESH_BINARY);
cv::resize(res, res, cv::Size(res.cols/2,res.rows/2));
image = [self UIImageFromCVMat:cvImage];
Run Code Online (Sandbox Code Playgroud)
方法:
void CalcBlockMeanVariance(cv::Mat Img,cv::Mat Res,float blockSide=21) // blockSide - the parameter (set greater for larger font on image)
{
cv::Mat I;
Img.convertTo(I,CV_32FC1);
Res=cv::Mat::zeros(Img.rows/blockSide,Img.cols/blockSide,CV_32FC1);
cv::Mat inpaintmask;
cv::Mat patch;
cv::Mat smallImg;
cv::Scalar m,s;
for(int i=0;i<Img.rows-blockSide;i+=blockSide)
{
for (int j=0;j<Img.cols-blockSide;j+=blockSide)
{ …Run Code Online (Sandbox Code Playgroud)