JeVois Tutorials  1.20
JeVois Smart Embedded Machine Vision Tutorials
Share this page:
HelloJeVois.C
Go to the documentation of this file.
1 #include <jevois/Core/Module.H>
3 
4 // icon by Catalin Fertu in cinema at flaticon
5 
6 //! JeVois sample module
7 /*! This module is provided as an example of how to create a new standalone module.
8 
9  JeVois provides helper scripts and files to assist you in programming new modules, following two basic formats:
10 
11  - if you wish to only create a single module that will execute a specific function, or a collection of such modules
12  where there is no shared code between the modules (i.e., each module does things that do not relate to the other
13  modules), use the skeleton provided by this sample module. Here, all the code for the sample module is compiled
14  into a single shared object (.so) file that is loaded by the JeVois engine when the corresponding video output
15  format is selected by the host computer.
16 
17  - if you are planning to write a collection of modules with some shared algorithms among several of the modules, it
18  is better to first create machine vision Components that implement the algorithms that are shared among several of
19  your modules. You would then compile all your components into a first shared library (.so) file, and then compile
20  each module into its own shared object (.so) file that depends on and automatically loads your shared library file
21  when it is selected by the host computer. The jevoisbase library and collection of components and modules is an
22  example for how to achieve that, where libjevoisbase.so contains code for Saliency, ObjectRecognition, etc
23  components that are used in several modules, and each module's .so file contains only the code specific to that
24  module.
25 
26  @author Sample Author
27 
28  @videomapping YUYV 640 480 28.5 YUYV 640 480 28.5 SampleVendor HelloJeVois
29  @email sampleemail\@samplecompany.com
30  @address 123 First Street, Los Angeles, CA 90012
31  @copyright Copyright (C) 2017 by Sample Author
32  @mainurl http://samplecompany.com
33  @supporturl http://samplecompany.com/support
34  @otherurl http://samplecompany.com/about
35  @license GPL v3
36  @distribution Unrestricted
37  @restrictions None */
39 {
40  public:
41  //! Default base class constructor ok
43 
44  //! Virtual destructor for safe inheritance
45  virtual ~HelloJeVois() { }
46 
47  //! Processing function
48  virtual void process(jevois::InputFrame && inframe, jevois::OutputFrame && outframe) override
49  {
50  // Wait for next available camera image:
51  jevois::RawImage const inimg = inframe.get(true);
52 
53  // We only support YUYV pixels in this example, any resolution:
54  inimg.require("input", inimg.width, inimg.height, V4L2_PIX_FMT_YUYV);
55 
56  // Wait for an image from our gadget driver into which we will put our results:
57  jevois::RawImage outimg = outframe.get();
58 
59  // Enforce that the input and output formats and image sizes match:
60  outimg.require("output", inimg.width, inimg.height, inimg.fmt);
61 
62  // Just copy the pixel data over:
63  memcpy(outimg.pixelsw<void>(), inimg.pixels<void>(), std::min(inimg.buf->length(), outimg.buf->length()));
64 
65  // Print a text message:
66  jevois::rawimage::writeText(outimg, "Hello JeVois!", 100, 230, jevois::yuyv::White, jevois::rawimage::Font20x38);
67 
68  // Let camera know we are done processing the input image:
69  inframe.done(); // NOTE: optional here, inframe destructor would call it anyway
70 
71  // Send the output image with our processing results to the host over USB:
72  outframe.send(); // NOTE: optional here, outframe destructor would call it anyway
73  }
74 };
75 
76 // Allow the module to be loaded as a shared object (.so) file:
jevois::RawImage::pixels
const T * pixels() const
jevois::OutputFrame
jevois::rawimage::Font20x38
Font20x38
Module.H
jevois::RawImage
HelloJeVois::~HelloJeVois
virtual ~HelloJeVois()
Virtual destructor for safe inheritance.
Definition: HelloJeVois.C:45
jevois::RawImage::require
void require(char const *info, unsigned int w, unsigned int h, unsigned int f) const
jevois::RawImage::width
unsigned int width
jevois::RawImage::pixelsw
T * pixelsw()
HelloJeVois::process
virtual void process(jevois::InputFrame &&inframe, jevois::OutputFrame &&outframe) override
Processing function.
Definition: HelloJeVois.C:48
jevois::rawimage::writeText
void writeText(RawImage &img, std::string const &txt, int x, int y, unsigned int col, Font font=Font6x10)
HelloJeVois
JeVois sample module.
Definition: HelloJeVois.C:38
jevois::Module
RawImageOps.H
jevois::RawImage::height
unsigned int height
jevois::InputFrame
jevois::RawImage::fmt
unsigned int fmt
jevois::RawImage::buf
std::shared_ptr< VideoBuf > buf
JEVOIS_REGISTER_MODULE
JEVOIS_REGISTER_MODULE(HelloJeVois)
jevois::Component::Module
friend friend class Module