【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类
目录
- 3.3.1 位置修正:位置修正算子工具的使用方法
- 3.3.2 模板保存:实现模板自动加载的方法
- 3.3.3 模板匹配: 获取模板匹配框和轮廓点的方法
- 3.3.4 模板训练:模板训练执行完成的判断方法
- 3.3.5 图像相减:算子SDK开发图像相减的方法
- 3.3.6 图像修正:图像修正工具的使用方法
- 3.3.7 Blob工具:Blob工具的使用方法
- 3.3.8 点点测量:点点测量工具的使用方法
- 3.3.9 亮度测量:亮度测量工具的使用方法
- 3.3.10 圆查找:圆查找的方法
- 3.3.11 仿射变换:图像仿射变换的使用方法
- 3.3.12 直线查找:直线查找工具的使用方法
- 3.3.13 缺陷检测:直线边缘缺陷检测工具的使用方法
- 3.3.14 N点标定:N点标定的使用方法
- 3.3.15 畸变校正:畸变校正的使用方法
- 3.3.16 字符识别:多线程同时读取同一个本地模型的方法
- 3.3.17 字符识别:VM自带字符识别模型的区分
- 3.3.18 设置掩膜:给模块设置掩膜的方法
3.3.1 位置修正:位置修正算子工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:位置修正工具使用方法
解答
示例代码如下:
1. C#
2.
3. bool re = true;
4. //位置修正基准参数
5. CPositionFixTool PosFixToolObj = new CPositionFixTool();
6. CPositionFixBasicParam BasicParam = PosFixToolObj.BasicParam;
7. VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F stBasinInit = new VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F();
8. stBasinInit.stPosition.fX = MatchPoint.X;
9. stBasinInit.stPosition.fY = MatchPoint.Y;
10. stBasinInit.fAngle = Angle;
11. BasicParam.BasePoint = stBasinInit;//设置基准点
12. //位置修正运行参数
13. VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F stBasicRun = new VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F();
14. stBasicRun.stPosition.fX = stPositionfX;
15. stBasicRun.stPosition.fY = stPositionfY;
16. stBasicRun.fAngle = stPositionAngle;
17. BasicParam.RunningPoint = stBasicRun;//设置运行点
18. //获取工具位置修正后Roi
19. MVD_SIZE_I stImageSize = new MVD_SIZE_I();
20. stImageSize.nWidth = ImageWidth;
21. stImageSize.nHeight = ImageHeight;
22. BasicParam.RunImageSize = stImageSize;
23. BasicParam.FixMode = MVD_POSFIX_MODE.MVD_POSFIX_MODE_HVA;
24. PosFixToolObj.BasicParam.InitialShape = SrcRegionROI;
25. PosFixToolObj.Run();
26. DesRegionROI = PosFixToolObj.Result.CorrectedShape;
问题根因
不熟悉位置修正算子工具使用方法
3.3.2 模板保存:实现模板自动加载的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
问题:用户在使用算子SDK开发的模板匹配功能时,希望能在程序运行时可以自动加载之前训练过的模板。
解答
可以使用模板的导入导出方法,步骤如下:
第一步:程序初始化时导入模板
1. C#
2.
3. public FrmMain()
4. {
5. InitializeComponent();
6. if (File.Exists(savePatternPath))//判断文件是否存在
7. {
8. pattern.ImportPattern(savePatternPath);
9. }
10. }
第二步:加载模板训练窗口时进行赋值
11. C#
12.
13. private void FrmTempleteMatch_Load(object sender, EventArgs e)
14. {
15. mvdAlmightyPatternEdit1.SetSubject(savePattern);
16. }
第三步:在关闭训练窗口时导出模板:
17. C#
18.
19. private void FrmTempleteMatch_FormClosing(object sender, FormClosingEventArgs e)
20. {
21. savePattern.ExportPattern(savePatternPath);
22. }
问题根因
不熟悉SDK算子的相关方法。
3.3.3 模板匹配: 获取模板匹配框和轮廓点的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:如何获取模板匹配轮廓点?
解答
依次实例化模板匹配工具、设置输入图像、设置ROI、运行、获取匹配点、轮廓点,示例代码如下:
C#
cHPFeaturePattern = new CHPFeaturePattern();
cHPFeaturePatMatchTool.InputImage = cMvdImage;
cHPFeaturePatMatchTool.Pattern = cHPFeaturePattern;
cHPFeaturePatMatchTool.ROI = cROI;
cHPFeaturePatMatchTool.BasicParam.ShowOutlineStatus = true; // 显示轮廓
cHPFeaturePatMatchTool.Run();
CHPFeaturePatMatchResult cHPFeaturePatMatchResult = cHPFeaturePatMatchTool.Result;
var OutlineList = cHPFeaturePatMatchResult.OutlineList;
foreach (var item in cHPFeaturePatMatchResult.MatchInfoList)
{var matchBox = new CMvdRectangleF(item.MatchBox.CenterX, item.MatchBox.CenterY, item.MatchBox.Width, item.MatchBox.Height);matchBox.Angle = item.MatchBox.Angle;matchBox.BorderColor = new MVD_COLOR(255, 0, 0, 255);mvdRenderActivex1.AddShape(matchBox);
}
if (cHPFeaturePatMatchTool.BasicParam.ShowOutlineStatus)
{foreach (var item in cHPFeaturePatMatchResult.OutlineList){CMvdPointSetF pointSetG = new CMvdPointSetF();CMvdPointSetF pointSetY = new CMvdPointSetF();CMvdPointSetF pointSetR = new CMvdPointSetF();foreach (var point in item.EdgePointList){if (0 == point.Score){pointSetG.AddPoint(point.Position.fX, point.Position.fY);}else if (1 == point.Score){pointSetY.AddPoint(point.Position.fX, point.Position.fY);}else if (2 == point.Score){pointSetR.AddPoint(point.Position.fX, point.Position.fY);}}pointSetG.BorderColor = new MVD_COLOR(0, 255, 0, 255);//绿色得分高的点pointSetY.BorderColor = new MVD_COLOR(255, 255, 0, 255);//黄色得分低的点pointSetR.BorderColor = new MVD_COLOR(255, 0, 0, 255);//红色丢弃的点if (0 != pointSetG.PointsList.Count){mvdRenderActivex1.AddShape(pointSetG);matchOutlineList.Add(pointSetG);}if (0 != pointSetY.PointsList.Count){mvdRenderActivex1.AddShape(pointSetY);matchOutlineList.Add(pointSetY);}if (0 != pointSetR.PointsList.Count){mvdRenderActivex1.AddShape(pointSetR);matchOutlineList.Add(pointSetR);}}
}
问题根因
不熟悉如何获取匹配框和匹配点
3.3.4 模板训练:模板训练执行完成的判断方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象: 算子SDK开发打开模板匹配后未训练模板,但模板状态不为null。.
解答
模板是否训练完成的条件不应以模板是否等于null来判断,模板是否训练成功以模板的结果来判断,C#代码如下:
1. C#
2.
3. if(pattern != null){}//判断模板是否为空
4. if(pattern.ReginList.Count != 0){}//判断模板训练的区域个数是否为0
5. if( pattern1.GetPatternResult() != null){}//判断模板是否训练成功
问题根因
不熟悉SDK算子的相关方法。
3.3.5 图像相减:算子SDK开发图像相减的方法
描述
环境:MVDAlgrithm SDK3.4及以上+ VS2013及以上
现象:WinForm下的算子SDK图像相减的使用方法
解答
WinForm下进行算子SDK开发时图像相减的使用方法,先定义一个图像基准图像CMvdImageimage1,图像修正后的图像CMvdImage image2,注意,image2是图像修正后的图像。
1. C#
2.
3. if (image1.Width == image2.Width && image1.Height == image2.Height && image1.PixelFormat == image2.PixelFormat)
4. {
5. CMvdImage diffImage = new CMvdImage();
6. diffImage.InitImage(image1.Width,image1.Height, image1.PixelFormat);
7. for (uint row = 0; row < image1.Height; row++)
8. {
9. uint nStep = image1.GetImageData(0).nRowStep;
10. for (uint col = 0; col < nStep; col++)
11. {
12. diffImage.GetImageData(0).arrDataBytes[row * nStep + col] = (byte)Math.Abs(image1.GetImageData(0).arrDataBytes[row * nStep + col] -image2.GetImageData(0).arrDataBytes[row * nStep + col]);
13. }
14. }
15. return diffImage;
16. }
问题根因
不熟悉SDK算子的相关方法。
3.3.6 图像修正:图像修正工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发图像修正的使用方法
解答
首先将工具实例化、工具参数赋值,示例代码如下
1. C#
2.
3. CImageFixtureTool tool = new CImageFixtureTool();
4. tool.InputImage = inputImage;
5. tool.BasicParam.FixMode = MVD_IMGFIX_MODE.MVD_IMGFIX_MODE_HVA;
6. tool.BasicParam.BasePoint = new VisionDesigner.ImageFixture.MVD_FIDUCIAL_POINT_F(basePoint, baseAngle);//基准点
7. tool.BasicParam.RunningPoint = new VisionDesigner.ImageFixture.MVD_FIDUCIAL_POINT_F(runPoint, runAngle);//运行点
8. tool.Run();
问题根因
不熟悉SDK算子的相关方法。
3.3.7 Blob工具:Blob工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发Blob工具的使用方法
解答
首先将工具实例化、工具参数赋值,然后使用位置修正工具进行位置修正,最后绘制Blob框。示例代码如下
1. C#
2. CBlobFindTool tool = new CBlobFindTool();
3. tool.BasicParam.ShowOutlineStatus = true;
4. tool.BasicParam.ShowBlobImageStatus = true;
5. tool.InputImage = inputImage;
6. if (BlobRoi != null){ tool.ROI = BlobRoi;}
7. tool.SetRunParam("Polarity", "BrightObject");//Blob工具参数设置
8. tool.SetRunParam("LowThreshold", "180");
9. tool.SetRunParam("HightThreshold", "255");
10. tool.SetRunParam("MinArea", "5");
11. tool.SetRunParam("MaxArea", "5000");
12. tool.Run();
13. List<CBlobInfo> blobInfoList = tool.Result.BlobInfo;
14. CPositionFixTool fixTool = new CPositionFixTool();//位置修正
15. fixTool.BasicParam.BasePoint = new VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F(basePoint, baseAngle);
16. fixTool.BasicParam.RunImageSize = new MVD_SIZE_I((int)inputImage.Width, (int)inputImage.Height);
17. mvdRenderActivex1.ClearShapes();
18. foreach (var blobInfo in blobInfoList)//绘制blob框数据
19. {
20. CMvdRectangleF rectangleF = blobInfo.BoxInfo;
21. rectangleF.BorderColor = new MVD_COLOR(0xFF, 0x00, 0x00);
22. rectangleF.BorderWidth = 2;
23. fixTool.BasicParam.InitialShape = rectangleF;
24. fixTool.BasicParam.RunningPoint = new VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F(runPoint, runAngle);
25. fixTool.BasicParam.FixMode = MVD_POSFIX_MODE.MVD_POSFIX_MODE_HVA;
26. fixTool.Run();
27. mvdRenderActivex1.AddShape(fixTool.Result.CorrectedShape);
28. }
问题根因
不熟悉相关接口的使用。
3.3.8 点点测量:点点测量工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发点点测量工具的使用方法
解答
首先将工具实例化,然后选择两个点,下面以测量两个圆的圆心距为例,示例代码如下
1. C#
2.
3. float distance;
4. VisionDesigner.P2PMeasure.CP2PMeasureTool cP2PMeasureTool = new VisionDesigner.P2PMeasure.CP2PMeasureTool;
5. cP2PMeasureTool.BasicParam.Point1 = cCirFindTool1.Result.CircleCenter;
6. cP2PMeasureTool.BasicParam.Point2 = cCirFindTool2.Result.CircleCenter;
7. cP2PMeasureTool.Run();
8. distance= cP2PMeasureTool.Result.Dist();
问题根因
不熟悉相关接口的使用。
3.3.9 亮度测量:亮度测量工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发亮度测量工具的使用方法
解答
首先将工具实例化,输入图片,最后设置ROI参数,示例代码如下:
1. C#
2.
3. VisionDesigner.IntensityTool.CIntensityToolTool cIntensityToolTool = newVisionDesigner.IntensityTool.CIntensityToolTool();
4. VisionDesigner.CMvdImage InputImg = new CMvdImage();
5. InputImg.InitImage("Input.bmp");
6. cIntensityToolTool.InputImage = InputImg;
7. cIntensityToolTool.ROI = new VisionDesigner.CMvdRectangleF(InputImg.Width / 2, InputImg.Height / 2, InputImg.Width / 4, InputImg.Height / 4);
8. cIntensityToolToolObj.Run();
问题根因
不熟悉相关接口的使用。
3.3.10 圆查找:圆查找的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:WinForm下的算子SDK圆查找的使用方法
解答
WinForm下进行算子SDK开发时圆查找的使用方法
第一步,初始化参数列表让用户修改参数。
第二步,加载图像,设置ROI等参数,执行找圆操作。
1. C#
2. //第一步,初始化参数
3. try
4. {
5. VisionDesigner.CircleFind.CCircleFindTool m_cCircleFindToolObj =newVisionDesigner.CircleFind.CCircleFindTool();
6. //Set input image
7. VisionDesigner.CMvdImage cInputImg = new CMvdImage();
8. cInputImg.InitImage("InputTest.bmp");
9. m_cCircleFindToolObj.InputImage = cInputImg;
10. // Set ROI region (optional)
11. m_cCircleFindToolObj.ROI = new VisionDesigner.CMvdRectangleF(cInputImg.Width / 2, cInputImg.Height / 2, cInputImg.Width / 4, cInputImg.Height / 4);
12. //保存参数设置
13. byte[] fileBytes = new byte[256];
14. uint nConfigDataSize = 256;
15. uint nConfigDataLen = 0;
16. try
17. {
18. m_cCircleFindToolObj.SaveConfiguration(fileBytes, nConfigDataSize, ref nConfigDataLen);
19. }
20. catch (MvdException ex)
21. {
22. if (MVD_ERROR_CODE.MVD_E_NOENOUGH_BUF == ex.ErrorCode)
23. {
24. fileBytes = new byte[nConfigDataLen];
25. nConfigDataSize = nConfigDataLen;
26. m_cCircleFindToolObj.SaveConfiguration(fileBytes, nConfigDataSize, ref nConfigDataLen);
27. }
28. else
29. {
30. throw ex;
31. }
32. }
33. }
34. //第二步,加载图片并运行
35. m_cCircleFindToolObj.Run();
36. //输出结果
37. CCircleFindResult circleFindResult = m_CircleFindTool.Result;
问题原因
参数设置错误
3.3.11 仿射变换:图像仿射变换的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:WinForm下的算子SDK图像仿射变换的使用方法
解答
WinForm下进行算子SDK开发时图像仿射变换的使用方法
第一步,初始化参数列表修改参数
第二步,加载图像,使用当前的参数设置运行工具
1. C#
2.
3. //第一步,设置参数
4. //定义仿射变换工具对象
5. m_stImageAffineTransformToolObj = new CImageAffineTransformTool();
6. //可修改参数
7. byte[] fileBytes = new byte[256];
8. uint nConfigDataSize = 256;
9. uint nConfigDataLen = 0;
10. //保存参数
11. m_stImageAffineTransformToolObj.SaveConfiguration(fileBytes, nConfigDataSize, ref nConfigDataLen);
12. //设置运行参数,输入图像,ROI面积等,运行
13. m_stImageAffineTransformToolObj.BasicParam.Aspect = fAspectValue;
14. m_stImageAffineTransformToolObj.InputImage = m_stInputImage;
15. m_stImageAffineTransformToolObj.ROIShape = cDefaultRect;
16. m_stImageAffineTransformToolObj.Run();
17. //输出结果
18. CMvdImage stOutputImage = m_stImageAffineTransformToolObj.Result.OutputImage;
问题原因
参数设置错误或者缺少参数设置
3.3.12 直线查找:直线查找工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:如何进行直线查找
解答
使用直线查找工具进行直线查找,在算子SDK开发中,工具入口为xxxTool,则直线查找的工具入口为CEdgeFindTool,首先定义接口对象,然后在图片上设置待直线查找的ROI区域,最后通过接口函数Run就可以获得直线的相关结果。
1. C#
2. // 创建对象
3. VisionDesigner.EdgeFind.CEdgeFindTool cEdgeFindToolObj = new VisionDesigner.EdgeFind.CEdgeFindTool();
4. // 给定输入图片
5. VisionDesigner.CMvdImage cInputImg = new CMvdImage();
6. cInputImg.InitImage("..\\InputTest.bmp");
7. cEdgeFindToolObj.InputImage = cInputImg;
8. // 设置ROI
9. cEdgeFindToolObj.ROI = new VisionDesigner.CMvdRectangleF(cInputImg.Width / 2, cInputImg.Height / 2, cInputImg.Width / 4, cInputImg.Height / 4);
10. // 运行
11. cEdgeFindToolObj.Run();
12. // 获取结果
13. VisionDesigner.EdgeFind.CEdgeFindResult cEdgeFindRes = cEdgeFindToolObj.Result;
14. Console.WriteLine("The number of edge: {0}", cEdgeFindRes. SingleEdgeInfo.Count);
15. List lcEdgePtInfo = cEdgeFindRes.SingleEdgeInfo;
16. foreach (CEdgeFindSingleEdgeInfo cCurEdgePt in lstEdgePtInfo)
17. {
18. Console.WriteLine("EdgePoint: {0}, Sore={1}", cCurEdgePt.Score);
19. }
问题根因
不熟悉直线查找工具的使用。
3.3.13 缺陷检测:直线边缘缺陷检测工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发直线边缘缺陷检测的使用方法
解答
首先将直线边缘缺陷检测工具实例化,然后设置输入图片并选择ROI区域,最后获取结果,示例代码如下
1. C#
2. VisionDesigner.LineEdgeFlawInsp.CLineEdgeFlawInspTool cLineEdgeFlawInspToolObj = new VisionDesigner.LineEdgeFlawInsp.CLineEdgeFlawInspTool();//工具实例化
3. VisionDesigner.CMvdImage InputImg = new CMvdImage();
4. InputImg.InitImage("InputTest.bmp");//设置输入图片
5. cLineEdgeFlawInspToolObj.InputImage = InputImg;
6. cLineEdgeFlawInspToolObj.ROI = new VisionDesigner.CMvdRectangleF(InputImg.Width / 2, InputImg.Height / 2, InputImg.Width / 4, InputImg.Height / 4);//选择ROI区域;
7. cLineEdgeFlawInspToolObj.Run();//工具执行
8. VisionDesigner.LineEdgeFlawInsp.CLineEdgeFlawInspResult cLineEdgeFlawInspRes = cLineEdgeFlawInspToolObj.Result;//获取结果
9. String message= "缺陷数":+ cLineEdgeFlawInspRes.FlawInfoList.Count.Tostring();
问题根因
不熟悉相关接口的使用。
3.3.14 N点标定:N点标定的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发N点标定的使用方法
解答
首先记录文本输入的坐标图像点a、b与物理点c、d,最少需要4组点,如图可每输入一组点点击确认,输入点个数大于等于4时,可点击生成标定文件(CalibRun=true),示例代码如下
1. C#
2. VisionDesigner.NPointCalib.CNPointCalibTool cNPointCalibToolObj =new VisionDesigner.NPointCalib.CNPointCalibTool();//工具实例化
3. cNPointCalibToolObj.BasicParam.CameraMode = VisionDesigner.NPointCalib.MVD_CAMERA_MODE.MVD_CAMERA_MODE_MOVE;//基本参数设置
4. MVD_CALIB_POINT_F stCalibPoint = new MVD_CALIB_POINT_F();
5. stCalibPoint.stImageCoordinate.fX = a;
6. stCalibPoint.stImageCoordinate.fY = b;//图像点
7. stCalibPoint.stWorldCoordinate.fX = c;
8. stCalibPoint.stWorldCoordinate.fY = d;//物理点
9. cNPointCalibToolObj.BasicParam.OffsetPointList.Add(stCalibPoint);
10. //至少需要4组点
11. if (cNPointCalibToolObj.BasicParam.OffsetPointList.Count>=4&&CalibRun==true)
12. {
13. cNPointCalibToolObj.Run();//执行
14. VisionDesigner.NPointCalib.CNPointCalibResult cNPointCalibRes = cNPointCalibToolObj.Result;//获取标定结果
15. CalibRun = false;
16. if(cNPointCalibRes.OffsetPointCalibInfo.HomoEstStatus!=0)
17. {
18. cNPointCalibToolObj.ExportCalibFile("E://新建文件夹//calib.iccal");
19. }
20. }
问题根因
不熟悉相关接口的使用。
3.3.15 畸变校正:畸变校正的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:算子SDK开发畸变校正的使用方法
解答
首先将畸变校正工具实例化,然后设置输入图片并选择标定文件,最后获取结果,示例代码如下
1. C#
2. VisionDesigner.ImageCorrectCalib.CImageCorrectCalibTool cImageCorrectCalibToolObj = new VisionDesigner.ImageCorrectCalib.CImageCorrectCalibTool ();
3. VisionDesigner.CMvdImage cInputImg = new CMvdImage();
4. cInputImg.InitImage("InputTest.bmp");
5. cImageCorrectCalibToolObj.InputImage = cInputImg;
6. cImageCorrectCalibToolObj.ImportCalibFile("calib.iccal");//选择标定文件
7. cImageCorrectCalibToolObj.Run();
8. VisionDesigner.ImageCorrectCalib.CImageCorrectCalibResult cImageCorrectCalibRes = cImageCorrectCalibToolObj.Result;
问题根因
不熟悉相关接口的使用。
3.3.16 字符识别:多线程同时读取同一个本地模型的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:多线程如何调用本地同一个模型。
解答
读取本地模型数据,在经过深拷贝后,使用LoadModelData接口调用模型。
C#
for (int i = 0; i < 3; i++)
{
int temp = i;
Task.Factory.StartNew(new Action<object>(t =>
{
FileStream fs = new FileStream(modelpath, FileMode.Open);
long size = fs.Length;
byte[] array = new byte[size];
fs.Read(array, 0, array.Length);
CNNOCRTool tool = new CNNOCRTool(MVD_ALGORITHM_PLATFORM_TYPE.MVD_ALGORITHM_PLATFORM_CPU);
byte[] ModelArray= new byte[array.Length];
Array.Copy(array, ModelArray, array.Length);
tool.BasicParam.LoadModelData(ModelArray, ModelArray.Length);
//设置图片等参数
tool.Run();}), temp);
}
问题根因
不熟悉多线程同时读取同一个本地模型
3.3.17 字符识别:VM自带字符识别模型的区分
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:安装VM和深度学习包之后,VM安装路径下的字符识别模块有两个模型:lpr_ocr.bin和mvb_ocr.bin,分别对应哪个算子。
解答
VM安装路径中,字符识别模块中有两个已经训练好的模型:lpr_ocr.bin和mvb_ocr.bin,分别对应训练平台-字符识别的字符模型类型:文本行识别和文本行识别(拓展)。
在VM中,使用字符识别模块,两个模型都可以可以调;
在算子SDK开发中,针对自带的两个模型,字符识别算子调用规则是,CNNOCRTool算子调用模型lpr_ocr.bin,CNNCharRecogTool算子调用mvb_ocr.bin。
问题根因
不熟悉字符识别模型。
3.3.18 设置掩膜:给模块设置掩膜的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:如何给模块设置掩膜(针对需要设置多个感兴趣区域及屏蔽区域场景可通过掩膜设置)?
解答
通过掩膜算子CPreproMaskTool获取掩模图像,例如给Blob分析模块设置掩膜示例代码如下;
C#
public void SetBlobMask()
{//实例掩膜工具CPreproMaskTool cPrepromaskTool = new CPreproMaskTool();//创建Shape链表List<Tuple<CMvdShape, bool>> maskList = new List<Tuple<CMvdShape, bool>>();var rect1 = new CMvdRectangleF(rect.CenterX, rect.CenterY, rect.Width - 200, rect.Height - 200);//添加矩形感兴趣区域maskList.Add(new Tuple<CMvdShape, bool>(rect1, false));var poly1 = new CMvdPolygonF();poly1.AddVertex(rect.CenterX - rect.Height / 2, rect.CenterY - rect.Width / 2);poly1.AddVertex(rect.CenterX - rect.Height / 2, rect.CenterY - rect.Width / 2 + 200);poly1.AddVertex(rect.CenterX - rect.Height / 2 + 200, rect.CenterY - rect.Width / 2);//添加多边形感兴趣区域maskList.Add(new Tuple<CMvdShape, bool>(poly1, false));var poly2 = new CMvdPolygonF();poly2.AddVertex(rect.CenterX - rect.Height / 2, rect.CenterY + rect.Width / 2);poly2.AddVertex(rect.CenterX - rect.Height / 2, rect.CenterY + rect.Width / 2 - 200);poly2.AddVertex(rect.CenterX - rect.Height / 2 + 200, rect.CenterY + rect.Width / 2);//添加多边形屏蔽区域maskList.Add(new Tuple<CMvdShape, bool>(poly2, true));//设置掩膜工具参数cPrepromaskTool.InputImage = runImage;cPrepromaskTool.RegionList = maskList;//运行掩膜工具cPrepromaskTool.Run();//实例化Blob分析工具CBlobFindTool blobTool = new VisionDesigner.BlobFind.CBlobFindTool();blobTool.InputImage = runImage;//设置掩膜图像blobTool.RegionImage = cPrepromaskTool.OutputImage;blobTool.SetRunParam("LowThreshold", "60");blobTool.SetRunParam("Polarity", "BrightObject");blobTool.BasicParam.ShowBlobImageStatus = true;//执行Blob算子blobTool.Run();
}
问题根因
不熟悉掩膜工具的使用。
相关文章:

【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类
目录 3.3.1 位置修正:位置修正算子工具的使用方法3.3.2 模板保存:实现模板自动加载的方法3.3.3 模板匹配: 获取模板匹配框和轮廓点的方法3.3.4 模板训练:模板训练执行完成的判断方法3.3.5 图像相减:算子SDK开发图像相减…...

Aspose.Pdf使用教程:在PDF文件中添加水印
Aspose.PDF 是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能&am…...

H.264/AVC加密----选择加密
文献学习: 《Data Hiding in Encrypted H.264/AVC Video Streams by Codeword Substitution》 期刊:IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY 简介 通过分析H.264/AVC编解码器的特性,提出了三个敏感部分(IPM、MVD和残差系…...

WuThreat身份安全云-TVD每日漏洞情报-2023-04-26
漏洞名称:Google Android 命令注入漏洞 漏洞级别:高危 漏洞编号:CVE-2023-20964,CNNVD-202303-538 相关涉及:None 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-05794 漏洞名称:OpenSSL RSA 解密时间差异 漏洞级别:中危 漏洞编号:CVE-2022-4…...

剑指 Offer第二版:1~n 整数中 1 出现的次数、51. 数组中的逆序对、56 - II. 数组中数字出现的次数 II
剑指 Offer第二版 43. 1~n 整数中 1 出现的次数51. 数组中的逆序对56 - II. 数组中数字出现的次数 II 43. 1~n 整数中 1 出现的次数 题目:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,…...

云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)
Gitee-k8s学习 云原生实战-kubernetes核心实战 namespace Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离 Pod Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。 De…...

他工作10年,老板却让他走人
大家好,我是五月,一个编程街溜子。 二狗被裁了,他在公司待了快十年,他想留下来,老板却让他走。 我和他一样困惑。 他985毕业,工作中有从0开始一个项目直到日活过千万,也有过参与顶级产品核心…...

vpp怎么写node
VPP(Vector Packet Processing)是一个高性能的数据平面开源项目,用于构建网络功能虚拟化(NFV)和软件定义网络(SDN)解决方案。它由Cisco开发,并在Apache 2.0许可下发布。 在VPP中&am…...

【4. ROS的主要通讯方式:Topic话题与Message消息】
【4. ROS的主要通讯方式:Topic话题与Message消息】 1. 前言1.1 王者解释结点通讯:1.2 通讯小结 2. 灵活的Topic话题图解2.1 话题注意细节2.2 外延补充 3. Message消息图解3.1 消息类型3.2 查看标准消息类型std_msgs 4. 使用C实现Publisher发布者4.1 发布…...

【react全家桶学习】react中组件定义及state属性(超详/必看)
函数式组件定义及特点 定义(核心就是一个函数,返回虚拟dom): import React from reactexport default function index() {return <div>index</div> }特点: 1、适用于【简单组件】的定义2、是一个函数&a…...

如何以产品经理思维打造一所高品质学校?
学校的建设与管理真不是一件容易事。2023年03月17日,山东菏泽市曹县一家长投诉某中学课业繁重,孩子经常写作业到半夜;2023年4月4日,张先生在华龙网重庆网络问政平台投诉万州区某中学伙食差,指出“发灰的洋葱࿰…...

根治Spring中使用Mongo时报错InvalidMongoDbApiUsageException
文章目录 And Or迷惑原因 告别InvalidMongoDbApiUsageException问题简单解决根本解决修改源码 代码(省流,可以直接看这里) And Or 很多时候都需要进行逻辑的与或操作,但是spring当中自带的操作并不好用,于是做了相关的改进&#…...

【计算机组成原理】数据的表示和运算·进位计数制
🚩 本文已收录至专栏:计算机基础 我们可以通过显示屏看到各种形式的数据信息,但数据是如何在计算机中表示呢?运算器又是如何实现数据的算数、逻辑运算? 十进制数是最适合我们日常使用的一种计数方式,除此之…...

C++ Primer第五版_第十四章习题答案(21~30)
文章目录 练习14.21练习14.22头文件CPP文件 练习14.23头文件CPP文件 练习14.24头文件CPP文件 练习14.25练习14.26练习14.27练习14.28练习14.29练习14.30 练习14.21 编写 Sales_data 类的 和 运算符,使得 执行实际的加法操作而 调用。相比14.3节和14.4节对这两个运…...

服务器性能调优
硬件 如果是硬件瓶颈就换硬件 (包括CPU、内存、网卡) 软件 如果是方案架构设计有问题就换方案,比如mysql、redis方案有问题 建议先 top 看下软件瓶颈在哪,CPU、内存、网络(netstat),哪个进程占…...

带你深入学习k8s--(三) pod 管理
目录 一、简介 1、什么是pod 2、为什么要有pod 二、pod的分类 0、pod常用命令命令 1、准备镜像 2、自主式pod 3、控制器创建pod 4、扩容pod数量 5、通过service暴露pod(负载均衡,自动发起) 6、更新应用版本 三、编写yaml文件 四、Pod生命周期…...

前端系列11集-ES6 知识总结
ES Module 优点 静态分析 浏览器和 Node 都支持 浏览器的新 API 能用模块格式提供 不再需要对象作为命名空间 export 用于规定模块的对外接口 输出的接口与其对应的值是动态绑定关系可以取到模块内部实时的值 import 用于输入其他模块提供的功能 具有提升效果,会提升…...

连接分析工具箱 | 利用CATO进行结构和功能连接重建
导读 本研究描述了一个连接分析工具箱(CATO),用于基于扩散加权成像(DWI)和静息态功能磁共振成像(rs-fMRI)数据来重建大脑结构和功能连接。CATO是一个多模态软件包,使研究人员能够运行从MRI数据到结构和功能连接组图的端到端重建,定制其分析并…...

【目标检测论文阅读笔记】Detection of plane in remote sensing images using super-resolution
Abstract 由于大量的小目标、实例级噪声和云遮挡等因素,遥感图像的目标检测精度低,漏检率或误检率高。本文提出了一种新的基于SRGAN和YOLOV3的目标检测模型,称为SR-YOLO。解决了SRGAN网络 对超参数的敏感性和模态崩溃问题。同时,Y…...

外卖app开发流程全解析
外卖app开发是现代餐饮业的一个必备部分。在这个数字化时代,人们更愿意使用手机应用程序来订购食品。因此,为了满足客户需求,餐饮企业需要开发自己的外卖app。 第一步:确定目标受众 在开始外卖app的开发之前,需要确定…...

BUUCTF jarvisoj_level0
小白垃圾做题笔记而已,不建议阅读。。。 这道题感觉主要就是64位程序ebp8 题目中给出了shellcode 我们直接将返回地址覆盖就好。 在main函数中调用了vulnerable_function()函数。 vulnerable函数是一个漏洞函数:(存在缓溢出),我们只需要将…...

网络安全之入侵检测
目录 网络安全之入侵检测 入侵检测经典理论 经典检测模型 入侵检测作用与原理 意义 异常检测模型(Anomaly Detection) 误用检测模型(Misuse Detection) 经典特征案例 编辑自定义签名 编辑 签名检查过程 检测生命周期…...

元数据管理
1、业务元数据 描述 ”数据”背后的业务含义主题定义:每段 ETL、表背后的归属业务主题。业务描述:每段代码实现的具体业务逻辑。标准指标:类似于 BI 中的语义层、数仓中的一致性事实;将分析中的指标进行规范化。标准维度…...

C# WebService的开发以及客户端调用
目录 1、WebService简介 1.1 什么是XML? 1.2 什么是Soap? 1.3 什么是WSDL? 2、WebService与WebApi的区别与优缺点 2.1 WebService与WebApi的区别: 2.2 WebService的优缺点: 2.3 WebApi的优缺点: 3…...

有符号数和无符号数左移和右移
主要是有符号数的左移。 有的说不管符号位,直接左移,所以可以一会正数一会复数 https://bbs.csdn.net/topics/391075092 有的说符号位不动,其他来左移 不明白了。。。。 https://blog.csdn.net/hnjzsyjyj/article/details/119721014 https://…...

Netty小白入门教程
一、概述 1.1 概念 Netty是一个异步的基于事件驱动(即多路复用技术)的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。 1.2 地位 Netty在Java网络应用框架中的地位就好比,Spring框架在JavaEE开发中的地位。 以下的框架都使用了Nett…...

【逻辑位移和算数位移】
<< 运算符 && >> 运算符 正数位移 当 x>>n 中 x 为正数时,会将x的所有位右移x位,同时左边高位补0 显而易见,运算结束后,值为1 。 可知右移n位,结果就是 x / 2^n:7 / 2 ^2 1;…...

Blender3.5 边的操作
目录 1. 边操作1.1 边的细分 Subdivide1.2 边的滑移 Edge Slide1.3 边的删除1.4 边的溶解 Dissolve1.5 边线倒角 Bevel1.6 循环边 Loop Edges1.7 并排边 Ring Edges1.8 桥接循环边 1. 边操作 1.1 边的细分 Subdivide 在边选择模式,选中一条边,右键&…...

Java与Python、Node.js在人工智能和区块链应用程序开发中的比较
背景 Java、Python和Node.js都是常用的编程语言,它们在不同领域都有广泛的应用。在人工智能和区块链应用程序开发中,这三种语言都具有各自的优势和劣势。 Java的优势 Java在企业级应用中应用广泛,这得益于其跨平台性、安全性和稳定性等特点。在人工智能和区块链应用程序开…...

【计算机是怎么跑起来的】基础:计算机三大原则
【计算机是怎么跑起来的】基础:计算机三大原则 计算机的三个根本性基础1.计算机是执行输入,运算,输出的机器输入,运算,输出 2. 软件是指令和数据的集合指令数据 3. 计算机的处理方式有时与人们的思维习惯不同对计算机来…...