当前位置: 首页 > wzjs >正文

商丘做网站公司新站seo快速收录网页内容页的方法seo单页快速排名

商丘做网站公司新站seo快速收录网页内容页的方法,seo单页快速排名,大连旅顺,网站建设的比较合理的流程前言: 记录一个尝试,给出一份demo,关于 rostopic 和 Image type。 在多机通信中,有时为了性能,我们在 pub 端对数据进行压缩,在 sub端解压,这样节省带宽,提高传输速率。而具体的性…

前言:

记录一个尝试,给出一份demo,关于 rostopic 和 Image type。

在多机通信中,有时为了性能,我们在 pub 端对数据进行压缩,在 sub端解压,这样节省带宽,提高传输速率。而具体的性能数据可以通过 command-line tool rostopic 协助查看。例如:

此处我假设已经有 pub 端发布 topic, 

/camera/rgb/image_raw
/camera/rgb/image_raw/compressed
我在本地进行了尝试,分别订阅两个 topic,查看效果。发现 raw 图更迅速。

此处给出scripts,其中展示了 图像类型转换、模型推理,压缩与未压缩的接口。

Scripts:

#!/home/ncut/miniconda3/envs/tf/bin/python
# -*- coding: utf-8 -*-
import rospy
import tensorflow as tf
import cv2
import numpy as np
import time
from sensor_msgs.msg import Image
from sensor_msgs.msg import CompressedImage
from cv_bridge import CvBridge, CvBridgeError
from my_sort import Sort  # 确保 my_sort 模块在 Python 路径下# --------------------- 模型推理模块 ---------------------
def load_model(model_dir):"""加载 TensorFlow SavedModel(例如 ssd-mobilenet-v2 或 efficientdet)返回推理函数。"""model = tf.saved_model.load(model_dir)infer = model.signatures["serving_default"]return inferdef preprocess_frame(frame):"""预处理输入图像:- 将 BGR 转换为 RGB(模型输入要求)- 将图像 resize 为 320x320,并扩展 batch 维度返回:input_tensor: 模型输入 tensorwidth: 原图宽度height: 原图高度"""img_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)resized_frame = cv2.resize(frame, (320, 320), interpolation=cv2.INTER_AREA)input_tensor = tf.convert_to_tensor(resized_frame, dtype=tf.uint8)input_tensor = tf.expand_dims(input_tensor, 0)  # 增加 batch 维度height, width = frame.shape[:2]return input_tensor, width, heightdef run_inference(infer, input_tensor):"""利用推理函数执行模型预测,返回检测框和置信度。"""detections = infer(input_tensor)num_detections = int(detections['num_detections'].numpy()[0])boxes = detections['detection_boxes'].numpy()[0][:num_detections]scores = detections['detection_scores'].numpy()[0][:num_detections]return boxes, scoresdef convert_detections_to_sort(boxes, scores, width, height, threshold=0.5):"""将检测结果(归一化坐标)转换为 SORT 跟踪器所需格式:[x1, y1, x2, y2, score]"""sort_inputs = []for i in range(len(scores)):if scores[i] < threshold:continueymin, xmin, ymax, xmax = boxes[i]x1 = int(xmin * width)x2 = int(xmax * width)y1 = int(ymin * height)y2 = int(ymax * height)sort_inputs.append([x1, y1, x2, y2, scores[i]])return np.array(sort_inputs)# --------------------- 跟踪与可视化模块 ---------------------
def draw_tracks(frame, tracks):"""在图像上绘制跟踪结果(边框和跟踪ID)。"""for track in tracks:x1, y1, x2, y2, track_id = track.astype(int)cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.putText(frame, f"ID: {track_id}", (x1, y1 - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 2)return frame# --------------------- ROS 图像订阅与处理模块 ---------------------
# 全局变量:模型推理函数、SORT 跟踪器、CvBridge 实例
infer = None
tracker = None
bridge = CvBridge()def image_callback(msg):"""ROS 图像回调函数:- 将 ROS 图像消息转换为 OpenCV 格式- 进行模型推理和 SORT 跟踪- 显示带跟踪结果的图像"""global infer, tracker, bridgetry:cv_image = bridge.imgmsg_to_cv2(msg, "bgr8") # raw#cv_image = bridge.compressed_imgmsg_to_cv2(msg,"bgr8") #compressed compressed_imgmsg_to_cv2except CvBridgeError as e:rospy.logerr("CvBridge 转换错误: %s", e)return# 图像预处理和模型推理input_tensor, width, height = preprocess_frame(cv_image)boxes, scores = run_inference(infer, input_tensor)detections = convert_detections_to_sort(boxes, scores, width, height, threshold=0.5)# 更新 SORT 跟踪器并绘制跟踪结果tracks = tracker.update(detections)tracked_frame = draw_tracks(cv_image.copy(), tracks)# 显示带跟踪结果的图像cv2.imshow("Tracking", tracked_frame)cv2.waitKey(1)def main():global infer, tracker# 初始化 ROS 节点rospy.init_node("tracking_inference_node", anonymous=True)# 加载模型model_dir = "/home/ncut/models/ssd-mobilenet-v2"  # 根据需要更新模型路径time_before_load = time.time()infer = load_model(model_dir)time_after_load = time.time()rospy.loginfo("模型加载耗时:%.2f 秒", time_after_load - time_before_load)# 初始化 SORT 跟踪器tracker = Sort(max_age=1, min_hits=3, iou_threshold=0.3)# 订阅图像话题 below is a description of the car launch file astra    /camera/rgb/image_raw/compressed# to original photo, topic is /camera/rgb/image_raw                 average rate is 2Hz     4.02MB/s# to compressed photo, topic is /camera/rgb/image_raw/compressed    average rate is 30Hz    1.25MB/srospy.Subscriber("/camera/rgb/image_raw", Image, image_callback)    # Image for raw, CompressedImage for compressedrospy.loginfo("Tracking Inference Node 已启动,订阅话题:/camera/rgb/image_raw")# ROS 循环等待消息rospy.spin()cv2.destroyAllWindows()if __name__ == '__main__':try:main()except rospy.ROSInterruptException:pass

我在尝试 订阅 压缩的图片格式时,总看到 JPEG, JNG格式,前者为有损压缩,解码需要耗费计算资源;后者为无损压缩,计算量相对较小,内存占用高。我通过 command-line tool

rostopic echo /camera/image_raw/compressed/format

得出结果为 rgb8 jpeg。

此处为了得出这份格式,花了很长时间,发现在Python API下,解压只是更改了调用的方法,不需要手动指明解码格式。cv_bridge 的 compressed_imgmsg_to_cv2 方法会根据消息的 format 字段自动选择解码方式,无需显式指定格式。与之相比,roscpp需要显式指出图片格式,具体可以到 ROS wiki上查阅。

在更改处,需要注意,订阅的 topic name,message type,图像转换的方法,log信息的修改,以及 import 的模块。这些都是基础的细节,上述 scripts中都有所体现。

结果与结论

此处附上我对两者延时的截图:

/camera/rgb/image_raw

/camera/rgb/image_raw/compressed

 

能够看到,它们的  delay 几乎相同,而实际结果是 compressed 更慢,因为对图像的解码耗费了计算资源,抢占了我本就不足的 模型推理。——我们考虑性能,从整体的角度考虑,是一份 trande-off,此处微薄提升的时延 不如 耗费的计算资源。

补充

另外,在ROS中,对于图片的压缩通常是由 image_transport  进行压缩,当然,需要你将它写入package.xml, CMakeLists.txt中。它通过插件实现具体的功能。

http://www.dtcms.com/wzjs/82307.html

相关文章:

  • 阿里巴巴是搭建的网站吗企业中层管理人员培训课程
  • 广州专业网站制作设计高端定制网站建设公司
  • 中建一局招聘网西安seo网站管理
  • 邢台做移动网站哪儿好江西省水文监测中心
  • wordpress 版权求职seo服务
  • 上饶商城网站建设百度渠道开户哪里找
  • 科技加盟网站建设中国十大品牌策划公司
  • 遂宁网站建设seo技术优化
  • 中企动力骗子公司真的还是假的站长工具seo综合查询官网
  • 霸县网站建设北京seo公司有哪些
  • 网站开发公司代理宁波seo快速优化教程
  • 云南做网站广东新闻今日最新闻
  • 国外psd免费下载网站广州网站建设方案维护
  • 国外网站拼邮需要怎么做seo就业
  • 潍坊做网站公司推广优化
  • 网站地图生成工具西安网站建设优化
  • 价格优化网站建设今日十大热点新闻事件
  • java网站开发框架搭建手册排名网
  • 网站建设电销女生做sem还是seo
  • 软件开发工程师薪资待遇网页优化方法
  • 手机网站建设 广州线上营销推广的公司
  • wordpress内容模型百度搜索引擎优化相关性评价
  • 做网站服务器权限设置网站seo优化外包顾问
  • 管庄网站建设搜索关键词的方法
  • 邢路桥建设总公司网站seo查询网站是什么
  • 渭南哪家公司可以做网站制作公司网站大概多少钱
  • sns网站建设哪家公司好百度收录入口
  • 网站面包屑导航推广赚钱的软件
  • dedecms网站地图 显示三级栏目seo是什么服务器
  • 广州电商网站开发公司个人永久免费自助建站