Halcon识别一维码的代码实例
- 格式:docx
- 大小:15.70 KB
- 文档页数:10
基于Halcon的一维条码识别技巧基于 Halcon 的一维条码识别技巧技巧条码识别halconhub(公丕亮,吕希胜) · 2016-02-06 16:080. 引言对于生产流水线或物流传送带上的产品条码识别,传统的 LED 扫描器识别方法受条码印刷技术、印制材料、条码本身的运动速度和角度的影响,识别率很难提高。
光学成像可提供足够的条码细节配合先进的条码识别算法,因而成为最有潜力的条码识别方法。
本文基于 Halcon 10. 0 开发环境介绍了一维条形码识别的相关算子的基本含义和应用技巧。
1. Halcon 相关函数解读函数框架如下:第 1 步: 模型初始化。
create_bar_code_model( )set_bar_code_param( ) set_bar_co de_param_specific( )第 2 步: 条码识别。
find_bar_code( )第 3 步: 结果处理。
get_bar_code_object( ) get_bar_code_param( ) get_bar_cod e_result( )第 4 步: 清除模型。
clear_bar_code_model( ) 下面做具体介绍。
1.1 create /clear_bar_code_model( ) 算子作为读取条形码的第 1 步,该算子创建一个解析条形码的通用模型。
典型应用是:create_bar_code_model( [],[],BarCodeHandle) 程序完成时,应销毁建立的对象: clear_bar_code_model( BarCodeHandle)1.2 set_bar_code_param( ) 及对应 get_算子( 1) set_bar_code_param( BarCodeHandle,'element _size_min',1. 5) : 条形码的最小尺寸,指条码的宽度和间距。
Halcon实例说明1、inspect_bottle_mouth。
hdev:易拉管缺陷检测。
用到了极坐标变换2、circular_barcode。
hdev:一维条码检测,用到坐标变换.弧形拉直。
用到了极坐标变换3、surface_scratch.hdev:表面划伤检测.4、ball.hdev:PCB板焊锡点检测。
用到常用算子及开运算opening。
5、best_match_rot_mg_clip1.hdev:带方向的基本模版匹配6、bin_threshold.hdev:计算图片中的灰度直方图7、bin_threshold2.hdev:程序说明怎样bin_threshold与threshold之间的相等转换计算。
8、bottle.hdev:OCR字符的检测9、bottlet.hdev:OCR字符的检测10、check_blister.hdev:药品颗粒检测。
用一些常用算子及坐标变换,图片旋转。
11、check_bottle_crate。
hdev:圆孔检测。
用到opening_circle、select_shape等常用处理算子.12、check_hazelnut_wafers。
hdev:检测物体表面缺陷。
很好的用到了开运算算子opening_circle和闭运算算子closing_circle13、check_smd_tilt.hdev:检测SMD用到算子sobel_amp边缘检测,measure_projection14、check_soft_cheese.hdev:用到算子有彩色图转换为灰度图(rgb1_to_gray),模版匹配15、create_shape_model、find_shape_models,图像坐标变转vector_angle_to_rigid 、affine_trans_contour_xld等算子.16、circles。
hdev:圆拟合算子(fit_circle_contour_xld),边缘检测(edges_sub_pix)。
示例:数字识别要识别的图片:halcon源码:1: *读取图片2: read_image(Image,'D:/MyFile/halcon/数字识别/1.jpg') 3:4: *图像处理5: decompose3(Image, ImageR, ImageG, ImageB)6: threshold (ImageG, Regions, 0, 183)7: connection (Regions, Connection)8:9:select_shape (Connection, SelectedRegions, 'area', 'and', 1987.72, 7500)10:11: read_ocr_class_mlp('Document_0-9.omc',OCRHandle)12: do_ocr_multi_class_mlp(SelectedRegions,ImageG,OCRHandle, Class, Confidence)halcon导出的C#代码:1://2:// File generated by HDevelop for HALCON/DOTNET (C#) Version 10.0 3://4:// This file is intended to be used with the HDevelopTemplate or 5:// HDevelopTemplateWPF projects locatedunder %HALCONEXAMPLES%\c#6:7:using System;8:using HalconDotNet;9:10:public partial class HDevelopExport11: {12:public HTuple hv_ExpDefaultWinHandle;13:14:// Main procedure15:private void action()16: {17:18:// Local iconic variables19:20: HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;21: HObject ho_Regions, ho_Connection, ho_SelectedRegions; 22:23:24:// Local control variables25:26: HTuple hv_OCRHandle, hv_Class, hv_Confidence;27:28:// Initialize local and output iconic variables29: HOperatorSet.GenEmptyObj(out ho_Image);30: HOperatorSet.GenEmptyObj(out ho_ImageR);31: HOperatorSet.GenEmptyObj(out ho_ImageG);32: HOperatorSet.GenEmptyObj(out ho_ImageB);33: HOperatorSet.GenEmptyObj(out ho_Regions);34: HOperatorSet.GenEmptyObj(out ho_Connection);35: HOperatorSet.GenEmptyObj(out ho_SelectedRegions);37://读取图片38: ho_Image.Dispose();39: HOperatorSet.ReadImage(out ho_Image, "D:/MyFile/halcon/数字识别/1.jpg");40:41://图像处理42: ho_ImageR.Dispose();43: ho_ImageG.Dispose();44: ho_ImageB.Dispose();45: HOperatorSet.Decompose3(ho_Image, out ho_ImageR, outho_ImageG, out ho_ImageB46: );47: ho_Regions.Dispose();48: HOperatorSet.Threshold(ho_ImageG, out ho_Regions, 0, 183); 49: ho_Connection.Dispose();50: HOperatorSet.Connection(ho_Regions, out ho_Connection);51:52: ho_SelectedRegions.Dispose();53: HOperatorSet.SelectShape(ho_Connection, outho_SelectedRegions, "area", "and",54: 1987.72, 7500);56: HOperatorSet.ReadOcrClassMlp("Document_0-9.omc", out hv_OCRHandle);57: HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegions, ho_ImageG, hv_OCRHandle,58:out hv_Class, out hv_Confidence);59:60: ho_Image.Dispose();61: ho_ImageR.Dispose();62: ho_ImageG.Dispose();63: ho_ImageB.Dispose();64: ho_Regions.Dispose();65: ho_Connection.Dispose();66: ho_SelectedRegions.Dispose();67:68: }69:70:public void InitHalcon()71: {72:// Default settings used in HDevelop73: HOperatorSet.SetSystem("do_low_error", "false");74: }76:public void RunHalcon(HTuple Window) 77: {78: hv_ExpDefaultWinHandle = Window; 79: action();80: }81:82: }83:C#工程:1:using System;2:using System.Collections.Generic;3:using ponentModel;4:using System.Data;5:using System.Drawing;6:using System.Linq;7:using System.Text;8:using System.Windows.Forms;9:10:using HalconDotNet;11:12:13:namespace NumericalRecognition14: {15:public partial class FormMain : Form16: {17://增加代码:18: HDevelopExport HD = new HDevelopExport();19:string ImagePath;20:21:public FormMain()22: {23: InitializeComponent();24: btnRecognitionNumber.Enabled = false;25: }26:27:private void btnOpenImage_Click(object sender, EventArgs e)28: {29: openFileDialog1.Filter = "JPEG文件|*.jpg*|BMP文件|*.bmp*|TIFF文件|*.tiff*";30:31: openFileDialog1.RestoreDirectory = true;32:33: openFileDialog1.FilterIndex = 1;34:35:if(openFileDialog1.ShowDialog() == DialogResult.OK) 36:37: {38:39: ImagePath = openFileDialog1.FileName;40:41: HD.ReadImage(hWindowControl1.HalconWindow, ImagePath);42:43: btnRecognitionNumber.Enabled = true;44:45: }46: }47:48:private void btnRecognitionNumber_Click(object sender, EventArgs e)49: {50: HD.NumberRecognition();51: labNumber.Text = HD.hv_Class.ToString();52:53: btnRecognitionNumber.Enabled = false;54: }55: }56:57://halcon导出的类58:public partial class HDevelopExport59: {60:public HTuple hv_ExpDefaultWinHandle;61:62: HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;63: HObject ho_Regions, ho_Connection, ho_SelectedRegions; 64:65:66:// Local control variables67: HTuple hv_OCRHandle, hv_Confidence;68:public HTuple hv_Class;69:70:public void InitHalcon()71: {72:// Default settings used in HDevelop73: HOperatorSet.SetSystem("do_low_error", "false"); 74: }75:76:public void ReadImage(HTuple Window,string ImagePath) 77: {78: hv_ExpDefaultWinHandle = Window;79:80:// Initialize local and output iconic variables 81: HOperatorSet.GenEmptyObj(out ho_Image);82:83://读取图片84: ho_Image.Dispose();85: HOperatorSet.ReadImage(out ho_Image, ImagePath); 86: HOperatorSet.DispObj(ho_Image,hv_ExpDefaultWinHandle);87: }88:89:public void NumberRecognition()90: {91: HOperatorSet.GenEmptyObj(out ho_ImageR);92: HOperatorSet.GenEmptyObj(out ho_ImageG);93: HOperatorSet.GenEmptyObj(out ho_ImageB);94: HOperatorSet.GenEmptyObj(out ho_Regions);95: HOperatorSet.GenEmptyObj(out ho_Connection);96: HOperatorSet.GenEmptyObj(out ho_SelectedRegions); 97://图像处理98: ho_ImageR.Dispose();99: ho_ImageG.Dispose();100: ho_ImageB.Dispose();101: HOperatorSet.Decompose3(ho_Image, out ho_ImageR, out ho_ImageG, out ho_ImageB102: );103: ho_Regions.Dispose();104: HOperatorSet.Threshold(ho_ImageG, out ho_Regions, 0, 183);105: ho_Connection.Dispose();106: HOperatorSet.Connection(ho_Regions, outho_Connection);107:108: ho_SelectedRegions.Dispose();109: HOperatorSet.SelectShape(ho_Connection, outho_SelectedRegions, "area", "and",110: 1987.72, 7500);111:112: HOperatorSet.ReadOcrClassMlp("Document_0-9.omc", out hv_OCRHandle);113: HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegions, ho_ImageG, hv_OCRHandle,114:out hv_Class, out hv_Confidence);115:116:117: ho_Image.Dispose();118: ho_ImageR.Dispose();119: ho_ImageG.Dispose();120: ho_ImageB.Dispose();121: ho_Regions.Dispose();122: ho_Connection.Dispose();123: ho_SelectedRegions.Dispose();124:125: }126:127: }128: }运行结果:。
Stage I's hdev的代码实例===============================================================================*Autodiscrimination A.hdev**Code generated by Image Acquisition03*获取条形码,并计算及显示解码时间,并从规定读取的条码类型范围中读取被解码的条码类型也可设置成不规定条码类型即自动识别,但会增加解码时间,甚至出现误读的情况。
*可读取多个不同类型的条码,并且多个条码用不同颜色的区域框区分,且读取出来的信息也以相应的颜色做区分dev_close_window()dev_open_window(0,0,600,600,'black',WindowHandle)*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle;*相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。
open_framegrabber('DirectShow',1,1,0,0,0,0,'default',8,'rgb', -1,'false','default','Gsou USB2.0Camera',0, -1,AcqHandle)*打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子注意,采集器名称不同要更改,或者用助手获取也可以。
grab_image_start(AcqHandle, -1)while(true)grab_image_async(Image,AcqHandle, -1)*开始条形码识别create_bar_code_model([],[],BarCodeHandle)*必备的创建条码解码的开头,下面有一段结束代码dev_update_var('off')dev_update_pc('off')dev_update_window('off')*刷新窗体set_display_font(WindowHandle,14,'mono','true','false')dev_set_draw('margin')dev_set_line_width(3)Colors:=['forest green','magenta','blue','red','yellow']*设置区域框的属性,如无填充色、边框线大小为3,颜色。
halcon代码案例摘要:1.Halcon 简介2.Halcon 代码案例概述3.Halcon 代码案例详解4.Halcon 代码案例应用领域5.总结正文:1.Halcon 简介Halcon 是德国Micro-Electronic Development 公司开发的一款工业自动化控制系统软件,主要用于机器视觉和工业自动化领域。
Halcon 具有丰富的功能库和灵活的编程方式,能够满足各种复杂的工业自动化需求。
2.Halcon 代码案例概述本文将通过一个简单的Halcon 代码案例,介绍如何使用Halcon 进行工业自动化控制系统的开发。
本案例将演示如何使用Halcon 实现一个简单的机器视觉功能,即通过摄像头捕捉到的图像,判断一个产品的合格与否。
3.Halcon 代码案例详解(1)准备工作:首先,需要安装Halcon 软件,并连接摄像头设备。
(2)编写程序:打开Halcon 软件,新建一个项目,编写程序如下:```PROGRAM MainVAR// 声明变量Image : ARRAY [1..1024, 1..1024] OF BYTE;Product : ARRAY [1..4] OF BYTE;合格: BOOL;END_VARMETHOD Run// 初始化Image := (ARRAY [1..1024, 1..1024] OF BYTE)();Product := (ARRAY [1..4] OF BYTE)();合格:= FALSE;// 读取摄像头图像READ_IMAGE (Image, "摄像头设备地址")// 对图像进行预处理FOR i := 1 TO 1024 DOFOR j := 1 TO 1024 DOImage[i, j] := Image[i, j] > 128END_FOREND_FOR// 提取产品区域FOR i := 1 TO 4 DOFOR j := 1 TO 4 DOProduct[i, j] := Image[i * 256 + j, i * 256 + j]END_FOREND_FOR// 判断产品合格与否IF Product[1, 1] AND Product[1, 2] AND Product[2, 1] AND Product[2, 2] THEN合格:= TRUEEND_IF// 输出结果IF 合格THENWRITE "合格"ELSEWRITE "不合格"END_IF// 延时SLEEP 100END_METHODEND_PROGRAM```(3)编译运行:编译程序,并在摄像头设备上运行。
halcon读取二维码例子rameters有3种识别模式(识别模式越强,适应场合越广,适应能力和识别能力越强,但耗时越多):*standard_recognition 标准模式*enhanced_recognition 加强模式*maximum_recognition 最强模式*建议初学者选用 'maximum_recognition'*参数一:输入你要读取的二维码的码制*参数二:通用参数可以调整为二维码数据模型的名称。
*参数三:通用参数可以调整为二维码数据模型的价值。
*参数四:返回二维码模板句柄create_data_code_2d_model ('QR Code',\'default_parameters', \'maximum_recognition',\DataCodeHandle)**第二步:使用模板find_data_code_2d (GrayImage,\SymbolXLDs,\DataCodeHandle, 'train', 'all',\ResultHandles, DecodedDataStrings)* 参数依次是*参数一:输入的图像*参数二:XLD轮廓包围成功解码后的数据代码符号。
就是如果找到二维码所在的区域,*就将那个区域的XLD返回,注意可能输组*参数三:所使用的模板句柄*参数四:查找模式。
默认是空的就是说直接找,找不到拉倒。
如果是train,就是一面找一面调整模板参数。
*参数五:可选的泛型参数的值。
*参数六:所有成功解码二维码数据符号的句柄。
为啥是句柄呢?如果解码的数据可能很多了。
*参数七:返回图像中的所有检测到的二维码的数据符号的译码数据串。
**第三步:释放模板clear_data_code_2d_model(DataCodeHandle)。
调用halcon读码算法库调用Halcon读码算法库Halcon是一款功能强大的机器视觉软件,广泛应用于工业自动化、医疗影像、智能交通等领域。
其中,读码算法库是Halcon的重要功能之一,可以实现对各种条码、二维码的快速识别。
在使用Halcon读码算法库之前,我们需要先将其集成到我们的开发环境中。
以下是调用Halcon读码算法库的一般步骤:1. 引入Halcon库:在代码中引入Halcon库的头文件,例如#include <halcon.h>。
2. 初始化Halcon环境:使用Halcon提供的初始化函数,初始化Halcon的运行环境。
3. 创建图像对象:使用Halcon提供的函数,创建一个图像对象,并将待识别的图像加载到该对象中。
4. 设置读码参数:根据需要,使用Halcon提供的函数,设置读码算法的参数,例如识别的码类型、码的尺寸范围等。
5. 调用读码函数:使用Halcon提供的读码函数,对图像进行读码操作,并将识别结果保存在一个变量中。
6. 输出识别结果:根据需要,将识别结果进行处理,并输出到用户界面或保存到文件中。
7. 释放资源:在读码完成后,需要释放Halcon所占用的资源,以便其他操作可以继续进行。
使用Halcon读码算法库可以实现对各种常见的条码、二维码的识别,包括一维码(如Code39、Code128等)、二维码(如QR code、Data Matrix等)以及其他特殊类型的码(如PDF417、MaxiCode等)。
Halcon读码算法库具有以下优点:1. 高速识别:Halcon读码算法库采用了先进的图像处理和模式匹配算法,能够在短时间内对大量图像进行快速识别。
2. 高精度识别:Halcon读码算法库结合了多种特征提取和匹配算法,能够识别出较小尺寸、有损坏或污损的条码、二维码。
3. 多平台支持:Halcon读码算法库可以在多种操作系统和开发环境下运行,包括Windows、Linux、macOS等。
Halcon中光学字符识别中第一个例子程序* bottle2.hdev: Segmenting and reading of numbers on a beer bottle* Program without visualization: "bottle.hdev"** Step 0: Preparations* Specify the name of the font to use for reading the date on the bottle.* It is easiest to use the pre-trained font Industrial_0-9. If you have run the * program bottlet.hdev in this directory, you can activate the second line* to use the font trained with this program.FontName := 'Industrial_0-9'* FontName := 'bottle'** Step 1: Segmentationdev_update_window ('off')read_image (Bottle, 'bottle2')get_image_size (Bottle, Width, Height)dev_close_window ()dev_open_window (0, 0, 2*Width, 2*Height, 'black', WindowID)set_display_font (WindowID, 20, 'mono', 'true', 'false')dev_display (Bottle)disp_continue_message (WindowID, 'black', 'true')stop ()threshold (Bottle, RawSegmentation, 0, 95)fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5)opening_circle (RemovedNoise, ThickStructures, 2.5)dev_display (Bottle)dev_set_color ('green')dev_display (ThickStructures)disp_continue_message (WindowID, 'black', 'true')stop ()dev_set_draw ('margin')dev_set_line_width (3)dev_display (Bottle)dev_display (ThickStructures)disp_continue_message (WindowID, 'black', 'true')stop ()fill_up (ThickStructures, Solid)dev_display (Bottle)dev_display (Solid)disp_continue_message (WindowID, 'black', 'true')stop ()opening_rectangle1 (Solid, Cut, 1, 7)dev_display (Bottle)dev_display (Cut)disp_continue_message (WindowID, 'black', 'true')stop ()connection (Cut, ConnectedPatterns)intersection (ConnectedPatterns, ThickStructures, NumberCandidates)dev_set_colored (12)dev_display (Bottle)dev_display (NumberCandidates)disp_continue_message (WindowID, 'black', 'true')stop ()select_shape (NumberCandidates, Numbers, 'area', 'and', 300, 9999)sort_region (Numbers, FinalNumbers, 'first_point', 'true', 'column')dev_set_color ('red')dev_display (Bottle)dev_display (Numbers)dev_set_shape ('rectangle1')dev_set_color ('green')dev_display (FinalNumbers)dev_set_shape ('original')dev_set_line_width (1)dev_set_draw ('fill')** Step2: Readingread_ocr_class_mlp (FontName, OCRHandle)do_ocr_multi_class_mlp (FinalNumbers, Bottle, OCRHandle, RecNum, Confidence) area_center (FinalNumbers, Area, Row, ColNum)set_display_font (WindowID, 27, 'mono', 'true', 'false')for i := 0 to |RecNum|-1 by 1disp_message (WindowID, RecNum[i], 'image', 80, ColNum[i]-3, 'green', 'false') endforclear_ocr_class_mlp (OCRHandle)dev_update_window ('on')。
halcon——条码定位与识别(⼀维码)引⾔条码识别的应⽤⼤多数在物流⾏业中(需要识别的条码⼀般在快递包裹中),对于⼀维码的识别,halcon有⾃带条码识别算⼦create_bar_code_model和find_bar_code 。
⽽快递标签处有很多的⽂字,符号和边框,增⼤了定位的难度。
,因此有时也有检测不到条码的情况。
针对这⼀现象,本篇就来深度分析⼀下如何更好的去识别⼀维码。
create_bar_code_model(创建⼀维码模型)create_bar_code_model ([], [], BarCodeHandle)参数⼀//输⼊需要调整的参数名称(为[]表⽰暂时不设置)参数⼆//需要调整的该参数的值。
参数三// 返回的条码模板句柄set_bar_code_param(对模型设置参数)set_bar_code_param( BarCodeHandle, GenParamNames, GenParamValues )BarCodeHandle(in)//模型句柄GenParamNames(in)//参数名称GenParamValues (in)//参数值find_bar_code (识别⼀维码)find_bar_code(Image ,SymbolRegions ,BarCodeHandle, CodeType , DecodedDataStrings)参数列表:Image //输⼊图像SymbolRegions//检测到的条形码区域(输出)BarCodeHandle// 条形码句柄CodeType// 条形码类型DecodedDataStrings//识别结果(输出)(1)图像预处理(增强条码)对⽐度太低:scale_image(或使⽤外部程序scale_image_range),增强图像的对⽐度。
图像模糊:emphasize锐化图像,使条码看起来更清晰。
深⾊背景上读取浅⾊条码:invert_image反转图像。
Stage I's hdev的代码实例===============================================================================* Autodiscrimination** Code generated by Image Acquisition 03* 获取条形码,并计算及显示解码时间,并从规定读取的条码类型范围中读取被解码的条码类型也可设置成不规定条码类型即自动识别,但会增加解码时间,甚至出现误读的情况。
* 可读取多个不同类型的条码,并且多个条码用不同颜色的区域框区分,且读取出来的信息也以相应的颜色做区分dev_close_window ()dev_open_window (0, 0, 600, 600, 'black', WindowHandle)*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle;《*相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Gsou Camera', 0, -1, AcqHandle)* 打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子注意,采集器名称不同要更改,或者用助手获取也可以。
grab_image_start (AcqHandle, -1)while (true)grab_image_async (Image, AcqHandle, -1)*开始条形码识别create_bar_code_model ([], [], BarCodeHandle)*必备的创建条码解码的开头,下面有一段结束代码dev_update_var ('off')dev_update_pc ('off'),dev_update_window ('off')* 刷新窗体set_display_font (WindowHandle, 14, 'mono', 'true', 'false')dev_set_draw ('margin')dev_set_line_width (3)Colors := ['forest green','magenta','blue','red','yellow']* 设置区域框的属性,如无填充色、边框线大小为3,颜色。
*CodeTypes := ['auto']CodeTypes := ['EAN-13','Code 39','EAN-8','Code 128','Code 93']* 设置条码的类型,如EAN-13等5种一维码类型,或者auto自动获取(但解码时间较长且有误读的可能)get_image_size (Image, Width, Height)—dev_display (Image)*获取图像大小,并显示图像count_seconds (Start)find_bar_code (Image, SymbolRegions, BarCodeHandle, CodeTypes, DecodedDataStrings) count_seconds (Stop)Duration := (Stop - Start) * 1000*开始计时、寻找并解码条形码(参数解释详见这个算子),结束计时,并计算解码的时间dev_display (SymbolRegions)get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'symbol_regions')get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedDataTypes)*area_center (SymbolRegions, Area, Rows, Columns)for J := 0 to |DecodedDataStrings|-1 by 1&dev_set_color (Colors[J])select_obj (BarCodeObjects, ObjectSelected, J+1)dev_display (ObjectSelected)endfor*循环获取,并且根据获取的条码数量,设置区域框的颜色if (|DecodedDataStrings| >= 1)*disp_message (WindowHandle, ['Found bar code(s) in ' + Duration$'' + 'ms:','\n Type: ' + DecodedDataT ypes + '\n Data: ' + DecodedDataStrings], 'window', 5*12, 12, 'black', 'true')disp_message (WindowHandle, '读取条形码,用时{' + Duration$'' + 'ms}:' + '[' + DecodedDataTypes + ']' + '=' + '“' + DecodedDataStrings + '”', 'window', 12, 12, Colors, 'true')disp_continue_message (WindowHandle, 'black', 'true')wait_seconds(3)endif~*判断读取到数据的数量,当大于1(数字可改为2、3……)个条码被解码时,显示信息在窗体的第12行,第12列的位置,并按顺序用不同的颜色标注clear_bar_code_model (BarCodeHandle)*关闭条形码解码endwhileclose_framegrabber (AcqHandle)*关闭帧接收器(摄像头)=================================================================================* Autodiscrimination** Code generated by Image Acquisition 04\* 寻找正确的、所需的条码类型的条形码,当寻找到时,hold住图像dev_close_window ()dev_open_window (0, 0, 600, 600, 'black', WindowHandle)*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle;*相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Gsou Camera', 0, -1, AcqHandle)*注意摄像头的名称grab_image_start (AcqHandle, -1)while (true)grab_image_async (Image, AcqHandle, -1)*开始条形码识别(create_bar_code_model ([], [], BarCodeHandle)dev_update_var ('off')dev_update_pc ('off')dev_update_window ('off')set_display_font (WindowHandle, 14, 'mono', 'true', 'false')dev_set_draw ('margin')dev_set_line_width (3)dev_set_color ('forest green')*Colors := ['forest green','magenta','blue','red','yellow']CodeTypes := ['EAN-13','Code 39','EAN-8','Code 128','Code 93']*CodeTypes := ['auto']{get_image_size (Image, Width, Height)dev_display (Image)count_seconds (Start)find_bar_code (Image, SymbolRegions, BarCodeHandle, CodeTypes, DecodedDataStrings)count_seconds (Stop)Duration := (Stop - Start) * 1000dev_display (SymbolRegions)get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedDataTypes)area_center (SymbolRegions, Area, Rows, Columns)for IdxResult := 0 to |DecodedDataStrings|-1 by 1if (regexp_test (DecodedDataTypes[IdxResult], 'EAN-13') # 0)'Color := 'forest green'elseColor := 'red'endifdev_set_color (Color)select_obj (SymbolRegions, SelectedRegion, IdxResult+1)dev_display (SelectedRegion)disp_message (WindowHandle, DecodedDataTypes[IdxResult]+': '+DecodedDataStrings[IdxResult], 'image', Rows[IdxResult ], Columns[IdxResult]-160, Color, 'true')endfor*if (|DecodedDataStrings| >= 2)if (DecodedDataTypes = 'EAN-13')、*disp_message (WindowHandle, ['Found bar code(s) in ' + Duration$'' + 'ms:','\n Type: ' + DecodedD ataTypes + '\n Data: ' + DecodedDataStrings], 'window', 5*12, 12, 'black', 'true')*disp_message (WindowHandle, '读取条形码,用时{' + Duration$'' + 'ms}:' + '[' + DecodedDataTypes + ']' + '=' + '“' + DecodedDataStrings + '”', 'window', 12, 12, Colors, 'true')disp_continue_message (WindowHandle, 'black', 'true')stop()endif*endifclear_bar_code_model (BarCodeHandle)endwhileclose_framegrabber (AcqHandle)=================================================================================|* Autodiscrimination** Code generated by Image Acquisition 05* 读取每个不同的条码时,显示不同颜色的区域框,获取的条码信息也为相应的区域边框颜色dev_close_window ()dev_open_window (0, 0, 600, 600, 'black', WindowHandle)*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle;*相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。