A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/codeplaysoftware/visioncpp/wiki/Example:-Hello-World below:

Hello World · codeplaysoftware/visioncpp Wiki · GitHub

This page is to give a brief introduction of a Hello World for VisionCpp. VisionCpp is a high-level computer vision framework that supports the development of performance portable computer vision applications running on OpenCL-accelerated platforms. Taking advantage of SYCL's "single-source programming style", VisionCpp allows programmers to easily develop custom vision operations in C++ and maintain type safety across host CPU and accelerator.
The generated application will then be portable to different platforms with no modification to the source code and with good performance.

##Hello World Example To see the whole code of this example: link

This "Hello World" creates a simple example converting RGB pixels to a greyscale pixel which is a normalised float value pixel. As input we receive a 3-channel RGB pixel. We normalise it to a 3-channel float value where each element is between 0 and 1. At the end we apply a greyscale formula to convert the pixel to grey.

This example covers some basic concepts of VisionCpp which is important in the development of more high-level applications.

// where VisionCpp will run.
auto dev = visioncpp::make_device<visioncpp::backend::sycl, visioncpp::device::cpu>();
// create a host container with our input RGB data
std::shared_ptr<unsigned char> in_rgb(new unsigned char[3], [](unsigned char* dataMem) { delete[] dataMem; });

// create a host container for GREY output data
std::shared_ptr<float> out_grey(new float[1], [](float* dataMem) { delete[] dataMem; });
// create terminal nodes - the leaf nodes in the expression tree.
// terminal struct takes 4 arguments
// 1st template parameter specifies the data U8 (unsigned char) C3 (three channels)
// 2nd number of columns in the storage
// 3rd number of rows in the storage
// 4th underlying storage type - currently only Buffer2D supported
auto data = visioncpp::terminal<visioncpp::pixel::U8C3, 1, 1, visioncpp::memory_type::Buffer2D>(in_rgb.get());
auto data_out = visioncpp::terminal<visioncpp::pixel::F32C1, 1, 1, visioncpp::memory_type::Buffer2D>(out_grey.get());
/// \brief This functor performs conversion from [0, 255] to [0.0f, 1.0f]
struct MyNormaliseFunctor {
  /// \param in - three channel unsigned char
  /// \return F32C3 - three channel float
  visioncpp::pixel::F32C3 operator()(visioncpp::pixel::U8C3 in) {
    const float FLOAT_TO_BYTE = 255.0f;
    const float BYTE_TO_FLOAT = 1.0f / FLOAT_TO_BYTE;
    return visioncpp::pixel::F32C3(static_cast<float>(in[0] * BYTE_TO_FLOAT),
                                   static_cast<float>(in[1] * BYTE_TO_FLOAT),
                                   static_cast<float>(in[2] * BYTE_TO_FLOAT));
  }
};
/// \brief This functor performs RGB to grey convertion following rule:
/// GREY <- 0.299f * R + 0,587f * G + 0.114 * B
struct MyGreyFunctor {
  /// \param in - RGB pixel.
  /// \returns float - greyscale value.
  float operator()(visioncpp::pixel::F32C3 in) {
    return 0.299f * in[0] + 0.587f * in[1] + 0.114f * in[2];
  }
};
// converting unsigned char value to normalised float value
auto node = visioncpp::point_operation<MyNormaliseFunctor>(data);
// float RGB to float Grey conversion
auto node2 = visioncpp::point_operation<MyGreyFunctor>(node);
// assign operation that writes output of the pipe to output terminal node
auto pipe = visioncpp::assign(data_out, node2);
// execute the pipe defined pipe
// 1st template parameter defines if VisionCpp back-end fuses the expression
// 2nd & 3rd shared memory sizes ( column, row )
// 4th & 5th local work group size ( column , row )
visioncpp::execute<visioncpp::policy::Fuse, 1, 1, 1, 1>(pipe, dev);
printf("RGB: %u %u %u \nGrey: %f \n", in_rgb.get()[0], in_rgb.get()[1], in_rgb.get()[2], out_grey.get()[0]);

##Summary: A summary what was done that it is need to be done in all VisionCpp applications.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4