VPLC系列机器视觉运动控制一体机快速入门(七)

发布者:SereneWhisper最新更新时间:2024-10-09 来源: elecfans关键字:机器视觉 手机看文章 扫描二维码
随时随地手机看文章

此前,我们依次讲解了软硬件介绍及计数实例、相机的基本使用、基于形状匹配的视觉定位、BLOB有无检测、测量尺寸、机器视觉方案中使用到的标定功能以及使用ZDevelop软件实现坐标标定的方法。


本期课程我们继续和大家一起分享使用ZDevelop软件实现一维码和二维码的识别功能。


2.png?imageView2/2/w/1000


条形码是由不同的宽度、不同的反射率的条(黑色)和空(白色)组成的,根据特定的编码规则编制,用于表达一组数字、字母信息的图形标识符。


条形码可以标出商品的生产国、制造厂家、商品名称、生产日期、图书分类号、类别、日期等信息,因而在商品流通、图书管理、银行系统、生产制造等许多领域都得到了广泛的应用。

4.png?imageView2/2/w/1000

二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理。


二维码技术是在计算机技术与信息技术基础上发展起来的一门集编码、印刷、识别、数据采集和处理于一身的新兴技术,它解决了条形码表达信息有限的问题。

一维条形码只能在一个方向上(一般是水平方向)存储表达信息,只能存储数字和字母;二维码在水平和垂直两个方向上均能存储表达信息,它可以存储更多的信息包括数字、字母、汉字、图片、音频、视频等。

6.png?imageView2/2/w/1000

条形码需要按照一定规则的编码方式将条和空进行不同的排列用于表示不同的信息;二维码需要按照一定的编码规律使用黑白块在水平方向和垂直方向进行排列,用于表达不同的信息。它们都依赖于特定的编码规则---编码码制,才能准确实现信息的存储和表达。

7.png?imageView2/2/w/1000

正是由于条形码和二维码在日常生活和工业生产等多种领域中被广泛应用到,因此在自动化生产制造业中需要自动检测识别条形码和二维码的内容,对识别的内容进行判断,比如根据判断条形码和检测的字符是否一致来最终判断产品包装的信息的准确性;比如,通过识别二维码的内容,导入对应产品的信息。

机器视觉是常用于自动化生产制造行业的一门自动检测技术,它根据条形码和二维码的编码原理也相应生成了对应的识别算法,可应用于自动检测识别条形码和二维码。



8.png?imageView2/2/w/1000

识别流程图



9.png?imageView2/2/w/1000


演示实例说明:本课程实例将演示使用ZDevelop软件识别常用条形码和二维码的类型。

1.打开ZDevelop软件:新建项目→新建HMI文件→新建main.bas文件,用于编写界面响应函数→新建global_variable.bas文件用于存放全局变量并开启HMI自动运行任务→新建identify.bas文件用于初始化测量参数→新建camera.bas文件用于实现相机采集功能→新建draw.bas文件用于更新绘制检测区域ROI刷新界面→文件添加到项目。



10.png?imageView2/2/w/1000

2.设计HMI文件界面。



11.png?imageView2/2/w/1000


3.在global_variable.bas文件中定义全局变量。

'''''全局变量大部分使用数组结构'''''

''注:basic编程中很多函数会以TABLE(系统的数据结构)做为参数

''在这里table均是做为中间变量

''table 0-10 作为中间变量使用

''table 11-15,区域ROI参数,参数位置与dd_identfy_param对应,控件坐标系

''table 21-22,鼠标按键,控件坐标系

''table 31-35,控件坐标转换后对应的图像坐标,图像坐标系

'主任务状态

'0 - 未初始化

'1 - 停止

'2 - 运行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1

'采集开关

'0 - 停止采集

'1 - 请求采集

GLOBAL DIM grab_switch

grab_switch = 0

'相机个数

GLOBAL cam_num

cam_num = 0

'相机种类,''

GLOBAL DIM CAMERA_TYPE(100)

'CAMERA_TYPE = 'zmotion;mindvision;basler;mvision;huaray'

CAMERA_TYPE = 'mvision'

' 任务号划分, 主任务id - 10

GLOBAL DIM main_task_id

main_task_id = 10

'连续采集线程id - 9

GLOBAL DIM grab_task_id

grab_task_id = 9

