首页下载资源后端针对原始pyk4a进行了修改,适用于双AzureKinect相机同时采图,该库使用详情请见后续博客

ZIP针对原始pyk4a进行了修改,适用于双AzureKinect相机同时采图,该库使用详情请见后续博客

qq_4323585663.4KB需要积分:1

资源文件列表:

pyk4a_for_2camera.zip 大约有39个文件
  1. pyk4a/
  2. pyk4a/__init__.py 1.37KB
  3. pyk4a/__pycache__/
  4. pyk4a/__pycache__/__init__.cpython-36.pyc 1.43KB
  5. pyk4a/__pycache__/__init__.cpython-37.pyc 1.27KB
  6. pyk4a/__pycache__/calibration.cpython-36.pyc 6.74KB
  7. pyk4a/__pycache__/calibration.cpython-37.pyc 6.74KB
  8. pyk4a/__pycache__/capture.cpython-36.pyc 10.52KB
  9. pyk4a/__pycache__/capture.cpython-37.pyc 10.5KB
  10. pyk4a/__pycache__/config.cpython-36.pyc 3.02KB
  11. pyk4a/__pycache__/config.cpython-37.pyc 3KB
  12. pyk4a/__pycache__/errors.cpython-36.pyc 715B
  13. pyk4a/__pycache__/errors.cpython-37.pyc 715B
  14. pyk4a/__pycache__/module.cpython-36.pyc 792B
  15. pyk4a/__pycache__/module.cpython-37.pyc 792B
  16. pyk4a/__pycache__/playback.cpython-36.pyc 6.45KB
  17. pyk4a/__pycache__/playback.cpython-37.pyc 6.49KB
  18. pyk4a/__pycache__/pyk4a1.cpython-36.pyc 21.61KB
  19. pyk4a/__pycache__/pyk4a1.cpython-37.pyc 21.71KB
  20. pyk4a/__pycache__/record.cpython-36.pyc 6.25KB
  21. pyk4a/__pycache__/record.cpython-37.pyc 6.24KB
  22. pyk4a/__pycache__/results.cpython-36.pyc 739B
  23. pyk4a/__pycache__/results.cpython-37.pyc 739B
  24. pyk4a/__pycache__/transformation.cpython-36.pyc 1.83KB
  25. pyk4a/__pycache__/transformation.cpython-37.pyc 1.83KB
  26. pyk4a/__pycache__/win32_utils.cpython-36.pyc 1.47KB
  27. pyk4a/calibration.py 7.51KB
  28. pyk4a/capture.py 13.71KB
  29. pyk4a/config.py 2.71KB
  30. pyk4a/errors.py 348B
  31. pyk4a/module.py 1.01KB
  32. pyk4a/playback.py 6.49KB
  33. pyk4a/py.typed 8B
  34. pyk4a/pyk4a.cpp 57KB
  35. pyk4a/pyk4a1.py 21.57KB
  36. pyk4a/record.py 5.8KB
  37. pyk4a/results.py 314B
  38. pyk4a/transformation.py 1.94KB
  39. pyk4a/win32_utils.py 1.56KB

资源介绍:

