Beatmup: image and signal processing library
Beatmup is an extensible asynchronous image and signal processing framework.
It enables low-level user-defined processing tasks execution
It implements basic building blocks and predefined processing operations:
Beatmup is arguably the easiest way to get a fast hardware-accelerated neural network-based image superresolution running on any decent GPU. It does not provide a state-of-the-art PSNR score, but can run at a hundred of images per second on a desktop machine.
More details on the neural network design and the inference implementation: Inferring a super-resolution neural network on Raspberry Pi GPU
Update in 2.1 release: the fine-tuned version of the model (trained with multiple degradation kernels) achieves now 32.64 dB on DIV2K validation set compared to the initial score of 32.57 dB.
There is a number of test apps showcasing the use of Beatmup with additional explanations in apps folder. The code is in C++, but can be universally helpful. Few examples:
python/examples folder contains detailed examples of scripts using Beatmup in Python.
Unit tests in Python are available in python/tests/test.py and python/tests/test_nnets.py.
An Android test app is available in android/app folder. It consists of independent examples showing how to use Beatmup in Android.
To get things running, make sure you have git and CMake installed, then pick one of the following copy-paste recipes.
Building X2 app upscaling an image using a neural net inferred with OpenGL:
git clone https://github.com/lnstadrum/beatmup.git
cd beatmup
git submodule update --init --recursive
mkdir -p build && cd build
cmake -DUSE_GLX=ON ..
make X2
Try to use -DUSE_OPENGL=ON
instead -DUSE_GLX=ON
starting from a clean build folder if you run into trouble.
On Raspberry Pi prior to series 4 use the EGL backend with following CMake command:
cmake -DUSE_EGL=ON -DUSE_BRCM_LIBS=ON -DGLES_VERSION=20 ..
More details on Raspberry Pi setup here.
On Raspberry Pi 4 rather use the following CMake command:
cmake -DUSE_EGL_DRM=ON -DGLES_VERSION=20 ..
More details on Raspberry Pi 4 setup here.
Once the app is built, you can feed it with an image of your choice and get the upscaled result as follows:
./X2 <your-image>.bmp x2-result.bmp
To build the X2 app in Windows you may install Visual Studio and generate the VS solution as follows:
git clone https://github.com/lnstadrum/beatmup.git
cd beatmup
git submodule update --init --recursive
mkdir build && cd build
cmake -DUSE_OPENGL=ON ..
Then open the .sln solution file in Visual Studio and build the executable.
There is Android project containing a library and a test app modules (lib and app). To build them install Android Studio and Android NDK bundle, clone the repository and open the project situated in android folder in Android studio.
You can build an apk in a docker container as well. Having docker installed, you can run the following script to build beatmupApp.apk installation package which you may then copy to your Android phone and open it there to install the test app:
git clone https://github.com/lnstadrum/beatmup.git
cd beatmup
git submodule update --init --recursive
docker build -f dockerfiles/android.Dockerfile -t beatmup-android .
docker run -v $(pwd):/opt/android-build beatmup-android
Prebuilt python packages are available in 64-bit Windows for Python versions from 3.6 to 3.11:
python -m pip install --upgrade pip
python -m pip install beatmup
Prebuilt packages for x64 desktop Ubuntu-based linux distributions are available for downloading on the releases page.
If there is no prebuilt package available for your platform/OS, you can easily build a Python wheel installable with pip
on your own.
First, get the code and try to compile an app as explained above. Then in the repository root folder run
cd build
make beatmup
cd ../python
python3 setup.py bdist_wheel clean
The installation package is now available in python/dist
folder. You can install it and make sure it works:
python3 -m pip install --no-index --find-links=dist beatmup
python3 -c "import beatmup; beatmup.say_hi()"
The project is licensed under the GNU GPL v3 licence.
The contributions are governed by the Contribution Licence Agreement (CLA). In short, under this Agreement you remain the copyright owner of your contribution, but you allow us to use and distribute your contribution under the terms of a possibly different licence.
If you want to contribute:
Otherwise: