mirror of
https://github.com/opencv/opencv.git
synced 2025-08-06 14:36:36 +08:00
Update obj. detect sample
This commit is contained in:
parent
eb00dce78e
commit
cca2c4b314
@ -153,51 +153,39 @@ void postprocess(Mat& frame, const std::vector<Mat>& outs, Net& net)
|
|||||||
std::vector<int> classIds;
|
std::vector<int> classIds;
|
||||||
std::vector<float> confidences;
|
std::vector<float> confidences;
|
||||||
std::vector<Rect> boxes;
|
std::vector<Rect> boxes;
|
||||||
if (net.getLayer(0)->outputNameToIndex("im_info") != -1) // Faster-RCNN or R-FCN
|
if (outLayerType == "DetectionOutput")
|
||||||
{
|
{
|
||||||
// Network produces output blob with a shape 1x1xNx7 where N is a number of
|
// Network produces output blob with a shape 1x1xNx7 where N is a number of
|
||||||
// detections and an every detection is a vector of values
|
// detections and an every detection is a vector of values
|
||||||
// [batchId, classId, confidence, left, top, right, bottom]
|
// [batchId, classId, confidence, left, top, right, bottom]
|
||||||
CV_Assert(outs.size() == 1);
|
CV_Assert(outs.size() > 0);
|
||||||
float* data = (float*)outs[0].data;
|
for (size_t k = 0; k < outs.size(); k++)
|
||||||
for (size_t i = 0; i < outs[0].total(); i += 7)
|
|
||||||
{
|
{
|
||||||
float confidence = data[i + 2];
|
float* data = (float*)outs[k].data;
|
||||||
if (confidence > confThreshold)
|
for (size_t i = 0; i < outs[k].total(); i += 7)
|
||||||
{
|
{
|
||||||
int left = (int)data[i + 3];
|
float confidence = data[i + 2];
|
||||||
int top = (int)data[i + 4];
|
if (confidence > confThreshold)
|
||||||
int right = (int)data[i + 5];
|
{
|
||||||
int bottom = (int)data[i + 6];
|
int left = (int)data[i + 3];
|
||||||
int width = right - left + 1;
|
int top = (int)data[i + 4];
|
||||||
int height = bottom - top + 1;
|
int right = (int)data[i + 5];
|
||||||
classIds.push_back((int)(data[i + 1]) - 1); // Skip 0th background class id.
|
int bottom = (int)data[i + 6];
|
||||||
boxes.push_back(Rect(left, top, width, height));
|
int width = right - left + 1;
|
||||||
confidences.push_back(confidence);
|
int height = bottom - top + 1;
|
||||||
}
|
if (width * height <= 1)
|
||||||
}
|
{
|
||||||
}
|
left = (int)(data[i + 3] * frame.cols);
|
||||||
else if (outLayerType == "DetectionOutput")
|
top = (int)(data[i + 4] * frame.rows);
|
||||||
{
|
right = (int)(data[i + 5] * frame.cols);
|
||||||
// Network produces output blob with a shape 1x1xNx7 where N is a number of
|
bottom = (int)(data[i + 6] * frame.rows);
|
||||||
// detections and an every detection is a vector of values
|
width = right - left + 1;
|
||||||
// [batchId, classId, confidence, left, top, right, bottom]
|
height = bottom - top + 1;
|
||||||
CV_Assert(outs.size() == 1);
|
}
|
||||||
float* data = (float*)outs[0].data;
|
classIds.push_back((int)(data[i + 1]) - 1); // Skip 0th background class id.
|
||||||
for (size_t i = 0; i < outs[0].total(); i += 7)
|
boxes.push_back(Rect(left, top, width, height));
|
||||||
{
|
confidences.push_back(confidence);
|
||||||
float confidence = data[i + 2];
|
}
|
||||||
if (confidence > confThreshold)
|
|
||||||
{
|
|
||||||
int left = (int)(data[i + 3] * frame.cols);
|
|
||||||
int top = (int)(data[i + 4] * frame.rows);
|
|
||||||
int right = (int)(data[i + 5] * frame.cols);
|
|
||||||
int bottom = (int)(data[i + 6] * frame.rows);
|
|
||||||
int width = right - left + 1;
|
|
||||||
int height = bottom - top + 1;
|
|
||||||
classIds.push_back((int)(data[i + 1]) - 1); // Skip 0th background class id.
|
|
||||||
boxes.push_back(Rect(left, top, width, height));
|
|
||||||
confidences.push_back(confidence);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ def postprocess(frame, outs):
|
|||||||
classIds = []
|
classIds = []
|
||||||
confidences = []
|
confidences = []
|
||||||
boxes = []
|
boxes = []
|
||||||
if net.getLayer(0).outputNameToIndex('im_info') != -1: # Faster-RCNN or R-FCN
|
if lastLayer.type == 'DetectionOutput':
|
||||||
# Network produces output blob with a shape 1x1xNx7 where N is a number of
|
# Network produces output blob with a shape 1x1xNx7 where N is a number of
|
||||||
# detections and an every detection is a vector of values
|
# detections and an every detection is a vector of values
|
||||||
# [batchId, classId, confidence, left, top, right, bottom]
|
# [batchId, classId, confidence, left, top, right, bottom]
|
||||||
@ -116,23 +116,13 @@ def postprocess(frame, outs):
|
|||||||
bottom = int(detection[6])
|
bottom = int(detection[6])
|
||||||
width = right - left + 1
|
width = right - left + 1
|
||||||
height = bottom - top + 1
|
height = bottom - top + 1
|
||||||
classIds.append(int(detection[1]) - 1) # Skip background label
|
if width * height <= 1:
|
||||||
confidences.append(float(confidence))
|
left = int(detection[3] * frameWidth)
|
||||||
boxes.append([left, top, width, height])
|
top = int(detection[4] * frameHeight)
|
||||||
elif lastLayer.type == 'DetectionOutput':
|
right = int(detection[5] * frameWidth)
|
||||||
# Network produces output blob with a shape 1x1xNx7 where N is a number of
|
bottom = int(detection[6] * frameHeight)
|
||||||
# detections and an every detection is a vector of values
|
width = right - left + 1
|
||||||
# [batchId, classId, confidence, left, top, right, bottom]
|
height = bottom - top + 1
|
||||||
for out in outs:
|
|
||||||
for detection in out[0, 0]:
|
|
||||||
confidence = detection[2]
|
|
||||||
if confidence > confThreshold:
|
|
||||||
left = int(detection[3] * frameWidth)
|
|
||||||
top = int(detection[4] * frameHeight)
|
|
||||||
right = int(detection[5] * frameWidth)
|
|
||||||
bottom = int(detection[6] * frameHeight)
|
|
||||||
width = right - left + 1
|
|
||||||
height = bottom - top + 1
|
|
||||||
classIds.append(int(detection[1]) - 1) # Skip background label
|
classIds.append(int(detection[1]) - 1) # Skip background label
|
||||||
confidences.append(float(confidence))
|
confidences.append(float(confidence))
|
||||||
boxes.append([left, top, width, height])
|
boxes.append([left, top, width, height])
|
||||||
|
Loading…
Reference in New Issue
Block a user