HALCON 18.11.0.0 Progress版本下载:
https://www.51halcon.com/thread-1524-1-1.html
HALCON 18.11进展发布说明
本文档提供了2018年11月发布的MVTec HALCON 18.11.0.0 Progress的发行说明。
内容
- HALCON 18.11.0.0进展的主要新特性
- 深度学习
- ECC 200代码阅读器改进
- 字典
- 处理变量检查
- 支持基于64位臂的平台
- 增强的现场总线通信
- 兼容性
- 许可证
- HALCON图书馆
- HALCON应用程序
- 图像采集接口
- 数字I / O接口
- 扩展包
- 其他兼容性信息
- 字符串编码
- 遗留或不再支持的功能
- 计划停止的Windows的x86架构的Win32平台版本
- 支持的操作系统
- HALCON 18.11.0.0进展中的详细变化描述
- HDevelop
- 新功能
- Bug的修复
- HDevelop示例程序
- HDevEngine
- Bug的修复
- HALCON图书馆
- 加速
- 新功能
- Bug的修复
- 字符串编码
- 程序
- HALCON / C.
- HALCON / C ++
- HALCON / .NET
- 语言界面示例程序
- HALCON变量检查
- 扩展包
- 图像采集接口
- 数字I / O接口
- HALCON for Embedded Vision
- 文档
- 安装
- 许可
- 杂
- HDevelop
- 以前的HALCON版本的发行说明
HALCON 18.11.0.0进展的主要新特性
深度学习
HALCON 18.11 Progress引入了两个新的深度学习功能:对象检测和语义分割。结合先前存在的基于深度学习的图像分类,用户现在可以使用一套全面的深度学习功能。
通过语义分割,可以使用像素精度来定位训练的缺陷类。这允许用户例如解决先前无法实现的检查任务,或者仅通过大量编程工作来解决检查任务。
对象检测本地化训练的对象类并用周围的矩形(边界框)识别它们。对象检测还分离触摸或部分重叠对象的实例。当需要计算对象时,这尤其有用。
ECC 200代码阅读器改进
ECC 200数据代码阅读器的整体识别率可提高5%(数据基于我们的内部基准测试,包括来自各种应用程序的超过3,700张图像)。此外,ECC 200读取器现在能够读取具有受干扰的静区的代码。此外,现在可以更快,更稳健地读取针对复杂背景的代码。
字典
HALCON现在包含一个新的数据结构“字典”,它是一个关联数组,它开辟了处理复杂数据的各种新方法。这使开发人员能够将任意数据捆绑到单个变量中,从而更容易构建复杂的过程。字典也可以从文件中读取和写入。
处理变量检查
HDevelop现在可以显示最重要的句柄变量的详细信息。这使开发人员可以一目了然地轻松检查复杂数据结构的当前属性,这对于调试非常有用。双击句柄变量现在返回与句柄及其当前设置关联的所有参数。
支持基于64位臂的平台
HALCON现在还支持开箱即用的基于64位Arm®的平台。可以从MVTec网站下载的Linux安装程序已经扩展,可以选择另外安装64位基于Arm的平台所需的组件。
增强的现场总线通信
HALCON 18.11引入了Hilscher-cifX接口。这使得HALCON可以通过Hilscher PC卡与几乎所有工业现场总线协议进行通信。其中包括CC-Link,EtherCAT,EtherNet / IP,PROFIBUS和PROFINET。
兼容性
许可证
HALCON 18.11.0.0进度需要有效的HALCON Progress许可证,并且不能与HALCON 13及更早版本的许可证一起运行。
此外,请注意以下与许可证相关的兼容性问题:
- 运算符get_error_text和get_extended_error_info不再需要有效的HALCON许可证。更多信息。
HALCON图书馆
与HALCON 18.05 Progress相比,已经引入了许多扩展。因此,HALCON 18.11.0.0 Progress库与HALCON 18.05 Progress或早期版本不是二进制兼容的。但是,除了下面列出的更改之外,HALCON 18.11.0.0 Progess与HALCON 18.05 Progress的源代码主要兼容:
- 运营商calibrate_cameras,binocular_calibration,并在摄像机标定calibrate_hand_eye在极少数情况下可能会返回稍有不同的优化参数和投影误差。更多信息。
- 运算符classify_class_gmm返回具有协方差类型“球形”或“diag”的高斯混合模型的k-sigma概率'KSigmaProb'的不同值。由于classify_image_class_gmm使用k-sigma概率来拒绝像素,因此classify_image_class_gmm返回的类区域现在可能与以前的HALCON版本不同。更多信息。
- 运营商create_scaled_shape_model,create_aniso_shape_model,determine_shape_model_params,create_planar_uncalib_deformable_model,create_planar_calib_deformable_model,create_local_deformable_model和determine_deformable_model_params当“ScaleMin”,“ScaleRMin”或“ScaleCMin”设置为“NumLevels” =在极少数情况下“自动”可能会返回不同数量的金字塔等级值<0.7。在极少数情况下,create_shape_model_3d可能会创建略有不同的模型。更多信息。
- deviation_image的加速可能导致结果与先前HALCON版本的结果相差灰色值1。更多信息。
- 结果和比分find_planar_calib_deformable_model,find_planar_uncalib_deformable_model和find_local_deformable_model可以从以前的结果和分数略有不同。更多信息。
- 具有度量“ignore_part_polarity” 的find_planar_calib_deformable_model和find_planar_uncalib_deformable_model的结果和分数可能与先前的结果和分数略有不同。更多信息。
- 结果和比分find_planar_calib_deformable_model,find_planar_uncalib_deformable_model和find_local_deformable_model可以从以前的结果和分数略有不同。这不仅会影响SIMD实现,还会影响C版本。更多信息。
- gen_circle_sector,gen_ellipse_sector,create_drawing_object_circle_sector和create_drawing_object_ellipse_sector可能会返回略有不同的结果。更多信息。
- ItemType的get_calib_data设置为'camera',DataName设置为'params_deviations'或'params_covariances'有时会返回不同的结果。更多信息。
- 如果为Micro QR码选择候选组'symbology_ident'和'structured_append',则运算符get_data_code_2d_results现在返回错误8831(“未知参数名称”)。更多信息。
- HALCON语言接口不再支持运算符get_metrology_object_result和get_metrology_object_result_contour中参数'Instance'的整数变体签名。相反,可以使用具有HTuple的签名或参数的字符串变体。更多信息。
- 当使用“manual”类型的文本模型时,get_text_object在为参数“ResultName”传递不支持的字符串时错误地返回错误1301(“控制参数1的错误值”)。现在,返回错误1302(“控制参数2的错误值”)。当参数'ResultName'的多个值已经传递时,运算符get_text_object也没有为'manual'类型的文本模型返回错误。相反,只处理了第一个参数值。现在,返回错误1202(“错误类型的控制参数2”)。更多信息。
- set_stereo_model_image_pairs和reconstruct_surface_stereo可能会返回略有不同的结果,在极少数情况下也会产生明显不同的结果。为了获得旧行为,在调用set_stereo_model_image_pairs之前,请调用
set_stereo_model_param(StereoModelID,'rectif_method','geometric')。
更多信息。 - 以下运算符可以产生用于UINT2图像不同的结果,当SSE41优化是通过使用关闭set_system( 'sse41_enable', '假'):find_local_deformable_model,find_planar_calib_deformable_model,find_planar_uncalib_deformable_model,find_ncc_model,find_ncc_models,find_aniso_shape_model,find_aniso_shape_models,find_scaled_shape_model,find_scaled_shape_models,find_shape_model,和find_shape_models。更多信息。
- 需要针对特定语义类型调整依赖于tuple_sem_type或tuple_sem_type_elem的确切输出的程序,因为它们已被重命名为与其他运算符使用的语义类型一致。特别是,
- 'surface_result'现在是'surface_matching_result',
- 'surface_result_deformable'现在是'deformable_surface_matching_result',
- 'sheet_of_light'现在是'sheet_of_light_model',和
- 'dl_classifier_training_result'现在是'dl_classifier_train_result'。
- 与先前的HALCON版本相比,条形码阅读器可以产生不同的解码结果。更多信息。
- 过程库过程/ general / hand_eye.hdpl中的过程已经过调整,以使用新的容器数据类型“字典”而不是消息。更多信息。
- 内部区域结构的要素缓存宏从HMacro.h头文件中删除,因为用户代码不应直接访问要素缓存。
HALCON应用程序
请重新编译使用HALCON 18.05 Progress开发的所有C,C ++或.NET程序。与HALCON 18.05 Progress或更早版本的不兼容性主要涉及二进制文件,语言接口只有很少的变化。如果您在重新编译程序时遇到问题,请查看以下更改的详细说明。
图像采集接口
通常,HALCON 18.11.0.0 Progress,HALCON 18.05 Progress和HALCON 13.0.x图像采集接口与库兼容。
HALCON 18.11.0.0进度仅包括可用图像采集接口的子集。包括的图像采集接口有:BitFlow,DirectFile,DirectShow,Ensenso-NxLib,File,GenICamTL,GigEVision2,LinX,MILLite,MultiCam,O3D3xx,pylon,SaperaLT,SICK-3DCamera,SiliconSoftware,uEye,USB3Vision和Video4Linux2。您可以从我们的Web服务器下载其他接口。
数字I / O接口
通常,HALCON 18.11.0.0 Progress,HALCON 18.05 Progress和HALCON 13.0.x数字I / O接口与库兼容。
HALCON 18.11.0.0进度仅包括可用数字I / O接口的子集。包含的数字I / O接口有:OPC_UA和Hilscher-cifX。您可以从我们的Web服务器下载其他接口。
扩展包
请重新生成您自己使用HALCON 18.05 Progress开发的扩展包。
另请注意以下兼容性问题:
- 德语和英语def文件用于描述通过HALCON扩展包提供的用户定义运算符的行为,从现在开始必须采用UTF-8编码。更多信息。
其他兼容性信息
- 为了避免内存管理的潜在问题,HDevEngine / C ++运算符SetHDevOperatorImpl不再支持自动删除传递的HDevOperatorImpl对象,因此不再支持参数mem_set_intern。相反,应用程序始终必须释放HDevOperatorImpl对象。必须相应地调整使用SetHDevOperatorImpl的HDevEngine / C ++应用程序。更多信息。
字符串编码
HALCON的字符串编码现在基于UTF-8。这可能会导致以下不兼容:
- HALCON / C接口假定字符串以UTF-8编码。当C应用程序通过HALCON / C接口将具有非ASCII字符的字符串传递给HALCON时,必须考虑这一点。使用应用程序开头的SetHcInterfaceStringEncodingIsUtf8(false),可以切换HALCON / C接口以使用当前语言环境的字符串编码。更多信息。
- HALCON / C ++接口假定字符串以UTF-8编码。当C ++应用程序通过HALCON / C ++接口将带有非ASCII字符的字符串传递给HALCON时,必须考虑这一点。使用应用程序开头的HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false),可以切换HALCON / C ++接口以使用当前语言环境的字符串编码。更多信息。
- 运算符tuple_split,tuple_str_bit_select,tuple_str_first_n,tuple_str_last_n,tuple_strchr,tuple_strlen,tuple_strrchr,tuple_strrstr,tuple_strstr和tuple_substr现在可以在Unicode代码点上运行。如果索引应引用原始字节,请使用set_system('tsp_tuple_string_operator_mode','byte')将这些运算符切换为字节模式。更多信息。
- 操作符tuple_ord,tuple_ords,tuple_chr和tuple_chrt的行为已更改,因此与旧的HALCON版本相比,它们可能返回不同的结果:
- 真正的latin-1字符(ISO88591)与以前一样工作,因为这些字符的Unicode代码与它们的latin-1-ANSI代码相同。
- 像Windows代码页1252或latin-9(ISO885915)这样的Latin-1扩展包含ANSI代码与Unicode对应的字符不同的字符,例如,EURO符号(€)在Windows代码页1252,latin-9中有不同的代码,和Unicode。
- 到目前为止,无法使用tuple_ord和tuple_chr处理多字节字符,如亚洲字母或UTF-8中的任何特殊字符。作为一种解决方法,可以调用tuple_ords和tuple_chrt从数字序列创建这样的字符或将其转换为一个(根据当前编码)。不再需要此类变通办法,但也不再需要(使用默认设置)。
更多信息。 - 数据代码阅读器默认将符号中编码的字符串的字符串编码设置为UTF-8。如果字符串是以当前语言环境的字符串编码进行编码,请使用set_data_code_2d_param(DataCode2DHandle,'string_encoding','locale')。更多信息。
- HDevEngine / C ++假定字符串以UTF-8编码。本地系统编码中的非ASCII字符串不再正确处理,因为默认情况下它们被解释为UTF-8。这可以通过设置HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false)来更改。更多信息。
- 如果这些文件尚未以UTF-8编码,则可能需要调整使用非ASCII字符读取文本文件的应用程序。因此,将来应以UTF-8提供文本文件。此外,必须调整使用fread_char以字节方式读取文件并依赖于此运算符返回一个字节的事实的应用程序。此外,运算符fread_line现在在所有系统上返回,也就是在Linux和macOS X上返回,当在Windows下使用换行符'\ r \ n'(回车符+行)写入文件时,行结束'\ n'饲料)。更多信息。
- 通过send_tuple,receive_tuple,send_data和receive_data进行通信时,非ASCII字符可能无法正确传输。如果连接伙伴的字符串是以当前语言环境的编码进行编码的,则open_socket_accept和open_socket_connect的参数“string_encoding” 应设置为“locale”。更多信息。
- 在非常不可能的情况下,旧的词典文件包含本地8位编码中的非ASCII条目,所有这些条目都可能被误解为有效的UTF-8字,因此词典不会表示预期的单词。解决问题的有利方法是将词典文件转码为UTF-8。如果这是不可能的,因为旧的HALCON版本必须使用该文件作为解决方法,可以在本机编码中输入一个不能被误解为UTF-8的条目。更多信息。
- 使用先前的HALCON版本通过serialize_tuple或deserialize_tuple进行通信时,可能无法正确传输非ASCII字符。在这种情况下,您可以将set_system的参数'write_halcon_files_encoding'或'read_halcon_files_encoding' 设置为'locale',以强制HALCON使用当前的语言环境系统编码而不是UTF-8写入或读取其文件。更多信息。
- 可能需要修改依赖于区域设置字符串编码的旧程序,以便在HALCON 18.11上返回相同的结果。更多信息。
- 如果HDevelop命令行选项-convert用于HDevelop程序导出到C或C ++程序,到现在为止的字符串常量用本地-8位编码进行编码。现在,编码这些字符串的默认值是UTF-8。通过新选项-encoding native,可以将其更改回旧行为。更多信息。
遗留或不再支持的功能
以后的主要版本可能会停止以下功能:
- 通过set_system('filename_encoding','locale')将HALCON库的字符串编码切换为当前语言环境的本地8位编码现在被宣布为遗留。
有关如何更换它们的详细信息,请参阅传统操作员的参考手册条目。
计划停止Windows的x86-win32平台版本
MVTec计划停止针对Windows的x86-win32平台版本。这可能会在2020年发生。我们建议您开始将应用程序切换到适用于Windows的x64-win64平台版本。
支持的操作系统
视窗
HALCON 18.11.0.0已针对以下Windows平台版本编译了进度:
- 适用于Windows 7/8 / 8.1 / 10或Windows Server 2008 R2 / 2012/2012 R2 / 2016的x86-win32平台版本,适用于Intel Pentium 4或带有SSE2的AMD Athlon 64
- 适用于Windows 64/8 / 8.1 / 10的x64-win64平台版本或适用于Intel 64或AMD 64处理器的Windows Server 2008 R2 / 2012/2012 R2 / 2016 x64 Edition
安装过程会检查它是在32位还是64位系统上运行,并提供可安装的平台版本列表。在安装期间,环境变量HALCONARCH设置为x86sse2-win32或x64-win64以指示已安装的平台版本。请注意,如果要切换到其他平台版本,则必须先安装它。然后,您必须调整环境变量HALCONARCH(有关更多信息,请参阅“安装指南”)。
Linux的
HALCON 18.11.0.0已针对以下Linux平台版本编译了进度:
- 适用于Intel 64或AMD 64处理器的Linux x86_64,GLIBC_2.17,GLIBCXX_3.4.15的x64平台版本
- 用于Linux armv7a的armv7a平台版本,具有hidraw支持的内核,支持NEON的Armv7-A处理器上的硬浮ABI,GLIBC_2.17,GLIBCXX_3.4.15
- 适用于Linux aarch64的aarch64平台版本,支持hidraw的内核,AArch64处理器上的GLIBC_2.17,GLIBCXX_3.4.20
有关不同应用程序二进制接口的详细系统要求,请参阅“安装指南”。
苹果系统
HALCON 18.11.0.0已针对Intel 64上的macos 10.12 / 10.13的x64平台版本编译了进度。
HALCON 18.11.0.0进展中的详细变化描述
HALCON 18.11.0.0进度的变化是针对HALCON 18.05 Progess进行描述的。有关以前HALCON版本更改的详细说明,请参见以前HALCON版本的发行说明。
HDevelop
新功能
代码导出
- 如果从命令行导出包含无效行的代码,HDevelop现在会警告用户。根据所用系统的图形功能,弹出消息框或将消息写入stdout。如果设置了选项-no_msg_box,则仅将消息写入stdout,并且HDevelop返回-1。这对于通过脚本导出命令行非常有用,脚本可以使用返回值来捕获错误的代码导出。
GUI
- “开始对话框”和“关于”对话框现在始终显示完整版本号,即使版本号的最后部分仅包含零。
- 现在,HDevelop中的变量窗口显示了仅包含单个句柄的元组句柄的语义类型。
- HDevelop现在允许使用新的Handle Inspection Window检查句柄,可以通过双击包含单个句柄的变量或使用Variable Window的上下文菜单打开它。句柄检查窗口显示句柄的属性,也可以使用该句柄类型的get-Operators获得。请注意,根据句柄类型,可以显示更多或更少的信息。单步执行程序时会自动更新窗口内容并突出显示更改。
杂
- 过时的功能'插入程序...'已从HDevelop中删除。要传输或重用代码,请使用HDevelop的复制/粘贴机制,或过程和过程库。
Bug修复
助理
- 图像采集助手不再生成close_framegrabber调用。然而,即使使用新的句柄机制,外部资源通常也需要显式关闭。因此,再次添加了呼叫。
- 在极少数情况下,运算符find_text和OCR Assistant会导致关于仍然分配的临时内存块的低级别错误。这个问题已经解决。
- OCR助手的结果可能在图形窗口中显示为已损坏。此外,将系统参数'filename_encoding'设置为'utf8'时,OCR Assistant中的字符名称无法正确显示。这些问题已得到解决。
- OCR培训文件浏览器显示不正确的非ASCII字符的样本名称。这个问题已经解决。此外,自动检测样本名称的编码(对于使用早于HALCON 18.05 Progress的HALCON版本编写的训练文件)。如果所有样本名称都是有效的UTF-8字符,则假定该文件以UTF-8编码,否则使用本地8位编码。
- 在“读取图像”对话框中更改变量名称的大小写(例如,从“MyImportantVariable”更改为“myimportantvariable”)不起作用。这个问题已经解决。
代码导出
- 使用选项-convert -no_export_of_referred_procs通过命令行导出外部过程产生的结果与通过GUI导出具有可比设置的结果不同。这个问题已经解决。
- HDevelop的库项目导出生成了一个多余的和腐败的分号,阻止了导出的代码编译。请注意,此问题已在HALCON 18.05.0.1中得到修复。
- 导出到C#的HDevelop代码如果包含从对象变量访问控制变量的向量表达式,则无法编译。这个问题已经解决。
- 在以本机编码导出为C程序或过程的HDevelop程序中,某些具有非ASCII字符的字符串未正确编码。这个问题已经解决。
- 导出到C#或VB.NET的表达式中的临时向量在某些情况下未正确处理。这个问题已经解决。
GUI
- HDevelop的功能检查窗口有时会在其x轴上显示错误的标签。这个问题已经解决。
- 功能检查窗口对话框“边界”中的Tab键顺序不直观。这个问题已经解决。
- 如果在通过程序执行更改模型时检查了3D对象模型,则HDevelop崩溃。这个问题已经解决。
- 如果多个模型与其型号ID一起显示,HDevelop的“可视化对象模型3D”小部件可能已经崩溃了HDevelop。这个问题已经解决。
- 更改显示字体后与图形窗口的交互也可以更改使用disp_text运算符创建的现有文本叠加的字体。这个问题已经解决。
- 更改set_system参数'filename_encoding' 后与图形窗口的交互可能会破坏使用disp_text运算符创建的现有非ASCII文本叠加。这个问题已经解决。
救命
- HDevelop的帮助窗口向HDevelop操作员显示括号,而常规HALCON操作员显示没有括号。这个问题已经解决。
- “导出库项目”对话框已链接到错误的帮助页面。这个问题已经解决。
IDE
- 用于选择图标数组和向量的对话框(可从上下文菜单“显示内容”>“选择....”访问)如果在打开对话框后更改了变量,则不会更新其内容。这个问题已经解决。
- 代码执行后,HDevelop的自动完成功能表明参数不正确。请注意,此问题已在HALCON 18.05.0.1中得到修复。
- 在HDevelop中交错两个块语句(例如for,while,endfor,endwhile)通常会导致语法错误。如果两个块中的一个实际上已停用(如* for,while,* endfor,endwhile),则它不得影响第二个块,因此,不会发生语法错误。然而,这发生了。这个问题已经解决。
- HDevelop使用sem_type'framegrabber'为变量打开了新的检查小部件,而不是使用已经打开的检查小部件。这个问题已经解决。
- dev_inspect_ctrl的自动完成建议的变量太少。这个问题已经解决。
- 在插入很长的程序代码行时,HDevelop可能会在极少数情况下崩溃。这个问题已经解决。
程序
- 在极少数情况下,对导入过程的调用显示为有效的代码行,尽管它们的参数太多。这个问题已经解决。
- 如果目标上存在具有匹配签名和名称的现有本地过程,则不同HDevelop实例之间的本地过程的复制和粘贴不起作用。这个问题已经解决。
- 调用非JIT编译过程的过程无法执行JIT编译,即使已停用对此类过程的调用。这个问题已经解决。
- 在极少数情况下,HDevelop在粘贴复制过程的主体时会损坏代码行。这个问题已经解决。
- 无效的代码行未显示在快捷导航窗口的选项卡“无效线”,“查找结果”,“断点”和“书签”中的实际文本。这个问题已经解决。
- 当删除过程路径时,显式打开并通过过程路径可用的库过程完全消失(尽管它们应该保持可用于编辑)。这个问题已经解决。
- HDevelop有时在加载时没有解析库程序。这个问题已经解决。
杂
- 对于特殊情况,运算符dev_set_part对set_part不一致。这个问题已经解决。剩下的差异记录在案。
- 当设置~grime_error后,当dev_get_system在JIT编译过程中抛出错误时,HDevelop可能会崩溃。这个问题已经解决。
- 运算符dev_set_window_extents不止一次调整了图形窗口的大小。这个问题已经解决。
- 在运行HDevelop脚本时绘制感兴趣的区域(例如,在while循环内)会导致问题。这个问题已经解决。现在,激活ROI工具时脚本的执行停止。
- open_socket_accept和open_socket_connect可能由于错误处理不当而导致内存损坏。这个问题已经解决。
HDevelop示例程序
新功能
- 通过为每个示例应用程序提供程序运行时,HDevelop示例程序hdevelop / explore_halcon.hdev得到了改进。
Bug修复
- HDevelop示例浏览器在“方法”>“I / O”类别中列出了太多示例。这个问题已经解决。现在,仅列出IO接口示例。
- HDevelop示例程序hdevelop / System / Parameters / query_system_parameters.hdev在未安装OpenGL的计算机上无法正常运行。这个问题已经解决。
新的HDevelop示例程序
- hdevelop / 3D-对象模型/分段/ measure_plant.hdev
- hdevelop /深学习/检测/ detect_pills_deep_learning_1_prepare.hdev
- hdevelop /深学习/检测/ detect_pills_deep_learning_2_train.hdev
- hdevelop /深学习/检测/ detect_pills_deep_learning_3_evaluate.hdev
- hdevelop /深学习/检测/ detect_pills_deep_learning_4_infer.hdev
- hdevelop /深学习/分段/ segment_pill_defects_deep_learning_1_preprocess.hdev
- hdevelop /深学习/分段/ segment_pill_defects_deep_learning_2_train.hdev
- hdevelop /深学习/分段/ segment_pill_defects_deep_learning_3_evaluate.hdev
- hdevelop /深学习/分段/ segment_pill_defects_deep_learning_4_infer.hdev
- hdevelop /图像/采集/ genicamtl_acquisition_events.hdev
- hdevelop /图像/采集/ genicamtl_devicelost_event.hdev
- hdevelop /图像/采集/ genicamtl_fileaccess.hdev
- hdevelop /图像/采集/ genicamtl_fwupdate.hdev
- hdevelop /图像/采集/ gigevision2_acquisition_events.hdev
- hdevelop /图像/采集/ gigevision2_action_control.hdev
- hdevelop /图像/采集/ gigevision2_devicelost_event.hdev
- hdevelop /图像/采集/ gigevision2_fileaccess.hdev
- hdevelop /图像/采集/ gigevision2_fwupdate.hdev
- hdevelop /图像/采集/ usb3vision_acquisition_events.hdev
- hdevelop /图像/采集/ usb3vision_fileaccess.hdev
- hdevelop /图像/采集/ usb3vision_fwupdate.hdev
- hdevelop /系统/ IO设备/赫优讯 - cifx_data_conversion.hdev
- hdevelop /系统/ IO设备/赫优讯 - cifx_read.hdev
- hdevelop /系统/ IO设备/赫优讯 - cifx_simple_diagnostic.hdev
- hdevelop /系统/ IO设备/赫优讯 - cifx_write.hdev
- hdevelop /系统/ IO设备/ opc_ua_monitor_subscription.hdev
- hdevelop /系统/多线程/ get_current_hthread_id.hdev
- hdevelop /系统/多线程/ interrupt_operator.hdev
- hdevelop /元组/数据容器/ dictionary.hdev
- hdevelop /元组/字符串的操作/ tuple_operators_using_unicode.hdev
- hdevelop /元组/字符串的操作/ tuple_ord_chr.hdev
HDevEngine
Bug修复
- 使用运算符SetHDevOperatorImpl和mem_free_intern ='true'可以使HDevEngine C ++应用程序崩溃(相当理论上)。这个问题已经解决。现在,SetHDevOperatorImpl不再支持mem_set_intern,因此,应用程序始终要删除用户定义的HDevOperatorImpl对象。请注意,此更改会影响兼容性。。
- 在HDevEngine的初始化期间,可能发生了小的内存泄漏(大约120kB)。这个问题已经解决。
- 在极少数情况下,HDevEngine线程可能在没有正确错误处理的情况下运行,因此在脚本执行期间遇到的错误可能导致应用程序崩溃,而不是引发HDevException。这个问题已经解决。
- 当本地过程引用其他本地过程时,从HDevProgram中的本地过程创建HDevProcedure实例不起作用。这个问题已经解决。
HALCON图书馆
加速
- derivate_gauss现在是稍快于支持AVX英特尔兼容处理器。特别是,可以预期以下加速:
请注意,实现的加速比略微取决于要计算的所选衍生物或特征。由于加速,以下操作员也变得稍快:图像
大小适马
没有
并行化的 加速
8线程
并行化 加速512×512 1 15% 10% 3 21% 10% 五 12% 9% 7 9% 10% 9 8% 7% 800×600 1 11% 0% 3 22% 12% 五 16% 13% 7 13% 15% 9 16% 5% 1024×768 1 8% -5% 3 18% 11% 五 22% 9% 7 17% 14% 9 18% 8% 1600×1200 1 8% 0% 3 23% 14% 五 18% 13% 7 12% 9% 9 16% 11% - 对于所有受支持的组件,derivate_vector_field的速度提高了18%
- 对于平滑'高斯',points_foerstner的速度提高了10%
- 对于 '高斯'和所有支持的图像类型,critical_points_sub_pix的速度提高了22%
- 对于'滤波器'高斯'和所有支持的图像类型,local_max_sub_pix的速度提高了25%
- 对于图像类型uint2和real ,运算符deviation_image现在更快。特别是,以下加速可以例外:
图像
大小图像
类型面膜
尺寸
没有
并行化的 加速
8线程
并行化 加速512×512 UINT2 3×3 160% 180% 9x9的 540% 450% 99x99 7000% 4250% 1600×1200 3×3 170% 65% 9x9的 525% 265% 99x99 7250% 3330% 512×512 真实 3×3 105% 40% 9x9的 365% 210% 99x99 6050% 2500% 1600×1200 3×3 100% 10% 9x9的 340% 125% 99x99 4800% 2150% - 运营商gen_gauss_pyramid,zoom_image_factor和zoom_image_size现在更快是用于在支持中的内插模式“恒定”和一个标度的0.5因子SSSE3 / AVX2当图像宽度不是整除16/32无剩余系统字节的图像。特别是,可以预期以下加速:
此外,存在一个限制,即AVX2代码仅在输入图像为32字节对齐时执行,即使图像大小可被32整除而没有余数。此限制已被删除。字节图像可以预期以下加速:操作者 图片尺寸 可用指令集 加速 zoom_image_size
zoom_image_factor700x500 SSSE3 高达65% AVX2 高达140% 1180x1000 SSSE3 高达75% AVX2 高达170% 1400×1050 SSSE3 高达75% AVX2 高达150% gen_gauss_pyramid 700x500 SSSE3 高达45% AVX2 高达105% 1180x1000 SSSE3 高达70% AVX2 高达155% 1400×1050 SSSE3 高达70% AVX2 高达155% 操作者 图片尺寸 加速 zoom_image_size
zoom_image_factor800×600 高达45% 1024×768 高达45% 1280×960 高达35% 1600×1200 高达35% gen_gauss_pyramid 800×600 高达35% 1024×768 高达30% 1280×960 高达30% 1600×1200 高达40%
新功能
计算设备
- 在基于Arm的平台上,可用的计算设备现在可以使用OpenCL。
数据代码
- ECC 200阅读器已得到改进。特别是,现在它对于受干扰的安静区域更加强大。新数据代码模型参数'candidate_selection'可用于确定用于符号检测的候选区域的选择。此外,ECC 200代码的参数'contrast_min'已被删除。以下HDevelop示例程序已相应调整:
- hdevelop /应用程序/数据代码/ ecc200_optimized_settings.hdev,
- hdevelop /识别/数据代码/ 2d_data_codes_data_access.hdev,
- hdevelop /识别/数据代码/ ecc200_contrast_tolerance.hdev,
- hdevelop / Identification / Data-Code / ecc200_print_quality_intermediate_results.hdev,and
- hdevelop / explore_halcon.hdev。
- 运算符set_data_code_2d_param已通过参数'string_encoding'扩展。它指定在符号中编码的字符串的预期编码。如有必要,将对该字符串进行转码。请注意,此更改会影响兼容性。。
深度学习
- 分类器pretrained_dl_classifier_compact.hdl已经过调整,使得网络可以用作新运算符create_dl_model_detection的主干。此外,网络的最小图像宽度和高度已从17像素变为15像素。
- HALCON已经扩展了基于深度学习的对象检测,以在图像中定位对象实例。图像中实例的位置由矩形轴平行边界框给出。添加了
新的运算符create_dl_model_detection以创建用于对象检测的深度学习模型。除了创建之外的所有其他目的,使用通用dl_model运算符集。
对象检测模型使用预训练深度学习分类器作为骨干网络。所有与HALCON一起出货的预训练分类器都可用于此目的,以适应不同难度的检测任务。
HDevelop示例系列- 例子/ hdevelop /深学习/检测/ detect_pills_deep_learning_1_prepare.hdev
- 例子/ hdevelop /深学习/检测/ detect_pills_deep_learning_2_train.hdev
- 例子/ hdevelop /深学习/检测/ detect_pills_deep_learning_3_evaluate.hdev
- 例子/ hdevelop /深学习/检测/ detect_pills_deep_learning_4_infer.hdev
为了能够使用本系列的第3部分和第4部分而不执行耗时的训练部分,预训练对象检测模型示例/ hdevelop / Deep-Learning / Detection / detect_pills.hdl,预处理参数示例/ hdevelop /深度学习/检测/detect_pills_preprocess_param.hdict,并使用评估结果示例/ hdevelop / Deep-Learning / Detection / detect_pills_deep_learning_3_evaluate_result.hdict。
HALCON操作员参考手册已经扩展了一章关于对象检测,以描述如何使用新的深度学习功能(“深度学习 - >对象检测”)。
新过程read_dl_dataset_from_coco可用于读取COCO格式的对象检测的一组注释。
请注意,此功能具有特殊的系统要求。除此之外,第三方库必须使用单独的安装程序进行安装。此安装程序还包含示例的图像和预训练模型。有关更多信息,请参阅“安装指南”。 - HALCON现在包括一个基于流行的ResNet-50架构的预训练深度学习分类器:dl / pretrained_dl_classifier_resnet50.hdl。
此分类器可用于非常复杂的分类任务,也可用作非常复杂的对象检测问题的后端。 - HALCON已经扩展了基于深度学习的语义分割模型的功能。与先前的分割方法相比,这些新的分割模型是一个很大的优势。他们会根据培训数据自动学习划分缺陷或对象。这些模型能够解决
非常复杂和简单的分割任务。
HALCON已经扩展了两个预训练的语义分割模型,可以在目录dl中找到:- pretrained_dl_segmentation_compact.hdl和
- pretrained_dl_segmentation_enhanced.hdl。
HDevelop示例系列- 例子/ hdevelop /深学习/分段/ segment_pill_defects_deep_learning_1_preprocess.hdev
- 例子/ hdevelop /深学习/分段/ segment_pill_defects_deep_learning_2_train.hdev
- 例子/ hdevelop /深学习/分段/ segment_pill_defects_deep_learning_3_evaluate.hdev
- 例子/ hdevelop /深学习/分段/ segment_pill_defects_deep_learning_4_infer.hdev
HALCON操作员参考手册已经扩展了一章语义分段,以描述如何使用新的深度学习功能(“深度学习 - >语义分割”)。
新程序read_dl_dataset_segmentation可用于读取语义分段任务中常用的注释数据。
请注意,此功能具有特殊的系统要求。除此之外,第三方库必须使用单独的安装程序进行安装。此安装程序还包含示例的图像和预训练模型。有关更多信息,请参阅“安装指南”。 - get_dl_classifier_train_result已扩展为单独查询损失函数的'mll_loss'和'regularization_loss'项。
- 操作员train_dl_classifier_batch现在支持独立于可用GPU设备内存的任意批量大小。这是通过将批次细分为较小的子片段来实现的,从子片段中迭代计算更新。可以使用set_dl_classifier_param使用'batch_size_device'设置子片的大小。
- HALCON已经扩展了用于深度学习的通用运算符集,其由基于深度学习的新功能对象检测和语义分段共享。添加了以下运算符:
- train_dl_model_batch
- apply_dl_model
- set_dl_model_param
- get_dl_model_param
- read_dl_model
- write_dl_model
- serialize_dl_model,和
- deserialize_dl_model。
- find_dl_samples
- gen_dl_samples
- gen_dl_samples_from_images
- read_dl_dataset_from_coco
- read_dl_dataset_segmentation
- read_dl_samples
- split_dl_dataset
- write_dl_samples
- dev_display_dl_data
- dev_display_dl_data_close_windows
- dev_display_dl_data_tiled
- dev_display_detection_detailed_evaluation
- dev_display_segmentation_evaluation
- calculate_dl_segmentation_class_weights
- create_dl_preprocess_param
- create_dl_preprocess_param_from_model
- gen_dl_segmentation_weight_images
- preprocess_dl_dataset
- preprocess_dl_model_images
- preprocess_dl_model_segmentations
- preprocess_dl_samples
- calculate_evaluation_measures
- create_evaluation_default_param
- evaluate_dl_model
- init_running_evaluation_measures
- update_running_evaluation_measures
- create_dl_train_param
- set_dl_model_param_based_on_preprocessing
- train_dl_model
新过程set_dl_model_param_max_gpu_batch_size可用于确定DLModel相对于可用GPU内存的最大可用批量大小。
请注意,此功能具有特殊的系统要求。其中,第三方库必须使用单独的安装程序进行安装。有关更多信息,请参阅“安装指南”。 - 已添加过程gen_interactive_confusion_matrix。它可以显示混淆矩阵,可以单击其条目,显示相应的图像。
- HALCON现在附带了cuDNN库的7.3.1版本。
- 要将HALCON的深度学习功能与NVIDIA GPU配合使用,现在要求图形驱动程序至少支持CUDA 10.0。随HALCON一起提供的cuDNN和cuBLAS库现在以CUDA 10.0为目标。
这不会影响aarch64平台,它只需要兼容CUDA 9.0的驱动程序。
文件
- 已添加运算符write_message和read_message以写入和读取消息。此外,运算符serialize_handle,serialize_tuple,deserialize_handle和deserialize_tuple现在可以分别用于序列化和反序列化消息。
过滤
- 对于字节图像,操作员deviation_image现在最快可达40%。请注意,此更改会影响兼容性。。
匹配
- 基于形状的匹配运算符(find_shape_model,find_shape_models,find_scaled_shape_model,find_scaled_shape_models,find_aniso_shape_model,find_aniso_shape_models)的可用性已得到改进。现在,运算符具有强大的可中断性,即可以在HDevelop中取消它们,可以为它们设置超时,并且可以使用新的运算符interrupt_operator从其他线程中断它们。
杂
- 添加了新的运算符get_handle_param,get_handle_tuple和get_handle_object。它们可用于检查大多数类型的句柄,这有助于在应用程序的开发和调试期间。
- 当HALCON安装到具有非ASCII字符的文件夹中,或者如果使用set_system运算符将图像或3d模型目录等全局HALCON文件夹设置为具有非ASCII字符的路径,并且之后更改了文件名编码,则文件夹名称已损坏且无法正确使用,例如,在使用read_image运算符仅传递文件名而没有完整路径打开图像时。这个问题已经解决。
- HALCON已使用新的set_system参数'disabled_operators' 进行扩展,该参数禁用指定的HALCON运算符。如果使用,那些运算符将返回H_ERR_OP_DISABLED。预期的用例是允许可自由编程的设备(通常使用HDevengine)的开发人员明确地停用可能影响设备安全性的某些HALCON运营商。
超时
- HALCON已经使用运算符get_current_hthread_id和interrupt_operator进行了扩展,这些运算符可以向从另一个线程在特定线程中运行的运算符发送中断信号。新的HDevelop示例程序hdevelop / System / Multithreading / get_current_hthread_id.hdev和hdevelop / System / Multitthreading / interrupt_operator.hdev显示了如何使用新的运算符来中断在已知线程中运行的运算符。
- 运算符get_operator_info提供了一个新参数'interrupt_mode'来查询特定运算符是否支持执行取消。
元组
- HALCON已经扩展了一个名为“dictionary”的新容器数据类型。它允许存储任意键值对,可以在恒定时间内检索。当例如将许多参数传递给过程时,这可以帮助构造程序。为此,引入了以下新运营商:
- create_dict
- write_dict
- read_dict
- remove_dict_key
- get_dict_param
- set_dict_tuple
- get_dict_tuple
- set_dict_object
- get_dict_object
- copy_dict
添加了HDevelop示例程序示例/ hdevelop / Tuple / Data-Containers / dictionary.hdev,它取代了HDevelop示例示例/ hdevelop / System / Multithreading / messages_as_dictionary.hdev。
HDevelop示例程序示例/ hdevelop / Applications / Robot_Vision / pick_and_place_with_2d_matching_moving_cam.hdev,examples / hdevelop / Applications / Robot_Vision / pick_and_place_with_2d_matching_stationary_cam.hdev,examples / hdevelop / Calibration / Hand-Eye / calibrate_hand_eye_stationary_cam_approx.hdev已经过调整以使用字典而不是字典消息。请注意,此更改会影响兼容性。。 - 当在tuple_concat中使用空元组时,返回一个混合元组。现在返回的元组具有非空元组的类型。
Bug修复
3D
- 当从“train_3d_edges”参数设置为“true”的多个线程并行调用create_surface_model时,创建的模型不正确并且可能包含无效的2D和3D边缘。这个问题已经解决。现在可以安全地从多个线程使用create_surface_model。
- 当显示无限原始形状(没有边界的圆柱体或平面)时,运算符disp_object_model_3d,render_object_model_3d,display_scene_3d和render_scene_3d可能会崩溃。这个问题已经解决。
- 操作者distance_object_model_3d,当应用'体素'方法时,有时返回不正确的距离。这个问题已经解决。请注意,先前使用运算符prepare_object_model_3d创建了“体素”索引并且写为OM3文件的3D对象模型需要重新准备以应用此修复。
- distance_object_model_3d默认情况下未使用prepare_object_model_3d中准备的信息。这个问题已经解决。
- 运算符fit_primitives_object_model_3d可以将圆柱体拟合到点云中。有时,输入点云的微小变化切换了拟合圆柱体的方向,即其姿态和轴。这个问题已经解决。现在,轴指向原点所在的半空间。
- gen_binocular_rectification_map和set_stereo_model_image_pairs在极少数情况下引发错误,因为生成的地图太大了。这个问题已经解决。现在,gen_binocular_rectification_map的参数'Method' 具有新的默认值'viewing_direction'。set_stereo_model_image_pairs默认情况下也使用此方法。set_stereo_model_param,get_stereo_model_param和create_stereo_model已使用泛型参数(GenParamName)'rectif_method'和相应的参数值(GenParamValue)'viewing_direction'或'geometric'进行了扩展。请注意,此更改会影响兼容性。。
- 如果曲面模型的中心不是原点,则调试过程过程/ general / debug_find_surface_model.hdpl显示不正确的边。另外,初始可视化姿势使得模型不可见。这些问题已得到解决。debug_find_surface_model .dhpl现在显示正确的边缘并使用正确的初始姿势。
- 运算符segment_object_model_3d在极少数情况下崩溃。这个问题已经解决。
- 对于文件格式'om3',运算符set_object_model_3d_attrib,set_object_model_3d_attrib_mod和read_object_model_3d不会针对不一致的'xyz_mappings'引发错误,例如,对于高度为零的映射,或者给定图像维度之外的像素值。由于生成的模型不一致,许多使用映射处理object_model_3d的运算符可能已崩溃。这个问题已经解决。现在,set_object_model_3d_attrib和set_object_model_3d_attrib_mod会返回以下错误:
- 3524(“图像宽度<= 0”),
- 3521(“图像宽度> MAX_FORMAT”),
- 3525(“图像高度<= 0”),
- 3523(“图像高度> MAX_FORMAT”),
- 1304(“控制参数4的错误值”)。
- triangulate_object_model_3d用方法设置为“隐式”返回上一方面为空GenParamName和GenParamValue不同的结果,并且GenParamName设置为“implicit_octree_depth”,GenParamValue设置为6,另一方面,虽然图6是“implicit_octree_depth”的缺省值。这个问题已经解决。现在,triangulate_object_model_3d在两种情况下都返回先前为空参数返回的结果。
- 当一些3D对象模型(例如边)为空时,过程debug_find_surface_model有时会抛出内部异常。这个问题已经解决。现在,可以捕获并正确报告子工具中的异常。
条码
- 如果系统的内部图像宽度和高度小于输入图像的实际大小,则find_bar_code,decode_bar_code_rectangle2和find_data_code_2d在某些情况下会返回不正确的结果。如果在与读取或创建相应图像的线程不同的线程中调用操作符,或者使用set_system更改了系统图像宽度和高度,则可能发生这种情况。这个问题已经解决。
- 操作find_bar_code在罕见的情况下崩溃时的“quiet_zone” set_bar_code_param被设置为一个高值。这个问题已经解决。
- 在某些情况下,find_bar_code在具有许多内核的计算机上明显变慢。这个问题已经解决。
- 启用静区检查时,操作员find_bar_code未正确检查静区。这个问题已经解决。
- 在EAN-8符号的情况下,get_bar_code_result可能返回了ISO / IEC 15416可解码性的错误值。这个问题已经解决。
- get_bar_code_result with quality_isoiec15416在极少数情况下,当边缘直接位于静区的末尾时,返回了不正确的调制等级。这个问题已经解决。
- 当'num_scanlines'设置为0时,运算符set_bar_code_param调整了'min_identical_scanlines'的值。此问题已得到修复。现在,'min_identical_scanlines'仅在'num_scanlines'大于0时才适用。
- 在极少数情况下,无法解码水平方向的条形码。这个问题已经解决。请注意,此更改会影响兼容性。。
- HALCON现在支持最新版本的“GS1通用规范”(2018年1月)中指定的所有GS1应用程序标识符。
校准
- 在罕见的情况下,操作员calibrate_cameras,binocular_calibration和相位校准在calibrate_hand_eye中表现不如预期,即它们返回时出现了不必要的高重投影误差。这个问题已经解决。请注意,此更改会影响兼容性。。
- create_caltab生成的校准描述文件的注释包含'width'和'height'的误导性值。此外,create_caltab的参考手册条目中的“width”和“height”的公式不正确。这些问题已得到解决。
- gen_binocular_rectification_map和set_stereo_model_image_pairs在极少数情况下引发错误,因为生成的地图太大了。这个问题已经解决。现在,gen_binocular_rectification_map的参数'Method' 具有新的默认值'viewing_direction'。set_stereo_model_image_pairs默认情况下也使用此方法。set_stereo_model_param,get_stereo_model_param和create_stereo_model已使用泛型参数(GenParamName)'rectif_method'和相应的参数值(GenParamValue)'viewing_direction'或'geometric'进行了扩展。请注意,此更改会影响兼容性。。
- get_calib_data为的ItemType设置为“相机”和数据名设置为“params_deviations”或“params_covariances”时的协方差矩阵是几乎奇异往往比必要返回直观值,尤其如此。这个问题已经解决。请注意,此更改会影响兼容性。。
分类
- 对于具有协方差类型“球形”或“诊断”的高斯混合模型,运算符classify_class_gmm和evaluate_class_gmm返回了k-sigma概率'KSigmaProb'的不正确值。这个问题已经解决。请注意,此更改会影响兼容性。。
- 当从一组多个样本中移除样本标识符训练数据时,内部数据结构可能已被破坏。这个问题已经解决。
- 在极少数情况下,支持向量机(SVM)发出错误,即使经过培训,它仍未经过培训。这个问题已经解决。
数据代码
- 如果系统的内部图像宽度和高度小于输入图像的实际大小,则find_bar_code,decode_bar_code_rectangle2和find_data_code_2d在某些情况下会返回不正确的结果。如果在与读取或创建相应图像的线程不同的线程中调用操作符,或者使用set_system更改了系统图像宽度和高度,则可能发生这种情况。这个问题已经解决。
- 在非常罕见的情况下,如果在图像边界附近找到候选者,则find_data_code_2d会因ECC 200符号而崩溃。这个问题已经解决。
- 在极少数情况下,find_data_code_2d因Aztec代码的信号11故障而崩溃。这个问题已经解决。
- 在包含应用程序标识符714的GS1代码的情况下,运算符find_data_code_2d和find_bar_code无法解码。此问题已得到修复。
- 运算符find_data_code_2d和set_distance_transform_xld_param没有为其handle参数设置'modified'标志,可以使用get_param_info查询。这个问题已经解决。
- 对于数据代码模型参数'module_gap'的无效值,find_data_code_2d在极少数情况下崩溃。这个问题已经解决。
- 对于Micro QR和Aztec代码,在某些情况下,find_data_code_2d在具有许多内核的机器上明显变慢。这个问题已经解决。
- 在极少数情况下,ECC 200代码的打印质量检查会因靠近图像边框的符号而崩溃。这个问题已经解决。
- 在某些情况下,用于ECC 200读取器的打印质量检查的可变模块网格在时钟模式失真的情况下是不准确的。这可能导致质量等级不佳。这个问题已经解决。
- 当数据字符串包含FNC1字符时,get_data_code_2d_results为Aztec代码的'symbol_identifier'返回了错误的值。这个问题已经解决。
- 在某些情况下,get_data_code_2d_results返回错误的ISOIEC 15415和AIMDPM-2006-1“打印增长”和“对比均匀度”的质量值。这个问题已经解决。
- 在Micro QR码的情况下,运算符get_data_code_2d_results为候选组的symbology_ident'和'structured_append'返回了无效值。这个问题已经解决。请注意,此更改会影响兼容性。。
- HALCON现在支持最新版本的“GS1通用规范”(2018年1月)中指定的所有GS1应用程序标识符。
深度学习
- 无法使用deserialize_handle对基于深度学习的分类器(dl_classifier)的句柄进行反序列化。这个问题已经解决。
- 深度学习增强分类器在调整大小时表现不佳。这个问题已经解决。因此,增强分类器的最小图像宽度和高度现在为47。
- 过程dev_display_dl_classifier_heatmap不适用于单通道输入图像。这个问题已经解决。现在,该过程适用于具有一个或三个通道的图像。
- 在某些情况下,train_dl_classifier_batch在内存不足星座中报告了cuDNN错误。这个问题已经解决。现在,返回指示GPU上没有可用内存的错误。
- 大型模型的序列化比将它们写入光盘要慢得多。此行为已得到改进。因此,序列化模型的内存消耗增加了25%。
特征
- 运算符proj_match_points_ransac,pro__match_points_ransac_guided,match_fundamental_matrix_ransac,match_essential_matrix_ransac和match_rel_pose_ransac在极少数情况下导致崩溃,此时“Image2”的维度比“Image1”小得多。这个问题已经解决。
文件
- 在Windows上调用具有长路径名的copy_file可能会导致临时内存管理出错。这个问题已经解决。
- 为copy_file运算符使用非常长的路径名可能会导致HALCON崩溃。这个问题已经解决。
- 对于连接对象,运算符read_image和read_region泄漏内存,为对象数组的第二个或任何后续索引返回错误5279(“检测到意外对象”)。这个问题已经解决。
- 使用非常长的文件名和'tiff'格式的write_image或write_ocv可能导致缓冲区溢出和崩溃。这个问题已经解决。
- 检查是否阻止将序列化数据写入未以二进制模式打开的文件,从而导致数据损坏。这个问题已经解决。现在,返回错误5281(“文件尚未以二进制文件格式打开”)以尝试从未以二进制模式打开的文件读取或写入序列化数据。
过滤
- 对于“真实”类型的图像,操作员deviation_image没有尽可能准确地返回结果。这个问题已经解决。
- 当过滤器大小超过类型不是“byte”的图像的图像大小时,操作员deviation_image不会引发错误。这个问题已经解决。现在,deviation_image返回错误3033(“过滤器大小超过图像大小”)。
- 操作符exhaustive_match_mg因参数'Level'的某些无效值而崩溃。这个问题已经解决。现在,如果“级别”不适合图像或模板大小,则会返回错误。
- 由于舍入因子不正确,用于为uint2图像创建高斯金字塔的C实现返回的结果略有不正确。这个问题已经解决。:如果图像被裁剪内部,即用于以下操作符只能出现该问题find_local_deformable_model,find_planar_calib_deformable_model,find_planar_uncalib_deformable_model,find_ncc_model,find_ncc_models,find_aniso_shape_model,find_aniso_shape_models,find_scaled_shape_model,find_scaled_shape_models,find_shape_model和find_shape_models。请注意,相应的SSE41实现不受此错误的影响。请注意,此更改会影响兼容性。。
- 如果'StackingOrder'设置为'blend',则运算符gen_spherical_mosaic有时会崩溃,返回无效结果或引发错误3513(“内部错误:对于num_max来说太大的和弦数”)。这些问题已得到解决。
- 如果计算设备被激活且掩码大小为3x3,则mean_image在极少数情况下崩溃。这个问题已经解决。
图像
- 启用消除锯齿功能时,运算符disp_rectangle1和disp_rectangle2可能会显示不需要的显示瑕疵。这个问题已经解决。
- dump_window_image现在支持设置系统的内部图像宽度和高度。系统的内部宽度和高度是所有HALCON图像对象的最大宽度和高度。如果随后实例化更大宽度或高度的图像,则会增加。
- 运算符read_string允许限制可以输入HALCON窗口的字符串的大小。使用set_system('filename_encoding','utf8')将HALCON库的编码切换为UTF-8后,在输入非ASCII字符时,无法完全使用传递的长度。这个问题已经解决。在UTF-8模式下,Length参数现在确定字符数而不是字节数。在传统的“区域设置”编码模式和传统的HALCON窗口中,情况并非如此。
- set_drawing_object_params在极少数情况下可能导致HDevelop冻结。对于绘制rectangle1类型的对象,set_drawing_object_params在极少数情况下可能会崩溃或引发内存错误。这个问题已经解决。
- 如果'flush'设置为'false',则运算符set_window_extents和dev_set_window_extents崩溃。这个问题已经解决。
- 如果在调用绘图操作符之前调用了HIOCancelDraw,则绘图操作符会立即中止。这个问题已经解决。
图片
- 对于'宽度'等于1的图像,操作员channels_to_image抛出HALCON错误3513(“内部错误:对于num_max来说太大的和弦数”)。此问题已得到修复。
- 如果指定了多个输入图像和多个区域参数并且数字不相等,则运算符crop_rectangle1和crop_part会引发错误。此外,如果指定了比可用线程更多的输入图像和多个区域参数集,则它们在并行使用时可能会引发错误。这个问题已经解决。
- write_image在写'jpegxr'格式时泄露了内存。这个问题已经解决。
匹配
- 运算符create_scaled_shape_model,create_aniso_shape_model和determine_shape_model_params在极少数情况下,当'ScaleMin','ScaleRMin'或'ScaleCMin'设置为较小值时,未估计'NumLevels'='auto'的合理值。create_planar_uncalib_deformable_model,create_planar_calib_deformable_model,create_local_deformable_model和determine_deformable_model_params在极少数情况下可能显示相同的行为。这个问题已经解决。请注意,此更改会影响兼容性。。
- create_shape_model,create_scaled_shape_model,create_aniso_shape_model,create_shape_model_xld,create_scaled_shape_model_xld,create_aniso_shape_model_xld,set_shape_model_metric,determine_shape_model_params,create_planar_uncalib_deformable_model,create_local_deformable_model,create_planar_calib_deformable_model,create_planar_uncalib_deformable_model_xld,create_local_deformable_model_xld,create_planar_calib_deformable_model_xld,set_planar_uncalib_deformable_model_metric,set_planar_calib_deformable_model_metric,set_local_deformable_model_metric,determine_deformable_model_params,create_component_model,create_trained_component_model,train_model_components,cluster_model_components,gen_initial_components和create_shape_model_3d在罕见的情况下返回错误3513( “内部错误:和弦太大num_max数”)。这个问题已经解决。
- 当'SubPixel'设置为'false'时,运算符find_ncc_model和find_ncc_models有时会应用不完整的子像素校正。这个问题已经解决。
- 结果find_planar_calib_deformable_model,find_planar_uncalib_deformable_model和find_local_deformable_model可能取决于与SSE2或AVX机器是否被用于计算比赛显著变化。这个问题已经解决。请注意,此更改会影响兼容性。。
- 当SSE2实现与度量“ignore_local_polarity”结合使用时,运算符find_planar_calib_deformable_model,find_planar_uncalib_deformable_model和find_local_deformable_model返回错误甚至没有字节图像的结果。这个问题已经解决。
- 在使用AVX优化实现时,运算符find_planar_calib_deformable_model,find_planar_uncalib_deformable_model和find_local_deformable_model有时返回错误,甚至没有结果指标'ignore_color_polarity'。这个问题已经解决。
- find_planar_calib_deformable_model和find_planar_uncalib_deformable_model未针对度量“ignore_part_polarity”调用正确的SIMD实现,即,此度量标准未提高运算符的速度。这个问题已经解决。请注意,此更改会影响兼容性。。
- 在使用SIMD实现时,运算符find_planar_calib_deformable_model,find_planar_uncalib_deformable_model和find_local_deformable_model有时返回错误甚至没有结果。这些问题已得到解决。请注意,此更改会影响兼容性。。
测量
- 运算符get_metrology_object_result和get_metrology_object_result_contour假设参数'Instance'的整数默认类型,但默认值为'all'。这个问题已经解决。现在,参数'Instance'的默认类型是'string'。此外,为了保持一致性,参数'Index'的默认值已在get_metrology_object_fuzzy_param,get_metrology_object_result,get_metrology_object_result_contour和get_metrology_object_model_contour中更改。请注意,此更改会影响兼容性。。
记忆
- get_system('temp_mem')返回的最后一个运算符使用的临时内存不准确。这个问题已经解决。
杂
- 如果为参数'String','Row'或'Column'传递了句柄,则运算符disp_text和dev_disp_text崩溃。这个问题已经解决。
- 在多线程环境中为区域剪切目的设置参数'width'或'height'可能导致图像生成操作符对这些参数值的不可预测的自动更新行为。这个问题已经解决。
- 尝试检索操作员为空的插槽时,运算符get_operator_info可能会泄漏内存。这个问题已经解决。
- 运算符line_position在计算其输出之前将其输入转换为整数值。这个问题已经解决。现在,操作员可以正确处理浮点输入值。
- 如果找不到帮助文件,运算符optimize_aop崩溃。这个问题已经解决。现在,optimize_aop将报告错误。
- 与文档相反,对于不同的通用比例和偏移参数,运算符set_sheet_of_light_param不接受'um'作为' micron '的替代。这个问题已经解决。此外,操作员read_object_model_3d现在也接受参数'Scale'的'um'。
- 对set_system或HAccessGlVar 使用过长的参数可能导致缓冲区溢出。这个问题已经解决。现在,将引发HALCON错误5141(“字符串太长或太高”)。
- 对于某些错误代码,未返回错误消息。这个问题已经解决。
- 在极少数情况下,HALCON在内存不足时可能会死锁。这个问题已经解决。
形态学
- 对于大于10000的矩形尺寸,操作符opening_rectangle1和closing_rectangle1返回错误。此限制已被删除。
OCR
- 在极少数情况下,find_text导致高度纹理化图像的堆栈溢出。对于“手动”模式的文本模型以及创建了大量候选区域的参数设置,出现了问题。这个问题已经解决。
- 在极少数情况下,运算符find_text和OCR Assistant会导致关于仍然分配的临时内存块的低级别错误。这个问题已经解决。
- 当没有值或仅将整数或浮点值传递给参数'ResultName'时,运算符get_text_object崩溃。这个问题已经解决。请注意,此更改会影响兼容性。。
- 当以UTF-8编码创建词典文件并且文件以Unicode标记开始时(某些编辑器如Windows Notepad会自动添加它),相应的HALCON运算符import_lexicon和do_ocr_word_ 无法正确读取词典文件的第一个条目*。这个问题已经解决。
并行
- 如果系统的内部图像宽度和高度小于输入图像的实际大小,则find_bar_code,decode_bar_code_rectangle2和find_data_code_2d在某些情况下会返回不正确的结果。如果在与读取或创建相应图像的线程不同的线程中调用操作符,或者使用set_system更改了系统图像宽度和高度,则可能发生这种情况。这个问题已经解决。
区域
- 运算符expand_region,expand_gray和expand_gray_ref返回错误3510(“自动扩展时超过最大运行长度数”)或者如果输入区域的数量大于32767则崩溃。此问题已得到修复。
- gen_circle_sector,gen_ellipse_sector,create_drawing_object_circle_sector和create_drawing_object_ellipse_sector有时,对于相同的半径,分别不生成与gen_circle,gen_ellipse,create_drawing_object_circle和create_drawing_object_ellipse相同的弧。另外,对于相同半径但不同角度范围,它们有时在重叠角度范围内不产生相同的弧。此外,gen_circle_sector和create_drawing_object_circle_sector有时,对于相同的角度范围但不同的半径,在较小的半径范围内不会产生相同的扇区。这些问题已得到解决。请注意,此更改会影响兼容性。。
- region_features为某些要素返回空对象而不是空区域('struct_factor','row2','col2','width','height'和'ratio')。这个问题已经解决。
- 对于某些特征,select_shape返回一个空对象而不是空区域('struct_factor','row2','col2','width','height'和'ratio')。这个问题已经解决。
分割
- 对于具有恒定灰度值的“真实”类型的图像,auto_threshold崩溃。这个问题已经解决。
系统
- 如果未在Linux系统上设置DISPLAY环境变量,或者未在macOS系统上的图形会话中运行,则为参数'opengl_info' 调用get_system会返回错误。这个问题已经解决。现在,get_system将在两种情况下都返回“不包含OpenGL支持”。
元组
- tuple_sem_type和tuple_sem_type_elem报告的某些句柄的语义类型与使用这些句柄的运算符参数中定义的语义类型不一致。这个问题已经解决。特别是,现在始终使用以下语义类型:
- 'surface_matching_result'(之前也是'surface_result')
- 'deformable_surface_matching_result'(之前也是'surface_result_deformable')
- 'sheet_of_light_model'(之前也是'sheet_of_light')
- 'dl_classifier_train_result'(之前也是'dl_classifier_training_result')
- 运算符tuple_str_first_n和tuple_str_last_n的错误代码是错误的。当Position参数小于0或大于字符串长度时,这些运算符返回错误1301(“控制参数1的错误值”)。这个问题已经解决。现在,在位置参数无效的情况下,这些运算符返回错误1302(“控制参数2的错误值”)。
XLD
- 在极少数情况下,如果\ NoOpRef {{ 交点 ]}也是轮廓点,则intersection_line_contour_xld和intersection_segment_contour_xld错过了一个交点。这个问题已经解决。
字符串编码
HALCON的字符串编码现在基于UTF-8。已做出以下调整:
- 处理正则表达式的HALCON运算符,即tuple_regexp_match,tuple_regexp_replace,tuple_regexp_select和tuple_regexp_test以及OCR运算符do_ocr_word_cnn,do_ocr_word_knn,do_ocr_word_mlp和do_ocr_word_svm现在能够匹配任意Unicode字符,如德语变音符号和日语字符。这包括正确的字符计数以及字符类的正确解释,如空格(\ s),字母或数字(\ w),大写和小写字母([:lower:],[:upper:],选项'ignore_case')和字边界。另外,在tuple_regexp_replace中使用'^'(字符串的开头)和'replace_all'选项的正则表达式的问题已得到修复。
- HALCON / C接口已得到改进,支持在使用HALCON的C应用程序中使用已定义的编码处理字符串。HALCON / C接口使用的默认编码现在是UTF-8。对于使用具有区域设置编码的字符串的应用程序,可以通过在程序开头调用函数SetHcInterfaceStringEncodingIsUtf8(false)来更改接口。此外,HALCON / C接口现在提供了在使用Htuple时,使用定义的编码传递和接收字符串的功能,独立于全局接口编码。在Windows下,它还包括用于传递和接收宽字符串(wchar_t *)的函数。请注意,此更改会影响兼容性。。
- HALCON / C ++接口已得到改进,可简化HALCON与Unicode识别C ++应用程序的集成。HTuple和HString中的字符指针以及HALCON运算符返回的字符串都以UTF-8编码,并在必要时将其转码为HALCON库的内部字符串编码。此外,在Windows下添加了对宽字符的支持。现在可以使用wchar_t * -string初始化HTuple,HTupleElement和HString。除宽字符串之外的运算符作为输入。HString已由HString :: TextW()和HString :: LengthW()扩展,提供对字符串及其长度的宽字符表示的访问。定义UNICODE时,HString :: Text()和HString :: Length()将引用这些宽字符变体,否则引用HString :: TextA()和HString :: LengthA(),接口编码中的字符变体。内部的宽字符串被转码为接口编码。对于使用带语言环境编码的字符串的应用程序,可以通过在程序开头调用HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false)将HALCON / C ++接口编码切换为语言环境字符串编码。对于每个HALCON操作符调用,HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。内部的宽字符串被转码为接口编码。对于使用带语言环境编码的字符串的应用程序,可以通过在程序开头调用HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false)将HALCON / C ++接口编码切换为语言环境字符串编码。对于每个HALCON操作符调用,HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。内部的宽字符串被转码为接口编码。对于使用带语言环境编码的字符串的应用程序,可以通过在程序开头调用HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false)将HALCON / C ++接口编码切换为语言环境字符串编码。对于每个HALCON操作符调用,HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。可以通过在程序开头调用HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false)将HALCON / C ++接口编码切换为语言环境字符串编码。对于每个HALCON操作符调用,HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。可以通过在程序开头调用HalconCpp :: SetHcppInterfaceStringEncodingIsUtf8(false)将HALCON / C ++接口编码切换为语言环境字符串编码。对于每个HALCON操作符调用,HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。HALCON / C ++接口将所有字符串转码为HALCON内部编码(默认为UTF-8)。为了简化与其他C ++代码的兼容性,HString类已通过HString :: FromUtf8,HString :: ToUtf8,HString :: FromLocal8Bit和HString :: ToLocal8Bit方法进行扩展,以独立于HALCON / C ++接口编码转换字符串。请注意,此更改会影响兼容性。。
- 运算符tuple_split,tuple_str_bit_select,tuple_str_first_n,tuple_str_last_n,tuple_strchr,tuple_strlen,tuple_strrchr,tuple_strrstr,tuple_strstr和tuple_substr现在支持Unicode代码点。所有位置都引用Unicode代码点。Unicode代码点可能包含UTF-8字符串中的多个字节。如果位置应该引用原始字节,则可以使用线程特定设置set_system('tsp_tuple_string_operator_mode','byte')将这些运算符切换到字节模式。请注意,此更改会影响兼容性。。
- HDevelop已经过调整,以支持HALCON中新的UTF-8处理。
由于HALCON库的行为已更改,因此某些更改的行为是隐式的。特别是'filename_encoding'的默认设置现在是'utf8',HDevelop语言中的字符串操作继承了改进的HALCON运算符的UTF-8感知行为。例如,表达式s {i}现在将正确地返回位置i处的字符,而不是先前编码表示的字节i。同样,ord和chr函数将在字符串表示和Unicode代码点之间进行转换。对于纯ASCII字符串,行为是向后兼容的。此外,对于旧版本,仍可以恢复为“区域设置”设置。
此外,已修复OCR助手中的字处理功能,以正确处理非ASCII文本的更正。 - 运算符tuple_ord,tuple_ords,tuple_chr和tuple_chrt已得到改进。在较旧的HALCON版本中,这些运算符基于字符和字符串的字节表示。这伴随着以下缺点:首先,操作的结果取决于当前编码('locale'与'utf8')和系统(Windows,Linux,macOS X),其次,运算符tuple_ord和tuple_chr无法使用多字节字符调用。这些限制已经解决:当HALCON库使用的编码是UTF-8(现在是默认值)时,这些运算符基于Unicode字符并返回或接受Unicode代码点。这允许在亚洲字母或德语变音符号上调用tuple_ord并在所有系统上获得相同的结果。如果需要UTF-8字符串的实际字节表示,则可以使用新的set_system更改行为选项'tuple_string_operator_mode',可以设置为'byte'。当HALCON库编码设置为传统模式“locale”时,运算符的行为与较旧的HALCON版本相同。有一个新的示例程序hdevelop / Tuple / String-Operations / tuple_ord_chr.hdev。它演示了使用任意Unicode代码点的这些运算符的用法。请注意,此更改会影响兼容性。。
- HDevEngine已经适应了HALCON中字符串编码的改进处理。对于HDevEngine / C ++,const char *参数的预期编码现在是明确指定的HALCON / C ++接口编码(默认为UTF-8)。这在创建或访问HTuple实例时也成立,例如,用于将参数传递给过程。此外,具有表示路径或文件名的const char *参数的成员已在Windows下使用const wchar_t *签名变体进行了扩展。那些人总是接受UNICODE应用程序的标准UTF-16编码。对于HDevEngine / .NET,此更改对用户是透明的,一切都将像以前一样工作。HDevProcedure.ShortDescription中的问题已修复,此属性现在也将在简短描述中正确表示非ASCII字符。。
- 运算符open_file现在支持设置字符串编码。支持三种模式:'utf8_encoding','locale_encoding'和'ignore_encoding'。如果未明确将编码设置为忽略,则读取或写入文本文件的所有运算符(fread_char,fread_line,fread_string和fwrite_string)将使用字符串编码。这些运算符现在能够处理多字节字符以及特殊的编码相关字符,如Unicode空格和换行符。此外,如果编码不同,现在字符串在HALCON库的内部编码和文件编码之间正确转码。请注意,此更改会影响兼容性。。
- 运算符send_tuple,receive_tuple,send_data和receive_data现在默认使用UTF-8来编码字符串。请注意,此更改会影响兼容性。。
- 词典文件可用于提供预定义的单词集,例如,用于与OCR运算符一起查找它们。从现在开始,如果这些词典文件包含非ASCII字符,则必须以UTF-8编码。仍然支持使用本地8位编码编码的非ASCII字符的旧词典文件,并且将自动检测并转换为UTF-8,只要它们不包含偶然都是有效的字符串UTF -8。
运营商suggest_lexicon可用于建议任意单词,即可以通过对输入单词应用最少数量的编辑操作来获得词典的输入。到目前为止,此操作依赖于编码,因为它计算了要更改的字节数。从现在开始,它基于实际角色,因此结果将更好地满足一个人的期望。
请注意,此更改会影响兼容性。。 - 从现在开始,HALCON虚拟图像采集(即文件)接口使用的序列文件必须以UTF-8编码。旧的序列文件仍使用本地8位编码并且不会意外地产生有效的UTF-8字符串,并且将自动被检测到。
- 运算符serialize_tuple和deserialize_tuple现在默认使用UTF-8来编码字符串。请注意,此更改会影响兼容性。。
- 用于在HALCON库中表示具有非ASCII字符的字符串的默认编码已更改为UTF-8。这允许在独立于系统和当前区域设置的所有系统上以独特方式表示任意字符。仍然支持区域设置编码作为运行旧程序的传统模式。此模式可以通过set_system('filename_encoding','locale')或通过将环境变量HALCON_ENCODING设置为LOCALE来实现。使用HALCON / C或HALCON / C ++接口调用HALCON运算符的应用程序也可以独立于HALCON编码设置接口的编码。请注意,此更改会影响兼容性。。
- 希望通过'HALCON扩展包接口'通过自己的运算符集扩展HALCON的程序员必须尊重用于定义运算符和描述其功能的def文件,从现在开始应该是UTF-8编码的对于所有支持的语言,不仅像以前一样对日语。请注意,此更改会影响兼容性。。
- 对于经由HDevelop命令行选项导出到编程语言C,C ++,C#,或VisualBasic中.NET之一HDevelop方案-convert,在输出源文件的字符串常量的默认编码变更为UTF-8。这可以通过新命令行选项-encoding native设置回语言环境编码,该选项只能与-convert一起使用选项。为了避免某些C和C ++编译器出现问题,在导出的C和C ++文件中,字符串常量中的非ASCII字符由八进制代码序列表示。此外,当HDevelop程序以本机(语言环境)编码导出到C或C ++程序时,HALCON / C或C ++接口编码在生成的程序开始时相应地设置。请注意,此更改会影响兼容性。。
程序
功能
- 过程inspect_object_model_3d和操作员create_shape_model_3d的可用性已得到改进。现在,提到模型的坐标系可能与CAD原点不同。
- 传递空3D对象模型以进行可视化时,过程visualize_object_model_3d不再引发异常。
- HALCON中的标准过程在不同的库中包含了两次过程determine_optimum_pose_distance。这个问题已经解决。删除了副本,现在该过程仅存在于visualize_object_model_3d .hdpl 库中。
Bug修复
- list_image_files的过程引用条目提到了环境变量的错误路径。这个问题已经解决。
- 过程disp_object_model_no_opengl,color_string_to_rgb,disp_object_model_3d_safe,disp_text_button,gen_arrow_object_model_3d,get_object_models_center和tuple_vector_cross_product作为公共和私有过程提供。这个问题已经解决。现在,它们仅作为公共程序提供。
HALCON / C
Bug修复
- 在传统句柄模式中,以下运算符返回元组HANDLE_PAR而不是转换后的LONG_PAR元组:tuple_union,tuple_intersection,tuple_difference,tuple_symmdiff,tuple_uniq,tuple_inverse,tuple_concat,tuple_select_range,tuple_last_n,tuple_first_n,tuple_insert,tuple_replace,tuple_remove,tuple_select_mask,tuple_select,tuple_gen_sequence和tuple_gen_const。请注意,在HDevelop和HDevEngine中,只有这些运算符的内联函数版本受到影响。这个问题已经解决。
HALCON / C ++
Bug修复
- 向量移除函数的行为已在语言接口C#和C ++中更改。使用大于元组大小的索引进行删除会导致错误。这个问题已经解决。
HALCON / .NET
功能
- HSmartWindowControlWPF已扩展为完全支持数据绑定。为此,已在HSmartWindowControl中添加了其他属性以设置绘图选项。此外,HIconicDispayObjectWPF和HMessageDisplayObjectWPF对象可以作为项添加到HSmartWindowControlWPF。这些新对象还支持数据绑定。
- 在一些常见情况下,使用HALCON / .NET语言接口时tuple_concat的性能得到了改进。
Bug修复
- 单个类型的元组有时会转换为混合元组,从而导致tuple_is_string和tuple_is_int运算符产生意外结果。这个问题已经解决。
- 向量移除函数的行为已在语言接口C#和C ++中更改。使用大于元组大小的索引进行删除会导致错误。这个问题已经解决。
- 如果在调用绘图操作符之前调用了HIOCancelDraw,则绘图操作符会立即中止。这个问题已经解决。
- 导出到C#的HDevelop代码如果包含从对象变量访问控制变量的向量表达式,则无法编译。这个问题已经解决。
- 创建内部HALCON窗口时,HSmartWindowControl将覆盖属性HImagePart。这个问题已经解决。
语言界面示例程序
Bug修复
- 在使用HDevEngine的头文件HDevEngineCpp.h中,两条注释都标有TODO。这个问题已经解决。
- 使用句柄时,C#DrawingObjectsWPF示例无法正常工作。这个问题已经解决。
- 运算符set_drawing_object_params仅接受泛型参数'line_width'的整数值。这个问题已经解决。现在,也接受浮点数。在这种情况下,数字四舍五入到最接近的整数。
HALCON变量检查
Bug修复
- 在某些情况下,在HALCON Vaiable Inspect Visual Studio扩展中读取内存失败。这个问题已经解决。
扩展包
Bug修复
- 以前的消息只允许某些字符串作为键。这一限制已被取消。消息现在允许整数和任意字符串作为键。
图像采集接口
有关新界面修订和新支持的图像采集设备的最新信息可以在MVTec的Web服务器上找到。有关改进,错误修正或是否需要新版本的相应设备驱动程序的信息,请参阅各个图像采集界面文档中的发行说明。
新的图像采集接口
- USB3Vision图像采集接口现在也可用于基于Arm的平台。
杂
- 扩展了GenICamTL,GigEVision2和USB3Vision接口中事件的处理。现在可以为DeviceLost等GenICam事件注册消息队列。此外,订阅具有OPC_UA接口的节点现在支持注册在节点值更改时接收通知的消息队列。
- GenApi已更新至3.1.0版,这是GenICamTL,GigEVision2和USB3Vision图像采集接口所必需的。
- 使用相同的图像采集接口打开和关闭多个帧采集器可能导致崩溃。这个问题已经解决。
- 运算符open_framegrabber使用长度超过1024个字符的字符串作为输入控制数据崩溃。这个问题已经解决。现在,返回错误。
- 当收集HALCON虚拟文件接口的图像的序列文件是以UTF-8编码创建的时,文件以Unicode标记开始(某些编辑器如Windows Notepad自动添加),序列文件的第一个条目不能由操作员grab_image正确读取。这个问题已经解决。
- 在用于创建图像采集接口(%HALCONEXAMPLES%\ ia_integration)的模板中,在调用'HNewImage'之前,通过'HWriteSysComInfo'修改了'HGInitNewImage'的值。如果发生故障,其值并不总是正确恢复。这个问题已经解决。此外,'HReadSysComInfo'的第三个参数是* HINT类型,而不是预期的类型* HBOOL。这可能导致可能访问未初始化的内存。这个问题已经解决。
图像采集示例程序
- 以下HDevelop示例程序使用旧句柄名称,显示设置或采集接口:
- hdevelop /识别/数据代码/ calibration_aimdpm_1_2006.hdev,
- hdevelop /识别/数据代码/ print_quality_aimdpm_1_2006.hdev,
- hdevelop / Matching / Component-Based / cbm_param_visual.hdev,and
- hdevelop /匹配/基于组件/ cbm_sbm.hdev。
- 以下图像采集示例程序已重命名,因此名称与其他示例一致:
- genicamtl_gocator_objectmodel3d.hdev - > genicamtl_lmi_gocator_objectmodel3d.hdev
- genicamtl_areascan3d_objectmodel3d.hdev - > genicamtl_vrmagic_areascan3d_objectmodel3d.hdev
- gigevision2_atc4_objectmodel3d.hdev - > gigevision2_automation_technology_c4_objectmodel3d.hdev
数字I / O接口
有关新接口修订和新支持的数字I / O接口的最新信息可以在MVTec的Web服务器上找到。有关改进,错误修正或是否需要新版本的相应设备驱动程序的信息,请参阅各个数字I / O接口文档中的发行说明。
新的数字I / O接口
- OPC_UA接口现在也可用于基于Arm的平台armv7a和aarch64。
- HALCON现在提供新的Hilscher-cifX接口,它与使用Hilscher通信芯片的硬件相结合,支持与PLC的通信。特别是,当使用这个新接口时,您现在可以通过实时以太网和现场总线协议直接从HALCON与PLC通信。
杂
- 扩展了GenICamTL,GigEVision2和USB3Vision接口中事件的处理。现在可以为DeviceLost等GenICam事件注册消息队列。此外,订阅具有OPC_UA接口的节点现在支持注册在节点值更改时接收通知的消息队列。
- 在最后一个使用它的设备关闭后,HALCON没有卸载I / O接口。这个问题已经解决。
- 对于任何数字I / O接口,运算符get_io_channel_param始终返回参数GenParamValue的空元组。请注意,此问题已在HALCON 18.05.0.1中得到修复。
- 打开I / O设备会泄漏少量内存。这个问题已经解决。
- OPC_Classic接口不再是标准HALCON安装的一部分。但是,它仍然可以下载。
HALCON for Embedded Vision
功能
- HALCON现在也可用于基于64位Arm的平台。即,Linux安装程序,可以像往常一样从MVTec网站下载,已经扩展了选项,可以额外安装64位基于Arm的平台所需的组件。这些组件包括:
- HALCON库包括HDevEngine,
- C ++和HDevEngine的两个示例程序,
- 图像采集接口(Video4Linux2,File,GenICamTL,GigEVision,USB3Vision),
- I / O接口OPC_UA和
- 用于在64位基于Arm的平台上安装运行时文件的tar文件。
- 在基于Arm的平台上,可用的计算设备现在可以使用OpenCL。
文档
程序员手册
- 扩展包程序员手册现在包含有关如何在元组中使用HANDLE_PAR数据类型的说明。
- 在程序员指南中,第5.2.5节“元组模式”,在第二个代码块中,“ToString()”丢失了。这个问题已经解决。
- 程序员指南没有明确提到异常情况下的程序调用清理。这个问题已经解决。
参考手册
- binary_threshold的参考手册条目错误地将“真实”列为输入图像的图像类型的可能值。这个问题已经解决。
- 对于create_surface_model和find_surface_model,参考手册没有提到当启用'train_3d_edges'时,法向量需要指向内部。这个问题已经解决。
- do_ocr_word_cnn,do_ocr_word_knn,do_ocr_word_mlp和do_ocr_word_svm的参考手册条目已被扩展。他们现在描述如何计算得分参数。
- 运算符draw_nurbs,draw_nurbs_mod,draw_nurbs_interp,draw_nurbs_interp_mod,drag_region1,drag_region2和drag_region3在HDevelop图形窗口中不起作用。操作员参考中的相应警告消息已相应更新。
- 未记录运算符find_surface_model和find_surface_model_image的通用参数'pose_ref_dist_threshold_edges_rel','pose_ref_dist_threshold_edges_abs','pose_ref_scoring_dist_edges_rel'和'pose_ref_scoring_dist_edges_abs' 。这个问题已经解决。请注意,支持边缘支持的基于表面的匹配的早期版本的HALCON也支持这些参数,即使没有记录。
- 在参考手册的“校准/校准对象”一章中,参数“CalPlateDescr”的建议校准板列表已过时。这个问题已经解决。
- 在参考手册中,没有记录参数'MinContrast'在创建基于形状,基于组件或可变形匹配的模型时影响参数'对比'的自动对比度估计。这个问题已经解决。
- Wiener过滤器的旧版状态已从参考手册中删除。
- 相机姿势的描述已得到改进。现在,对于常用操作符的姿势参数,提到了转换的方向。
- gen_image1,gen_image1_extern,gen_image1_rect,gen_image3,gen_image3_extern和gen_image_interleaved的参考手册条目现在包含一条警告,指出无效指针值可能会发生崩溃。
- get_bar_code_result的参考手册条目未提及质量等级“-1”。此外,get_bar_code_object的参考手册条目包含误导性陈述。这些问题已得到解决。
- 参数'quality_isoiec15416_values'(get_bar_code_result)的文档将'N / A'表示为'整体质量','整体质量线性'和'整体质量综合'的值,尽管返回浮动等级。这个问题已得到解决。
- get_contour_attrib_xld和get_contour_global_attrib_xld的参考手册条目已得到改进,以更好地描述可能的轮廓参数集。
- get_data_code_2d_results的运算符引用与参数'mirrored'和'structured_append'不一致。这个问题已经解决。
- 运算符get_object_model_3d_params的文档已得到改进。现在,记录了扩展参数的'extended_attribute_types'选项。
- get_support_vector_class_svm的参考手册条目包含有关参数'IndexSupportVectors'的误导性短语。这个问题已经解决。
- get_support_vector_class_svm的参考手册条目错误地声明允许数组作为参数'IndexSupportVector'的输入。这个问题已经解决。
- 对于运算符open_socket_accept,未记录GenericParameter选项'reuseaddr'。这个问题已经解决。
- send_data的参考手册条目提到了零而不是NULL-Bytes。这个问题已经解决。
- 操作员set_bar_code_param的文档是过度简化的,这导致了关于删除校验字符的结果值的错误描述。这个问题已经解决。
- set_fuzzy_measure的参考手册条目中的示例片段转换了一个函数,然后使用原始函数而不是转换后的函数。这个问题已经解决。
- vector_to_pose的参考手册条目已得到改进。特别是,已经参考了这些方法的实现所基于的出版物进行了扩展。
- 相机校准/多视图章节的介绍已经扩展,有关不同摄像机设置的校准过程的更详细说明。
- 对于多个运算符,已经更精确地指定了语义类型定义。
- 参考手册中有几个操作员缺少警告或注意阻塞。这个问题已经解决。
发布文件
- 在文档中,“第三方版权”现在包含有关所用第三方库版本的信息。
解决方案指南
- Image Acquisition的解决方案指南仍然将OpenNI接口列为支持的接口,尽管支持以HALCON 13.0结束。这个问题已经解决。
- 在3D Vision的解决方案指南中,倾斜镜头的多项式模型的方程是错误的。这个问题已经解决。
用户指南
- 用户手册中的一些示例路径引用%HALCONROOT%而不是%HALCONEXAMPLES%。这个问题已经解决。
- 在HDevelop用户指南的PDF版本中,程序员指南的链接不起作用。这个问题已经解决。
- HDevelop用户指南错误地指出,在帮助窗口中,可以使用Return键在外部查看器中打开PDF。这个问题已经解决。
- “HDevelop用户指南”中的表8.6在pdf文件中被编号错误。这个问题已经解决。
安装
- 深度学习分类器已从主安装程序移至单独的安装程序(Windows)/ tarball(Linux)以进行深度学习。有关详细信息,请参阅“安装指南”
- 在Linux下,不再需要手动安装cuBLAS和cuDNN库。这些包含在Linux tarball中,用于深度学习。
- 已从Windows“开始”菜单中删除指向HALCON卸载程序的链接。
许可
- 在没有连接任何HID设备的macOS系统上,HALCON会在初始化期间崩溃。此问题已得到修复。
- HALCON已经使用运算符get_system_info进行了扩展,该运算符可用于查询get_system支持的参数子集,而无需有效的HALCON许可证。请注意,此更改会影响兼容性。。
杂
- 由tuple_sem_type返回的背景估计器的语义类型已从“bg_esti”更改为“bg_estimation”。
- 添加了HDevelop示例hdevelop / 3D-Object-Model / Segmentation / measure_plant.hdev。通过这个例子,我们演示了如何分割和测量工厂的不同部分。