'目前不能作为函数参数,故使用全局变量表示

GLOBAL ZVOBJECT grabImg

'常用颜色变量

GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW

C_RED = RGB(255,0,0)

C_GREEN = RGB(0,255,0)

C_BLUE = RGB(0,0,255)

C_YELLOW= RGB(255,255,0)

'数据码识别参数数组,依次为中心cx、cy、w、h、angle、data_code_type、step

GLOBAL DIM d_identfy_param(7) 'd开头表示数据结构

'识别消耗时间

GLOBAL DIM d_identfy_time

d_identfy_time = 0

'是否使用roi,0-不使用,不使用时就用全图进行识别数据码,1-使用时就用roi区域截取图像用来识别数据码

GLOBAL DIM d_useRoi

d_useRoi = 0

'条码类型

GLOBAL DIM code_type

code_type = 0

'识别结果,结果存储方式为:类型:结果,如EAN-13:123456789

GLOBAL DIM d_identfy_rst(256)

RUN 'Hmi.hmi',1

4.在HMI界面的元件中关联变量。



12.png?imageView2/2/w/1000


5.在identify.bas文件中初始化测量参数。

end

GLOBAL SUB init_param() '初始化测量参数

'初始化测量参数

d_identfy_param(0) = 320.0 'roi中心x

d_identfy_param(1) = 240.0 'roi中心y

d_identfy_param(2) = 160 'roi宽

d_identfy_param(3) = 120.0 'roi高

d_identfy_param(4) = 0.0 'roi角度

d_identfy_param(5) = 0 '条码类型为自动

d_identfy_param(6) = 4 '扫描步长

END SUB

6.在main.bas文件中添加初始化函数并在HMI编辑设置中关联函数名。

'HMI界面初始化函数

GLOBAL SUB hmi_init()

grab_switch = 0

main_task_state = 1

init_param() '初始化测量参数

ZV_RESETCLIPSIZE(1280, 1024) '初始化时依据图像分辨率设置区域的裁剪尺寸,此处图像分辨率为1280x1024

ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 5), HMI_CONTROLSIZEY(10, 5)) '设置锁存的大小

ZV_LATCHCLEAR(0)

'将检测测量器ROI的图像坐标数据转到控件坐标数据

TABLE(11, d_identfy_param(0), d_identfy_param(1))

ZV_POSFROMIMG(0, 1, 11, 11) '图像坐标转换到HMI控件坐标

TABLE(13) = ZV_LENFROMIMG(0, d_identfy_param(2))

TABLE(14) = ZV_LENFROMIMG(0, d_identfy_param(3))

TABLE(15) = d_identfy_param(4)

END SUB



13.png?imageView2/2/w/1000


7.在camera.bas文件中添加采集操作相关函数,并关联动作函数名。

end

'HMI界面按下扫描相机按钮时响应的函数

GLOBAL SUB cam_scan_all()

ZV_SETSYSINT('LogLevel', 7)

ZV_SETSYSSTR('DataDir','')

'扫描相机

CAM_SCAN(CAMERA_TYPE)

cam_num = CAM_COUNT()

?'cam_num = ' cam_num

if (0 = cam_num) then

?'未找到相机'

' ZV_READIMAGE(grabImg, 'QR.png?imageView2/2/w/1000', 1)

return

endif

'扫描到有相机就对一些相机参数进行设置

if cam_num > 0 then

CAM_SEL(0)

CAM_SETEXPOSURE(5000)

CAM_SETPARAM('GevSCPD', '3000')

CAM_SETPARAM('GevHeartbeatTimeout', '3000')

CAM_SETMODE(0)'设置触发模式为软触发

CAM_START(0)'开始采集

endif

END SUB

'HMI界面按下单次采集按钮时响应的函数

GLOBAL SUB btn_grab()

if cam_num=0 then

?'请先扫描相机!'

return

endif

CAM_SETPARAM('TriggerSoftware', 0)

CAM_GET(grabImg, 0)

ZV_LATCH(grabImg, 0) '将带显示的图像转换到锁存通道指定的锁存区域

END SUB

'HMI界面按下连续采集按钮时响应的函数

GLOBAL SUB btn_mea_cgrab()

if cam_num=0 then

?'请先扫描相机!'

return

endif

grab_switch = 1

if (1 = grab_switch) then

