Processing Images in Java With OpenCV and Quarkus

If you are into computer vision, you probably are familiar with OpenCV. It's an amazing library that has almost everything one needs to do 2D and 3D processing and much more. Gesture recognition, face detection, Motion tracking, think of anything related to image processing and OpenCV can be your goto. It's based on the BSD license, so you can just download it and start using it.

OpenCV is written in C, and there are nice Java bindings for it too. If you are a Java developer like me and don't want to get into all the loading and building native bindings etc., then read on. In this article, I will show how you can use OpenCV with the popular new framework Quarkus, without worrying about installing libraries or reloading the entire app.

Run Hundreds of Experiments with OpenCV and Hydra

Feature Matching Problem

Image matching is an important task in computer vision. Real-world objects may be captured on different photos from any angle with any lightning conditions and may be occluded. But while images contain the same objects they must be categorized accordingly. For this purpose, computer vision gives us invariant feature extractors that help to match objects on different images

Detectors, Descriptors, and Matchers

Image matching is a three-step algorithm. Fortunately, they are all covered in the OpenCV library

Java Concurrency With Project Loom

Early Access: Java Concurrency With Project Loom

I am excited about Project Loom. The project focuses on easy to use lightweight concurrency for the JavaVM. Nowadays, the JavaVM provides a one java thread to one OS thread model to the programmer. While it's actually the current Oracle implementation, it used to be that many JavaVM versions ago, threads provided to the programmer were actually green threads.

Project Loom goes down that road again, providing lightweight threads to the programmer. Those lightweight threads are mapped to OS threads in a "many-to-many" relationship. 

Write Your Own Imaging Processing UI in 15 Minutes, Using Kotlin and Compose for Desktop

Compose used to be just a smooth way of writing Android Applications in Kotlin. Now JetBrains has ported Compose to the Desktop, and it's now easier than ever to prototype UI in real-time. 

Of course, you can write a web app-based UI or a single-page application, but sometimes, especially in the IoT world, and a small cluster of Raspberry Pis, the easiest way is to have actually a small Desktop UI.

6 Free Data Mining and Machine Learning eBooks

It feels like we’ve been saying "this has been the year of artificial intelligence" for the last half a decade or so. But, as the decade reaches its conclusion, it’s undoubtedly the case that if you had to characterize the changes — social, commercial, political — the world has undergone over the last 10 years, the big data boom and artificial intelligence would be the key technology trends.  

The spotlight is generally on the ripple effects of these technologies; very rarely is it on the people and processes through which these technologies are built and deployed. That’s a shame because if we did we’d have a much greater sense of the opportunities open to us — whether that’s from a personal career perspective or a business one, we’d start to see that we’re still very far from mass adoption and usage. These are trends that remain in the hands of the largest companies with the most money to spend.  

Deep Neural Networks With OpenCV and Clojure on AWS Lambda

Learn more about Deep Neural Networks with OpenCV and Clojure

In our previous post, we managed to run a Yolo-based Deep Neural Network directly on a Raspberry Pi with object detection in semi-real-time on pictures and video streams. The processing was done locally, which is kind of optimum for a local video stream. But, it can be a little bit too power-hungry if you have a farm of these.

Here are some not-so-easy-to-get power consumption values for the Raspberry Pi. You can easily see that heavy CPU usage doubles energy consumption. In that case, a possible solution to offload processing out the Raspberry and onto servers is by using easy-to-set-up lambdas.

Raspberry Pi, OpenCV, Deep Neural Networks, and — Of Course— a Bit of Clojure

Learn more about Raspberry Pi, OpenCV, deep neural networks, and Clojure.

I had to write a simple IoT prototype recently that counted the number of people in a queue in real-time. Of course, I could have hired someone to do that and just keep counting people, or ... I could write a program in Clojure using a Raspberry Pi to detect the number of heads via a video stream.

You may also like: IoT OpenCV Scripting With Clojure on a Raspberry Pi

We learned recently that when using inlein, you can easily write scripts in Clojure with dependencies and run them just about anywhere, at a quite decent speed.

Marker Tracking via WebSockets With a Raspberry Pi

Imagine you intend to automatically move a couple of robots within a room. You need accurate position and orientation (direction frontside is pointing to) of each robot. Apparently, outdoor systems like GPS don't work and you have a small budget. What do you do?

After some research for easy-to-apply solutions, my students and I decided to visually track our robots. We put a camera at the ceiling continuously streaming a video of our robots below. What remained to be done was capturing the frames of the video stream, searching for the objects of interest inside and serving the findings.