摄像头和报警器
·
目录
在进行正式写汽车零件检测项目之前,我们先掌握若干个技能:
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 包含两大核心部分:
- 客户端工具集:用于相机调试、参数配置和图像采集的可视化界面
- 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_())
效果:
更多推荐




所有评论(0)