Skip to content

Commit afabd74

Browse files
committed
Fixing problem in PYAPI
1 parent d0298ab commit afabd74

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

src/PYAPI.cpp

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ void check_img_format(const py::buffer_info& correct_info, const py::buffer_info
2929
}
3030
}
3131

32-
// return LineSegmentDetection(n_out, img, X, Y, scale, sigma_scale, quant,
33-
// ang_th, log_eps, density_th, n_bins,
34-
// reg_img, reg_x, reg_y);
32+
struct LineSegment
33+
{
34+
double x1, y1, x2, y2, /*width, */ p /*, new_log10_NFA*/;
35+
};
3536

3637
// Passing in a generic array
3738
// Passing in an array of doubles
@@ -80,7 +81,6 @@ py::array_t<float> run_lsd(const py::array_t<double>& img,
8081
double *out = LineSegmentDetection(
8182
&N, imagePtr, info.shape[1], info.shape[0], scale, sigma_scale, quant,
8283
ang_th, log_eps, density_th, n_bins, grad_nfa, modgrad_ptr, angles_ptr);
83-
// std::cout << "Detected " << N << " LSD Segments" << std::endl;
8484

8585
py::array_t<float> segments({N, 5});
8686
for (int i = 0; i < N; i++) {
@@ -138,11 +138,8 @@ py::list batched_run_lsd(const py::array_t<double>& img,
138138

139139
const size_t batch_size = info.shape[0];
140140
const size_t img_size = info.shape[2] * info.shape[1];
141-
py::list segments;
142141

143-
for (int b = 0 ; b < batch_size ; b++){
144-
segments.append(py::array_t<float>({1, 5}));
145-
}
142+
std::vector<std::shared_ptr<std::vector<LineSegment>>> tmp(batch_size);
146143

147144
#pragma omp parallel for
148145
for (int b = 0 ; b < batch_size ; b++){
@@ -151,20 +148,34 @@ py::list batched_run_lsd(const py::array_t<double>& img,
151148
double *out = LineSegmentDetection(
152149
&N, imagePtr + b * img_size, info.shape[2], info.shape[1], scale, sigma_scale, quant,
153150
ang_th, log_eps, density_th, n_bins, grad_nfa, modgrad_ptr, angles_ptr);
154-
// std::cout << "b=" << b << ", Detected " << N << " LSD Segments" << std::endl;
155151

156-
segments[b] = py::array_t<float>({N, 5});
152+
tmp[b] = std::make_shared< std::vector<LineSegment> >(N);
153+
LineSegment * p_data = tmp[b]->data();
157154
for (int i = 0; i < N; i++) {
158-
segments[b][py::make_tuple(i, 0)] = out[7 * i + 0];
159-
segments[b][py::make_tuple(i, 1)] = out[7 * i + 1];
160-
segments[b][py::make_tuple(i, 2)] = out[7 * i + 2];
161-
segments[b][py::make_tuple(i, 3)] = out[7 * i + 3];
162-
segments[b][py::make_tuple(i, 4)] = out[7 * i + 5];
163-
// p: out[7 * i + 4]);
164-
// -log10(NFA): out[7 * i + 5]);
155+
p_data->x1 = out[7 * i + 0];
156+
p_data->y1 = out[7 * i + 1];
157+
p_data->x2 = out[7 * i + 2];
158+
p_data->y2 = out[7 * i + 3];
159+
p_data->p = out[7 * i + 5];
160+
p_data++;
165161
}
166-
free((void *) out);
162+
free(out);
167163
}
164+
165+
py::list segments;
166+
for (int b = 0; b < batch_size; b++){
167+
py::array_t<float> tmp2({int(tmp[b]->size()), 5});
168+
for (int i = 0; i < tmp[b]->size(); i++){
169+
tmp2[py::make_tuple(i, 0)] = tmp[b]->at(i).x1;
170+
tmp2[py::make_tuple(i, 1)] = tmp[b]->at(i).y1;
171+
tmp2[py::make_tuple(i, 2)] = tmp[b]->at(i).x2;
172+
tmp2[py::make_tuple(i, 3)] = tmp[b]->at(i).y2;
173+
tmp2[py::make_tuple(i, 4)] = tmp[b]->at(i).p;
174+
}
175+
segments.append(tmp2);
176+
177+
}
178+
168179
return segments;
169180
}
170181

0 commit comments

Comments
 (0)