if (0 = PROC_STATUS(grab_task_id)) then

RUNTASK grab_task_id, grab_task

endif

endif

END SUB

'HMI界面按下停止采集按钮时响应的函数

GLOBAL SUB btn_mea_stopCgrab()

grab_switch = 0

END SUB

'连续采集任务

grab_task:

while(1)

if (0 = grab_switch) then

exit while

endif

btn_grab()

wend

END

8.在draw.bas文件中添加更新绘制Roi函数,并在自定义元件属性窗口关联刷新函数和绘图函数。

end

'和绘制(即选择ROI)有关的界面的刷新绘制函数放在这个bas文件里

DIM is_redraw

is_redraw = 0

DIM set_roi_open_init

set_roi_open_init = 0

DIM sr_mpos_x, sr_mpos_y, hit_pos

'根据鼠标操作更新检测区域ROI的坐标位置和形状大小

GLOBAL SUB update_identfy()

if mouse_scan(21) = 1 then '扫描按下操作

hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) '只有按下时可以改变击中位置

is_redraw = 1

endif

if mouse_scan(21) = -1 then '扫描松开操作

ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

is_redraw = 1

endif

if (MOUSE_state(21)) then

ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

is_redraw = 1

endif

if (1 = is_redraw) then

'控件roi坐标转图像roi坐标

is_redraw = 0

ZV_POSTOIMG(0,2, 11, 0) 'TABLE(0)作为中间变量临时使用

d_identfy_param(0) = TABLE(0)

d_identfy_param(1) = TABLE(1)

d_identfy_param(2) = ZV_LENTOIMG(0, TABLE(2))

d_identfy_param(3) = ZV_LENTOIMG(0, TABLE(3))

d_identfy_param(4) = TABLE(4)

SET_REDRAW

endif

SET_REDRAW

END SUB

'更新ROI位置和大小后实时绘制ROI区域

GLOBAL SUB draw_identfy()

if d_useRoi =1 then

SET_COLOR(C_BLUE)

TABLE(16, 0, 0) '对子区域宽度和个数两个参数清零

ZV_HMIRECT2(11, 300)

DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形

DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))

DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))

DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))

DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '方向箭头

DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))

DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))

endif

END SUB

9.添加在HMI界面按下【测试】按钮时响应的函数,并关联动作函数名。

'HMI界面按下测试按钮时响应的函数

GLOBAL SUB btn_identfy_test()

'开始识别

TICKS = 0

DIM tmp1(64),tmp2(64)

ZVOBJECT grayImg, codeList, codeRst

if ZV_IMGCNS(grabImg) > 1 then '获取图像通道数,单通道表示灰度图

ZV_RGBTOGRAY(grabImg,grayImg)

else

ZV_COPY(grabImg,grayImg) '复制grabImg图像到grayImg图像中

endif

code_type = d_identfy_param(5)

if code_type = 7 then '如果在界面中选择QR码类型

code_type = 20

elseif code_type = 8 then '如果在界面中选择DM码类型

code_type = 21

endif

ZV_CLEAR(codeList)

ZV_CODEREAD(grayImg,codeList,code_type,d_identfy_param(6))

if ZV_LISTCOUNT(codeList) > 0 then '获取列表中元素的数量

ZV_LISTGET(codeList,codeRst,0) '取出第一个条码结果作为显示

ZV_CODETYPESTR(codeRst,64,100) '获取数据码类型并将其存入起始索引为100的TABLE中

DMCPY tmp1(0),TABLE(100),64 '将TABLE中的数组拷贝至tmp1中

ZV_CODESTR(codeRst,64,100) '获取数据码结果并将其存入起始索引为100的TABLE中

DMCPY tmp2(0), TABLE(100), 64 '将TABLE中的数组拷贝至tmp2中

d_identfy_rst = tmp1 + ':'tmp2 '显示识别结果为 数据码类型:数据码结果

else

d_identfy_rst = 'identify fail!'

endif

d_identfy_time = abs(TICKS) '识别时间

END SUB



14.png?imageView2/2/w/1000


10.添加在HMI界面按下【运行】按钮时响应的函数,并关联动作函数名。

'HMI界面按下运行按钮时响应的函数

GLOBAL SUB btn_run()

if (1 = main_task_state) then

if (0 = PROC_STATUS(main_task_id)) then

