From 325da2b2f43308693b16cfb3f91e287921ccd244 Mon Sep 17 00:00:00 2001 From: Andy-SAKN <109071473+Andy-SAKN@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:27:00 +0800 Subject: [PATCH] Merge pull request #25907 from Andy-SAKN:Andy-SAKN-add_orbbec Add tutorial on using Orbbec 3D cameras (UVC) #25907 ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake --- doc/tutorials/app/images/orbbec_uvc_cpp.jpg | Bin 0 -> 32256 bytes .../app/images/orbbec_uvc_python.jpg | Bin 0 -> 16827 bytes doc/tutorials/app/intelperc.markdown | 2 +- .../app/orbbec_astra_openni.markdown | 2 +- doc/tutorials/app/orbbec_uvc.markdown | 126 ++++++++++++++++++ .../app/table_of_content_app.markdown | 1 + 6 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 doc/tutorials/app/images/orbbec_uvc_cpp.jpg create mode 100644 doc/tutorials/app/images/orbbec_uvc_python.jpg create mode 100644 doc/tutorials/app/orbbec_uvc.markdown diff --git a/doc/tutorials/app/images/orbbec_uvc_cpp.jpg b/doc/tutorials/app/images/orbbec_uvc_cpp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..228f919ab49426847fda28642771d10b21b86d73 GIT binary patch literal 32256 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 Am;e9( literal 0 HcmV?d00001 diff --git a/doc/tutorials/app/images/orbbec_uvc_python.jpg b/doc/tutorials/app/images/orbbec_uvc_python.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa8b44ed303934bf6cf69fc1c52cea23721f7684 GIT binary patch literal 16827 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

