You may have seen the press release by AMD announcing their new embedded R-Series SOC processors (http://www.amd.com/en-us/press-releases/Pages/amd-achieves-high-end-2015oct21.aspx.) I recently had the opportunity to exercise one of these high-performance R-Series SOC platforms. My goal was to experiment with OpenCV and it seemed the newly announced R-Series with advanced third generation Graphics Core Next GPU would make an ideal platform for this task. I used Mentor Embedded Linux for AMD, our recently released embedded Linux runtime and development tools targeted specifically at the AMD range of embedded processors. You can find Mentor Embedded Linux Lite for AMD from the Mentor Graphics website. Simply go to this page https://www.mentor.com/embedded-software/partners/amd, select the Download button labeled “Mentor Embedded Linux Lite: AMD R-Series x86” and request the download link.
Using Mentor Embedded Linux (MEL), based on technology from the Yocto Project, I was able to integrate OpenCV and the necessary support packages on the AMD R-Series Merlin Falcon board. I will be the first to admit that I am certainly not a graphics guru, and what I know about OpenCV will fit in a paragraph. (Actually I’ve learned much from this little exercise!) OpenCV is a large library of computer vision and imaging functions which has a range of applications. You are no doubt familiar with some of the advanced graphics capabilities found in our smart phones, such as gesture recognition, face detection, etc. In fact, I recently discovered that my Android phone often looks back at me, to discover if I’m still actively looking at the screen, and if so, it does not dim the display. (If you haven’t figured out what that little eyeball icon in your Samsung S5 is, well now you know.) These are examples of the many uses of computer vision and imaging technology.
I experimented with several algorithms available in OpenCV for generic imaging tasks. One popular set of algorithms deals with edge detection. OpenCV supports Canny Edge Detection, originally developed by John F. Canny in 1986. It is a multi-stage algorithm for detecting edge gradients in both still images and video streams. The figure here depicts my keyboard and the top edge of my trusty HP-41C calculator as captured by a simple web cam attached to my R-Series SOC platform. The frame at the top left is the raw video after being processed by a Guassian filter. This is done to remove noise from the image before edge detection. The frame labeled “Canny” is the direct result of the algorithm. The other two frames represent different features of the Canny Edge detection algorithm, colorizing the angles of the edges and depicting the relative magnitude.
These basic algorithms can be used in a wide range of industrial and scientific applications, such as robotics, manufacturing quality control, security, human-machine interfaces and much more.
I experimented with several OpenCV algorithms on the AMD R-Series SOC board that I had access to. One of the more interesting was motion detection which chained together a series of algorithms to detect motion in a video stream. First each frame was converted to gray-scale, and compared against a reference background computed from the video stream. Then a difference was produced against that reference background, weighted and displayed. I will leave you with a video of the motion detector that I experimented with. The left side of the frame is the raw video feed, while the right side is the extracted foreground after processing. Notice that even the shadow and some reflections from the glass surface of the background is visible in the detected feed. These are almost undetectable by the human eye. Very cool indeed.