Skip to content

Commit b39b971

Browse files
Merge pull request #1 from Extended-Object-Detection-ROS/feat/combo_image
Feat/combo image
2 parents 8f9040f + 0c57ec4 commit b39b971

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+449
-339
lines changed

ObjectBase.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -468,12 +468,10 @@ namespace eod{
468468
break;
469469
}
470470
case DEPTH_A:
471-
{
472-
double depth_scale = 0.001;
473-
int mode = 0;
474-
attr->Attribute("depthScale", &depth_scale);
471+
{
472+
int mode = 0;
475473
attr->Attribute("mode", &mode);
476-
tmpA = new DepthAttribute(depth_scale, mode);
474+
tmpA = new DepthAttribute(mode);
477475
break;
478476
}
479477
case ROUGH_DIST_A:
@@ -529,6 +527,11 @@ namespace eod{
529527
tmpA = new ExtractedInfoStringChecker(field, allowed, (partially != 0));
530528
break;
531529
}
530+
case UNIT_TRANS_EXTR_A:
531+
{
532+
tmpA = new UnitTranslationExtracter();
533+
break;
534+
}
532535

533536
default:
534537
{

detectors/ArucoDetector.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "ArucoDetector.h"
22
#include "ObjectBase.h"
33
#include "geometry_utils.h"
4+
#include <typeinfo>
45

56
using namespace std;
67
using namespace cv;
@@ -31,13 +32,9 @@ namespace eod{
3132
inited = true;
3233
}
3334

34-
vector<ExtendedObjectInfo> ArucoAttribute::Detect2(const Mat& image, int seq){
35+
vector<ExtendedObjectInfo> ArucoAttribute::Detect2(const InfoImage& image, int seq){
3536
if( !inited )
36-
return vector<ExtendedObjectInfo>(0);
37-
38-
if( !hasCamParams() ){
39-
setCamParams(parent_base->getCameraMatrix(), parent_base->getDistortionCoeff() );
40-
}
37+
return vector<ExtendedObjectInfo>(0);
4138

4239
vector<ExtendedObjectInfo> rects;
4340
if( seq == 0 || seq != prev_seq ){
@@ -47,11 +44,12 @@ namespace eod{
4744
ExtendedObjectInfo tmp = boundingRect( markerCorners[i] );
4845
set_extracted_info(tmp, "marker_id", markerIds[i]);
4946
if( returnContours )
50-
tmp.contour.push_back(float2intPointVector(markerCorners[i]));
47+
tmp.contour.push_back(float2intPointVector(markerCorners[i]));
5148

52-
if( hasCamParams() && markerLen > 0){
49+
// if image has params
50+
if( markerLen > 0 && !image.K().empty() && !image.D().empty() ){
5351
vector<cv::Vec3d> rvecs, tvecs;
54-
cv::aruco::estimatePoseSingleMarkers(vector<vector<Point2f> >(markerCorners.begin()+i,markerCorners.begin()+i+1), markerLen, camMat, distCoef, rvecs, tvecs);
52+
cv::aruco::estimatePoseSingleMarkers(vector<vector<Point2f> >(markerCorners.begin()+i,markerCorners.begin()+i+1), markerLen, image.K(), image.D(), rvecs, tvecs);
5553
tmp.tvec.push_back(tvecs[0]);
5654
tmp.rvec.push_back(rvecs[0]);
5755
}
@@ -66,20 +64,12 @@ namespace eod{
6664
}
6765

6866

69-
bool ArucoAttribute::Check2(const Mat& image,ExtendedObjectInfo& rect){
67+
bool ArucoAttribute::Check2(const InfoImage& image,ExtendedObjectInfo& rect){
7068
return false;
7169
}
7270

73-
void ArucoAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
71+
void ArucoAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
7472
}
7573

76-
void ArucoAttribute::setCamParams(Mat camMat_, Mat distCoef_){
77-
camMat = camMat_;
78-
distCoef = distCoef_;
79-
}
80-
81-
bool ArucoAttribute::hasCamParams(){
82-
return !(camMat.empty() & distCoef.empty());
83-
}
8474

8575
}

detectors/BasicMotionDetector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace eod {
1212
#endif
1313
}
1414

15-
vector<ExtendedObjectInfo> BasicMotionAttribute::Detect2(const Mat& image, int seq){
15+
vector<ExtendedObjectInfo> BasicMotionAttribute::Detect2(const InfoImage& image, int seq){
1616

1717
vector<ExtendedObjectInfo> result;
1818

@@ -54,11 +54,11 @@ namespace eod {
5454
return result;
5555
}
5656

57-
bool BasicMotionAttribute::Check2(const Mat& image, ExtendedObjectInfo& rect){
57+
bool BasicMotionAttribute::Check2(const InfoImage& image, ExtendedObjectInfo& rect){
5858
return false;
5959
}
6060

61-
void BasicMotionAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
61+
void BasicMotionAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
6262
}
6363

6464
}

detectors/BlobDetector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ namespace eod{
5454
inited = true;
5555
}
5656

57-
vector<ExtendedObjectInfo> BlobAttribute::Detect2(const cv::Mat& image, int seq){
57+
vector<ExtendedObjectInfo> BlobAttribute::Detect2(const InfoImage& image, int seq){
5858
vector<ExtendedObjectInfo> res;
5959
if( !inited )
6060
return res;
@@ -73,11 +73,11 @@ namespace eod{
7373
return res;
7474
}
7575

76-
bool BlobAttribute::Check2(const cv::Mat& image, ExtendedObjectInfo &rect){
76+
bool BlobAttribute::Check2(const InfoImage& image, ExtendedObjectInfo &rect){
7777
return false;
7878
}
7979

80-
void BlobAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
80+
void BlobAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
8181
}
8282

8383
}

detectors/DepthDetector.cpp

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,67 +7,102 @@ using namespace cv;
77

88
namespace eod{
99

10-
DepthAttribute::DepthAttribute(){
11-
depth_scale = 0.0;
10+
DepthAttribute::DepthAttribute(){
1211
inited = false;
1312
Type = DEPTH_A;
1413
}
1514

16-
DepthAttribute::DepthAttribute(double depth_scale_, int mode_){
17-
depth_scale = depth_scale_;
15+
DepthAttribute::DepthAttribute(int mode_){
1816
inited = true;
1917
Type = DEPTH_A;
2018
mode = mode_;
2119
}
2220

23-
vector<ExtendedObjectInfo> DepthAttribute::Detect2(const Mat& image, int seq){
21+
vector<ExtendedObjectInfo> DepthAttribute::Detect2(const InfoImage& image, int seq){
2422
vector<ExtendedObjectInfo> objects;
2523
return objects;
2624
}
2725

28-
bool DepthAttribute::Check2(const cv::Mat& image, ExtendedObjectInfo& rect){
26+
bool DepthAttribute::Check2(const InfoImage& image, ExtendedObjectInfo& rect){
2927
return false;
3028
}
3129

32-
void DepthAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
30+
void DepthAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
3331
if( inited ){
3432
if(image.empty()){
3533
printf("Depth image is not provided for DepthAttribute!\n");
3634
return;
3735
}
38-
Rect rect_of_depth_image = Rect(0, 0, image.size().width, image.size().height);
39-
Mat cropped;
40-
if( mode == ALL_BOX){
41-
cropped = image(rect.getRect() & rect_of_depth_image);
36+
double distance = 0;
37+
if( mode == ALL_BOX || mode == HALF_SIZE_BOX ){
38+
39+
40+
Rect rect_of_depth_image = Rect(0, 0, image.size().width, image.size().height);
41+
Mat cropped;
42+
if( mode == ALL_BOX){
43+
cropped = image(rect.getRect() & rect_of_depth_image);
44+
}
45+
else if(mode == HALF_SIZE_BOX){
46+
Rect half_rect(rect.x + rect.width/4, rect.y + rect.height/4, rect.width/2, rect.height/2);
47+
cropped = image(half_rect & rect_of_depth_image);
48+
}
49+
if( cropped.empty()){
50+
printf("Cropped image for DepthAttribute is empty!\n");
51+
return;
52+
}
53+
distance = mat_median(cropped, true);
4254
}
43-
else if(mode == HALF_SIZE_BOX){
44-
Rect half_rect(rect.x + rect.width/4, rect.y + rect.height/4, rect.width/2, rect.height/2);
45-
cropped = image(half_rect & rect_of_depth_image);
55+
else if( mode == CENTER_PX ){
56+
if(rect.tvec.size() == 0){
57+
printf("DepthAttribute in mode CENTER_PX can't obtain distance without translation vector\n");
58+
return;
59+
}
60+
if( image.K().empty() ){
61+
printf("Camera parameters have not been specified for DepthAttribute!\n");
62+
return;
63+
}
64+
Point center_registered = reverse_translation(rect.tvec[0], image.K());
65+
66+
distance = image.at<float>(center_registered);
67+
68+
/*
69+
printf("distance at (%i, %i): %f\n", center_registered.x, center_registered.y, distance);
70+
Mat image2draw;
71+
cvtColor(image, image2draw, CV_GRAY2RGB);
72+
image2draw *= 255;
73+
circle(image2draw, center_registered, 10, Scalar(0, 255, 0), 3);
74+
imshow("depth", image2draw);
75+
waitKey(1);
76+
*/
4677
}
4778
else{
4879
printf("Unknown mode in DepthAttribute!\n");
4980
return;
5081
}
51-
52-
double distance = mat_median(cropped, true) * depth_scale;
5382
if( distance > 0 ){
54-
Mat camMat = parent_base->getCameraMatrix();
55-
if( !camMat.empty() ){
56-
Vec3d tvec = get_translation(rect.getCenter(), camMat, distance);
57-
Vec3d rvec;
58-
rect.tvec.push_back(tvec);
59-
rect.rvec.push_back(rvec);
83+
84+
if( !image.K().empty() ){
85+
if( rect.tvec.size() == 0 ){
86+
Vec3d tvec = get_translation(rect.getCenter(), image.K(), distance);
87+
Vec3d rvec;
88+
rect.tvec.push_back(tvec);
89+
//rect.rvec.push_back(rvec);
90+
}
91+
else{
92+
for(auto& tvec : rect.tvec){
93+
tvec *= distance;
94+
}
95+
}
6096
}
6197
else{
6298
printf("Camera parameters have not been specified for DepthAttribute!\n");
99+
return;
63100
}
64101
}
65102
else{
66103
printf("Object is away from depthmap!\n");
67-
}
68-
69-
70-
104+
return;
105+
}
71106
}
72107
}
73108

detectors/DimentionDetector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ namespace eod{
1515
Type = DIMEN_A;
1616
}
1717

18-
vector<ExtendedObjectInfo> DimentionAttribute::Detect2(const Mat& image, int seq){
18+
vector<ExtendedObjectInfo> DimentionAttribute::Detect2(const InfoImage& image, int seq){
1919
vector <ExtendedObjectInfo> ans;
2020
return ans;
2121
}
2222

23-
bool DimentionAttribute::Check2(const Mat& image, ExtendedObjectInfo &rect){
23+
bool DimentionAttribute::Check2(const InfoImage& image, ExtendedObjectInfo &rect){
2424

2525
if( (double)rect.width / (double)rect.height < ratioMin )
2626
return false;
@@ -33,6 +33,6 @@ namespace eod{
3333
return true;
3434
}
3535

36-
void DimentionAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){}
36+
void DimentionAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){}
3737

3838
}

detectors/DistanceDetector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ namespace eod{
1717
inited = true;
1818
}
1919

20-
vector<ExtendedObjectInfo> DistanceAttribute::Detect2(const Mat& image, int seq){
20+
vector<ExtendedObjectInfo> DistanceAttribute::Detect2(const InfoImage& image, int seq){
2121
vector <ExtendedObjectInfo> ans;
2222
return ans;
2323
}
2424

25-
bool DistanceAttribute::Check2(const Mat& image, ExtendedObjectInfo &rect){
25+
bool DistanceAttribute::Check2(const InfoImage& image, ExtendedObjectInfo &rect){
2626
if( rect.tvec.size() < 1 ){
2727
printf("DimentionAttribute: object has no translation calculated!\n");
2828
return false;
@@ -46,6 +46,6 @@ namespace eod{
4646
return true;
4747
}
4848

49-
void DistanceAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){}
49+
void DistanceAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){}
5050

5151
}

detectors/DnnDetector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ namespace eod{
128128
isLabelMap = readLabelsMap(labelmapfile, labelMap);
129129
}
130130

131-
vector<ExtendedObjectInfo> DnnAttribute::Detect2(const Mat& image, int seq){
131+
vector<ExtendedObjectInfo> DnnAttribute::Detect2(const InfoImage& image, int seq){
132132
if( prev_seq != seq || seq == 0){
133133
// input net
134134
Mat blob;
@@ -224,11 +224,11 @@ namespace eod{
224224
}
225225
}
226226

227-
bool DnnAttribute::Check2(const Mat& image,ExtendedObjectInfo& rect){
227+
bool DnnAttribute::Check2(const InfoImage& image,ExtendedObjectInfo& rect){
228228
return false;
229229
}
230230

231-
void DnnAttribute::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
231+
void DnnAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
232232
}
233233

234234
}

detectors/ExtractedInfoIdChecker.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ namespace eod{
1717
forbidden = forbidden_;
1818
}
1919

20-
vector<ExtendedObjectInfo> ExtractedInfoIdChecker::Detect2(const Mat& image, int seq){
20+
vector<ExtendedObjectInfo> ExtractedInfoIdChecker::Detect2(const InfoImage& image, int seq){
2121
vector<ExtendedObjectInfo> rects(0);
2222
return rects;
2323
}
2424

25-
void ExtractedInfoIdChecker::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
25+
void ExtractedInfoIdChecker::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
2626

2727
}
2828

29-
bool ExtractedInfoIdChecker::Check2(const Mat& image, ExtendedObjectInfo& rect){
29+
bool ExtractedInfoIdChecker::Check2(const InfoImage& image, ExtendedObjectInfo& rect){
3030
if( rect.extracted_info.count(field) > 0){
3131
int rect_id = stoi(rect.extracted_info[field]);
3232

detectors/ExtractedInfoStringChecker.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ namespace eod{
1717
partially = partially_;
1818
}
1919

20-
vector<ExtendedObjectInfo> ExtractedInfoStringChecker::Detect2(const Mat& image, int seq){
20+
vector<ExtendedObjectInfo> ExtractedInfoStringChecker::Detect2(const InfoImage& image, int seq){
2121
vector<ExtendedObjectInfo> rects(0);
2222
return rects;
2323
}
2424

25-
void ExtractedInfoStringChecker::Extract2(const cv::Mat& image, ExtendedObjectInfo& rect){
25+
void ExtractedInfoStringChecker::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
2626

2727
}
2828

29-
bool ExtractedInfoStringChecker::Check2(const Mat& image, ExtendedObjectInfo& rect){
29+
bool ExtractedInfoStringChecker::Check2(const InfoImage& image, ExtendedObjectInfo& rect){
3030
if( rect.extracted_info.count(field) > 0){
3131
string value = rect.extracted_info[field];
3232

detectors/FaceDlibDetector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace eod{
4949
}
5050
}
5151

52-
vector<ExtendedObjectInfo> FaceDlibAttribute::Detect2(const Mat& image, int seq){
52+
vector<ExtendedObjectInfo> FaceDlibAttribute::Detect2(const InfoImage& image, int seq){
5353
vector<ExtendedObjectInfo> answers;
5454

5555

@@ -71,11 +71,11 @@ namespace eod{
7171
return answers;
7272
}
7373

74-
bool FaceDlibAttribute::Check2(const Mat& image, ExtendedObjectInfo& rect){
74+
bool FaceDlibAttribute::Check2(const InfoImage& image, ExtendedObjectInfo& rect){
7575
return false;
7676
}
7777

78-
void FaceDlibAttribute::Extract2(const Mat& image, ExtendedObjectInfo& rect){
78+
void FaceDlibAttribute::Extract2(const InfoImage& image, ExtendedObjectInfo& rect){
7979

8080
if( base_face_descriptors.size() == 0 )
8181
return;

0 commit comments

Comments
 (0)