Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存

近期在使用Basler工业相机完成视觉项目,用python调用basler工业相机进行视觉训练,需要先拍照存储数据集,于是写了以下代码保存拍照。此代码在win10与win11下、Linux下均测试过,完美使用。

拍照完成后可以使用yolo进行识别,过完年上班后我会发布使用basler调用yolo识别的代码。

代码在最后,如果帮到你了,请帮忙给个赞或收藏谢谢!!有问题在评论区反应,看到就会回复

使用方法:在英文输入法下 ,按下‘s’即可拍照保存,每次命名+1;按下'q'键退出程序,每次程序退出后,重新从1开始命名。注意!如果不小心会覆盖掉上次的拍摄的照片,如果不想覆盖上次拍摄的照片,就在下次程序运行前修改变量a的值。

一、使用设备与使用环境

1、工业相机:aca2500-14gm,aca640-120gm,aca-2440-20gm等basler相机。

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第1张图片

2、poe供电及两根网线

使用的是tp-linke的poe供电电源,有两个网口,一个插相机供电,另一端数据传输连接至电脑网口。

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第2张图片

3、pylon软件

pylon软件是Basler官方的软件,类似于海康的MVS等,包含了basler相机的驱动程序、ip配置、曝光度设置等功能。在使用basler相机时需要先下载安装pylon。

(1)pylon官方网站:pylon Viewer - pylon相机软件套装 | Basler AG

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第3张图片

(2)进入网站后根据系统选择对应的版本,win下安装比较简单,打开exe程序无脑点下一步即可,linux安装麻烦一点,下载tar.gz文件后,根据里面的提示文件进行安装,我记得提示文件是纯英文的,当时还是用翻译软件后才会安装,根据提示输入4个命令行指令即可安装成功。

(3)安装时会有以下提示,如果你使用跟我一样的相机型号(都是网口相机),需要勾选GigE。

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第4张图片

(4)安装完成后,桌面会有这个图标

(5)点击右键,打开项目文件夹,会看到有一个IPConfigurator,就是ip配置.

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第5张图片

(6)点开后配置相机ip,将相机ip的前3位改为与电脑网口前3位一致,第四位不一致。

 (因为自己电脑没有安装pylon,只有在公司电脑安装,因此借用HookerMan2022博主的图)Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第6张图片

 

(7)例如我的电脑ip是192.168.10.11,相机ip为192.168.10.38。

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第7张图片

(8)修改后点打开 PylonViewerApp这个软件,查看相机是否能正常使用。

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第8张图片

Win与Linux下,Python调用Basler相机完整步骤-实现拍照保存_第9张图片

(9)可以正常使用后,前期准备完成,即可关闭窗口,打开pycharm或VS。

二、python代码

借助OpenCV打开摄像头,按下s键保存图像,按下q键退出程序。

记得修改filename路径,win系统注意路径使用/。例如原本路径为D:\wechat\Wechat_Record\WeChat Files

另外,需要pip几个包,如下:

pip install opencv-python

pip install pylon

完成后即可运行程序

from pypylon import pylon
import cv2
import datetime
import time

# 初始化变量a,设置为1
a = 1

# 连接到第一个可用的相机
camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())

# 持续抓取图像(视频)并最小延迟
camera.StartGrabbing(pylon.GrabStrategy_LatestImageOnly)
converter = pylon.ImageFormatConverter()

# 转换为opencv bgr格式
converter.OutputPixelFormat = pylon.PixelType_BGR8packed
converter.OutputBitAlignment = pylon.OutputBitAlignment_MsbAligned

while camera.IsGrabbing():
    grabResult = camera.RetrieveResult(1000, pylon.TimeoutHandling_ThrowException)

    if grabResult.GrabSucceeded():
        # 获取图像数据
        image = converter.Convert(grabResult)
        img = image.GetArray()
        cv2.namedWindow('title', cv2.WINDOW_NORMAL)
        cv2.imshow('title', img)
        k = cv2.waitKey(1)
        # 按“s"键保存图像
        if k == ord('s'):
            # 生成文件名并保存图像
            filename = f'//home/Desktop/yolo/1008/yolov5-master/photo/{a}.jpg'
            #这里是存放路径,根据你的需要进行修改
            cv2.imwrite(filename, img)
            print(f'图像已保存为: {filename}')
            a += 1  # 文件名递增
        # 按“q"键退出
        elif k == ord('q'):
            break
    grabResult.Release()

# 释放资源
camera.StopGrabbing()

cv2.destroyAllWindows()

 

觉得有用的话请点赞或收藏,谢谢

 

你可能感兴趣的:(计算机视觉,python,python3.11,YOLO)