QefM}jME(-&@doM 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 Y3hb2X(mrt(IB~PL{>-&`&;Q>9083#L;{X5v literal 0 HcmV?d00001 diff --git a/doc/tutorials/app/intelperc.markdown b/doc/tutorials/app/intelperc.markdown index 315bcf3e32..73d5e9867c 100644 --- a/doc/tutorials/app/intelperc.markdown +++ b/doc/tutorials/app/intelperc.markdown @@ -3,7 +3,7 @@ Using Creative Senz3D and other Intel RealSense SDK compatible depth sensors {#t @tableofcontents -@prev_tutorial{tutorial_orbbec_astra_openni} +@prev_tutorial{tutorial_orbbec_uvc} @next_tutorial{tutorial_wayland_ubuntu} ![hardwares](images/realsense.jpg) diff --git a/doc/tutorials/app/orbbec_astra_openni.markdown b/doc/tutorials/app/orbbec_astra_openni.markdown index a5d11108dd..ed828956e1 100644 --- a/doc/tutorials/app/orbbec_astra_openni.markdown +++ b/doc/tutorials/app/orbbec_astra_openni.markdown @@ -4,7 +4,7 @@ Using Orbbec Astra 3D cameras {#tutorial_orbbec_astra_openni} @tableofcontents @prev_tutorial{tutorial_kinect_openni} -@next_tutorial{tutorial_intelperc} +@next_tutorial{tutorial_orbbec_uvc} ### Introduction diff --git a/doc/tutorials/app/orbbec_uvc.markdown b/doc/tutorials/app/orbbec_uvc.markdown new file mode 100644 index 0000000000..1b043f2579 --- /dev/null +++ b/doc/tutorials/app/orbbec_uvc.markdown @@ -0,0 +1,126 @@ +Using Orbbec 3D cameras (UVC) {#tutorial_orbbec_uvc} +==================================================== + +@tableofcontents + +@prev_tutorial{tutorial_orbbec_astra_openni} +@next_tutorial{tutorial_intelperc} + +| | | +| -: | :- | +| Original author | Jinyue Chen | +| Compatibility | OpenCV >= 4.10 | + +### Introduction +This tutorial is devoted to the Orbbec 3D cameras based on UVC protocol. For the use of the older +Orbbec 3D cameras which depends on OpenNI, please refer to the +[previous tutorial](https://github.com/opencv/opencv/blob/4.x/doc/tutorials/app/orbbec_astra_openni.markdown). + +Unlike working with the OpenNI based Astra 3D cameras which requires OpenCV built with OpenNI2 SDK, +Orbbec SDK is not required to be installed for accessing Orbbec UVC 3D cameras via OpenCV. By using +`cv::VideoCapture` class, users get the stream data from 3D cameras, similar to working with USB +cameras. The calibration and alignment of the depth map and color image are done internally. + +### Instructions + +In order to use the 3D cameras with OpenCV. You can refer to [Get Started](https://opencv.org/get-started/) +to install OpenCV. + +Note since 4.11 on, Mac OS users need to compile OpenCV from source with flag +`-DOBSENSOR_USE_ORBBEC_SDK=ON` in order to use the cameras: +```bash +cmake -DOBSENSOR_USE_ORBBEC_SDK=ON .. +make +sudo make install +``` + +Code +---- + +@add_toggle_python +This tutorial code's is shown lines below. You can also download it from +[here](https://github.com/opencv/opencv/blob/4.x/samples/python/videocapture_obsensor.py) +@include samples/python/videocapture_obsensor.py +@end_toggle + +@add_toggle_cpp +This tutorial code's is shown lines below. You can also download it from +[here](https://github.com/opencv/opencv/blob/4.x/samples/cpp/videocapture_obsensor.cpp) +@include samples/cpp/videocapture_obsensor.cpp +@end_toggle + +### Code Explanation + +#### Python + +- **Open Orbbec Depth Sensor**: + Using `cv.VideoCapture(0, cv.CAP_OBSENSOR)` to attempt to open the first Orbbec depth sensor device. + If the camera fails to open, the program will exit and display an error message. + +- **Loop to Grab and Process Data**: + In an infinite loop, the code continuously grabs data from the camera. The `orbbec_cap.grab()` + method attempts to grab a frame. + +- **Process BGR Image**: + Using `orbbec_cap.retrieve(None, cv.CAP_OBSENSOR_BGR_IMAGE)` to retrieve the BGR image data. + If successfully retrieved, the BGR image is displayed in a window using `cv.imshow("BGR", bgr_image)`. + +- **Process Depth Image**: + Using `orbbec_cap.retrieve(None, cv.CAP_OBSENSOR_DEPTH_MAP)` to retrieve the depth image data. + If successfully retrieved, the depth image is first normalized to a range of 0 to 255, then a + false color image is applied, and the result is displayed in a window using `cv.imshow("DEPTH", color_depth_map)`. + +- **Keyboard Interrupt**: + Using `cv.pollKey()` to detect keyboard events. If a key is pressed, the loop breaks and + the program ends. + +- **Release Resources**: + After exiting the loop, the camera resources are released using `orbbec_cap.release()`. + +#### C++ + +- **Open Orbbec Depth Sensor**: + Using `VideoCapture obsensorCapture(0, CAP_OBSENSOR)` to attempt to open the first Orbbec depth + sensor device. If the camera fails to open, an error message is displayed, and the program exits. + +- **Retrieve Camera Intrinsic Parameters**: + Using `obsensorCapture.get()` to retrieve the intrinsic parameters of the camera, including focal + lengths (`fx`, `fy`) and principal points (`cx`, `cy`). + +- **Loop to Grab and Process Data**: + In an infinite loop, the code continuously grabs data from the camera. The `obsensorCapture.grab()` + method attempts to grab a frame. + +- **Process BGR Image**: + Using `obsensorCapture.retrieve(image, CAP_OBSENSOR_BGR_IMAGE)` to retrieve the BGR image data. + If successfully retrieved, the BGR image is displayed in a window using `imshow("BGR", image)`. + +- **Process Depth Image**: + Using `obsensorCapture.retrieve(depthMap, CAP_OBSENSOR_DEPTH_MAP)` to retrieve the depth image data. + If successfully retrieved, the depth image is normalized and a false color image is applied, then + the result is displayed in a window using `imshow("DEPTH", adjDepthMap)`. The retrieved depth + values are in millimeters and are truncated to a range between 300 and 5000 (millimeter). + This fixed range can be interpreted as a truncation based on the depth camera's depth range, + removing invalid pixels on the depth map. + +- **Overlay Depth Map on BGR Image**: + Convert the depth map to an 8-bit image, resize it to match the BGR image size, and overlay it + on the BGR image with a specified transparency (`alpha`). The overlaid image is displayed in + a window using `imshow("DepthToColor", image)`. + +- **Keyboard Interrupt**: + Using `pollKey()` to detect keyboard events. If a key is pressed, the loop breaks and the program ends. + +- **Release Resources**: + After exiting the loop, the camera resources are released. +### Results +#### Python + +![BGR And DEPTH frame](images/orbbec_uvc_python.jpg) + +#### C++ + +![BGR And DEPTH And DepthToColor frame](images/orbbec_uvc_cpp.jpg) + +### Note +Mac users need sudo privileges to execute the code. diff --git a/doc/tutorials/app/table_of_content_app.markdown b/doc/tutorials/app/table_of_content_app.markdown index c4dc34b23d..867f570078 100644 --- a/doc/tutorials/app/table_of_content_app.markdown +++ b/doc/tutorials/app/table_of_content_app.markdown @@ -7,5 +7,6 @@ Application utils (highgui, imgcodecs, videoio modules) {#tutorial_table_of_cont - @subpage tutorial_video_write - @subpage tutorial_kinect_openni - @subpage tutorial_orbbec_astra_openni +- @subpage tutorial_orbbec_uvc - @subpage tutorial_intelperc - @subpage tutorial_wayland_ubuntu