目录

一、摄像头的连接使用

1、软件控制

2、在python中控制摄像头

二、报警器的连接使用

1、直接使用厂家提供的界面

​编辑

2、在python中调用

3、结合pyqt5设计可视化界面


在进行正式写汽车零件检测项目之前,我们先掌握若干个技能:
1、海康摄像头连接使用

2、报警器连接使用

3、pyqt5开发用户图形界面(参考我的pyqt5那篇博客:https://mp.csdn.net/mp_blog/manage/article?spm=1011.2124.3001.10336

4、OCR提取文字,看我关于ocr的博客:

一、摄像头的连接使用

本项目选择海康工业级摄像头。

MVS(Machine Vision Software) 是海康机器人专为工业相机开发的机器视觉软件套件,适用于所有海康机器视觉面阵、线阵、板级及红外相机产品。它基于GenICam 标准,遵循 GigE Vision、USB3 Vision、Camera Link 和 CoaXPress 等工业相机协议,提供从相机配置到二次开发的完整解决方案。

MVS 包含两大核心部分:

  1. 客户端工具集:用于相机调试、参数配置和图像采集的可视化界面
  2. SDK 开发包:用于 C++/Python 等语言的二次开发接口

摄像头两种连接使用方法:

1、软件控制

使用mvs软件控制摄像头:

2、在python中控制摄像头

HKCamera_class.py 是海康官方示例中对底层 MVS SDK 的封装,能大幅减少重复代码。

通过添加 MVS 的 Python 示例路径来导入封装好的 HKCamera 类,以此简化海康相机的操作逻辑。

代码示例:

import os
import cv2
from numpy import ndarray
import sys
import logging
import numpy as np
# from paddleocr import PaddleOCR

sys.path.append(r"C:\Program Files (x86)\MVS\Development\Samples\Python\MvImport")
from HKCamera_class import HKCamera

# logging.disable(logging.DEBUG)
# ocr = PaddleOCR(use_angle_cls=True, use_gpu=True, lang='en')

'''169.254.172.69
169.254.183.69
169.254.180.69'''
if __name__ == '__main__':
    camera1 = HKCamera(CameraIp='169.254.162.76')       #当前 ip 地址
    # camera2 = HKCamera(CameraIp='169.254.183.69')
    # camera3 = HKCamera(CameraIp='169.254.180.69')

    # 对摄像头配置进行设置
    try:                            #  枚举
        camera1.set_Value(param_type="enum_value", node_name="PixelFormat",
                         node_value='BayerGB8')   #RGB8Packed
        camera1.set_Value(param_type="enum_value", node_name="GainAuto",  #自动增益
                               node_value='Continuous')
        # camera2.set_Value(param_type="enum_value", node_name="PixelFormat",   #像素格式
        #                  node_value='RGB8Packed')
        # camera3.set_Value(param_type="enum_value", node_name="PixelFormat",   #像素格式
        #                  node_value='RGB8Packed')
        # camera.set_Value(param_type="enum_value", node_name="ExposureAuto",  #自动曝光
        #                  node_value='On')
        camera1.set_Value(param_type="float_value", node_name="ExposureTime",  #曝光时间
                         node_value='10000')

    except Exception as e:
        print(e)
        os._exit(0)
    camera1.start_camera()
    # camera2.start_camera()
    # camera3.start_camera()
# cap=cv2.VideoCapture(0)
    while True:
        try:
            # _,frame=cap.read()
            image1: ndarray = camera1.get_image()    #声明一个名为image的变量,并且指定它的类型为ndarray
            # image2: ndarray = camera2.get_image()
            # image3: ndarray = camera3.get_image()
            if image1 is not None:
                # 这里拿到图片的ndarray数据后,可以转Image、可以保存图片....等等操作
                cv2.namedWindow('result1', cv2.WINDOW_NORMAL)
                # cv2.namedWindow('result2', cv2.WINDOW_NORMAL)
                # cv2.namedWindow('result3', cv2.WINDOW_NORMAL)
                # cv2.resizeWindow('result', 640, 480)
                image1=cv2.resize(image1,(640,480))
                # image2=cv2.resize(image2,(640,480))
                # image3=cv2.resize(image3,(640,480))
                cv2.imshow('result1', image1)
                # cv2.imshow('result2', image2)
                # cv2.imshow('result3', image3)
                # 创建窗口
                # print(image.shape)
            key = cv2.waitKey(50)
            if key == 27:
                cv2.destroyAllWindows()
                break
        except Exception as e:
            print(e)
     

二、报警器的连接使用

我们采用的是一款usb连接的报警器,直接插在电脑上就可以使用:

1、直接使用厂家提供的界面

安装厂家提供的驱动后,我们可以在电脑中的设备管理器查看报警器的端口号,填写后打开端口就可以使用了:

2、在python中调用

在 Python 程序中,我们借助 pyserial 第三方库实现串口通信,通过向指定的串口端口发送预设的指令信号,完成对报警器的触发、关闭等操作。

在上图中,我们点击闪光就可以在数据发送的位置看到山观对应的信号。

代码示例:

# pip install pyserial
import serial
import time

#### 串口号,右键计算机->点击设备->点击端口->查看获取
SERIAL_PORT = 'COM9'
ser = serial.Serial(SERIAL_PORT, baudrate=9600, timeout=0.5)
# 波特率(baud rate),单位是比特/秒,用于指定数据传输速率。波特率必须与你想要通信的设备设置相匹配。
# 用于设置读操作的超时时间(以秒为单位)。如果在指定的时间内没有接收到任何数据,可能返回空结果


######## 指令声明
LIGHT_BUZZ1="0110001A000101CE18"    #闪光+声音1
LIGHT_BUZZ2="0110001A0001040E1B"    #闪光+声音2
LIGHT="0110001A0001028E19"          #闪光
BUZZ1="0110001A0001034FD9"          #声音1
BUZZ2="0110001A000105CFDB"          #声音2
BUZZ_CMD_CLOSE ="0110001A0001000FD8" # 关闭声音和闪光


def sendCmdToDevice(cmd):
    cmdd = bytes.fromhex(cmd)
    # 将包含十六进制数字的字符串转换为bytes对象
    # 每对十六进制字符会被转换成一个字节。
    # print(cmdd)
    ser.write(cmdd)


if __name__ == '__main__':
    sendCmdToDevice(LIGHT_BUZZ1)
    time.sleep(5)
    sendCmdToDevice(BUZZ_CMD_CLOSE)
    # time.sleep(5)
    # sendCmdToDevice(LIGHT)
    # time.sleep(5)
    # sendCmdToDevice(BUZZ_CMD_CLOSE)
    ser.close()
3、结合pyqt5设计可视化界面

代码:

import serial
import time
from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtWidgets
# 假设你的Ui_MainWindow是从UI文件生成的
from sample2 import Ui_MainWindow  # 替换成你实际的UI模块名

# 串口指令定义
LIGHT_BUZZ1 = "0110001A000101CE18"  # 闪光+声音1
LIGHT_BUZZ2 = "0110001A0001040E1B"  # 闪光+声音2
LIGHT = "0110001A0001028E19"  # 闪光
BUZZ1 = "0110001A0001034FD9"  # 声音1
BUZZ2 = "0110001A000105CFDB"  # 声音2
BUZZ_CMD_CLOSE = "0110001A0001000FD8"  # 关闭声音和闪光

SERIAL_PORT = 'COM9'
ser = serial.Serial(SERIAL_PORT, baudrate=9600, timeout=0.5)

class PyQtMainEntry(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


    def fasong(self):
        cmd=self.lineEdit.text()
        cmdd = bytes.fromhex(cmd)
        ser.write(cmdd)



# 测试入口
if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    window = PyQtMainEntry()
    window.show()
    sys.exit(app.exec_())

效果:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