re√ ision

Renderscript for Computer Vision

2016
Anıl Can Aydın, Onur Temizkan, Ulaş Akdeniz
Supervised by Mustafa Özuysal

What is re√ ision?

  • GPU-ready computer vision library for Android
  • Powered by Renderscript
  • Can operate on all Android devices
  • Open source

Why?

  • Hardware incompatibilities of existing libraries
  • Lack of OpenCL driver support

Similar Products

  • OpenCV
  • CUDA
  • FastCV

Innovation

re√ ision uses Renderscript, therefore it is hardware-independent.

System Usage

High performance computer vision application development on Android.

Benefits

  • Ready to use computer vision algorithm implementations
  • Hardware-independent
  • Extensible

Agile Methodology

Sprints:

  • Filter Module
  • Feature Module
  • Data Module
  • Async Module

System Design

Client
[Not supported by viewer]
Conductor
[Not supported by viewer]
Filter Module
[Not supported by viewer]
Feature
Extractor
[Not supported by viewer]

[Not supported by viewer]

Sequence Diagram

Conductor
[Not supported by viewer]
Filter Module
[Not supported by viewer]
Feature
Extractor
[Not supported by viewer]
process(imageData)
[Not supported by viewer]
filter(imageData)
[Not supported by viewer]
filteredImageData
[Not supported by viewer]
extract(imageData)
[Not supported by viewer]
extractedImageData
[Not supported by viewer]
result
[Not supported by viewer]

Used Technologies and Reasons

The only technology used for this project is Android API; specifically its Renderscript computing engine.

Project Implementation

  • Extensible
  • Adaptable
  • Reusable
  • High-performance

Harris Corner Detection Kernel


									uchar4 __attribute__((kernel)) harris(const uchar4 in, uint32_t x, uint32_t y)
	{
	    float c = 0.04;

	    float4 convXpixel = rsUnpackColor8888(rsGetElementAt_uchar4(convX, x, y));
	    float4 convYpixel = rsUnpackColor8888(rsGetElementAt_uchar4(convY, x, y));

	    float Ix = convXpixel.r * gMonoMult[0] + convXpixel.g * gMonoMult[1] +
			convXpixel.b * gMonoMult[2];
	    float Iy = convYpixel.r * gMonoMult[0] + convYpixel.g * gMonoMult[1] +
			convYpixel.b * gMonoMult[2];
	    float Ixx = Ix * Ix;
	    float Iyy = Iy * Iy;
	    float Ixy = Ix * Iy;

	    float cornerResponse = (Ixx*Iyy - Ixy*Ixy - c*(Ixx+Iyy)*(Ixx+Iyy));
	    if(cornerResponse < harrisThreshold ) {
	        cornerColorRGB.r = 0;
	        cornerColorRGB.g = 255;
	        cornerColorRGB.b = 0;
	        return cornerColorRGB;
	    } else {
	        return in;
	    }
	}
	    					

How can the product be enhanced?

  • Basic functionalities
  • Machine learning ?
  • Motion and object tracking ?

Demo

Thanks for listening