主要将AzureKinect相机的python-SDK进行了重写,添加了一个capture类,使得其调用后能够提取两台相机的视频流,根据此原理,只要主机算力足够,理论上可以实现三相机、四相机的图像采集
#include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif // to debug, use fprintf(stdout, "debug msg\n") or fprintf(stderr, "debug // msg\n");; #define NON_THREAD_SAFE 0 // Simple way to map k4a_color_resolution_t to dimensions const int RESOLUTION_TO_DIMS[][2] = {{0, 0}, {1280, 720}, {1920, 1080}, {2560, 1440}, {2048, 1536}, {3840, 2160}, {4096, 3072}}; const char *CAPSULE_PLAYBACK_NAME = "pyk4a playback handle"; const char *CAPSULE_DEVICE_NAME = "pyk4a device handle"; const char *CAPSULE_CALIBRATION_NAME = "pyk4a calibration handle"; const char *CAPSULE_TRANSFORMATION_NAME = "pyk4a transformation handle"; const char *CAPSULE_CAPTURE_NAME = "pyk4a capture handle"; const char *CAPSULE_RECORD_NAME = "pyk4a record handle"; static PyThreadState *_gil_release(int thread_safe) { PyThreadState *thread_state = NULL; if (thread_safe == NON_THREAD_SAFE) { thread_state = PyEval_SaveThread(); } return thread_state; } static void _gil_restore(PyThreadState *thread_state) { if (thread_state != NULL) { PyEval_RestoreThread(thread_state); } } static void capsule_cleanup_device(PyObject *capsule) { k4a_device_t *device_handle; device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); free(device_handle); } static void capsule_cleanup_image(PyObject *capsule) { k4a_image_t *image = (k4a_image_t *)PyCapsule_GetContext(capsule); k4a_image_release(*image); free(image); } static void capsule_cleanup_calibration(PyObject *capsule) { k4a_calibration_t *calibration = (k4a_calibration_t *)PyCapsule_GetPointer(capsule, CAPSULE_CALIBRATION_NAME); free(calibration); } static void capsule_cleanup_capture(PyObject *capsule) { k4a_capture_t *capture = (k4a_capture_t *)PyCapsule_GetPointer(capsule, CAPSULE_CAPTURE_NAME); k4a_capture_release(*capture); free(capture); } static void capsule_cleanup_playback(PyObject *capsule) { k4a_playback_t *playback_handle; playback_handle = (k4a_playback_t *)PyCapsule_GetPointer(capsule, CAPSULE_PLAYBACK_NAME); free(playback_handle); } static void capsule_cleanup_record(PyObject *capsule) { k4a_record_t *record_handle; record_handle = (k4a_record_t *)PyCapsule_GetPointer(capsule, CAPSULE_RECORD_NAME); free(record_handle); } static void capsule_cleanup_transformation(PyObject *capsule) { k4a_transformation_t *transformation = (k4a_transformation_t *)PyCapsule_GetPointer(capsule, CAPSULE_TRANSFORMATION_NAME); k4a_transformation_destroy(*transformation); free(transformation); } static PyObject *device_open(PyObject *self, PyObject *args) { uint32_t device_id; int thread_safe; PyThreadState *thread_state; PyArg_ParseTuple(args, "Ip", &device_id, &thread_safe); k4a_device_t *device_handle = (k4a_device_t *)malloc(sizeof(k4a_device_t)); if (device_handle == NULL) { fprintf(stderr, "Cannot allocate memory"); return Py_BuildValue("IN", K4A_RESULT_FAILED, Py_None); } thread_state = _gil_release(thread_safe); k4a_result_t result = k4a_device_open(device_id, device_handle); _gil_restore(thread_state); if (result == K4A_RESULT_FAILED) { free(device_handle); return Py_BuildValue("IN", result, Py_None); } PyObject *capsule = PyCapsule_New(device_handle, CAPSULE_DEVICE_NAME, capsule_cleanup_device); return Py_BuildValue("IN", result, capsule); } static PyObject *device_get_installed_count(PyObject *self, PyObject *args) { uint32_t count; count = k4a_device_get_installed_count(); return Py_BuildValue("I", count); } static PyObject *device_get_serialnum(PyObject *self, PyObject *args) { k4a_device_t *device_handle; PyObject *capsule; int thread_safe; PyThreadState *thread_state; k4a_buffer_result_t result; size_t data_size; PyArg_ParseTuple(args, "Op", &capsule, &thread_safe); device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); thread_state = _gil_release(thread_safe); result = k4a_device_get_serialnum(*device_handle, NULL, &data_size); if (result == K4A_BUFFER_RESULT_FAILED) { _gil_restore(thread_state); return Py_BuildValue("s", ""); } char *data = (char *)malloc(data_size); if (data == NULL) { _gil_restore(thread_state); fprintf(stderr, "Cannot allocate memory"); return Py_BuildValue("s", ""); } result = k4a_device_get_serialnum(*device_handle, data, &data_size); if (result != K4A_BUFFER_RESULT_SUCCEEDED) { free(data); return Py_BuildValue("s", ""); } _gil_restore(thread_state); PyObject *res = Py_BuildValue("s", data); free(data); return res; } static PyObject *device_close(PyObject *self, PyObject *args) { k4a_device_t *device_handle; PyObject *capsule; int thread_safe; PyThreadState *thread_state; PyArg_ParseTuple(args, "Op", &capsule, &thread_safe); device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); thread_state = _gil_release(thread_safe); k4a_device_close(*device_handle); _gil_restore(thread_state); return Py_BuildValue("I", K4A_RESULT_SUCCEEDED); } static PyObject *device_get_sync_jack(PyObject *self, PyObject *args) { k4a_device_t *device_handle; PyObject *capsule; int thread_safe; PyThreadState *thread_state; bool in_jack = 0; bool out_jack = 0; PyArg_ParseTuple(args, "Op", &capsule, &thread_safe); device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); thread_state = _gil_release(thread_safe); k4a_result_t result = k4a_device_get_sync_jack(*device_handle, &in_jack, &out_jack); _gil_restore(thread_state); return Py_BuildValue("III", result, in_jack, out_jack); } static PyObject *device_get_color_control(PyObject *self, PyObject *args) { k4a_device_t *device_handle; PyObject *capsule; int thread_safe; PyThreadState *thread_state; k4a_color_control_command_t command; k4a_color_control_mode_t mode; int32_t value = 0; PyArg_ParseTuple(args, "OpI", &capsule, &thread_safe, &command); device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); thread_state = _gil_release(thread_safe); k4a_result_t result = k4a_device_get_color_control(*device_handle, command, &mode, &value); _gil_restore(thread_state); if (result == K4A_RESULT_FAILED) { return Py_BuildValue("IIi", 0, 0, 0); } return Py_BuildValue("IIi", result, mode, value); } static PyObject *device_set_color_control(PyObject *self, PyObject *args) { k4a_device_t *device_handle; PyObject *capsule; int thread_safe; PyThreadState *thread_state; k4a_color_control_command_t command = K4A_COLOR_CONTROL_EXPOSURE_TIME_ABSOLUTE; k4a_color_control_mode_t mode = K4A_COLOR_CONTROL_MODE_MANUAL; int32_t value = 0; PyArg_ParseTuple(args, "OpIIi", &capsule, &thread_safe, &command, &mode, &value); device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); thread_state = _gil_release(thread_safe); k4a_result_t result = k4a_device_set_color_control(*device_handle, command, mode, value); _gil_restore(thread_state); if (result == K4A_RESULT_FAILED) { return Py_BuildValue("I", K4A_RESULT_FAILED); } return Py_BuildValue("I", result); } static PyObject *device_get_color_control_capabilities(PyObject *self, PyObject *args) { k4a_device_t *device_handle; PyObject *capsule; int thread_safe; PyThreadState *thread_state; k4a_color_control_command_t command; bool supports_auto; int min_value; int max_value; int step_value; int default_value; k4a_color_control_mode_t default_mode; PyArg_ParseTuple(args, "OpI", &capsule, &thread_safe, &command); device_handle = (k4a_device_t *)PyCapsule_GetPointer(capsule, CAPSULE_DEVICE_NAME); thread_state = _gil_release(thread_safe); k4a_result_t result = k4a_device_get_color_control_capabili
100+评论
captcha