穴位有无优化返回值类型

master
lhiven 1 year ago
parent de8a4053fb
commit 929798570e

@ -15,6 +15,12 @@ using System.Windows.Forms;
namespace Rs.MotionPlat.Flow.Camera namespace Rs.MotionPlat.Flow.Camera
{ {
public class SlotProductHasOrNotResult
{
public bool HasProduct { get; set; } = false;
public HObject SearchRegion { get; set; }
public HObject SourceImage { get; set; }
}
/// <summary> /// <summary>
/// 视觉管理类 /// 视觉管理类
/// </summary> /// </summary>
@ -34,80 +40,47 @@ namespace Rs.MotionPlat.Flow.Camera
/// StockTray盘是否有料 /// StockTray盘是否有料
/// 0 无料 1 有料 负数 错误返回错误码 /// 0 无料 1 有料 负数 错误返回错误码
/// </summary> /// </summary>
public static int StockTrayHasProduct(Action<HObject> checkFinishedEvent) public static SlotProductHasOrNotResult StockTrayHasProduct()
{ {
SlotProductHasOrNotResult result = new SlotProductHasOrNotResult();
string cameraName = "upCamera"; string cameraName = "upCamera";
string LightName = "";
//1、拍照 //1、拍照
string m_savePath = Path.Combine("Recipe", GlobalVar.CurRecipe, "周转盘产品有无"); string m_savePath = Path.Combine("Recipe", GlobalVar.CurRecipe, "料仓料盘产品有无");
//IniHelper iniHelper = new IniHelper(Path.Combine(m_savePath,"default.ini"));
//string AngleStart = iniHelper.ReadValue("ModelParam", "AngleStart", "-10");
//string AngleExtent = iniHelper.ReadValue("ModelParam", "AngleExtent", "10");
//string Score = iniHelper.ReadValue("ModelParam", "Score", "0.5");
//string text = Path.Combine(m_savePath, "model.shm");
//HOperatorSet.ReadShapeModel(text, out var modelID);
HOperatorSet.ReadRegion(out HObject searchRegion, Path.Combine(m_savePath , "搜索区域.reg")); HOperatorSet.ReadRegion(out HObject searchRegion, Path.Combine(m_savePath , "搜索区域.reg"));
if(searchRegion.IsInitialized())
ImageProcess.ClearManualTrigger();
HikCamera.Instance.SetTrigger(cameraName, ETriggerMode.Manual);
HikCamera.Instance.SetExposure(cameraName, GlobalVar.UpCameraExposureTime);
HikCamera.Instance.SetGain(cameraName, GlobalVar.UpCameraGain);
AxisControl.LoadX.ComparePulse(2, false);
//LightName = SysConfigParam.GetValue<string>(cameraName + "LightName");
//if (!string.IsNullOrEmpty(LightName))
//{
// if (!string.IsNullOrEmpty(cameraName))
// {
// IoManager.Instance.WriteOut(LightName, 0);
// Thread.Sleep(50);
// IoManager.Instance.WriteOut(LightName, 1);
// Thread.Sleep(100);
// HikCamera.Instance.Grab(cameraName);
// }
// else
// {
// Msg.ShowError("请先先择相机");
// }
//}
//else
//{
// Msg.ShowError("未设置相机对应的光源,请到变量中配置!");
//}
//AxisControl.LoadY.ComparePulse(0x01);
//Thread.Sleep(50);
//2、等待相机返回结果
bool cameraOk = ImageProcess.manualTriggerEvent.WaitOne(3000);
if(cameraOk)
{ {
HObject hImage = new HObject(); result.SearchRegion = searchRegion;
IoManager.Instance.WriteOut(LightName, 0); ImageProcess.ClearManualTrigger();
HObject image = ImageProcess.GetManualImage(); HikCamera.Instance.SetTrigger(cameraName, ETriggerMode.Manual);
HOperatorSet.WriteImage(image, "bmp", 0, "d://images//111"); HikCamera.Instance.SetExposure(cameraName, GlobalVar.UpCameraExposureTime);
if (cameraName == SysConfigParam.GetValue<string>("UpCameraName")) HikCamera.Instance.SetGain(cameraName, GlobalVar.UpCameraGain);
{ AxisControl.LoadX.ComparePulse(2, false);
HOperatorSet.RotateImage(image, out hImage, SysConfigParam.GetValue<double>("UpCameraRotate"), "constant"); //2、等待相机返回结果
} bool cameraOk = ImageProcess.manualTriggerEvent.WaitOne(3000);
HOperatorSet.WriteImage(hImage, "bmp", 0, "d://images//111"); if (cameraOk)
checkFinishedEvent?.Invoke(hImage);
if (searchRegion.IsInitialized())
{ {
HObject hImage = new HObject();
HObject image = ImageProcess.GetManualImage();
if (cameraName == SysConfigParam.GetValue<string>("UpCameraName"))
{
HOperatorSet.RotateImage(image, out hImage, SysConfigParam.GetValue<double>("UpCameraRotate"), "constant");
}
result.SourceImage = hImage;
HOperatorSet.ReduceDomain(hImage, searchRegion, out HObject searchImg); HOperatorSet.ReduceDomain(hImage, searchRegion, out HObject searchImg);
HOperatorSet.Threshold(searchImg, out HObject whiteRegion, new HTuple(GlobalVar.StockTrayHaveOrNotGrayMin), new HTuple(GlobalVar.StockTrayHaveOrNotGrayMax)); HOperatorSet.Threshold(searchImg, out HObject whiteRegion, new HTuple(GlobalVar.StockTrayHaveOrNotGrayMin), new HTuple(GlobalVar.StockTrayHaveOrNotGrayMax));
HOperatorSet.AreaCenter(whiteRegion, out HTuple area, out HTuple row, out HTuple column); HOperatorSet.AreaCenter(whiteRegion, out HTuple area, out HTuple row, out HTuple column);
if (area.D > GlobalVar.StockTrayHaveOrNotGrayArea) if (area.D > GlobalVar.StockTrayHaveOrNotGrayArea)
return 1; {
//HOperatorSet.WriteImage(searchImg, "bmp", 0, "d://images//111"); result.HasProduct = true;
//HOperatorSet.GetShapeModelContours(out HObject modelContours, modelID, 1); }
//HOperatorSet.FindShapeModel(searchImg, modelID, AngleTool.Deg2Rad(double.Parse(AngleStart)), AngleTool.Deg2Rad(Math.Abs((double.Parse(AngleExtent) - double.Parse(AngleStart)))), new HTuple(double.Parse(Score)), 1, 0.5, "least_squares", 0, 0.9, out HTuple row, out HTuple column, out HTuple angle, out HTuple score); else
//if(score.Length>0) {
//{ result.HasProduct = false;
// return 1; }
//}
} }
} }
//3、返回结果 //3、返回结果
return 0; return result;
} }
/// <summary> /// <summary>
@ -115,83 +88,50 @@ namespace Rs.MotionPlat.Flow.Camera
/// 0 无料 1 有料 负数 错误返回错误码 /// 0 无料 1 有料 负数 错误返回错误码
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static int TurnoverTrayHasProduct(Action<HObject> checkFinishedEvent) public static SlotProductHasOrNotResult TurnoverTrayHasProduct(Action<HObject> checkFinishedEvent)
{ {
SlotProductHasOrNotResult result = new SlotProductHasOrNotResult();
string cameraName = "upCamera"; string cameraName = "upCamera";
string LightName = "";
//1、拍照 //1、拍照
ImageProcess.ClearManualTrigger(); ImageProcess.ClearManualTrigger();
string m_savePath = Path.Combine("Recipe", GlobalVar.CurRecipe, "周转盘产品有无");
string m_savePath = Path.Combine("Recipe", GlobalVar.CurRecipe, "周转盘产品定位"); HOperatorSet.ReadRegion(out HObject searchRegion, Path.Combine(m_savePath, "搜索区域.reg"));
IniHelper iniHelper = new IniHelper(Path.Combine(m_savePath, "default.ini")); result.SearchRegion = searchRegion;
string AngleStart = iniHelper.ReadValue("ModelParam", "AngleStart", "-10");
string AngleExtent = iniHelper.ReadValue("ModelParam", "AngleExtent", "10");
string Score = iniHelper.ReadValue("ModelParam", "Score", "0.5");
string text = Path.Combine(m_savePath, "model.shm");
HOperatorSet.ReadShapeModel(text, out var modelID);
HOperatorSet.ReadRegion(out HObject searchRegion, Path.Combine(m_savePath, "search.reg"));
ImageProcess.ClearManualTrigger(); ImageProcess.ClearManualTrigger();
HikCamera.Instance.SetTrigger(cameraName, ETriggerMode.Manual); HikCamera.Instance.SetTrigger(cameraName, ETriggerMode.Manual);
HikCamera.Instance.SetExposure(cameraName, GlobalVar.UpCameraExposureTime); HikCamera.Instance.SetExposure(cameraName, GlobalVar.UpCameraExposureTime);
HikCamera.Instance.SetGain(cameraName, GlobalVar.UpCameraGain); HikCamera.Instance.SetGain(cameraName, GlobalVar.UpCameraGain);
AxisControl.LoadX.ComparePulse(2, false); AxisControl.LoadX.ComparePulse(2, false);
//LightName = SysConfigParam.GetValue<string>(cameraName + "LightName");
//if (!string.IsNullOrEmpty(LightName))
//{
// if (!string.IsNullOrEmpty(cameraName))
// {
// IoManager.Instance.WriteOut(LightName, 0);
// Thread.Sleep(50);
// IoManager.Instance.WriteOut(LightName, 1);
// Thread.Sleep(100);
// HikCamera.Instance.Grab(cameraName);
// }
// else
// {
// Msg.ShowError("请先先择相机");
// }
//}
//else
//{
// Msg.ShowError("未设置相机对应的光源,请到变量中配置!");
//}
//AxisControl.LoadY.ComparePulse(0x01);
//Thread.Sleep(50);
//2、等待相机返回结果 //2、等待相机返回结果
bool cameraOk = ImageProcess.manualTriggerEvent.WaitOne(3000); bool cameraOk = ImageProcess.manualTriggerEvent.WaitOne(3000);
if (cameraOk) if (cameraOk)
{ {
HObject hImage = new HObject(); HObject hImage = new HObject();
//IoManager.Instance.WriteOut(LightName, 0);
HObject image = ImageProcess.GetManualImage(); HObject image = ImageProcess.GetManualImage();
if (cameraName == SysConfigParam.GetValue<string>("UpCameraName")) if (cameraName == SysConfigParam.GetValue<string>("UpCameraName"))
{ {
HOperatorSet.RotateImage(image, out hImage, SysConfigParam.GetValue<double>("UpCameraRotate"), "constant"); HOperatorSet.RotateImage(image, out hImage, SysConfigParam.GetValue<double>("UpCameraRotate"), "constant");
} }
checkFinishedEvent?.Invoke(hImage); checkFinishedEvent?.Invoke(hImage);
result.SourceImage = hImage;
if (searchRegion.IsInitialized()) if (searchRegion.IsInitialized())
{ {
HOperatorSet.WriteImage(hImage, "bmp", 0, "d://images/22222");
HOperatorSet.ReduceDomain(hImage, searchRegion, out HObject searchImg); HOperatorSet.ReduceDomain(hImage, searchRegion, out HObject searchImg);
HOperatorSet.Threshold(searchImg, out HObject whiteRegion, new HTuple(GlobalVar.TurnoverTrayHaveOrNotGrayMin), new HTuple(GlobalVar.TurnoverTrayHaveOrNotGrayMax)); HOperatorSet.Threshold(searchImg, out HObject whiteRegion, new HTuple(GlobalVar.TurnoverTrayHaveOrNotGrayMin), new HTuple(GlobalVar.TurnoverTrayHaveOrNotGrayMax));
//checkFinishedEvent?.Invoke(hImage);
HOperatorSet.AreaCenter(whiteRegion, out HTuple area, out HTuple row1, out HTuple column1); HOperatorSet.AreaCenter(whiteRegion, out HTuple area, out HTuple row1, out HTuple column1);
if(area.D>GlobalVar.TurnoverTrayHaveOrNotGrayArea) if(area.D>GlobalVar.TurnoverTrayHaveOrNotGrayArea)
{ {
return 1; result.HasProduct = true;
}
else
{
result.HasProduct = false;
} }
//HOperatorSet.GetShapeModelContours(out HObject modelContours, modelID, 1);
//HOperatorSet.FindShapeModel(searchImg, modelID, AngleTool.Deg2Rad(double.Parse(AngleStart)), AngleTool.Deg2Rad(Math.Abs((double.Parse(AngleExtent) - double.Parse(AngleStart)))), new HTuple(double.Parse(Score)), 1, 0.5, "least_squares", 0, 0.9, out HTuple row, out HTuple column, out HTuple angle, out HTuple score);
//if (score.Length > 0)
//{
// return 1;
//}
} }
} }
//3、返回结果 //3、返回结果
return 0; return result;
} }
/// <summary> /// <summary>
@ -227,16 +167,18 @@ namespace Rs.MotionPlat.Flow.Camera
vr.OffsetY = -1 * (row.D - upCameraScanBarCodeModel.ModelMatchResult[0].D) * GlobalVar.UpCameraMmPerPixel; vr.OffsetY = -1 * (row.D - upCameraScanBarCodeModel.ModelMatchResult[0].D) * GlobalVar.UpCameraMmPerPixel;
vr.OffsetR = AngleTool.Rad2Deg((angle.D - upCameraScanBarCodeModel.ModelMatchResult[2].D)); vr.OffsetR = AngleTool.Rad2Deg((angle.D - upCameraScanBarCodeModel.ModelMatchResult[2].D));
vr.SourceImage = image; vr.SourceImage = image;
if (Math.Abs(vr.OffsetX) < GlobalVar.TurnoverTrayLocateXRange vr.SearchModelOK = true;
&& Math.Abs(vr.OffsetY) < GlobalVar.TurnoverTrayLocateYRange //if (Math.Abs(vr.OffsetX) < GlobalVar.TurnoverTrayLocateXRange
&& Math.Abs(vr.OffsetR) < GlobalVar.TurnoverTrayLocateRRange) // && Math.Abs(vr.OffsetY) < GlobalVar.TurnoverTrayLocateYRange
{ // && Math.Abs(vr.OffsetR) < GlobalVar.TurnoverTrayLocateRRange)
vr.SearchModelOK = true; //{
} // vr.SearchModelOK = true;
else //}
{
vr.SearchModelOK = false; }
} else
{
vr.SearchModelOK = false;
} }
} }
else else

Loading…
Cancel
Save