spacebox/demo/camera/README.md

54 lines
2.9 KiB
Markdown

Camera capture demo using OpenCV
================================
Display camera input using the [OpenCV](https://opencv.org) library.
Requirements
------------
### SPACEBOX
The required libraries for the overall framework must be installed first. Follow the instructions in [Installing Requirements](../../README.md#installing-requirements) in the main README.
### OpenCV
Follow the instructions in the main README to build OpenCV for [Linux](../../README.md/#linux-1), [Android](../../README.md#android-1), or both, depending on which platforms the demo is going to be built for.
Build
-----
### config
In `config.json`, `render driver` should be set to `opengl` on Linux and `opengles2` on Android (in other projects, opengles2 can work on Linux, which is why this is a config value rather than built into the engine).
### Linux
In addition to the usual SPACEBOX paths to edit, there are two paths to configure in the [Makefile](Makefile) under the `Linux build` section. Edit `OPENCV_INCPATH` and `OPENCV_LINUX_LDPATH` to match locations in the OpenCV project compiled earlier. Then the `camera` target should compile.
make camera
After it compiles, run the binary to see the camera input.
./camera
### Android
Compiling with NDK 24 may cause an error `cannot open crtbegin_so.o`. [This thread's](https://stackoverflow.com/q/69795531) suggestion of using the `-nostartfiles` linker flag seems to fix it. It may need to be inserted into the main SDL `Android.mk` file, which is in the root of the SDL source package installed earlier and referenced in this project's Makefile. Line 83 should be changed to:
LOCAL_LDFLAGS := -Wl,--no-undefined -nostartfiles
In the [Makefile](Makefile), edit `OPENCV_ANDROID_SDK` to match the location of the folder built earlier. At this point, the target should be able to build.
make build/android/ooo.shampoo.camera
An APK will be output to `build/android/ooo.shampoo.camera/app-debug.apk` which can be loaded onto a device or emulator.
After loading the APK, make sure to give camera permissions to the app. Then, run the app.
Settings -> Apps & notifications -> All apps -> Camera Capture Test -> Permissions -> Camera
The explanation in the main README for the [fill_screen Android build](../../README.md#fill_screen) applies to this project, with a few additional notes.
* The NDK version is [raised to 24](https://github.com/opencv/opencv/pull/19597), and the minimum SDK version is 21 (this was chosen arbitrarily, but it was failing with version 18).
* There are additional steps added in the Makefile for linking to the pre-built shared libraries for OpenCV and libtbb (which was generated by the OpenCV build process). See [this thread](https://stackoverflow.com/q/9870435) for more info on how to link pre-built libraries per-ABI to an Android build using GNU make.
* There is an extra target for including the config JSON and shaders as assets in the Android project.