You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
388 lines
18 KiB
388 lines
18 KiB
#ifndef _SOD_H_
|
|
#define _SOD_H_
|
|
/*
|
|
* SOD - An Embedded Computer Vision & Machine Learning Library.
|
|
* Copyright (C) 2018 PixLab| Symisc Systems. https://sod.pixlab.io
|
|
* Version 1.1.7
|
|
*
|
|
* Symisc Systems employs a dual licensing model that offers customers
|
|
* a choice of either our open source license (GPLv3) or a commercial
|
|
* license.
|
|
*
|
|
* For information on licensing, redistribution of the SOD library, and for a DISCLAIMER OF ALL WARRANTIES
|
|
* please visit:
|
|
* https://pixlab.io/sod
|
|
* or contact:
|
|
* licensing@symisc.net
|
|
* support@pixlab.io
|
|
*/
|
|
/*
|
|
* This file is part of Symisc SOD - Open Source Release (GPLv3)
|
|
*
|
|
* SOD is free software : you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* SOD is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with SOD. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
/* Make sure we can call this stuff from C++ */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/*
|
|
* Marker for exported interfaces.
|
|
*/
|
|
#if defined (_MSC_VER) || defined (__MINGW32__) || defined (__GNUC__) && defined (__declspec)
|
|
#define SOD_APIIMPORT __declspec(dllimport)
|
|
#define SOD_APIEXPORT __declspec(dllexport)
|
|
#else
|
|
#define SOD_APIIMPORT
|
|
#define SOD_APIEXPORT
|
|
#endif
|
|
/*
|
|
* The SOD_VERSION C preprocessor macro evaluates to a string literal
|
|
* that is the SOD version in the format "X.Y.Z" where X is the major
|
|
* version number and Y is the minor version number and Z is the release
|
|
* number.
|
|
*/
|
|
#define SOD_VERSION "1.1.7"
|
|
/*
|
|
* The SOD_VERSION_NUMBER C preprocessor macro resolves to an integer
|
|
* with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
|
|
* numbers used in [SOD_VERSION].
|
|
*/
|
|
#define SOD_VERSION_NUMBER 1001007
|
|
/*
|
|
* Forward declarations.
|
|
*/
|
|
/*
|
|
* RealNets handle documented at https://sod.pixlab.io/api.html#sod_realnet. */
|
|
typedef struct sod_realnet sod_realnet;
|
|
/*
|
|
* Convolutional/Recurrent Neural Networks (CNN/RNN) handle documented at https://sod.pixlab.io/api.html#sod_cnn. */
|
|
typedef struct sod_cnn sod_cnn;
|
|
/*
|
|
* bounding box structure documented at https://sod.pixlab.io/api.html#sod_box. */
|
|
typedef struct sod_box sod_box;
|
|
/*
|
|
* Image/Frame container documented at https://sod.pixlab.io/api.html#sod_img. */
|
|
typedef struct sod_img sod_img;
|
|
/*
|
|
* Point instance documented at https://sod.pixlab.io/api.html#sod_pts. */
|
|
typedef struct sod_pts sod_pts;
|
|
/*
|
|
* RealNets model handle documented at https://sod.pixlab.io/api.html#sod_realnet_model_handle. */
|
|
typedef unsigned int sod_realnet_model_handle;
|
|
#ifdef SOD_ENABLE_NET_TRAIN
|
|
/*
|
|
* RealNets trainer handle documented at https://sod.pixlab.io/api.html#sod_realnet_trainer. */
|
|
typedef struct sod_realnet_trainer sod_realnet_trainer;
|
|
#endif
|
|
/*
|
|
* A bounding box or bbox for short is represented by an instance of the `sod_box` structure.
|
|
* A sod_box instance always store the coordinates of a rectangle obtained from a prior successful
|
|
* call to one of the object detection routines of a sod_cnn or sod_realnet handle such as
|
|
* `sod_cnn_predict()` or from the connected component labeling interface `sod_image_find_blobs()`.
|
|
*
|
|
* Besides the rectangle coordinates. The `zName` and `score` fields member of this structure hold
|
|
* useful information about the object it surround.
|
|
*
|
|
* This structure and related interfaces are documented at https://sod.pixlab.io/api.html#sod_box.
|
|
*/
|
|
struct sod_box {
|
|
int x; /* The x-coordinate of the upper-left corner of the rectangle */
|
|
int y; /* The y-coordinate of the upper-left corner of the rectangle */
|
|
int w; /* Rectangle width */
|
|
int h; /* Rectangle height */
|
|
float score; /* Confidence threshold. */
|
|
const char *zName; /* Detected object name. I.e. person, face, dog, car, plane, cat, bicycle, etc. */
|
|
void *pUserData; /* External pointer used by some modules such as the face landmarks, NSFW classifier, pose estimator, etc. */
|
|
};
|
|
/*
|
|
* Internally, each in-memory representation of an input image or video frame
|
|
* is kept in an instance of the `sod_img` structure. Basically, a `sod_img` is just a record
|
|
* of the width, height and number of color channels in an image, and also the pixel values
|
|
* for every pixel. Images pixels are arranged in CHW format. This means in a 3 channel
|
|
* image with width 400 and height 300, the first 400 values are the 1st row of the 1st channel
|
|
* of the image. The second 400 pixels are the 2nd row. after 120,000 values we get to pixels
|
|
* in the 2nd channel, and so forth.
|
|
*
|
|
* This structure and related interfaces are documented at https://sod.pixlab.io/api.html#sod_img.
|
|
*/
|
|
struct sod_img {
|
|
int h; /* Image/frame height */
|
|
int w; /* Image/frame width */
|
|
int c; /* Image depth/Total number of color channels e.g. 1 for grayscale images, 3 RGB, etc. */
|
|
float *data; /* Blob */
|
|
};
|
|
/*
|
|
* An instance of the `sod_pts` structure describe a 2D point in space with integer coordinates
|
|
* (usually zero-based). This structure is rarely manipulated by SOD and is used mostly by
|
|
* the Hough line detection interface `sod_hough_lines_detect()` and line drawing routine `sod_image_draw_line()`.
|
|
*
|
|
* This structure and related interfaces are documented at https://sod.pixlab.io/api.html#sod_pts.
|
|
*/
|
|
struct sod_pts {
|
|
int x; /* The x-coordinate, in logical units of the point offset. */
|
|
int y; /* The y-coordinate, in logical units of the point offset. */
|
|
};
|
|
/*
|
|
* An integer configuration option that determines what property of a `sod_cnn` handle is to be configured.
|
|
* Subsequent arguments vary depending on the configuration verb.
|
|
*
|
|
* The documentation (including expected arguments for each configuration verb) is available to consult
|
|
* at https://sod.pixlab.io/c_api/sod_cnn_config.html.
|
|
*/
|
|
typedef enum {
|
|
SOD_CNN_NETWORK_OUTPUT = 1,
|
|
SOD_CNN_DETECTION_THRESHOLD,
|
|
SOD_CNN_NMS,
|
|
SOD_CNN_DETECTION_CLASSES,
|
|
SOD_CNN_RAND_SEED,
|
|
SOD_CNN_HIER_THRESHOLD,
|
|
SOD_CNN_TEMPERATURE,
|
|
SOD_CNN_LOG_CALLBACK,
|
|
SOD_RNN_CALLBACK,
|
|
SOD_RNN_TEXT_LENGTH,
|
|
SOD_RNN_DATA_LENGTH,
|
|
SOD_RNN_SEED
|
|
}SOD_CNN_CONFIG;
|
|
/*
|
|
* RNN Consumer callback to be used in conjunction with the `SOD_RNN_CALLBACK` configuration verb.
|
|
*
|
|
* The documentation is available to consult at https://sod.pixlab.io/c_api/sod_cnn_config.html.
|
|
*/
|
|
typedef void (*ProcRnnCallback)(const char *, size_t, void *);
|
|
/*
|
|
* Log Consumer callback to be used in conjunction with the `SOD_CNN_LOG_CALLBACK` or
|
|
* the `SOD_REALNET_TR_LOG_CALLBACK` configuration verb.
|
|
*
|
|
* The documentation is available to consult at https://sod.pixlab.io/c_api/sod_cnn_config.html.
|
|
*/
|
|
typedef void(*ProcLogCallback)(const char *, size_t, void *);
|
|
/*
|
|
* Macros to be used in conjunction with the `sod_img_load_from_file()` or `sod_img_load_from_mem()` interfaces.
|
|
*/
|
|
#define SOD_IMG_COLOR 0 /* Load full color channels. */
|
|
#define SOD_IMG_GRAYSCALE 1 /* Load an image in the grayscale colorpsace only (single channel). */
|
|
/*
|
|
* Macros around a stack allocated `sod_img` instance.
|
|
*/
|
|
#define SOD_IMG_2_INPUT(IMG) (IMG.data) /* Pointer to raw binary contents (blobs) of an image or frame. */
|
|
#define SOD_IS_EMPTY_IMG(IMG) (!IMG.data) /* NIL pointer test (marker for an empty or broken image format). */
|
|
/*
|
|
* Possible return value from each exported SOD interface defined below.
|
|
*/
|
|
#define SOD_OK 0 /* Everything went well */
|
|
#define SOD_UNSUPPORTED -1 /* Unsupported Pixel format */
|
|
#define SOD_OUTOFMEM -4 /* Out-of-Memory */
|
|
#define SOD_ABORT -5 /* User callback request an operation abort */
|
|
#define SOD_IOERR -6 /* IO error */
|
|
#define SOD_LIMIT -7 /* Limit reached */
|
|
/*
|
|
* An integer configuration option that determines what property of a `sod_realnet_trainer` handle is to be configured.
|
|
* Subsequent arguments vary depending on the configuration verb.
|
|
*
|
|
* The documentation (including expected arguments for each configuration verb) is available to consult
|
|
* at https://sod.pixlab.io/c_api/sod_realnet_train_config.html.
|
|
*/
|
|
#ifdef SOD_ENABLE_NET_TRAIN
|
|
typedef enum {
|
|
SOD_REALNET_TR_LOG_CALLBACK = 1,
|
|
SOD_REALNET_TR_OUTPUT_MODEL
|
|
}SOD_REALNET_TRAINER_CONFIG;
|
|
#endif /* SOD_ENABLE_NET_TRAIN */
|
|
/*
|
|
* An integer configuration option that determines what property of a `sod_realnet` handle is to be configured.
|
|
* Subsequent arguments vary depending on the configuration verb.
|
|
*
|
|
* The documentation (including expected arguments for each configuration verb) is available to consult
|
|
* at https://sod.pixlab.io/c_api/sod_realnet_model_config.html.
|
|
*/
|
|
typedef enum {
|
|
SOD_REALNET_MODEL_MINSIZE = 1,
|
|
SOD_REALNET_MODEL_MAXSIZE,
|
|
SOD_REALNET_MODEL_SCALEFACTOR,
|
|
SOD_REALNET_MODEL_STRIDEFACTOR,
|
|
SOD_RELANET_MODEL_DETECTION_THRESHOLD,
|
|
SOD_REALNET_MODEL_NMS,
|
|
SOD_REALNET_MODEL_DISCARD_NULL_BOXES,
|
|
SOD_REALNET_MODEL_NAME,
|
|
SOD_REALNET_MODEL_ABOUT_INFO
|
|
}SOD_REALNET_MODEL_CONFIG;
|
|
/*
|
|
* SOD Embedded C/C++ API.
|
|
*
|
|
* The API documentation is available to consult at https://sod.pixlab.io/api.html.
|
|
* The introduction course is available to consult at https://sod.pixlab.io/intro.html.
|
|
*/
|
|
#ifndef SOD_DISABLE_CNN
|
|
/*
|
|
* Convolutional/Recurrent Neural Networks (CNN/RNN) API.
|
|
*
|
|
* The interfaces are documented at https://sod.pixlab.io/api.html#cnn.
|
|
*/
|
|
SOD_APIEXPORT int sod_cnn_create(sod_cnn **ppOut, const char *zArch, const char *zModelPath, const char **pzErr);
|
|
SOD_APIEXPORT int sod_cnn_config(sod_cnn *pNet, SOD_CNN_CONFIG conf, ...);
|
|
SOD_APIEXPORT int sod_cnn_predict(sod_cnn *pNet, float *pInput, sod_box **paBox, int *pnBox);
|
|
SOD_APIEXPORT void sod_cnn_destroy(sod_cnn *pNet);
|
|
SOD_APIEXPORT float * sod_cnn_prepare_image(sod_cnn *pNet, sod_img in);
|
|
SOD_APIEXPORT int sod_cnn_get_network_size(sod_cnn *pNet, int *pWidth, int *pHeight, int *pChannels);
|
|
#endif /* SOD_DISABLE_CNN */
|
|
/*
|
|
* RealNets API.
|
|
*
|
|
* The interfaces are documented at https://sod.pixlab.io/api.html#realnet.
|
|
*/
|
|
SOD_APIEXPORT int sod_realnet_create(sod_realnet **ppOut);
|
|
SOD_APIEXPORT int sod_realnet_load_model_from_mem(sod_realnet *pNet, const void * pModel, unsigned int nBytes, sod_realnet_model_handle *pOutHandle);
|
|
SOD_APIEXPORT int sod_realnet_load_model_from_disk(sod_realnet *pNet, const char * zPath, sod_realnet_model_handle *pOutHandle);
|
|
SOD_APIEXPORT int sod_realnet_model_config(sod_realnet *pNet, sod_realnet_model_handle handle, SOD_REALNET_MODEL_CONFIG conf, ...);
|
|
SOD_APIEXPORT int sod_realnet_detect(sod_realnet *pNet, const unsigned char *zGrayImg, int width, int height, sod_box **apBox, int *pnBox);
|
|
SOD_APIEXPORT void sod_realnet_destroy(sod_realnet *pNet);
|
|
#ifdef SOD_ENABLE_NET_TRAIN
|
|
/*
|
|
* RealNets Training API.
|
|
*
|
|
* The interfaces are documented at https://sod.pixlab.io/api.html#realnet_train.
|
|
*/
|
|
SOD_APIEXPORT int sod_realnet_train_init(sod_realnet_trainer **ppOut);
|
|
SOD_APIEXPORT int sod_realnet_train_config(sod_realnet_trainer *pTrainer, SOD_REALNET_TRAINER_CONFIG op, ...);
|
|
SOD_APIEXPORT int sod_realnet_train_start(sod_realnet_trainer *pTrainer, const char *zConf);
|
|
SOD_APIEXPORT void sod_realnet_train_release(sod_realnet_trainer *pTrainer);
|
|
#endif /* SOD_ENABLE_NET_TRAIN */
|
|
/*
|
|
* Image Processing API.
|
|
*
|
|
* The interfaces are documented at https://sod.pixlab.io/api.html#imgproc.
|
|
*/
|
|
SOD_APIEXPORT sod_img sod_make_empty_image(int w, int h, int c);
|
|
SOD_APIEXPORT sod_img sod_make_image(int w, int h, int c);
|
|
SOD_APIEXPORT int sod_grow_image(sod_img *pImg,int w, int h, int c);
|
|
SOD_APIEXPORT sod_img sod_make_random_image(int w, int h, int c);
|
|
SOD_APIEXPORT sod_img sod_copy_image(sod_img m);
|
|
SOD_APIEXPORT void sod_free_image(sod_img m);
|
|
|
|
#ifndef SOD_DISABLE_IMG_READER
|
|
SOD_APIEXPORT sod_img sod_img_load_from_file(const char *zFile, int nChannels);
|
|
SOD_APIEXPORT sod_img sod_img_load_from_mem(const unsigned char *zBuf, int buf_len, int nChannels);
|
|
SOD_APIEXPORT int sod_img_set_load_from_directory(const char *zPath, sod_img ** apLoaded, int * pnLoaded, int max_entries);
|
|
SOD_APIEXPORT void sod_img_set_release(sod_img *aLoaded, int nEntries);
|
|
#ifndef SOD_DISABLE_IMG_WRITER
|
|
SOD_APIEXPORT int sod_img_save_as_png(sod_img input, const char *zPath);
|
|
SOD_APIEXPORT int sod_img_save_as_jpeg(sod_img input, const char *zPath, int Quality);
|
|
SOD_APIEXPORT int sod_img_blob_save_as_png(const char * zPath, const unsigned char *zBlob, int width, int height, int nChannels);
|
|
SOD_APIEXPORT int sod_img_blob_save_as_jpeg(const char * zPath, const unsigned char *zBlob, int width, int height, int nChannels, int Quality);
|
|
SOD_APIEXPORT int sod_img_blob_save_as_bmp(const char * zPath, const unsigned char *zBlob, int width, int height, int nChannels);
|
|
#endif /* SOD_DISABLE_IMG_WRITER */
|
|
#define sod_img_load_color(zPath) sod_img_load_from_file(zPath, SOD_IMG_COLOR)
|
|
#define sod_img_load_grayscale(zPath) sod_img_load_from_file(zPath, SOD_IMG_GRAYSCALE)
|
|
#endif /* SOD_DISABLE_IMG_READER */
|
|
|
|
SOD_APIEXPORT float sod_img_get_pixel(sod_img m, int x, int y, int c);
|
|
SOD_APIEXPORT void sod_img_set_pixel(sod_img m, int x, int y, int c, float val);
|
|
SOD_APIEXPORT void sod_img_add_pixel(sod_img m, int x, int y, int c, float val);
|
|
SOD_APIEXPORT sod_img sod_img_get_layer(sod_img m, int l);
|
|
|
|
SOD_APIEXPORT void sod_img_rgb_to_hsv(sod_img im);
|
|
SOD_APIEXPORT void sod_img_hsv_to_rgb(sod_img im);
|
|
SOD_APIEXPORT void sod_img_rgb_to_bgr(sod_img im);
|
|
SOD_APIEXPORT void sod_img_bgr_to_rgb(sod_img im);
|
|
SOD_APIEXPORT void sod_img_yuv_to_rgb(sod_img im);
|
|
SOD_APIEXPORT void sod_img_rgb_to_yuv(sod_img im);
|
|
|
|
SOD_APIEXPORT sod_img sod_gaussian_noise_reduce(sod_img grayscale);
|
|
SOD_APIEXPORT sod_img sod_equalize_histogram(sod_img im);
|
|
|
|
SOD_APIEXPORT sod_img sod_grayscale_image(sod_img im);
|
|
SOD_APIEXPORT void sod_grayscale_image_3c(sod_img im);
|
|
|
|
SOD_APIEXPORT sod_img sod_threshold_image(sod_img im, float thresh);
|
|
SOD_APIEXPORT sod_img sod_otsu_binarize_image(sod_img im);
|
|
SOD_APIEXPORT sod_img sod_binarize_image(sod_img im, int reverse);
|
|
SOD_APIEXPORT sod_img sod_dilate_image(sod_img im, int times);
|
|
SOD_APIEXPORT sod_img sod_erode_image(sod_img im, int times);
|
|
|
|
SOD_APIEXPORT sod_img sod_sharpen_filtering_image(sod_img im);
|
|
SOD_APIEXPORT sod_img sod_hilditch_thin_image(sod_img im);
|
|
|
|
SOD_APIEXPORT sod_img sod_sobel_image(sod_img im);
|
|
SOD_APIEXPORT sod_img sod_canny_edge_image(sod_img im, int reduce_noise);
|
|
|
|
SOD_APIEXPORT sod_pts * sod_hough_lines_detect(sod_img im, int threshold, int *nPts);
|
|
SOD_APIEXPORT void sod_hough_lines_release(sod_pts *pLines);
|
|
|
|
SOD_APIEXPORT int sod_image_find_blobs(sod_img im, sod_box **paBox, int *pnBox, int(*xFilter)(int width, int height));
|
|
SOD_APIEXPORT void sod_image_blob_boxes_release(sod_box *pBox);
|
|
|
|
SOD_APIEXPORT void sod_composite_image(sod_img source, sod_img dest, int dx, int dy);
|
|
SOD_APIEXPORT void sod_flip_image(sod_img input);
|
|
SOD_APIEXPORT sod_img sod_image_distance(sod_img a, sod_img b);
|
|
|
|
SOD_APIEXPORT void sod_embed_image(sod_img source, sod_img dest, int dx, int dy);
|
|
SOD_APIEXPORT sod_img sod_blend_image(sod_img fore, sod_img back, float alpha);
|
|
SOD_APIEXPORT void sod_scale_image_channel(sod_img im, int c, float v);
|
|
SOD_APIEXPORT void sod_translate_image_channel(sod_img im, int c, float v);
|
|
|
|
SOD_APIEXPORT sod_img sod_resize_image(sod_img im, int w, int h);
|
|
SOD_APIEXPORT sod_img sod_resize_max(sod_img im, int max);
|
|
SOD_APIEXPORT sod_img sod_resize_min(sod_img im, int min);
|
|
SOD_APIEXPORT sod_img sod_rotate_crop_image(sod_img im, float rad, float s, int w, int h, float dx, float dy, float aspect);
|
|
SOD_APIEXPORT sod_img sod_rotate_image(sod_img im, float rad);
|
|
|
|
SOD_APIEXPORT void sod_translate_image(sod_img m, float s);
|
|
SOD_APIEXPORT void sod_scale_image(sod_img m, float s);
|
|
SOD_APIEXPORT void sod_normalize_image(sod_img p);
|
|
SOD_APIEXPORT void sod_transpose_image(sod_img im);
|
|
|
|
SOD_APIEXPORT sod_img sod_crop_image(sod_img im, int dx, int dy, int w, int h);
|
|
SOD_APIEXPORT sod_img sod_random_crop_image(sod_img im, int w, int h);
|
|
SOD_APIEXPORT sod_img sod_random_augment_image(sod_img im, float angle, float aspect, int low, int high, int size);
|
|
|
|
SOD_APIEXPORT void sod_image_draw_box(sod_img im, int x1, int y1, int x2, int y2, float r, float g, float b);
|
|
SOD_APIEXPORT void sod_image_draw_box_grayscale(sod_img im, int x1, int y1, int x2, int y2, float g);
|
|
SOD_APIEXPORT void sod_image_draw_circle(sod_img im, int x0, int y0, int radius, float r, float g, float b);
|
|
SOD_APIEXPORT void sod_image_draw_circle_thickness(sod_img im, int x0, int y0, int radius, int width, float r, float g, float b);
|
|
SOD_APIEXPORT void sod_image_draw_bbox(sod_img im, sod_box bbox, float r, float g, float b);
|
|
SOD_APIEXPORT void sod_image_draw_bbox_width(sod_img im, sod_box bbox, int width, float r, float g, float b);
|
|
SOD_APIEXPORT void sod_image_draw_line(sod_img im, sod_pts start, sod_pts end, float r, float g, float b);
|
|
|
|
SOD_APIEXPORT unsigned char * sod_image_to_blob(sod_img im);
|
|
SOD_APIEXPORT void sod_image_free_blob(unsigned char *zBlob);
|
|
/*
|
|
* OpenCV Integration API. The library must be compiled against OpenCV
|
|
* with the compile-time directive SOD_ENABLE_OPENCV defined.
|
|
*
|
|
* The documentation is available to consult at https://sod.pixlab.io/api.html#cmpl_opencv.
|
|
* The interfaces are documented at https://sod.pixlab.io/api.html#cvinter.
|
|
*/
|
|
#ifdef SOD_ENABLE_OPENCV
|
|
/*
|
|
* Change the include paths to the directory where OpenCV reside
|
|
* if those headers are not found by your compiler.
|
|
*/
|
|
#include <opencv2/highgui/highgui_c.h>
|
|
#include <opencv2/imgproc/imgproc_c.h>
|
|
|
|
SOD_APIEXPORT sod_img sod_img_load_cv_ipl(IplImage* src);
|
|
SOD_APIEXPORT sod_img sod_img_load_from_cv(const char *filename, int channels);
|
|
SOD_APIEXPORT sod_img sod_img_load_from_cv_stream(CvCapture *cap);
|
|
SOD_APIEXPORT int sod_img_fill_from_cv_stream(CvCapture *cap, sod_img *pImg);
|
|
SOD_APIEXPORT void sod_img_save_to_cv_jpg(sod_img im, const char *zPath);
|
|
#endif /* SOD_ENABLE_OPENCV */
|
|
/*
|
|
* SOD Embedded Release Information & Copyright Notice.
|
|
*/
|
|
SOD_APIEXPORT const char * sod_lib_copyright(void);
|
|
#define SOD_LIB_INFO "SOD Embedded - Release 1.1.7 under GPLv3. Copyright (C) 2018 PixLab| Symisc Systems, https://sod.pixlab.io"
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* _SOD_H_ */ |