Commit d838dc74c143c3e54a6573d80e19d9d8fa69520a
1 parent
a9357c29
first draft of Likely trainable transform
Showing
2 changed files
with
60 additions
and
16 deletions
openbr/plugins/core/likely.cpp
| 1 | 1 | #include <openbr/plugins/openbr_internal.h> |
| 2 | +#include <openbr/core/qtutils.h> | |
| 2 | 3 | |
| 3 | 4 | #include <likely.h> |
| 4 | 5 | #include <likely/opencv.hpp> |
| ... | ... | @@ -13,44 +14,76 @@ namespace br |
| 13 | 14 | * www.liblikely.org |
| 14 | 15 | * \author Josh Klontz \cite jklontz |
| 15 | 16 | */ |
| 16 | -class LikelyTransform : public UntrainableTransform | |
| 17 | +class LikelyTransform : public Transform | |
| 17 | 18 | { |
| 18 | 19 | Q_OBJECT |
| 19 | - Q_PROPERTY(QString kernel READ get_kernel WRITE set_kernel RESET reset_kernel STORED false) | |
| 20 | - BR_PROPERTY(QString, kernel, "") | |
| 20 | + Q_PROPERTY(QString sourceFile READ get_sourceFile WRITE set_sourceFile RESET reset_sourceFile STORED false) | |
| 21 | + BR_PROPERTY(QString, sourceFile, "") | |
| 21 | 22 | |
| 22 | - likely_const_env env; | |
| 23 | - void *function; | |
| 23 | + QByteArray bitcode; | |
| 24 | + likely_env env; | |
| 25 | + | |
| 26 | + typedef likely_mat (*Function)(likely_const_mat); | |
| 27 | + Function function; | |
| 24 | 28 | |
| 25 | 29 | ~LikelyTransform() |
| 26 | 30 | { |
| 27 | 31 | likely_release_env(env); |
| 28 | 32 | } |
| 29 | 33 | |
| 30 | - void init() | |
| 34 | + void compile() | |
| 31 | 35 | { |
| 32 | - likely_release_env(env); | |
| 33 | - const likely_ast ast = likely_lex_and_parse(qPrintable(kernel), likely_file_lisp); | |
| 34 | - const likely_const_env parent = likely_standard(likely_jit(false), NULL); | |
| 35 | - env = likely_eval(ast, parent, NULL, NULL); | |
| 36 | + const likely_const_mat data = likely_new(likely_u8 | likely_multi_channel, bitcode.size(), 1, 1, 1, bitcode.data()); | |
| 37 | + env = likely_precompiled(data, qPrintable(QFileInfo(sourceFile).baseName())); | |
| 38 | + function = (Function) likely_function(env->expr); | |
| 39 | + if (!function) | |
| 40 | + qFatal("Failed to compile: %s", qPrintable(sourceFile)); | |
| 41 | + } | |
| 42 | + | |
| 43 | + void train(const TemplateList &) | |
| 44 | + { | |
| 45 | + QByteArray sourceCode; | |
| 46 | + QtUtils::readFile(sourceFile, sourceCode); | |
| 47 | + | |
| 48 | + // Pick settings to minimize code size | |
| 49 | + likely_settings settings; | |
| 50 | + settings.opt_level = 2; | |
| 51 | + settings.size_level = 2; | |
| 52 | + settings.multicore = false; | |
| 53 | + settings.heterogeneous = false; | |
| 54 | + settings.unroll_loops = false; | |
| 55 | + settings.vectorize_loops = false; | |
| 56 | + settings.verbose = false; | |
| 57 | + | |
| 58 | + likely_mat output; | |
| 59 | + const likely_const_env parent = likely_standard(settings, &output, likely_file_bitcode); | |
| 60 | + likely_release_env(likely_lex_parse_and_eval(sourceCode.data(), likely_guess_file_type(qPrintable(sourceFile)), parent)); | |
| 36 | 61 | likely_release_env(parent); |
| 37 | - likely_release_ast(ast); | |
| 38 | - function = likely_function(env->expr); | |
| 62 | + | |
| 63 | + bitcode = QByteArray(output->data, likely_bytes(output)); | |
| 64 | + likely_release_mat(output); | |
| 65 | + | |
| 66 | + compile(); | |
| 39 | 67 | } |
| 40 | 68 | |
| 41 | 69 | void project(const Template &src, Template &dst) const |
| 42 | 70 | { |
| 43 | 71 | const likely_const_mat srcl = likelyFromOpenCVMat(src); |
| 44 | - const likely_const_mat dstl = reinterpret_cast<likely_mat (*)(likely_const_mat)>(function)(srcl); | |
| 72 | + const likely_const_mat dstl = function(srcl); | |
| 45 | 73 | dst = likelyToOpenCVMat(dstl); |
| 46 | 74 | likely_release_mat(dstl); |
| 47 | 75 | likely_release_mat(srcl); |
| 48 | 76 | } |
| 49 | 77 | |
| 50 | -public: | |
| 51 | - LikelyTransform() | |
| 78 | + void store(QDataStream &stream) const | |
| 79 | + { | |
| 80 | + stream << bitcode; | |
| 81 | + } | |
| 82 | + | |
| 83 | + void load(QDataStream &stream) | |
| 52 | 84 | { |
| 53 | - env = NULL; | |
| 85 | + stream >> bitcode; | |
| 86 | + compile(); | |
| 54 | 87 | } |
| 55 | 88 | }; |
| 56 | 89 | ... | ... |
share/openbr/likely/cvt_gray.lisp
0 → 100644
| 1 | +convert-grayscale := | |
| 2 | + src :-> | |
| 3 | + { | |
| 4 | + (assume src.channels.(== 3)) | |
| 5 | + dst := (new src.type.not-multi-channel 1 src.columns src.rows src.frames null) | |
| 6 | + src := (src.type.not-saturated src) | |
| 7 | + (dst src) :=> | |
| 8 | + dst :<- (bgr-to-y src.type (src 0) (src 1) (src 2)) | |
| 9 | + } | |
| 10 | + | |
| 11 | +(extern u8XY "cvt_gray" u8CXY convert-grayscale) | ... | ... |