先贴上上次没说完的主要代码:
def lane_base(self, speed, end_fuction, stop=STOP_PARAM):
while True:
if self._stop_flag:
return
image = self.cap_front.read()
error_y, error_angle = self.crusie(image)
y_speed, angle_speed = self.lane_pid.get_out(-error_y, -error_angle)
# speed_dy, angle_speed = process(image)
self.mecanum_wheel(speed, y_speed, angle_speed)
if end_fuction():
break
if stop:
self.stop()
对其中的:
error_y, error_angle = self.crusie(image)
crusie方法:
def paddle_infer_init(self):
self.crusie = ClintInterface('lane')
# 前置左右方向识别
self.front_det = ClintInterface('front')
# 任务识别
self.task_det = ClintInterface('task')
# 人体跟踪
self.mot_hum = ClintInterface('mot')
# 人体属性
self.attr_hum = ClintInterface('humattr')
# ocr识别
self.ocr_rec = ClintInterface('ocr')
# 识别为None
self.last_det = None
查看对应的ClintInterface:
class ClintInterface:
configs = [
{'name':'lane', 'infer_type': 'LaneInfer', 'params': [], 'port':5001, 'img_size':[128, 128]}
]
def __init__(self, name):
logger.info("{}连接服务器...".format(name))
model_cfg = self.get_config(name)
self.img_size = model_cfg['img_size']
self.client = self.get_zmp_client(model_cfg['port'])
infer_back_end_file = "infer_back_end.py"
# 检查后台程序是否运行, 如果未开启, 则开启
self.check_back_python(infer_back_end_file)
flag = False
while True:
if self.get_state():
if flag:
logger.info("")
break
# 输出一个提示信息,不换行
print('.', end='', flush=True)
# logger.info(".")
time.sleep(1)
flag = True
# print(self.client)
# print("连接服务器成功")
logger.info("{}连接服务器成功".format(name))
-
日志记录开始连接:使用
logger.info
打印信息,告知正在尝试连接名为name
的服务器。 -
获取配置:
model_cfg = self.get_config(name)
:调用get_config
方法(尽管在这段代码中未显示定义,但显然这个方法用于从configs
中获取匹配name
的配置)。 -
设置图像尺寸:
self.img_size = model_cfg['img_size']
:根据获取的配置设置图像尺寸。 -
创建客户端连接:
self.client = self.get_zmp_client(model_cfg['port'])
:调用get_zmp_client
方法(同样未在代码中定义),该方法根据配置的端口号创建客户端连接。 -
检查后台服务:
self.check_back_python(infer_back_end_file)
:检查后台推理服务是否正在运行,如果未运行,则启动它。这个过程使用infer_back_end_file
文件路径进行操作。 -
等待服务器响应:循环检查服务器状态,直到连接成功。通过调用
get_state()
方法(未在代码段中定义)来检测服务状态。如果get_state()
返回True
,即服务已经成功响应,退出循环。循环中使用print('.', end='', flush=True)
打印连接进度,提供了一个简单的视觉反馈,显示正在尝试连接。 -
连接成功日志:一旦连接成功,记录日志信息,确认已成功连接到服务器。
连接后通过对应的zeroMQ即可进行模型之间的通信。模型是其他组员训练的,此处不再说明。只需要记住使用的是模型返回的参数:y,θ和对应的位置关系。