robotpy-cscore 2023.4.3.0__cp39-cp39-win_amd64.whl → 2024.0.0b2.post1__cp39-cp39-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of robotpy-cscore might be problematic. Click here for more details.
- cscore/__pycache__/__init__.cpython-39.pyc +0 -0
- cscore/__pycache__/_init_cscore.cpython-39.pyc +0 -0
- cscore/__pycache__/_logging.cpython-39.pyc +0 -0
- cscore/__pycache__/version.cpython-39.pyc +0 -0
- cscore/_cscore.cp39-win_amd64.pyd +0 -0
- cscore/{_cscore/__init__.pyi → _cscore.pyi} +998 -987
- cscore/cvnp/cvnp.cpp +53 -15
- cscore/cvnp/cvnp.h +144 -82
- cscore/version.py +2 -2
- {robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/METADATA +5 -5
- robotpy_cscore-2024.0.0b2.post1.dist-info/RECORD +28 -0
- {robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/WHEEL +1 -1
- robotpy_cscore-2023.4.3.0.dist-info/RECORD +0 -28
- {robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/LICENSE +0 -0
- {robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/entry_points.txt +0 -0
- {robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/top_level.txt +0 -0
cscore/cvnp/cvnp.cpp
CHANGED
|
@@ -64,6 +64,20 @@ namespace cvnp
|
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
std::vector<std::size_t> determine_strides(const cv::Mat& m) {
|
|
68
|
+
if (m.channels() == 1) {
|
|
69
|
+
return {
|
|
70
|
+
static_cast<size_t>(m.step[0]), // row stride (in bytes)
|
|
71
|
+
static_cast<size_t>(m.step[1]) // column stride (in bytes)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
static_cast<size_t>(m.step[0]), // row stride (in bytes)
|
|
76
|
+
static_cast<size_t>(m.step[1]), // column stride (in bytes)
|
|
77
|
+
static_cast<size_t>(m.elemSize1()) // channel stride (in bytes)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
67
81
|
py::capsule make_capsule_mat(const cv::Mat& m)
|
|
68
82
|
{
|
|
69
83
|
return py::capsule(new cv::Mat(m)
|
|
@@ -74,22 +88,14 @@ namespace cvnp
|
|
|
74
88
|
|
|
75
89
|
} // namespace detail
|
|
76
90
|
|
|
77
|
-
pybind11::array mat_to_nparray(const cv::Mat& m
|
|
91
|
+
pybind11::array mat_to_nparray(const cv::Mat& m)
|
|
78
92
|
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
, m.data
|
|
86
|
-
, detail::make_capsule_mat(m)
|
|
87
|
-
);
|
|
88
|
-
else
|
|
89
|
-
return pybind11::array(detail::determine_np_dtype(m.depth())
|
|
90
|
-
, detail::determine_shape(m)
|
|
91
|
-
, m.data
|
|
92
|
-
);
|
|
93
|
+
return pybind11::array(detail::determine_np_dtype(m.depth())
|
|
94
|
+
, detail::determine_shape(m)
|
|
95
|
+
, detail::determine_strides(m)
|
|
96
|
+
, m.data
|
|
97
|
+
, detail::make_capsule_mat(m)
|
|
98
|
+
);
|
|
93
99
|
}
|
|
94
100
|
|
|
95
101
|
|
|
@@ -124,4 +130,36 @@ namespace cvnp
|
|
|
124
130
|
return m;
|
|
125
131
|
}
|
|
126
132
|
|
|
133
|
+
// this version tries to handles strides and submatrices
|
|
134
|
+
// this is WIP, currently broken, and not used
|
|
135
|
+
cv::Mat nparray_to_mat_with_strides_broken(pybind11::array& a)
|
|
136
|
+
{
|
|
137
|
+
int depth = detail::determine_cv_depth(a.dtype());
|
|
138
|
+
int type = detail::determine_cv_type(a, depth);
|
|
139
|
+
cv::Size size = detail::determine_cv_size(a);
|
|
140
|
+
|
|
141
|
+
auto buffer_info = a.request();
|
|
142
|
+
|
|
143
|
+
// Get the array strides (convert from pybind11::ssize_t to size_t)
|
|
144
|
+
std::vector<size_t> strides;
|
|
145
|
+
for (auto v : buffer_info.strides)
|
|
146
|
+
strides.push_back(static_cast<size_t>(v));
|
|
147
|
+
|
|
148
|
+
// Get the number of dimensions
|
|
149
|
+
int ndims = static_cast<int>(buffer_info.ndim);
|
|
150
|
+
//if ((ndims != 2) && (ndims != 3))
|
|
151
|
+
// throw std::invalid_argument("nparray_to_mat needs support only 2 or 3 dimension matrices");
|
|
152
|
+
|
|
153
|
+
// Convert the shape (sizes) to a vector of int
|
|
154
|
+
std::vector<int> sizes;
|
|
155
|
+
for (auto v : buffer_info.shape)
|
|
156
|
+
sizes.push_back(static_cast<int>(v));
|
|
157
|
+
|
|
158
|
+
// Create the cv::Mat with the specified strides (steps)
|
|
159
|
+
// We are calling this Mat constructor:
|
|
160
|
+
// Mat(const std::vector<int>& sizes, int type, void* data, const size_t* steps=0)
|
|
161
|
+
cv::Mat m(sizes, type, a.mutable_data(0), strides.data());
|
|
162
|
+
return m;
|
|
163
|
+
}
|
|
164
|
+
|
|
127
165
|
} // namespace cvnp
|
cscore/cvnp/cvnp.h
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
#include "cvnp/cvnp_synonyms.h"
|
|
3
|
-
#include "cvnp/cvnp_shared_mat.h"
|
|
4
3
|
|
|
5
4
|
#include <opencv2/core/core.hpp>
|
|
6
5
|
#include <pybind11/numpy.h>
|
|
@@ -18,12 +17,15 @@ namespace cvnp
|
|
|
18
17
|
//
|
|
19
18
|
// Public interface
|
|
20
19
|
//
|
|
21
|
-
|
|
20
|
+
|
|
21
|
+
// For cv::Mat (*with* shared memory)
|
|
22
|
+
pybind11::array mat_to_nparray(const cv::Mat& m);
|
|
22
23
|
cv::Mat nparray_to_mat(pybind11::array& a);
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// For cv::Matx (*without* shared memory)
|
|
26
|
+
template<typename _Tp, int _rows, int _cols>
|
|
27
|
+
pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m);
|
|
28
|
+
template<typename _Tp, int _rows, int _cols>
|
|
27
29
|
void nparray_to_matx(pybind11::array &a, cv::Matx<_Tp, _rows, _cols>& out_matrix);
|
|
28
30
|
|
|
29
31
|
|
|
@@ -42,21 +44,13 @@ namespace cvnp
|
|
|
42
44
|
} // namespace detail
|
|
43
45
|
|
|
44
46
|
template<typename _Tp, int _rows, int _cols>
|
|
45
|
-
pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m
|
|
47
|
+
pybind11::array matx_to_nparray(const cv::Matx<_Tp, _rows, _cols>& m)
|
|
46
48
|
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
, detail::make_capsule_matx<_Tp, _rows, _cols>(m)
|
|
53
|
-
);
|
|
54
|
-
else
|
|
55
|
-
return pybind11::array(
|
|
56
|
-
pybind11::dtype::of<_Tp>()
|
|
57
|
-
, std::vector<std::size_t> {_rows, _cols}
|
|
58
|
-
, m.val
|
|
59
|
-
);
|
|
49
|
+
return pybind11::array(
|
|
50
|
+
pybind11::dtype::of<_Tp>()
|
|
51
|
+
, std::vector<std::size_t> {_rows, _cols}
|
|
52
|
+
, m.val
|
|
53
|
+
);
|
|
60
54
|
}
|
|
61
55
|
|
|
62
56
|
template<typename _Tp, int _rows, int _cols>
|
|
@@ -84,18 +78,16 @@ namespace pybind11
|
|
|
84
78
|
namespace detail
|
|
85
79
|
{
|
|
86
80
|
//
|
|
87
|
-
// Cast between
|
|
81
|
+
// Cast between cv::Mat and numpy.ndarray
|
|
88
82
|
// The cast between cv::Mat and numpy.ndarray works
|
|
89
83
|
// - *with* shared memory when going from C++ to Python
|
|
90
84
|
// - *with* shared memory when going from Python to C++
|
|
91
|
-
// any modification to the Matrix size, type, and values is immediately
|
|
92
|
-
// impacted on both sides.
|
|
93
|
-
//
|
|
85
|
+
// any modification to the Matrix size, type, and values is immediately impacted on both sides.
|
|
94
86
|
template<>
|
|
95
|
-
struct type_caster<
|
|
87
|
+
struct type_caster<cv::Mat>
|
|
96
88
|
{
|
|
97
89
|
public:
|
|
98
|
-
PYBIND11_TYPE_CASTER(
|
|
90
|
+
PYBIND11_TYPE_CASTER(cv::Mat, _("numpy.ndarray"));
|
|
99
91
|
|
|
100
92
|
/**
|
|
101
93
|
* Conversion part 1 (Python->C++):
|
|
@@ -104,12 +96,12 @@ namespace pybind11
|
|
|
104
96
|
*/
|
|
105
97
|
bool load(handle src, bool)
|
|
106
98
|
{
|
|
107
|
-
if (!isinstance<array>(src))
|
|
99
|
+
if (!isinstance<array>(src))
|
|
108
100
|
return false;
|
|
109
|
-
|
|
101
|
+
|
|
110
102
|
auto a = reinterpret_borrow<array>(src);
|
|
111
|
-
auto new_mat =
|
|
112
|
-
value
|
|
103
|
+
auto new_mat = cvnp::nparray_to_mat(a);
|
|
104
|
+
value = new_mat;
|
|
113
105
|
return true;
|
|
114
106
|
}
|
|
115
107
|
|
|
@@ -119,25 +111,25 @@ namespace pybind11
|
|
|
119
111
|
* (for ``return_value_policy::reference_internal``) and are generally
|
|
120
112
|
* ignored by implicit casters.
|
|
121
113
|
*/
|
|
122
|
-
static handle cast(const
|
|
114
|
+
static handle cast(const cv::Mat &m, return_value_policy, handle defval)
|
|
123
115
|
{
|
|
124
|
-
auto a = cvnp::mat_to_nparray(m
|
|
116
|
+
auto a = cvnp::mat_to_nparray(m);
|
|
125
117
|
return a.release();
|
|
126
118
|
}
|
|
127
119
|
};
|
|
128
120
|
|
|
129
|
-
|
|
130
121
|
//
|
|
131
|
-
// Cast between cv::
|
|
132
|
-
// The cast between cv::
|
|
133
|
-
// - *
|
|
122
|
+
// Cast between cv::Mat_ and numpy.ndarray
|
|
123
|
+
// The cast between cv::Mat_ and numpy.ndarray works
|
|
124
|
+
// - *with* shared memory when going from C++ to Python
|
|
134
125
|
// - *with* shared memory when going from Python to C++
|
|
135
|
-
//
|
|
136
|
-
template
|
|
137
|
-
struct type_caster<cv::
|
|
126
|
+
// any modification to the Matrix size, type, and values is immediately impacted on both sides.
|
|
127
|
+
template<typename _Tp>
|
|
128
|
+
struct type_caster<cv::Mat_<_Tp>>
|
|
138
129
|
{
|
|
130
|
+
using MatTp = cv::Mat_<_Tp>;
|
|
139
131
|
public:
|
|
140
|
-
PYBIND11_TYPE_CASTER(
|
|
132
|
+
PYBIND11_TYPE_CASTER(MatTp, _("numpy.ndarray"));
|
|
141
133
|
|
|
142
134
|
/**
|
|
143
135
|
* Conversion part 1 (Python->C++):
|
|
@@ -146,9 +138,9 @@ namespace pybind11
|
|
|
146
138
|
*/
|
|
147
139
|
bool load(handle src, bool)
|
|
148
140
|
{
|
|
149
|
-
if (!isinstance<array>(src))
|
|
141
|
+
if (!isinstance<array>(src))
|
|
150
142
|
return false;
|
|
151
|
-
|
|
143
|
+
|
|
152
144
|
auto a = reinterpret_borrow<array>(src);
|
|
153
145
|
auto new_mat = cvnp::nparray_to_mat(a);
|
|
154
146
|
value = new_mat;
|
|
@@ -161,87 +153,75 @@ namespace pybind11
|
|
|
161
153
|
* (for ``return_value_policy::reference_internal``) and are generally
|
|
162
154
|
* ignored by implicit casters.
|
|
163
155
|
*/
|
|
164
|
-
static handle cast(const
|
|
156
|
+
static handle cast(const MatTp &m, return_value_policy, handle defval)
|
|
165
157
|
{
|
|
166
|
-
auto a = cvnp::mat_to_nparray(m
|
|
158
|
+
auto a = cvnp::mat_to_nparray(m);
|
|
167
159
|
return a.release();
|
|
168
160
|
}
|
|
169
161
|
};
|
|
170
162
|
|
|
171
163
|
|
|
172
|
-
|
|
173
|
-
// Cast between
|
|
174
|
-
//
|
|
175
|
-
// any modification to the Matrix size, type, and values is immediately
|
|
176
|
-
// impacted on both sides.
|
|
177
|
-
// - *with* shared memory when going from C++ to Python
|
|
178
|
-
// - *with* shared memory when going from Python to C++
|
|
179
|
-
//
|
|
164
|
+
|
|
165
|
+
// Cast between cv::Matx<_rows,_cols> (aka Matx33d, Matx21d, etc) and numpy.ndarray
|
|
166
|
+
// *without* shared memory.
|
|
180
167
|
template<typename _Tp, int _rows, int _cols>
|
|
181
|
-
struct type_caster<
|
|
168
|
+
struct type_caster<cv::Matx<_Tp, _rows, _cols> >
|
|
182
169
|
{
|
|
183
|
-
using
|
|
170
|
+
using Matxxx = cv::Matx<_Tp, _rows, _cols>;
|
|
184
171
|
|
|
185
172
|
public:
|
|
186
|
-
PYBIND11_TYPE_CASTER(
|
|
173
|
+
PYBIND11_TYPE_CASTER(Matxxx, _("numpy.ndarray"));
|
|
187
174
|
|
|
188
175
|
// Conversion part 1 (Python->C++)
|
|
189
176
|
bool load(handle src, bool)
|
|
190
177
|
{
|
|
191
|
-
if (!isinstance<array>(src))
|
|
178
|
+
if (!isinstance<array>(src))
|
|
192
179
|
return false;
|
|
193
|
-
}
|
|
194
180
|
|
|
195
181
|
auto a = reinterpret_borrow<array>(src);
|
|
196
|
-
cvnp::nparray_to_matx<_Tp, _rows, _cols>(a, value
|
|
182
|
+
cvnp::nparray_to_matx<_Tp, _rows, _cols>(a, value);
|
|
197
183
|
return true;
|
|
198
184
|
}
|
|
199
185
|
|
|
200
186
|
// Conversion part 2 (C++ -> Python)
|
|
201
|
-
static handle cast(const
|
|
187
|
+
static handle cast(const Matxxx &m, return_value_policy, handle defval)
|
|
202
188
|
{
|
|
203
|
-
auto a = cvnp::matx_to_nparray<_Tp, _rows, _cols>(m
|
|
189
|
+
auto a = cvnp::matx_to_nparray<_Tp, _rows, _cols>(m);
|
|
204
190
|
return a.release();
|
|
205
191
|
}
|
|
206
192
|
};
|
|
207
193
|
|
|
208
194
|
|
|
209
|
-
//
|
|
210
|
-
//
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
// - *with* shared memory when going from Python to C++
|
|
214
|
-
//
|
|
215
|
-
template<typename _Tp, int _rows, int _cols>
|
|
216
|
-
struct type_caster<cv::Matx<_Tp, _rows, _cols> >
|
|
195
|
+
// Cast between cv::Vec<_rows> and numpy.ndarray
|
|
196
|
+
// *without* shared memory.
|
|
197
|
+
template<typename _Tp, int _rows>
|
|
198
|
+
struct type_caster<cv::Vec<_Tp, _rows> >
|
|
217
199
|
{
|
|
218
|
-
using
|
|
200
|
+
using Vecxxx = cv::Vec<_Tp, _rows>;
|
|
219
201
|
|
|
220
202
|
public:
|
|
221
|
-
PYBIND11_TYPE_CASTER(
|
|
203
|
+
PYBIND11_TYPE_CASTER(Vecxxx, _("numpy.ndarray"));
|
|
222
204
|
|
|
223
205
|
// Conversion part 1 (Python->C++)
|
|
224
206
|
bool load(handle src, bool)
|
|
225
207
|
{
|
|
226
|
-
if (!isinstance<array>(src))
|
|
208
|
+
if (!isinstance<array>(src))
|
|
227
209
|
return false;
|
|
228
|
-
}
|
|
229
210
|
|
|
230
211
|
auto a = reinterpret_borrow<array>(src);
|
|
231
|
-
cvnp::nparray_to_matx<_Tp, _rows,
|
|
212
|
+
cvnp::nparray_to_matx<_Tp, _rows, 1>(a, value);
|
|
232
213
|
return true;
|
|
233
214
|
}
|
|
234
215
|
|
|
235
216
|
// Conversion part 2 (C++ -> Python)
|
|
236
|
-
static handle cast(const
|
|
217
|
+
static handle cast(const Vecxxx &m, return_value_policy, handle defval)
|
|
237
218
|
{
|
|
238
|
-
auto a = cvnp::matx_to_nparray<_Tp, _rows,
|
|
219
|
+
auto a = cvnp::matx_to_nparray<_Tp, _rows, 1>(m);
|
|
239
220
|
return a.release();
|
|
240
221
|
}
|
|
241
222
|
};
|
|
242
223
|
|
|
243
224
|
|
|
244
|
-
|
|
245
225
|
//
|
|
246
226
|
// Cast between cv::Size and a simple python tuple.
|
|
247
227
|
// No shared memory, you cannot modify the width or the height without
|
|
@@ -258,9 +238,8 @@ namespace pybind11
|
|
|
258
238
|
// Conversion part 1 (Python->C++, i.e tuple -> Size)
|
|
259
239
|
bool load(handle src, bool)
|
|
260
240
|
{
|
|
261
|
-
if (!isinstance<pybind11::tuple>(src))
|
|
241
|
+
if (!isinstance<pybind11::tuple>(src))
|
|
262
242
|
return false;
|
|
263
|
-
}
|
|
264
243
|
|
|
265
244
|
auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
|
|
266
245
|
if (tuple.size() != 2)
|
|
@@ -299,9 +278,8 @@ namespace pybind11
|
|
|
299
278
|
// Conversion part 1 (Python->C++)
|
|
300
279
|
bool load(handle src, bool)
|
|
301
280
|
{
|
|
302
|
-
if (!isinstance<pybind11::tuple>(src))
|
|
281
|
+
if (!isinstance<pybind11::tuple>(src))
|
|
303
282
|
return false;
|
|
304
|
-
}
|
|
305
283
|
|
|
306
284
|
auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
|
|
307
285
|
if (tuple.size() != 2)
|
|
@@ -324,7 +302,6 @@ namespace pybind11
|
|
|
324
302
|
};
|
|
325
303
|
|
|
326
304
|
|
|
327
|
-
|
|
328
305
|
//
|
|
329
306
|
// Point3
|
|
330
307
|
// No shared memory
|
|
@@ -340,9 +317,8 @@ namespace pybind11
|
|
|
340
317
|
// Conversion part 1 (Python->C++)
|
|
341
318
|
bool load(handle src, bool)
|
|
342
319
|
{
|
|
343
|
-
if (!isinstance<pybind11::tuple>(src))
|
|
320
|
+
if (!isinstance<pybind11::tuple>(src))
|
|
344
321
|
return false;
|
|
345
|
-
}
|
|
346
322
|
|
|
347
323
|
auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
|
|
348
324
|
if (tuple.size() != 3)
|
|
@@ -365,6 +341,92 @@ namespace pybind11
|
|
|
365
341
|
}
|
|
366
342
|
};
|
|
367
343
|
|
|
344
|
+
//
|
|
345
|
+
// Scalar
|
|
346
|
+
// No shared memory
|
|
347
|
+
//
|
|
348
|
+
template<typename _Tp>
|
|
349
|
+
struct type_caster<cv::Scalar_<_Tp>>
|
|
350
|
+
{
|
|
351
|
+
using ScalarTp = cv::Scalar_<_Tp>;
|
|
352
|
+
|
|
353
|
+
public:
|
|
354
|
+
PYBIND11_TYPE_CASTER(ScalarTp , _("tuple"));
|
|
355
|
+
|
|
356
|
+
// Conversion part 1 (Python->C++)
|
|
357
|
+
bool load(handle src, bool)
|
|
358
|
+
{
|
|
359
|
+
if (!isinstance<pybind11::tuple>(src))
|
|
360
|
+
return false;
|
|
361
|
+
|
|
362
|
+
auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
|
|
363
|
+
const auto tupleSize = tuple.size();
|
|
364
|
+
if (tupleSize > 4)
|
|
365
|
+
throw std::invalid_argument("Scalar should be a tuple with at most 4 elements. Got " + std::to_string(tupleSize));
|
|
366
|
+
|
|
367
|
+
ScalarTp r;
|
|
368
|
+
if (tupleSize == 1)
|
|
369
|
+
r = ScalarTp(tuple[0].cast<_Tp>());
|
|
370
|
+
else if (tupleSize == 2)
|
|
371
|
+
r = ScalarTp(tuple[0].cast<_Tp>(), tuple[1].cast<_Tp>());
|
|
372
|
+
else if (tupleSize == 3)
|
|
373
|
+
r = ScalarTp(tuple[0].cast<_Tp>(), tuple[1].cast<_Tp>(), tuple[2].cast<_Tp>());
|
|
374
|
+
else if (tupleSize == 4)
|
|
375
|
+
r = ScalarTp(tuple[0].cast<_Tp>(), tuple[1].cast<_Tp>(), tuple[2].cast<_Tp>(), tuple[3].cast<_Tp>());
|
|
376
|
+
|
|
377
|
+
value = r;
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Conversion part 2 (C++ -> Python)
|
|
382
|
+
static handle cast(const ScalarTp &value, return_value_policy, handle defval)
|
|
383
|
+
{
|
|
384
|
+
auto result = pybind11::make_tuple(value[0], value[1], value[2], value[3]);
|
|
385
|
+
return result.release();
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
//
|
|
390
|
+
// Rect_
|
|
391
|
+
// No shared memory
|
|
392
|
+
//
|
|
393
|
+
template<typename _Tp>
|
|
394
|
+
struct type_caster<cv::Rect_<_Tp>>
|
|
395
|
+
{
|
|
396
|
+
using RectTp = cv::Rect_<_Tp>;
|
|
397
|
+
|
|
398
|
+
public:
|
|
399
|
+
PYBIND11_TYPE_CASTER(RectTp , _("tuple"));
|
|
400
|
+
|
|
401
|
+
// Conversion part 1 (Python->C++)
|
|
402
|
+
bool load(handle src, bool)
|
|
403
|
+
{
|
|
404
|
+
if (!isinstance<pybind11::tuple>(src))
|
|
405
|
+
return false;
|
|
406
|
+
|
|
407
|
+
auto tuple = pybind11::reinterpret_borrow<pybind11::tuple>(src);
|
|
408
|
+
const auto tupleSize = tuple.size();
|
|
409
|
+
if (tupleSize != 4)
|
|
410
|
+
throw std::invalid_argument("Rect should be a tuple with 4 elements. Got " + std::to_string(tupleSize));
|
|
411
|
+
|
|
412
|
+
RectTp r;
|
|
413
|
+
r.x = tuple[0].cast<_Tp>();
|
|
414
|
+
r.y = tuple[1].cast<_Tp>();
|
|
415
|
+
r.width = tuple[2].cast<_Tp>();
|
|
416
|
+
r.height = tuple[3].cast<_Tp>();
|
|
417
|
+
|
|
418
|
+
value = r;
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Conversion part 2 (C++ -> Python)
|
|
423
|
+
static handle cast(const RectTp &value, return_value_policy, handle defval)
|
|
424
|
+
{
|
|
425
|
+
auto result = pybind11::make_tuple(value.x, value.y, value.width, value.height);
|
|
426
|
+
return result.release();
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
|
|
368
430
|
|
|
369
431
|
} // namespace detail
|
|
370
432
|
} // namespace pybind11
|
cscore/version.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
# file generated by setuptools_scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
|
-
__version__ = version = '
|
|
4
|
-
__version_tuple__ = version_tuple = (
|
|
3
|
+
__version__ = version = '2024.0.0b2.post1'
|
|
4
|
+
__version_tuple__ = version_tuple = (2024, 0, 0)
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: robotpy-cscore
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2024.0.0b2.post1
|
|
4
4
|
Summary: RobotPy bindings for cscore image processing library
|
|
5
5
|
Home-page: https://github.com/robotpy/robotpy-cscore
|
|
6
6
|
Author: RobotPy Development Team
|
|
7
7
|
Author-email: robotpy@googlegroups.com
|
|
8
8
|
License: BSD-3-Clause
|
|
9
9
|
Platform: UNKNOWN
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
11
|
Description-Content-Type: text/x-rst
|
|
12
12
|
License-File: LICENSE
|
|
13
|
-
Requires-Dist: robotpy-wpiutil
|
|
14
|
-
Requires-Dist: robotpy-wpinet
|
|
15
|
-
Requires-Dist: pyntcore
|
|
13
|
+
Requires-Dist: robotpy-wpiutil ~=2024.0.0b2
|
|
14
|
+
Requires-Dist: robotpy-wpinet ~=2024.0.0b2
|
|
15
|
+
Requires-Dist: pyntcore ~=2024.0.0b2
|
|
16
16
|
|
|
17
17
|
robotpy-cscore
|
|
18
18
|
==============
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
cscore/__init__.py,sha256=VaZBAeqPudG-P5ca41SS9q7UNjEyfAM08xaXba1Q-uk,1091
|
|
2
|
+
cscore/__main__.py,sha256=JmC0gHCGkRWCrwjvp28hZlhr24b9Mol3lwlS1UF3Cls,4393
|
|
3
|
+
cscore/_cscore.cp39-win_amd64.pyd,sha256=3eD7tdR_zWlhL24TzsDnWYpy0FKOcDYfl0RklbZYa0Q,3532800
|
|
4
|
+
cscore/_cscore.pyi,sha256=YfRqCjW2j2zkz0_KqrBShq_tU7A4gzg79ZurM4ZTwpc,48747
|
|
5
|
+
cscore/_init_cscore.py,sha256=IJoWfQi1FpW48Uez-o9vS8SVCArHlmCAGt1BZkmbZmY,267
|
|
6
|
+
cscore/_logging.py,sha256=uv1Shlu49aPgQpRn5yD2ybT4N8ewJS3qUFOn8YTffwg,333
|
|
7
|
+
cscore/grip.py,sha256=qC6MbWvVllpnnsm10f31gqq4_PMWI_G9GKt3PfOaUpo,1042
|
|
8
|
+
cscore/imagewriter.py,sha256=RAWRRhL3DLNampZJjdd7Ye_8P1AmiYAZsWhnwov5id0,4537
|
|
9
|
+
cscore/pkgcfg.py,sha256=nkuqOy-Oy0Kw0pi8YXX9KfQCviwNliFZZlSOi2slsiw,791
|
|
10
|
+
cscore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
cscore/version.py,sha256=DanI4SMo27Ol-LhGJpo64n5wVW9DyAZH2keeQt7Zc-0,178
|
|
12
|
+
cscore/__pycache__/__init__.cpython-39.pyc,sha256=oDK_BbvbCJDhWnnTZUkMIxihdor-tWY6NmHcj8ywEb4,986
|
|
13
|
+
cscore/__pycache__/_init_cscore.cpython-39.pyc,sha256=m2va8AB-349tz4mWsw8DLtL9M4RtyCaLNdK6vWBoZmA,433
|
|
14
|
+
cscore/__pycache__/_logging.cpython-39.pyc,sha256=OPou89jMZS-hiFjOgZ1_Tehsr6J9bl-NeHpcG-_XECQ,678
|
|
15
|
+
cscore/__pycache__/version.cpython-39.pyc,sha256=dpN1C72aL76UKHnB-MIziLtnh7td6v0UTCk7-js6ung,294
|
|
16
|
+
cscore/cvnp/README.md,sha256=197MQ-gG-pZf9YAUZqcHXLKk8au8WtxXrfFf7lnwHAo,1175
|
|
17
|
+
cscore/cvnp/cvnp.cpp,sha256=Zo-8jL2qRbH9SG0605vQ0-I1NjQKRfVqLyV7YxJEfqU,6247
|
|
18
|
+
cscore/cvnp/cvnp.h,sha256=4ymsVQgp8nOJqVazCtENVMgfTJ32M_j0ShfltPxL5aw,14852
|
|
19
|
+
cscore/cvnp/cvnp_shared_mat.h,sha256=xNsaRqfhi_D4yxCZF55Or96MOTsLyg_Mn9gLeOPin88,3576
|
|
20
|
+
cscore/cvnp/cvnp_synonyms.cpp,sha256=ZpLZzmK5ZcrIgLfi_j7eJ_NXLNtcb8ymDWehYuVVHvo,2419
|
|
21
|
+
cscore/cvnp/cvnp_synonyms.h,sha256=MgU4yOOXMhGGLrKb06dX4nsQLtqkq_1gDE6ToR3mjFo,589
|
|
22
|
+
cscore/src/main.cpp,sha256=H7WmA3wj-1pZduYdFBsrH1Ayfir4ur-bYsFhySe4Beo,532
|
|
23
|
+
robotpy_cscore-2024.0.0b2.post1.dist-info/LICENSE,sha256=eday0nHMlO9Rc7a6n0ONgNEe6N20r5xNWivVL5n-fN4,3138
|
|
24
|
+
robotpy_cscore-2024.0.0b2.post1.dist-info/METADATA,sha256=5M_-Arlp7YhEameDqqcOn-nIgZ_BQDig8LdjrSlNDoc,1128
|
|
25
|
+
robotpy_cscore-2024.0.0b2.post1.dist-info/WHEEL,sha256=QEPhY-QL5bUCGe8xLO1ow2Nlf5beRmRJkZ8YmG0I2hM,100
|
|
26
|
+
robotpy_cscore-2024.0.0b2.post1.dist-info/entry_points.txt,sha256=hFrjQmvJC8KIGhuinIdAazBPJW2oCe301Q9ZaIHVCe4,39
|
|
27
|
+
robotpy_cscore-2024.0.0b2.post1.dist-info/top_level.txt,sha256=yKRnfRQe07G2XO6XXYgsj9CN2obAQX3D3gsGvcewpVw,7
|
|
28
|
+
robotpy_cscore-2024.0.0b2.post1.dist-info/RECORD,,
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
cscore/__init__.py,sha256=VaZBAeqPudG-P5ca41SS9q7UNjEyfAM08xaXba1Q-uk,1091
|
|
2
|
-
cscore/__main__.py,sha256=JmC0gHCGkRWCrwjvp28hZlhr24b9Mol3lwlS1UF3Cls,4393
|
|
3
|
-
cscore/_cscore.cp39-win_amd64.pyd,sha256=YKc7C6IlR4i8LhkYULbvcJWuJ-483ooaQWBpXq6wp4o,3401728
|
|
4
|
-
cscore/_init_cscore.py,sha256=IJoWfQi1FpW48Uez-o9vS8SVCArHlmCAGt1BZkmbZmY,267
|
|
5
|
-
cscore/_logging.py,sha256=uv1Shlu49aPgQpRn5yD2ybT4N8ewJS3qUFOn8YTffwg,333
|
|
6
|
-
cscore/grip.py,sha256=qC6MbWvVllpnnsm10f31gqq4_PMWI_G9GKt3PfOaUpo,1042
|
|
7
|
-
cscore/imagewriter.py,sha256=RAWRRhL3DLNampZJjdd7Ye_8P1AmiYAZsWhnwov5id0,4537
|
|
8
|
-
cscore/pkgcfg.py,sha256=nkuqOy-Oy0Kw0pi8YXX9KfQCviwNliFZZlSOi2slsiw,791
|
|
9
|
-
cscore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
cscore/version.py,sha256=aMmkAteYZjbJfZ43WF8Lt7EqRicJGj3mDI7c1j5iuWE,175
|
|
11
|
-
cscore/__pycache__/__init__.cpython-39.pyc,sha256=6x_ii2F04-GsOvOGqb1DT8gjUb7UIEp9xn6rH6R65Xs,965
|
|
12
|
-
cscore/__pycache__/_init_cscore.cpython-39.pyc,sha256=JuXD8m5B9YdvGQNHC8758i-4L8A8EpBHZZo5aW3aMew,412
|
|
13
|
-
cscore/__pycache__/_logging.cpython-39.pyc,sha256=vw5VfPy5tnPwie--OQ8xbQBC0RU6i9pmbkDlkdRNha8,657
|
|
14
|
-
cscore/__pycache__/version.cpython-39.pyc,sha256=1P-PvrwYjk4iL18_6067BkyUb9IrUmgDoG4swKUa2_Q,272
|
|
15
|
-
cscore/_cscore/__init__.pyi,sha256=B17Jn5y05zBRErbjBkalwAAJLo-kw1bi7IoEQTGI340,47184
|
|
16
|
-
cscore/cvnp/README.md,sha256=197MQ-gG-pZf9YAUZqcHXLKk8au8WtxXrfFf7lnwHAo,1175
|
|
17
|
-
cscore/cvnp/cvnp.cpp,sha256=us_1aHeh63La0gXdmrxoBgZupmQknGCEapEbiwTgmzA,4719
|
|
18
|
-
cscore/cvnp/cvnp.h,sha256=93ALp2KIgnLlyJpqlyASnRm81m3QEHQqv7w0RAqNyFE,12952
|
|
19
|
-
cscore/cvnp/cvnp_shared_mat.h,sha256=xNsaRqfhi_D4yxCZF55Or96MOTsLyg_Mn9gLeOPin88,3576
|
|
20
|
-
cscore/cvnp/cvnp_synonyms.cpp,sha256=ZpLZzmK5ZcrIgLfi_j7eJ_NXLNtcb8ymDWehYuVVHvo,2419
|
|
21
|
-
cscore/cvnp/cvnp_synonyms.h,sha256=MgU4yOOXMhGGLrKb06dX4nsQLtqkq_1gDE6ToR3mjFo,589
|
|
22
|
-
cscore/src/main.cpp,sha256=H7WmA3wj-1pZduYdFBsrH1Ayfir4ur-bYsFhySe4Beo,532
|
|
23
|
-
robotpy_cscore-2023.4.3.0.dist-info/LICENSE,sha256=eday0nHMlO9Rc7a6n0ONgNEe6N20r5xNWivVL5n-fN4,3138
|
|
24
|
-
robotpy_cscore-2023.4.3.0.dist-info/METADATA,sha256=W80tx5DX8EoNy5sXFEFt6TlhLJwxYOg6Jo48hFZrFT4,1122
|
|
25
|
-
robotpy_cscore-2023.4.3.0.dist-info/WHEEL,sha256=eep6QWEFiQfg2wcclssb_WY-D33AnLYLnEKGA9Rn-VU,100
|
|
26
|
-
robotpy_cscore-2023.4.3.0.dist-info/entry_points.txt,sha256=hFrjQmvJC8KIGhuinIdAazBPJW2oCe301Q9ZaIHVCe4,39
|
|
27
|
-
robotpy_cscore-2023.4.3.0.dist-info/top_level.txt,sha256=yKRnfRQe07G2XO6XXYgsj9CN2obAQX3D3gsGvcewpVw,7
|
|
28
|
-
robotpy_cscore-2023.4.3.0.dist-info/RECORD,,
|
|
File without changes
|
{robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{robotpy_cscore-2023.4.3.0.dist-info → robotpy_cscore-2024.0.0b2.post1.dist-info}/top_level.txt
RENAMED
|
File without changes
|