函数“rectangle”中的 (-5:参数错误) - 无法解析“pt1”。索引为 0 的序列项类型错误
- 2025-02-11 09:51:00
- admin 原创
- 64
问题描述:
当我检测我的 tflite 文件时,问题发生了。
我写的命令。
python detect.py --weights ./checkpoints/yolov4-tiny-tf.tflite --size 416 --model yolov4 --image D:yolov4 raining ensorflow-yolov4-tflite-masterdata
ice.jpg --framework tflite --tiny true
错误信息如下:
cv2.rectangle(image, c1, c2, bbox_color, bbox_thick)
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'rec'. Expected sequence length 4, got 2
> - Can't parse 'rec'. Expected sequence length 4, got 2
相关代码如下(core/utils.py)
fontScale = 0.5
score = out_scores[0][i]
class_ind = int(out_classes[0][i])
bbox_color = colors[class_ind]
bbox_thick = int(0.6 * (image_h + image_w) / 600)
c1, c2 = (coor[1], coor[0]), (coor[3], coor[2])
cv2.rectangle(image, c1, c2, bbox_color, bbox_thick)
if show_label:
bbox_mess = '%s: %.2f' % (classes[class_ind], score)
t_size = cv2.getTextSize(bbox_mess, 0, fontScale, thickness=bbox_thick // 2)[0]
c3 = (c1[0] + t_size[0], c1[1] - t_size[1] - 3)
cv2.rectangle(image, c1, (np.float32(c3[0]), np.float32(c3[1])), bbox_color, -1) #filled
cv2.putText(image, bbox_mess, (c1[0], np.float32(c1[1] - 2)), cv2.FONT_HERSHEY_SIMPLEX,
fontScale, (0, 0, 0), bbox_thick // 2, lineType=cv2.LINE_AA)
return image
我已将其更改为
fontScale = 0.5
score = out_scores[0][i]
class_ind = int(out_classes[0][i])
bbox_color = colors[class_ind]
bbox_thick = int(0.6 * (image_h + image_w) / 600)
c1, c2 = (int(coor[1]), int(coor[0])), (int(coor[3]), int(coor[2]))
print(c1, c2, bbox_color, bbox_thick)
cv2.rectangle(image, (int(coor[1]), int(coor[0])), (int(coor[3]), int(coor[2])), bbox_color, -1)
if show_label:
bbox_mess = '%s: %.2f' % (classes[class_ind], score)
t_size = cv2.getTextSize(bbox_mess, 0, fontScale, thickness=bbox_thick // 2)[0]
c3 = (c1[0] + t_size[0], c1[1] - t_size[1] - 3)
cv2.rectangle(image, (int(coor[1]), int(coor[0])), (int(c3[0]), int(c3[1])), (255, 0, 0), -1) #filled
cv2.putText(image, bbox_mess, (int(c1[0]), int(c1[1] - 2)), cv2.FONT_HERSHEY_SIMPLEX,
fontScale, (0, 0, 0), bbox_thick // 2, lineType=cv2.LINE_AA)
return image
因为没有出错,所以仍然没有显示图像。
[{'name': 'input_1', 'index': 0, 'shape': array([ 1, 416, 416, 3]), 'shape_signature': array([ -1, 416, 416, 3]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]
[{'name': 'Identity', 'index': 232, 'shape': array([ 1, 2535, 4]), 'shape_signature': array([ 1, -1, 4]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'Identity_1', 'index': 211, 'shape': array([ 1, 2535, 2]), 'shape_signature': array([ 1, -1, 2]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]
有人想过解决这个问题吗?谢谢你的帮助!
这是我的文件:https://github.com/piggychu0w0/food-image-detection
解决方案 1:
问题在于,您将带有浮点数的元组作为点传递到函数的参数中。以下是重现的错误:
import cv2
import numpy as np
img = np.zeros((600, 600), 'uint8')
c1 = 50.2, 12.4
c2 = 88.8, 40.8
cv2.rectangle(img, c1, c2, (255, 0, 0), -1)
输出:
Traceback (most recent call last):
File "C:/Users/User/Desktop/temp.py", line 9, in <module>
cv2.rectangle(img, c1, c2, (255, 0, 0), -1)
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'rec'. Expected sequence length 4, got 2
> - Can't parse 'rec'. Expected sequence length 4, got 2
为了修复它,只需使用int()
坐标周围的包装器:
import cv2
import numpy as np
img = np.zeros((600, 600), 'uint8')
c1 = 50.2, 12.4
c2 = 88.8, 40.8
cv2.rectangle(img, (int(c1[0]), int(c1[1])), (int(c2[0]), int(c2[1])), (255, 0, 0), -1)
解决方案 2:
只需尝试以下更改,它对我来说就有效。
fontScale = 0.5
score = out_scores[i]
class_ind = int(out_classes[i])
bbox_color = colors[class_ind]
bbox_thick = int(0.6 * (image_h + image_w) / 600)
c1, c2 = (coor[0], coor[1]), (coor[2], coor[3])
print(c1, c2, bbox_color, bbox_thick)
cv2.rectangle(image, (int(c1[0]), int(c1[1])), (int(c2[0]), int(c2[1])), bbox_color, bbox_thick)
if show_label:
bbox_mess = '%s: %.2f' % (classes[class_ind], score)
t_size = cv2.getTextSize(bbox_mess, 0, fontScale, thickness=bbox_thick // 2)[0]
c3 = (c1[0] + t_size[0], c1[1] - t_size[1] - 3)
cv2.rectangle(image, (int(c1[0]), int(c1[1])), (int(c3[0]), int(c3[1])), (255, 0, 0), -1) #filled
cv2.putText(image, bbox_mess, (int(c1[0]), int(c1[1] - 2)), cv2.FONT_HERSHEY_SIMPLEX,
fontScale, (0, 0, 0), bbox_thick // 2, lineType=cv2.LINE_AA)
return image
解决方案 3:
我在 pt. 参数上遇到了同样的问题,cv2.pointPolygonTest()
该参数测试某个点是否位于多边形内。
opencv 的最新版本要求参数的值类型一致。在我的例子中,轮廓是 np.uint8。
所以我不得不[x_value,y_value]
使用
point = np.array([x_value,y_value]).astype(np.uint8)
解决方案 4:
n_lines = len(bbox)
for i in range(n_lines):
# draw all lines
point1 = tuple(bbox[i][0])
point2 = tuple(bbox[(i+1) % n_lines][0])
cv2.line(img, point1, point2, (255, 0, 0), thickness=2)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD