python调用halcon程序/.hdev文件/直接调用halcon引擎

本文详细介绍了使用Python调用Halcon的两种方法,包括通过pip安装库直接调用和通过Python调用.hdev程序。作者分享了安装步骤、示例代码,并提供了一个简单的Halcon程序调用实例,帮助读者理解并实践Python与Halcon的集成。

一、前言

python有两种调用halcon的方法

1、安装halcon的python库,pip install mvtec-halcon==20111

然后python代码中主要调用方式为:通过ha来调用halcon中的各种算子,本人不是很喜欢这种方式,后面主要介绍第2种方法。

import halcon as ha

if __name__ == '__main__':
    img = ha.read_image('pcb')

    region = ha.threshold(img, 0, 122)
    num_regions = ha.count_obj(ha.connection(region))

    print(f'Number of Regions: {num_regions}')

2、python是可以直接调用halcon的.hdev程序的。

开始的时候从网上找了很多代码,不过都写的很复杂,而且加入了很多python的库,各种python的库的安装也比较头痛,后来发现halcon提供了参考代码,在下图的位置

 本人也写了一个简单的例子供大家参考,简单说一下步骤

步骤1:安装halcon的库,主要用于向halcon程序输入参数用,通过pip安装即可:pip install mvtec-halcon==20111

步骤2:写halcon程序,需要将halcon的程序封装到一个方法里面,方便调用,和C#引擎直接halcon程序的方法类似。

步骤3:写python代码,输入和接收halcon的参数

halcon程序,halcon程序的名称为:test_halcon.hdev,后面的python程序会用到

dev_update_window ('off')
*合格
*read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面1007895p0')
*不合格
*read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面100789p1')
*read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面100789p2')
read_image (Image, 'D:/2022/1218test/数据/测试/1218侧面1007859p3')

dev_close_window ()

get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width/2, Height/2, WindowHandle)
set_display_font (WindowHandle, 18, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (1)
dev_display(Image)

*合格位置
jiance_wangge (Image, ErrorRegions2, NumErrors)

if (NumErrors > 0)
    disp_message (WindowHandle, 'Mesh not OK', 'window', 24, 12, 'red', 'true')
else
    disp_message (WindowHandle, 'Mesh OK', 'window', 24, 12, 'black', 'true')
endif

jiance_wangge封装的算子

jiance_wangge代码

gen_rectangle1 (ROI_0, 476.5, 624.5, 596.5, 1048.5)
*gen_rectangle1 (ROI_0, 696.5, 636.5, 844.5, 1044.5)

reduce_domain (Image, ROI_0, ImageReduced)
*read_image (Image, 'plastic_mesh/plastic_mesh_')
mean_image (ImageReduced, ImageMean, 49, 49)
*dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 15, 'dark')
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 15, 'light')
connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, ErrorRegions2, 'area', 'and', 200, 99999)
count_obj (ErrorRegions2, NumErrors)
dev_display (Image)
dev_set_color ('red')


return ()

 python调用halcon程序代码

import os
import halcon as ha
import halcon_IO as hal_IO
# from matplotlib import pyplot as plt
if __name__ == "__main__":
    #hdev_example_dir = hal_IO.setup_hdev_engine()
    #program = ha.HDevProgram(
    #    os.path.join(hdev_example_dir, 'hdevelop', 'wangge_halcon.hdev')
    #)
    program = ha.HDevProgram('test_halcon.hdev')
    proc = ha.HDevProcedure.load_local(program, 'jiance_wangge')
    proc_call = ha.HDevProcedureCall(proc)
    #acq_handle = hal_IO.init_acq_handle(program)
    for _ in range(3):
        #acq_img = ha.grab_image(acq_handle)
        acq_img=ha.read_image('D:/2022/1218test/数据/测试/1218侧面100789p3')
        width, height = ha.get_image_size_s(acq_img)
        window = hal_IO.open_window(width/2, height/2, row=100, col=100)
        ha.disp_obj(acq_img, window)
        #传入图像参数Image
        proc_call.set_input_iconic_param_by_name('Image', acq_img)
        proc_call.execute()
        #将halcon的输出参数传回来
        fin_region = proc_call.get_output_iconic_param_by_name('ErrorRegions2')
        fin_area = proc_call.get_output_control_param_by_name('NumErrors')
        hal_IO.display_fin(window, fin_region, fin_area)
        input('Press Enter to continue...')
        zoom_window = hal_IO.zoom_in_on_fin(acq_img, fin_region)
        input('Press Enter to continue...')

