-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlaunch.py
100 lines (84 loc) · 3.26 KB
/
launch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# -*- coding: UTF-8 -*-
# 开发作者 :lau
# 开发时间 :2022/6/23
# 文件名称 :
# 开发工具 :
# 文件说明 :此文件为整个视觉文件的主程序
# =============导入外部库==========================
import struct
import numpy as np
import math
import cv2
import threading
# =============导入内部库==========================
import hik2cv # 非海康相机请注释
import usb2cv
import DataConnect
import globalVar
import TrackKF_2D
import get_pose
from globalVar import *
globalVar._init()
import DataParam
import ArmorDetector
import PointTransformation
# =============对象初始化===========================
DataParamClass = DataParam.DataParameter() # 程序参数
if DataParamClass.camera == "hikvision":
cam = hik2cv.hik2cv_class() # 海康相机初始化 如果不是海康相机要注释掉
pass
elif DataParamClass.camera == "usb":
cam = usb2cv.usb2cv_class(DataParamClass.CamNum) # usb相机初始化
pass
data_ser = DataConnect.SerialClass() # 串口数据初始化
kalman = TrackKF_2D.KalmanFilter() # 卡尔曼滤波器初始化
pose = get_pose.get_pose() # 读取t265里程计数据初始化
ArmorDetector = ArmorDetector.ArmorDetector()
PointTrans = PointTransformation.PointTrans()
# =============线程定义==========================
thread1 = threading.Thread(target=cam.get_img_thread, daemon=True)
thread1.start()
thread1.join(1)
# thread2 = threading.Thread(target=pose.get_pose(), daemon=True)
# thread2.start()
# thread2.join(1)
# =============开始循环===========================
while 1:
# 串口读取
data_ser.read()
# 防止一图多次读取
if cam.image_read_log == True:
img = cam.image_fifo
cam.image_read_log = False
else:
continue
# 视觉识别
if data_ser.shootpattern == 'armor':
ArmorDetector.ArmorDetectTask(img, data_ser.enemycolor)
if data_ser.shootpattern == 'rune':
# 此处continue是因为符文还没写,写完后删除continue
continue
# 坐标系转换
PointTrans.Pixel2Camera(ArmorDetector.center_result, [ArmorDetector.center_x,ArmorDetector.center_y])
# 串口发送
data_ser.write(PointTrans.yaw, PointTrans.pitch, ArmorDetector.IfFire)
# 发送导航绝对位置信息
# data_ser.write(pose.pose_x, pose.pose_y)
# 画图
cv2.putText(ArmorDetector.InfoPlate, "yaw : " + str(PointTrans.yaw), (10, 220),
cv2.FONT_HERSHEY_SIMPLEX, 0.5,
[255, 255, 255])
cv2.putText(ArmorDetector.InfoPlate, "pitch : " + str(PointTrans.pitch), (10, 260),
cv2.FONT_HERSHEY_SIMPLEX, 0.5,
[255, 255, 255])
ArmorDetector.img = cv2.resize((ArmorDetector.img[:, :, 0]+ArmorDetector.img[:, :, 1]+ArmorDetector.img[:, :, 2])/3, (640, 480))
ArmorDetector.dst = cv2.resize(ArmorDetector.dst, (640, 480))
ArmorDetector.InfoPlate =cv2.resize(ArmorDetector.InfoPlate, (640, 480))
merged_frame = np.hstack((ArmorDetector.img, ArmorDetector.dst,ArmorDetector.InfoPlate))
cv2.imshow('Merged Frames', merged_frame)
cv2.namedWindow("img", 0)
cv2.imshow("img", img)
# =============终止条件:键盘输入q键======================
if cv2.waitKey(1) & 0xFF == ord('q'):
print('程序终止')
break