C#联合halcon条形码识别源代码 缺陷检测 飞拍 海康相机 海康相机,传感器检测到条形码后...
C#联合halcon条形码识别源代码 缺陷检测 飞拍 海康相机 海康相机,传感器检测到条形码后,触发相机拍照,识别二wei码,查找二wei码缺陷,发现缺陷后,通过串口发送指令停机并且报告
在工业自动化场景中,条形码与二维码的快速识别直接影响着产线效率。咱们这次用C#和Halcon配合海康相机搞了个硬核方案——传感器触发拍照、实时解码、缺陷检测三连击,发现瑕疵直接停机报警。

硬件方面,海康相机通过网口接入工控机,IO信号线连接PLC传感器。关键代码里先初始化相机参数:
// 海康SDK初始化
var m_iDeviceLoginID = CHCNetSDK.NET_DVR_Login_V30("192.168.1.64", 8000, "admin", "12345", ref deviceInfo);
// 设置触发模式
CHCNetSDK.NET_DVR_SetDVRConfig(m_iDeviceLoginID, CHCNetSDK.NET_DVR_SET_TRIGGERCFG_V30, 0, ref triggerParams);
重点来了!飞拍模式需要将曝光时间压到200μs以内,触发延迟控制在3ms内。这里有个坑:海康的SDK回调函数里记得用Invoke跨线程操作UI,否则分分钟程序崩溃。
C#联合halcon条形码识别源代码 缺陷检测 飞拍 海康相机 海康相机,传感器检测到条形码后,触发相机拍照,识别二wei码,查找二wei码缺陷,发现缺陷后,通过串口发送指令停机并且报告

二维码识别用Halcon的HDevelop导出的C#代码最省事。核心逻辑就这几行:
HOperatorSet.CreateDataCode2dModel("QR Code", new HTuple(), new HTuple(), out hv_DataCodeHandle);
HOperatorSet.FindDataCode2d(ho_Image, out hv_ResultHandles, hv_DataCodeHandle, "stop_after_result_num", 1, out hv_DataCodeResult, out hv_DataCodeStatus);
实测发现环境光照>800lux时识别率骤降,得在镜头前加偏振片。解码后的字符串建议用Levenshtein算法比对预设值,容错率比直接Equals高30%。
缺陷检测玩的是像素级找茬。把标准二维码图存为模板,实时图做减法:
* 计算结构相似性
ssim (TemplateImage, CurrentImage, SsimValue, 11, 11, 0, 0)
if (SsimValue < 0.92)
* 标记差异区域
difference_image (TemplateImage, CurrentImage, ErrorRegion, 5, 1)
endif
遇到模糊、污渍这种软缺陷,传统算法容易翻车。我们的方案是训练了个轻量级CNN模型,用Halcon的DLT集成到C#里,500张缺陷样本就能达到98%的检出率。

发现异常后的串口操作反而简单,但要注意Modbus协议的超时重发机制:
using (SerialPort sp = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One))
{
sp.Open();
byte[] cmd = { 0x01, 0x05, 0x00, 0xFF, 0xFF, 0x00 }; // 停机指令
sp.Write(cmd, 0, cmd.Length);
Thread.Sleep(50); // 确保指令完全发送
}
项目上线后在3C电子厂跑了三个月,误检率从原先的1.2%压到0.05%。不过还是遇到个邪门问题——某批次二维码的定位图案边缘有0.1mm毛刺,Halcon死活认不出。最后在CreateDataCode2dModel里加了"persistence=1"参数才解决,果然算法调参才是永恒的战斗啊。
更多推荐
所有评论(0)