如何解决TensorFlow对象检测API仅在框架的指定区域内在输入框架中定义ROI
我正在使用TensorFlow对象检测API(https://github.com/tensorflow/models)进行自定义对象检测。 我已经在自定义对象检测方面训练了我的模型,效果很好。
现在,我想在输入框中定义一个区域,即,仅在该定义的区域中,对象检测才应该起作用。在感兴趣区域之外检测到的对象应被忽略。
import cv2
cap = cv2.VideoCapture('video.mp4')
def run_inference(model,cap):
while cap.isOpened():
ret,image_np = cap.read()
# Actual detection.
output_dict = run_inference_for_single_image(model,image_np)
# Visualization of the results of detection.
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,output_dict['detection_boxes'],output_dict['detection_classes'],output_dict['detection_scores'],category_index,instance_masks=output_dict.get('detection_masks_reframed',None),use_normalized_coordinates=True,line_thickness=8)
cv2.imshow('object_detection',cv2.resize(image_np,(800,600)))
if cv2.waitKey(1) & 0xFF == ord('q'):
cap.release()
cv2.destroyAllWindows()
break
run_inference(detection_model,cap)
我尝试使用cv2函数折线在输入帧上定义线。
cv2.polylines(image,[pts],isClosed,color,thickness)
但无法激活对象检测API使其仅在指定区域内工作
预期的最终输出:在视频帧中,我应该将一个多边形框表示为关注区域(ROI),并且只要在ROI中检测到有异物,它都应为我提供边界框(在此ROI之外,它可以忽略)
解决方法
cv2.polylines()
仅用于在图像上绘制线条,这只是视觉上的事情。
您可以按所需区域裁剪numpy图像image_np
,然后将裁剪后的img传递给tf
。
image_cropped = image_np[y_start:y_end,x_start:x_end]
当用numpy表示图像时,第一个索引是“ y轴”,第二个索引是“ x轴”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。