我是一个初学者,我正在尝试为OCR流程制作一个android模块。为了优化过程,我尝试自动裁剪图像的文本部分。我一直在努力,但我做不到。我找到了this one之类的一些教程,但它不是Java语言,我的大脑也无法正常工作。任何帮助将不胜感激,我仍在尝试学习。已经研究了几天。
当前使用openCV进行一些后期处理以提高准确性,并从图像中提取数据(某些机器上的收据),我正在使用正则表达式来获取相关数据(数据,时间,机器编号5位数字,以及一些是6位数字,有时它不起作用,这就是我现在能想到的全部内容。
尝试尽可能地改善流程。如果需要的话,我可以提供代码,但这完全是一团糟。我创建了一个单独的android studio项目,仅用于opencv处理。
很长的文字,很抱歉,希望有所改进(我认为我真的是一个初学者)。非常感谢你!
忘记提及-使用TESSERACT进行OCR处理,使用openCV进行图像处理。该应用程序将由不那么精通技术的人使用,我想使用手动裁切工具,但用处不大。 全部在设备上完成,无法连接互联网。
需要裁剪图像的文本部分
附带的代码也可以在文本上创建框(精确度高)
仍在就如何提高准确性提出建议,谢谢!
public Vector<Rect> detectLetters(Mat img){
Mat img_gray = new Mat();
Mat img_sobel = new Mat();
Mat img_threshold = new Mat();
Mat element = new Mat();
Mat contourOutput = new Mat();
Vector<Rect> boundRect = new Vector<>();
Imgproc.cvtColor(img, img_gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.Sobel(img_gray, img_sobel, CvType.CV_8U, 1,0,3,1,0,BORDER_DEFAULT);
Imgproc.threshold(img_sobel, img_threshold, 0, 255, Imgproc.THRESH_OTSU+Imgproc.THRESH_BINARY);
element = getStructuringElement(MORPH_RECT, new Size(30,30));
Imgproc.morphologyEx(img_threshold, img_threshold, 3, element);
List<MatOfPoint> contours = new ArrayList<>();
Imgproc.findContours(img_threshold, contours, contourOutput, 0, 1);
Iterator<MatOfPoint> iterator = contours.iterator();
List<MatOfPoint> contours_poly = new ArrayList<>(contours.size());
for (int i=0; i<contours.size(); i++){
if(contours.get(i).toArray().length > 100){
double epsilon = 0.1*Imgproc.arcLength(new MatOfPoint2f(contours.get(1).toArray()),true);
MatOfPoint2f approx = new MatOfPoint2f();
Imgproc.approxPolyDP(new MatOfPoint2f(contours.get(1).toArray()),approx,epsilon,true);
Rect appRect = Imgproc.boundingRect(contours.get(i));
if(appRect.width > appRect.height);
boundRect.add(appRect);
}
}
return boundRect;
}