基于PaddleOCR和ToolGood.Words测试从图片中检测敏感词

本文介绍了一种结合PaddleOCR文字识别与ToolGood.Words敏感词检测的方法,通过识别图片中的文字内容并检测其中可能存在的敏感词汇,最终用红框标记含有敏感词的区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  《测试.net开源敏感词检测库ToolGood.Words》介绍了基于ToolGood.Words实现敏感词检测的基本用法,而之前学习过使用PaddleOCR测试图片文字识别,于是想结合这两者实现基本的从图片中检测敏感词并用红框标识的功能。
  代码实现逻辑比较简单:
  第一步先调用PaddleOCR进行图片文字识别并记录识别出的文字区域,PaddleOcrAll类的识别结果返回类型PaddleOcrResultRegion的集合,其中记录有识别出的文字内容及位置信息,为后续敏感词检测做输入;
  第二步逐区域检测敏感词,如果存在敏感词则记录其所属区域,最后用红框将所有含敏感词的文字区域标识出来。
  程序的主要代码如下所示:

        //记录检测的敏感词及其关联的图片区域
		private class MatchedRegion
        {
            public PaddleOcrResultRegion Region;
            public WordsSearchResult Result;
        }
    
       //图片文字识别
       OCRModel model = KnownOCRModel.PPOcrV2;
       model.EnsureAll();

       byte[] sampleImageData;
       
       using(MemoryStream ms = new MemoryStream())
       {
           picSrcImage.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
           sampleImageData = ms.ToArray();
       }

       using (PaddleOcrAll all = new PaddleOcrAll(model.RootDirectory, model.KeyPath)
       {
           AllowRotateDetection = true, // 允许识别有角度的文字
           Enable180Classification = false, // 允许识别旋转角度大于90度的文字
       })

       using (Mat src = Cv2.ImDecode(sampleImageData, ImreadModes.Color))
       {
           PaddleOcrResult result = all.Run(src);
           using(Graphics g =Graphics.FromImage(picSrcImage.Image))
           {
               Pen pThick = new Pen(Brushes.LightBlue, 5);
               foreach (PaddleOcrResultRegion region in result.Regions)
               {
                   Point2f[] ps = region.Rect.Points();
                   int i = 0;
                   for (; i < ps.Length - 1; i++)
                   {
                       g.DrawLine(pThick, ps[i].X, ps[i].Y, ps[i + 1].X, ps[i + 1].Y);
                   }

                   g.DrawLine(pThick, ps[i].X, ps[i].Y, ps[0].X, ps[0].Y);

                   m_regions.Add(region);
               }
               pThick.Dispose();
           }
           picSrcImage.Invalidate();
       }

		//逐区域检测敏感词
		WordsSearch ws = new WordsSearch();
        ws.SetKeywords(txtResearchWord.Text.Split(';', ';'));

        foreach (PaddleOcrResultRegion region in m_regions)
        {
            List<WordsSearchResult> results = ws.FindAll(region.Text);
            foreach(WordsSearchResult result in results)
            {
                MatchedRegion mr = new MatchedRegion();
                mr.Result = result;
                mr.Region = region;
                m_matchedRegions.Add(mr);
            }
        }        

  使用车牌截图及文本截图进行测试,效果如下所示,此时程序的关键变成了图片文字识别的准确率,如果准确率不高,则后续的敏感词检测也无从谈起。
在这里插入图片描述
在这里插入图片描述

参考文献:
[1]

### 使用PaddleOCR实现车牌检测 #### 导入必要的库 为了使用PaddleOCR进行车牌检测,首先需要确保已经成功安装并配置好环境。接着可以导入`PaddleOCR`模块: ```python from paddleocr import PaddleOCR ``` #### 初始化PaddleOCR对象 创建一个`PaddleOCR`实例来设置参数,比如指定使用的模型路径以及是否启用GPU加速等选项。 ```python ocr = PaddleOCR( det_model_dir='path/to/det_model', # 检测模型文件夹位置 rec_model_dir=None, # 如果不需要文字识别部分则设为None use_angle_cls=False, # 不开启角度分类器 use_gpu=True # 是否使用GPU,默认False ) ``` 对于车牌检测而言,通常只需要加载检测(`det`)组件而无需启动字符识别(`rec`)功能[^1]。 #### 准备输入图像 准备好待处理的图片,并将其转换成适合传递给API的形式。一般情况下可以直接提供本地磁盘上的图片路径列表作为输入。 ```python img_path = 'example_license_plate.jpg' result = ocr.ocr(img_path, cls=False) ``` 上述代码片段中的变量`result`将会保存由算法预测得到的结果信息,其中包括边界框坐标其他可能附加的信息字段[^2]。 #### 结果解析与可视化 最后一步是从返回的数据结构中提取有用的部分并将它们展示出来。这可以通过遍历结果集合完成,并利用绘图工具包如Matplotlib绘制矩形标注在原始图像上以直观显示检测到的目标区域。 ```python import cv2 from PIL import ImageDraw, Image image = Image.open(img_path).convert('RGB') draw = ImageDraw.Draw(image) for line in result: points = line[0] draw.polygon(points, outline=(255, 0, 0), width=3) cv2.imshow("Detected License Plates", np.array(image)) cv2.waitKey(0) ``` 通过这种方式能够有效地定位并标记出照片中存在的所有车辆牌照的位置[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值