上面的程序段用到了halcon_IO,主要是用于打开显示窗口,用于显示图像和region等数据

import os
import halcon as ha

def open_window(width, height, row, col):
    """打开窗口"""
    if os.name == 'nt':
        ha.set_system('use_window_thread', 'true')

    return ha.open_window(
        row=row,
        column=col,
        width=width,
        height=height,
        father_window=0,
        mode='visible',
        machine=''
    )


def setup_hdev_engine():
    """获取引擎"""
    example_dir = ha.get_system_s('example_dir')
    hdev_example_dir = os.path.join(example_dir, 'hdevengine')

    engine = ha.HDevEngine()
    engine.set_procedure_path(os.path.join(hdev_example_dir, 'procedures'))

    return hdev_example_dir


def init_acq_handle(program):
    """采集图像"""
    proc = ha.HDevProcedure.load_local(program, 'init_acquisition')
    proc_call = ha.HDevProcedureCall(proc)
    proc_call.execute()
    return proc_call.get_output_control_param_by_name('AcqHandle')


def display_fin(window, fin_region, fin_area):
    """显示信息"""
    ha.set_color(window, 'red')
    ha.set_draw(window, 'margin')
    ha.disp_obj(fin_region, window)

    ha.set_color(window, 'red')
    ha.set_tposition(window, 20, 20)
    ha.write_string(window, f'缺陷数量: {fin_area[0]}')


def zoom_in_on_fin(img, fin_region):
    """显示放大的region在新的窗口"""
    zoom_scale = 2
    margin = 5

    _, center_row, center_col = ha.area_center_s(fin_region)
    row1, col1, row2, col2 = ha.smallest_rectangle1_s(fin_region)

    region_height = row2 - row1
    region_width = col2 - col1

    zoom_window = open_window(
        width=(region_width + (2 * margin)) * zoom_scale,
        height=(region_height + (2 * margin)) * zoom_scale,
        row=100 + (center_row / 2),
        col=100 + ((center_col / 2) + 30)
    )
    ha.set_part(
        zoom_window,
        row1 - margin,
        col1 - margin,
        row2 - margin,
        col2 - margin
    )
    ha.disp_obj(img, zoom_window)
    ha.set_color(zoom_window, 'red')
    ha.disp_obj(fin_region, zoom_window)

    return zoom_window

更新记录:2023年5月9日更新,上传代码 

声明:不想自己动手的朋友可以点击下面的链接下载,一共放了三个链接,全部下载下来以后放到一个文件夹中即可运行。每个链接1积分。

halcon的接口用于python的调用程序(一)

https://download.csdn.net/download/sunnyrainflower/87766081

halcon的接口用于python的调用程序(二)

https://download.csdn.net/download/sunnyrainflower/87766083

halcon的接口用于python的调用程序(三)

https://download.csdn.net/download/sunnyrainflower/87766086

更新记录:2023年6月30日更新,增加环境说明

注意:pip 安装命令“pip install mvtec-halcon==20111”里面的版本号要和自己电脑上的halcon版本号一致,还要注意自己的halcon是否可用,license自己到官网下载。

如果写好的python程序想要移植到别的电脑上用,除了需要license以外,还需将下面的dll文件放置到这个路径里面“C:\Windows\System32”

 

 

