我一直在开发一个使用光学字符识别来读取财务报表的程序,我一生都无法弄清楚为什么我正在使用的开源模块仍然无法读取某些数字。
我创建了一个输出文件,在原始输入周围带有绿色框,其中正在检测文本。在这种情况下,带有“381”的行被选取,但下面的行(具有相同的精确格式)被忽略。
我在提取数据之前使用此代码对图像进行预处理,因为之前的丢失率高达 20%,现在接近 5%。
img = cv2.imread(filename)
img = cv2.resize(img, None, fx=1.2, fy=1.2, interpolation=cv2.INTER_CUBIC)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((1, 1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)
Run Code Online (Sandbox Code Playgroud)
在此预处理之后,我还运行了一种算法,从文档中删除超过一定大小的实线,但在这种情况下,“35”或“381”在原始文件中都没有下划线,所以我怀疑这是导致问题的原因。我还验证了 5 的顶部部分没有被线条检测算法删除。
我不是 OCR 或 CV 方面的专家,我的专长是更多数据和通用编程——我真的只需要让这个库完成它所宣传的工作,这样我就可以继续并完成程序。有谁知道可能导致此问题的原因是什么?
我想我会在这里问非常愚蠢的问题.在我目前的项目中,我想提供搜索功能.我有一个很大的图像教程,里面有很多关于主题的信息,我想在图像中搜索特征.假设使用类似"Apple"的类型,它将显示Apple在图像中出现了多少次,并在点击图像后滚动并转到发生"Apple"的位置.
感谢您阅读我的愚蠢问题,但如果有可能请让我知道并提供一些示例代码?
我目前使用诺兰布朗的例子在iOS上使用tesseract .它工作正常,但我需要它开始拾取一个新的字体(我有.tff格式),这将永远是数字.
我在StackOverflow上发现了关于tesseract学习字体的问题,这些字体都指向谷歌指南,介绍如何使用命令行教授Tesseract新字体.但是我已经在使用Nolan的lib的编译副本了.
我如何教tesseract一个新的字体?我需要重新编译iOS的lib吗?我该怎么做呢?
我是OCR和tesseract lib的新手,所以请光临我.
我的目标是从扫描的名片图像中删除任何非文本区域,但我不知道使用OpenCV执行该操作的步骤,我已按照这些步骤但不知道这是正确的,或者我也不知道注意图像中的任何变化(非文本区域仍然存在)任何想法将非常有用,谢谢.
1)将图像转换为灰度
2)二进制图像
3)反转颜色(cv :: bitwise_not)以获得白色像素文本
4)侵蚀图像(cv :: erode)
5)使用canny检测边缘
6)使用霍夫变换检测文本行(尚未)
码:
cv::Mat greyMat = [self.imageView.image CVGrayscaleMat];
cv::Mat bwMat;
cv::threshold(greyMat, bwMat, 128, 255, CV_THRESH_BINARY);
cv::bitwise_not(bwMat, bwMat);
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(2, 1));
cv::erode(bwMat, bwMat, element);
std::vector<cv::Point>points;
cv::Mat_<uchar>::iterator it=bwMat.begin<uchar>();
cv::Mat_<uchar>::iterator end=bwMat.end<uchar>();
for (; it!=end; ++it)
if (*it)
points.push_back(it.pos());
cv::RotatedRect box=cv::minAreaRect(cv::Mat(points));
plImage* smothedImage=new IplImage(bwMat);
cvSmooth(smothedImage, smothedImage);
cvCanny(smothedImage, smothedImage, 10, 100);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用opencv的Haar分类器创建一个OCR库.但它不能正常工作.所以你能告诉我制作OCR的步骤是什么吗?是否可以使用Haar分类器?
我正在使用tesseract 3.02和opencv让tesseract实时识别我的相机中的文字.
但效果非常糟糕.结果不可读,无法流畅地显示图像.我认为这是我的代码问题.
有人可以给我一些关于如何修改它的建议吗?
非常感谢!
#include "stdafx.h"
#include <string>
#include <opencv2/opencv.hpp>
#include <time.h>
using namespace std;
using namespace cv;
int main() {
// [1]
tesseract::TessBaseAPI *myOCR =
new tesseract::TessBaseAPI();
// [2]
printf("Tesseract-ocr version: %s\n",
myOCR->Version());
printf("Leptonica version: %s\n",
getLeptonicaVersion());
// [3]
if (myOCR->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
//??IplImage??
IplImage* pFrame = NULL;
//?????
CvCapture* pCapture = cvCreateCameraCapture(-1);
//????
cvNamedWindow("video", 1);
//????
time_t last_time = time(NULL);
while(1)
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame) break;
cvShowImage("video",pFrame);
char c=cvWaitKey(33); …Run Code Online (Sandbox Code Playgroud) 我正在使用tesseract在我的一个iOS项目中识别角色.它现在正在读取所有字符,包括字母数字字符.但我想只读字符az和数字0-9.我跟着限制字符tesseract正在寻找,但无法弄清楚如何在我的iOS应用程序中实现这一点.
任何人都可以建议我如何在我的iOS项目中实现这一点.
我正在制作一个读取ID卡的OCR。通过使用YOLO获得感兴趣的区域,然后将该裁剪的区域交给tesseract进行阅读。由于这些裁切后的图像非常小且模糊,因此tesseract无法读取它们。它还给出了错误的预测,这很烦人!我认为通过提高裁剪图像的图像质量可以解决问题。
有什么方法可以改善此类图像?
我试图在图像中查找单词,并且使用Windows.Media.Ocr找到了该库。
MS使用Windows.Media.Ocr提供了非常好的库,但是我不能在winform或wpf应用程序项目中使用它。
我如何使用Windows.Media.Ocr加载;并在winform或wpf项目中使用它?
当我尝试将其添加到winform项目中时出现此错误。
从nuget下载UWPDesktop之后,出现了另一个错误。
我在Windows 10上工作。
我使用 Pytesseract 和 openCV 从图像中读取文本。我使用中值模糊、归一化和阈值来去除背景并能够阅读文本。
但是,在标准化过程中,文本的某些部分变得太亮,我希望将它们变暗,以便它们与图像中剩余文本的暗度/强度相匹配。我尝试了形态变换,并尝试了 canny+erosion 来消除噪音,但这些都没有帮助。
我的输入如下所示:
在这里,“代码”,“部门名称”,“15”和“机械”较轻,我无法阅读,而我可以轻松阅读“空气分配”和“基本材料和方法”。
有关如何更改较浅文本颜色的任何帮助都会非常有帮助。