main_task_state = 2

RUNTASK main_task_id, main_task

endif

endif

END SUB

'主任务执行的函数

main_task:

while(1)

if (3 = main_task_state) then

main_task_state = 1

exit while

endif

if cam_num = 0 then

btn_stop()

return

endif

'持续采集图像,对图像进行操作

btn_grab()

btn_identfy_test()

wend

END



15.png?imageView2/2/w/1000


11.添加在HMI界面按下【停止】按钮时响应的函数,并关联动作函数名。

'HMI界面按下停止按钮时响应的函数

GLOBAL SUB btn_stop()

if (2 = main_task_state) then

main_task_state = 3

endif

END SUB



16.png?imageView2/2/w/1000



关键字:机器视觉 引用地址:VPLC系列机器视觉运动控制一体机快速入门(七)

上一篇:智嵌物联CAN转串口RS485 RS232使用说明
下一篇:VPLC系列机器视觉运动控制一体机快速入门(六)

推荐阅读最新更新时间:2026-03-19 21:15

VPLC系列机器视觉运动控制一体机快速入门(十)
此前,我们依次讲解了软硬件介绍及计数实例、相机的基本使用、基于形状匹配的视觉定位、BLOB有无检测、测量尺寸、机器视觉方案中使用到的标定功能、ZDevelop软件实现识别条形码和二维码,测量点/直线/圆以及划痕检测功能。 本期课程我们和大家一起使用ZDevelop软件实现机器视觉中使用到的OCR功能。 一、 OCR 检测原理 什么是OCR? OCR全称是Optical Character Recognition,即光学字符识别。在机器视觉中OCR是指使用图像处理方法将获取到的图像上的黑白字符进行分割训练后,识别并输出对应的字符。 OCR的检测原理? 在机器视觉中进行OCR检测时,首先根据字符(前景)和背景的
[嵌入式]
<font color='red'>VPLC</font><font color='red'>系列</font><font color='red'>机器视觉</font><font color='red'>运动控制</font><font color='red'>一体机</font>快速入门(十)
VPLC系列机器视觉运动控制一体机快速入门(七)
此前,我们依次讲解了软硬件介绍及计数实例、相机的基本使用、基于形状匹配的视觉定位、BLOB有无检测、测量尺寸、机器视觉方案中使用到的标定功能以及使用ZDevelop软件实现坐标标定的方法。 本期课程我们继续和大家一起分享使用ZDevelop软件实现一维码和二维码的识别功能。 条形码是由不同的宽度、不同的反射率的条(黑色)和空(白色)组成的,根据特定的编码规则编制,用于表达一组数字、字母信息的图形标识符。 条形码可以标出商品的生产国、制造厂家、商品名称、生产日期、图书分类号、类别、日期等信息,因而在商品流通、图书管理、银行系统、生产制造等许多领域都得到了广泛的应用。 二维码是用某种特定的几何图形按一定规律在平面(
[嵌入式]
<font color='red'>VPLC</font><font color='red'>系列</font><font color='red'>机器视觉</font><font color='red'>运动控制</font><font color='red'>一体机</font>快速入门(七)
VPLC系列机器视觉运动控制一体机快速入门(五)
此前,我们依次讲解了软硬件介绍及计数实例、相机的基本使用、基于形状匹配的视觉定位以及BLOB有无检测等。 今天,正运动技术为大家分享一下VPLC系列机器视觉运动控制一体机快速入门(五),和大家一起分享机器视觉常用的检测功能---测量尺寸。 测量尺寸:在机器视觉中常用的测量尺寸的原理就是使用两个直线测量器,分别检测出产品两条尺寸边缘的点拟合成直线后取两条直线的距离。 尺寸测量本质是基于边缘检测的测量,它需要先检测出亮暗过渡满足一定阈值的边缘点,然后再提取边缘点数据进行处理计算后输出最终的结果。 测量尺寸特点 1.准确度高 选择合适的硬件选型方案可以达到很高的检测精度。常用远心镜头减少畸变,增大景深,减小测量误差
[嵌入式]
<font color='red'>VPLC</font><font color='red'>系列</font><font color='red'>机器视觉</font><font color='red'>运动控制</font><font color='red'>一体机</font>快速入门(五)
赋能工业、消费及机器视觉: 贸泽开售 ams OSRAM Mira050 NIR增强全局快门图像传感器
2026年1月20日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 即日起开售ams OSRAM的新款Mira050近红外 (NIR) 增强全局快门图像传感器。 Mira050是一款紧凑型0.5MP图像传感器,专为2D和3D消费类及工业机器视觉应用而设计。 ams OSRAM Mira050 NIR增强全局快门图像传感器非常适用于2D和3D应用,包括主动立体视觉 (ASV)、结构光视觉 (SLV) 和增强现实与虚拟现实 (AR/VR) 。Mira050的近红外灵敏度高,可扩大测量范围,优化整个系统的功耗,包括减少片外处理,这对电池供电的消费类和工业应用至关重要
[传感器]
赋能工业、消费及<font color='red'>机器视觉</font>:  贸泽开售 ams OSRAM Mira050 NIR增强全局快门图像传感器
详解机器视觉软件开发SDK
其实很简单,SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。 这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。具体到我们这个系列教程,我们后面只讨论广义 SDK 的一个子集——即开发 Windows 平台下的应用程序所使用的 SDK。 呵呵,其实上面只是说了一个 SDK 大概的概念而已,理解什么是 SDK 真有这么容易吗? 恐怕没这么简单!为了解释什么是 SDK 我们不得不引入 API、动态链接库、导入库等等概念。^_^,不要怕,也就是几个新的名词而已,其实学习新知识就是在学习新名词、新概念和新术语。
[嵌入式]
机器视觉的应用有哪些 机器视觉系统组成及工作原理
  机器视觉的应用有哪些   机器视觉是一种利用计算机技术实现对图像或视频进行自动处理、分析和理解的技术。它可以应用于很多领域,以下是一些机器视觉的应用案例:   工业自动化:机器视觉可以用于工业生产线上的自动检测、自动识别和自动分类等。例如在电子工业中,可以用机器视觉检测电路板上的元器件是否正确安装。   无人驾驶:机器视觉可以用于自动驾驶系统中的图像处理和障碍物识别等。例如在自动驾驶汽车中,可以用机器视觉识别交通信号灯和行人等障碍物。   医疗保健:机器视觉可以用于医疗影像分析、医疗图像识别和医疗图像分类等。例如在医学影像中,可以用机器视觉分析医疗影像中的病灶。   安防监控:机器视觉可以用于视频监控系统中的目标检测、跟踪
[嵌入式]
机器视觉检测发展的几个历程和趋势
在现代化生产中,由于能够最大程度的提高产品质量、降低成本,近年来一直被广泛用于各类工业检测项目上。而随着工业制造技术和加工工艺的提高和改进,对检测手段、检测速度和精度提出得更高要求,也使得机器视觉检测技术在各大行业建功无数,发展势头强劲。那么,今天我们就来细数下机器视觉检测发展的几个历程和趋势。 1、初级视觉理论:主要针对光学成像的逆问题,是由能从二维光强度阵列恢复三维可见表面物理性质的一系列处理过程组成。这里各过程的输入数据及计算目的都是能够明确描述的,如边缘检测、立体匹配、由运动恢复结构等方法。在三维物体投影成二维图像过程中,三维信息有很多损失,从而导致病态问题产生,因此加强对初级视觉过程及其约束条件的研究就显得格外重要,
[嵌入式]
光学设计是机器视觉系统的关键
仔细研究待分析的物体有助干确定适当的系统设计。 机器视觉系统具有极大的吸引力,因为它能避免重复的测量,同时又能提高产量,增加响应时间。虽然研究界已在钻研光学平行处理技术,但基本的机器视觉检查系统仍然包含一块透镜、一台摄像机、以及把处理与算法做在一起的一块图像处理电路。由于光具在高级的机器视觉系统中常常是一种限制因素,有关光学定律的知识和使用使得系统的设计者能够最大程度地提高系统的性能。 一般说来,透镜是用来放大的,也是为此而设计的。 机器视觉的应用可从半导体检查一直到自动引导系统。在本文中,机器视觉意味着这样一种行为:通过透镜/摄像机组合系统获取目标的一张图像,然后以数字方式处理这张图像以便对目标的某一特征进行定位并对其采取揩施(
[嵌入式]
光学设计是<font color='red'>机器视觉</font>系统的关键
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved