OCR文本自动标注工具:高效C#开发框架下的文字识别与图像标注利器
OCR文本自动标注工具,Ocr文字识别,OCR图像识别 OCR标注工具 自动识别文字区域,并自动标注,支持单张标注,手动标注,多张自动标注,支持导出label文件,基于C# Framework开发。 目前演示版本框架为.net Framework4.6
直接上干货——今天给大家安利一个自己撸的OCR标注工具,纯C#手搓,专治各种图片文字识别后的标注需求。这玩意儿最大的特点就是能自动识别文字区域生成标注框,批量处理几百张扫描件就跟玩儿似的。
先看核心模块的代码结构。咱们用EmguCV做图像处理底层,这货是OpenCV的.NET马甲,处理图像区域检测稳得一批:
//区域检测核心代码
public List<Rectangle> DetectTextRegions(Mat srcImage)
{
using (var gray = new Mat())
{
CvInvoke.CvtColor(srcImage, gray, ColorConversion.Bgr2Gray);
var morphologyKernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1));
CvInvoke.Threshold(gray, gray, 0, 255, ThresholdType.Otsu);
CvInvoke.MorphologyEx(gray, gray, MorphOp.Close, morphologyKernel, new Point(-1, -1), 2, BorderType.Default, new MCvScalar(0));
var contours = new VectorOfVectorOfPoint();
CvInvoke.FindContours(gray, contours, null, RetrType.List, ChainApproxMethod.ChainApproxSimple);
return contours.ToArray()
.Where(c => CvInvoke.ContourArea(c) > 50)
.Select(CvInvoke.BoundingRectangle)
.ToList();
}
}
这段代码先用大津法做二值化,接着用闭运算把文字区域连成块。实测这种处理对扫描件中的粘连文字效果拔群,特别是处理旧文件扫描件时,比直接调OCR接口的识别率高至少两成。

标注功能支持三种模式:
- 闪电模式(全自动批量处理)
- 精细模式(单张手动微调)
- 混合模式(先批量处理再人工复核)
导出的标注文件支持两种格式:
//标注文件序列化
public void ExportLabel(string path, List<OcrLabel> labels)
{
var options = new JsonSerializerOptions { WriteIndented = true };
var json = JsonSerializer.Serialize(labels.Select(l => new {
l.BoundingBox,
l.TextContent,
Confidence = l.Confidence.ToString("P1")
}), options);
//兼容上古系统
File.WriteAllText(path, json, Encoding.GetEncoding("GB2312"));
}
注意这里特意用GB2312编码,因为很多OCR项目对接的还是老系统。实测用UTF-8的话,某些工业控制台会显示乱码。
遇到歪斜文本怎么办?工具里内置了旋转校正功能:
//文本旋转校正
public Mat CorrectSkew(Mat inputImage)
{
var cannyEdges = new Mat();
CvInvoke.Canny(inputImage, cannyEdges, 50, 200);
LineSegment2D[] lines = CvInvoke.HoughLinesP(cannyEdges, 1, Math.PI / 180, 20);
var angles = lines.Select(l => Math.Atan2(l.P2.Y - l.P1.Y, l.P2.X - l.P1.X))
.Where(a => Math.Abs(a) > 0.1)
.Select(a => a * 180 / Math.PI);
double medianAngle = angles.Any() ? angles.Median() : 0;
return RotationCorrection(inputImage, medianAngle);
}
这里用霍夫变换找直线,取中位数角度旋转。实测对30度以内的倾斜文本校正效果不错,超过45度的建议还是先人工处理。
工具里最骚的操作是支持标注时自动填充OCR结果,按Tab键就能把识别结果直接灌入文本框。这个交互细节让标注效率直接起飞,处理合同扫描件时比手动输入快三倍不止。

最后说下部署问题,虽然基于.NET Framework 4.6开发,但实测在Windows 7以上系统都能直接运行。有老铁在树莓派上跑起来过,不过那需要魔改编译,这里就不展开讲了。需要源码的直接去Github搜ocr-label-helper,记得点star啊!
更多推荐


所有评论(0)