<think>好的,我现在需要回答用户关于如何在Python中使用Halcon的问题。首先,我要仔细阅读用户的查询和提供的引用内容。用户引用了四个资料,其中提到了HalconPython接口、导出方法、系统要求等。我需要确保回答准确,并正确引用这些资料。 首先,用户的问题是如何在Python中集成或使用Halcon。根据引用[1],Halcon有原生的Python绑定,称为HALCON/Python,主要设计目标是简单性和快速原型。所以第一步应该是安装这个库。引用[3]提到系统要求是Win10 64位,Halcon 20.11及以上,Python 64位3.8.8及以上。需要确保用户的环境符合这些要求。 接下来,用户可能需要具体的步骤。引用[3]还指出,如果只使用Python,可能不需要安装完整的Halcon,但可能需要设置环境变量或路径。安装完成后,如何导入库呢?比如使用import halcon as ha,或者根据版本不同可能需要不同的导入方式。引用[2]提到,当需要将Halcon代码移植到Python项目时,没有直接的导出选项,但可以通过两种方法:导入Python版的halcon库复现代码,或者使用HDevEngine调用Halcon脚本。这里需要详细说明这两种方法。 另外,引用[4]提到导出代码时可能会遇到框架版本的问题,需要删除某些引用。这可能是在导出为C++后再转换到Python的情况,但用户的问题更偏向于直接使用Python接口,所以可能需要重点放在方法1和方法2,而不是导出后的处理。 然后,用户可能需要示例代码。例如,使用halcon库读取图像、处理图像,或者使用HDevEngine执行.hdev脚本。这里需要确保代码示例正确,并符合HalconPython语法。 还需要注意常见问题,比如环境变量是否正确设置,Halcon的许可证是否有效,路径问题等。引用[3]和[4]提到了系统版本和框架问题,需要提醒用户注意兼容性。 最后,生成相关问题,比如性能优化、异常处理、与OpenCV的对比等,帮助用户进一步探索。 总结步骤: 1. 确认系统环境和安装要求。 2. 安装Halcon库并配置Python环境。 3. 两种方法:直接使用Python接口或通过HDevEngine调用脚本。 4. 提供代码示例。 5. 注意事项和常见问题。 6. 相关问题生成。 需要确保每个部分都正确引用资料,例如引用[1]和[3]关于接口和系统要求,引用[2]关于两种方法,引用[4]关于可能的错误处理。</think>### 如何在Python中使用Halcon接口或集成? #### 1. **环境准备** - **系统要求**:需使用Windows 10 64位系统,Halcon版本20.11及以上,Python需为64位且版本≥3.8.8[^3]。 - **安装Halcon Python库**: - 安装Halcon软件时勾选“Python接口”选项,或通过`pip install halcon`(需匹配Halcon版本)。 - 确保Python环境变量包含Halcon的安装路径(如`C:\Program Files\MVTec\HALCON-20.11\bin\x64-win64`)。 #### 2. **两种集成方法** ##### **方法1:直接使用Halcon/Python库** - 导入库并调用Halcon算子: ```python import halcon as ha # 读取图像 image = ha.read_image("example.png") # 图像处理(例如阈值分割) region = ha.threshold(image, 128, 255) # 显示结果 ha.disp_obj(region) ``` 此方法需手动将Halcon代码转换为Python语法[^2]。 ##### **方法2:通过HDevEngine调用Halcon脚本** - 将Halcon代码保存为`.hdev`文件,通过Python调用: ```python from halcon import HDevEngine engine = HDevEngine() engine.set_procedure_path("path/to/scripts") program = engine.load_program("example.hdev") program.execute() ``` 此方法无需代码转换,直接复用现有Halcon脚本。 #### 3. **注意事项** - **环境冲突**:若同时使用OpenCV,需注意Halcon和OpenCV图像格式的转换(如通过`numpy`)。 - **许可证问题**:确保Halcon许可证有效,否则会触发运行时错误。 - **路径设置**:若出现`DLL load failed`错误,检查Halcon的`bin`目录是否加入系统PATH[^4]。 #### 4. **示例:图像处理流程** ```python import halcon as ha import numpy as np # 读取图像并转为Halcon格式 image = ha.read_image("input.jpg") # 高斯滤波去噪 filtered = ha.gauss_filter(image, 5) # 导出为NumPy数组供OpenCV使用 numpy_image = ha.image_to_array(filtered) ```
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胡子大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值