{"id":346135,"date":"2023-03-02T03:00:19","date_gmt":"2023-03-02T03:00:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=346135"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=346135","title":{"rendered":"<span>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u0440\u043e\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Qt \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 tensorflow<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0412\u044b \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439, \u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0412\u044b \u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441++ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Qt  \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u043d\u0430 Python c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 tensorflow.<br \/>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0412\u0430\u043c\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 Qt \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<p>\u0410 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b tensorflow<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b opencv<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c android SDK \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Qt \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c<\/p>\n<\/li>\n<li>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 Qt \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u0441\u0430\u043c\u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b tensorflow<\/h3>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430.<br \/>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0412\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 (\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e) git clone\u00a0<a href=\"https:\/\/github.com\/tensorflow\/tensorflow.git\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/tensorflow\/tensorflow.git<\/a>\u00a0\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<br \/>git checkout branch_name \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e tensorflow.<\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 tensorflow \u0412\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f bazel. \u041d\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f tensorflow \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 basel. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u043c\u0443 \u0441 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u0441\u0442\u043e\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c bazelisk. \u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0441\u00a0<a href=\"https:\/\/github.com\/bazelbuild\/bazelisk\/releases\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/bazelbuild\/bazelisk\/releases<\/a>, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432 bazelisk \u0438 \u043a\u043b\u0430\u0434\u0451\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u00a0<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/usr\/local\/bin<\/a>\u00a0(\u0434\u043b\u044f linux), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e bazel \u043f\u0438\u0448\u0435\u043c bazelisk.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f tensorflow:<\/p>\n<ul>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 tensorflow<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f tensorflow lite<\/p>\n<\/li>\n<\/ul>\n<h4>\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 tensorflow<\/h4>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0422\u0443\u0442 \u0438\u043c\u0435\u043d\u043d\u043e tensorflow \u0431\u0435\u0437 keras, \u0442\u043e \u0435\u0441\u0442\u044c \u0412\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044c, \u0441\u043b\u043e\u0439, \u0430 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u043a\u043e\u043b\u043e 300 MB<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u041e\u0421<\/p>\n<\/li>\n<\/ul>\n<h4>Tensorflow lite<\/h4>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a keras<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 &#8212; \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u041e\u0421<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 &#171;.h5&#187; \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 &#171;.tflite&#187; (\u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043d\u0430 python).<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0432 \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e).<\/p>\n<\/li>\n<\/ul>\n<h4>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 tensorflow<\/h4>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<br \/>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c protobuf:<\/p>\n<pre><code class=\"bash\">git clone\u00a0https:\/\/github.com\/protocolbuffers\/protobuf.git\u00a0 cd protobufgit  checkout 3.9.x .\/autogen.sh .\/confugure make -j$(nproc) sudo make install sudo ldconfig  git clone\u00a0https:\/\/github.com\/tensorflow\/tensorflowcd tensorflow git checkout r2.7 git clone\u00a0https:\/\/github.com\/abseil\/abseil-cpp.git ln -s abseil-cpp\/absl .\/absl\/<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\u00a0<em>google<\/em>protobuf*; \u0432 tensorflow\/tensorflow\/tf_version_script.lds <br \/>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e:<\/p>\n<pre><code>.\/confugure bazelisk build --jobs=10 --verbose_failures -c opt --config=monolithic \/\/tensorflow:libtensorflow_cc.so<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f protobuf \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 tensorflow. \u042f \u043d\u0430\u0448\u0451\u043b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 tensorflow \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<h4>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 tensorflow lite<\/h4>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">git clone\u00a0https:\/\/github.com\/tensorflow\/tensorflow cd tensorflow git checkout r2.7 .\/confugure bazelisk build -c opt --config=android_arm64 --config=monolithic \/\/tensorflow\/lite:libtensorflowlite.so<\/code><\/pre>\n<p>.\/confugure \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0431\u043e\u0440\u043a\u0443, \u0435\u0441\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 android, \u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android NDK, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 Android studio.<br \/>\u0417\u0434\u0435\u0441\u044c android_arm64 &#8212; \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 64 \u0431\u0438\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e android.<br \/>\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 android_arm \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 32 \u0431\u0438\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e android.<br \/>\u0423\u0431\u0435\u0440\u0438\u0442\u0435 &#8212;config=android_arm64 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u0442\u0443 \u041e\u0421, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0412\u044b \u0432\u0435\u0434\u0451\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443.<br \/>\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u043e \u0442\u0435\u043c\u0435 \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442\u00a0<a href=\"https:\/\/www.tensorflow.org\/lite\/android\/development\" rel=\"noopener noreferrer nofollow\">https:\/\/www.tensorflow.org\/lite\/android\/development<\/a><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f bazel-bin, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 tensorflow\/lite<\/p>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Qt \u0434\u043b\u044f android \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;\/bazel-bin\/<br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/bazel-tensorflow\/external<\/a><br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/bazel-bin\/external\/flatbuffers\/_virtual_includes\/flatbuffers<\/a><\/p>\n<p>LIBS += -L&#187;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/bazel-bin\/tensorflow\/lite<\/a>\u00a0-ltensorflowlite<\/p>\n<h3>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b opencv<\/h3>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c git clone\u00a0<a href=\"https:\/\/github.com\/opencv\/opencv.git\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/opencv\/opencv.git<\/a><br \/>\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e git checkout &#171;\u0412\u0435\u0442\u043a\u0430&#187;, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 opencv \u0435\u0441\u0442\u044c \u0432\u0435\u0442\u043a\u0430.<br \/>\u0420\u044f\u0434\u043e\u043c \u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0435\u0439 opencv \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 opencv_build, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<br \/>\u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 opencv_build \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Android 64 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f, \u0437\u0430\u043c\u0435\u043d\u044f\u044f <br \/>&#171;\u041f\u0430\u043f\u043a\u0430 \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421&#187;<br \/>&#171;\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439\u00a0\u0432\u0435\u0440\u0441\u0438\u0435\u0439\u00a0android\u00a0NDK&#187;<br \/>&#171;\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438&#187;,<br \/>\u0412\u0430\u0448\u0438\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u0430\u043f\u043e\u043a.<\/p>\n<pre><code class=\"bash\">#\u00a0!\/bin\/bash\u00a0\u00a0 cd\u00a0\"\u041f\u0430\u043f\u043a\u0430 \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421\"\u00a0\u00a0 rm\u00a0-R\u00a0*\u00a0\u00a0 PATH=$PATH:\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439\u00a0\u0432\u0435\u0440\u0441\u0438\u0435\u0439\u00a0android\u00a0NDK\"\/toolchains\/llvm\/prebuilt\/linux-x86_64\/bin\u00a0\u00a0 export\u00a0ANDROID_HOME=\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u00a0SDK\"\u00a0\u00a0 export\u00a0ANDROID_SDK_ROOT=\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u00a0SDK\"\u00a0\u00a0 export\u00a0CMAKE_CONFIG_GENERATOR=\"Unix\u00a0Makefiles\"\u00a0\u00a0 cmake\u00a0-DCMAKE_BUILD_TYPE=Debug\u00a0-DANDROID_NATIVE_API_LEVEL=lastest\u00a0-DANDROID_ABI=arm64-v8a\u00a0-DCMAKE_BUILD_TYPE=Debug\u00a0-G\"$CMAKE_CONFIG_GENERATOR\"\u00a0-DANDROID_ARM_NEON=ON\u00a0-DANDROID_STL=c++_static\u00a0-DBUILD_ANDROID_PROJECTS:BOOL=ON\u00a0-DBUILD_opencv_world:BOOL=OFF\u00a0-DBUILD_PERF_TESTS:BOOL=OFF\u00a0-DBUILD_TESTS:BOOL=OFF\u00a0-DBUILD_DOCS:BOOL=OFF\u00a0-DWITH_CUDA:BOOL=ON\u00a0-DBUILD_EXAMPLES:BOOL=OFF\u00a0-DENABLE_PRECOMPILED_HEADERS=OFF\u00a0-DWITH_IPP=ON\u00a0-DWITH_MSMF=ON\u00a0-DOPENCV_ENABLE_NONFREE:BOOL=ON\u00a0-DWITH_OPENEXR=OFF\u00a0-DWITH_CAROTENE=ON\u00a0\\-DINSTALL_CREATE_DISTRIB=ON\u00a0-DOPENCV_EXTRA_MODULES_PATH=..\/..\/opencv_contrib\/modules\u00a0-DCMAKE_TOOLCHAIN_FILE=\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439\u00a0\u0432\u0435\u0440\u0441\u0438\u0435\u0439\u00a0android\u00a0NDK\"\/build\/cmake\/android.toolchain.cmake\u00a0..\/..\/opencv\u00a0\u00a0 make\u00a0-j16\u00a0\u00a0 cmake\u00a0--install\u00a0.\u00a0--prefix\u00a0\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"<\/code><\/pre>\n<p>\u0414\u043b\u044f 32-\u0431\u0438\u0442\u043d\u043e\u0439  Android \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0443\u0436\u043d\u043e arm64-v8a \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 armeabi-v7a<\/p>\n<p>\u0414\u043b\u044f desktop \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash cd \"\u041f\u0430\u043f\u043a\u0430 \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421\" rm -R * cmake ..\/..\/opencv make -j16 cmake --install . --prefix \"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"<\/code><\/pre>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f desktop \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>INCLUDEPATH\u00a0+=\u00a0\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"\/include\/opencv4\u00a0\u00a0\u00a0\u00a0 LIBS\u00a0+=\u00a0-L\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"\/lib\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_dnn\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_videoio\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_objdetect\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_calib3d\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_imgcodecs\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_features2d\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_flann\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_imgproc\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_core<\/code><\/pre>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f android \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>OPENCV_ANDROID\u00a0=\u00a0\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\" INCLUDEPATH\u00a0+=\u00a0\"$$OPENCV_ANDROID\/sdk\/native\/jni\/include\" LIBS\u00a0+=\u00a0-lmediandkcontains(ANDROID_TARGET_ARCH,armeabi-v7a){\u00a0\u00a0\u00a0 LIBS\u00a0+=\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/3rdparty\/libs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -ltbb\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lIlmImf\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LIBS\u00a0+=\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/libs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/staticlibs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/3rdparty\/libs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lade\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -littnotify\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibjpeg-turbo\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibwebp\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibpng\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibtiff\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibopenjp2\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lquirc\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -ltegra_hal\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_dnn\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_objdetect\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_calib3d\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_imgcodecs\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_features2d\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_flann\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_imgproc\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_core\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_videoio\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lcpufeatures\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibprotobuf\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ANDROID_EXTRA_LIBS\u00a0=\u00a0$$OPENCV_ANDROID\/sdk\/native\/libs\/arm64-v8a\/libopencv_java4.so<\/code><\/pre>\n<h3>\u0422\u0430\u043a \u0436\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 desktop tensorflow \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c flatbuffers<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438:<\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/google\/flatbuffers.git cmake -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=Release make sudo make install sudo ldconfig<\/code><\/pre>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c flatbuffers \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0432<br \/>sudo make install<br \/>cmake &#8212;install . &#8212;prefix &#171;\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438&#187;,<br \/>\u0430 \u0437\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e INCLUDEPATH\u00a0+= \u0438 LIBS\u00a0+= \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Qt<\/p>\n<h3> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u041f\u041e<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043e\u043f\u0438\u0448\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 tensorflow lite<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 tensorflow lite \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442:<\/p>\n<pre><code class=\"python\">pred_center_model.save('pred_center_model_full') converter = tf.lite.TFLiteConverter.from_saved_model('pred_center_model_full') # path to the SavedModel directory tflite_model = converter.convert()  # Save the model. with open('pred_center_model2.tflite', 'wb') as f:   f.write(tflite_model)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;opencv2\/opencv.hpp> #include \"tensorflow\/lite\/interpreter.h\" #include \"tensorflow\/lite\/kernels\/register.h\" #include \"tensorflow\/lite\/c\/c_api_types.h\"<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<pre><code class=\"cpp\">std::unique_ptr&lt;tflite::FlatBufferModel> m_model; tflite::ops::builtin::BuiltinOpResolver resolver; std::unique_ptr&lt;tflite::Interpreter> interpreter; m_model = tflite::FlatBufferModel::BuildFromFile(\"\u043f\u0443\u0442\u044c \u043a \u043c\u043e\u0434\u0435\u043b\u0438\"); tflite::InterpreterBuilder builder(*m_model, resolver); TfLiteStatus tatus = builder(&amp;interpreter); interpreter->AllocateTensors();<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 status == <em>kTfLiteOk, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u043c\u043e\u0434\u0435\u043b\u0438.<br \/>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0438\u0437 \u0441\u0430\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0442\u044c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u0445\u043e\u0434 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u0444\u0440\u0435\u0439\u043c cv:Mat , \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 9 \u0447\u0438\u0441\u0435\u043b (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430).<\/em><\/p>\n<pre><code class=\"cpp\">\/\/ \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043b\u043e\u0439 \u0441onst size_t DATA_SIZE 224*224*3 float* input = interpreter->typed_input_tensor&lt;float>(0); auto *from_data = (uint8_t*)frame.data;. copy(from_data, from_data + DATA_SIZE, input);  \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 auto status = interpreter->Invoke();  \/\/ \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f float* output = interpreter->typed_output_tensor&lt;float>(0); if (status == kTfLiteOk)   {     auto size = 9;     int max_idx {0};     float max = output[0];     static const vector&lt;string> emo_names = {\"\u0437\u043b\u043e\u0441\u0442\u044c\", \"\u043f\u0440\u0435\u0437\u0440\u0435\u043d\u0438\u0435\", \"\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435\", \"\u0441\u0442\u0440\u0430\u0445\", \"\u0440\u0430\u0434\u043e\u0441\u0442\u044c\", \"\u043d\u043e\u0440\u043c\u0430\", \"\u043f\u0435\u0447\u0430\u043b\u044c\",                                       \"\u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435\", \"\u043d\u0435\u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c\"};     vector&lt;string> emotions;     for (int i = 0; i &lt; size; ++i)       {         float curr_val = output[i];         if (curr_val > 0.2)           emotions.push_back(emo_names[i]);         if (curr_val > max)           {             max_idx = i;             max = curr_val;           }       }      return emotions;   } else   return {\"predict error\"};<\/code><\/pre>\n<p>\u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0434\u0440\u044b \u0438\u0437 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a\u0430  \u0432\u0435\u0431 \u043a\u0430\u043c\u0435\u0440\u044b \u0438\u043b\u0438 \u043a\u0430\u043c\u0435\u0440\u044b \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435.  \u0417\u0430\u0445\u0432\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 opencv, \u043b\u0438\u0431\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Qt.  \u0414\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 opencv \u0437\u0430\u043c\u0430\u043d\u0447\u0438\u0432\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u043a\u0430\u0434\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c  \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442 \u0447\u0435\u0440\u0435\u0437 opencv \u043f\u043e\u0434 android. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0437\u0430\u0445\u0432\u0430\u0442 \u0438 \u0432\u044b\u0432\u043e\u0434 \u0432\u0438\u0434\u0435\u043e-\u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Qt, \u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u043e\u0432 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 opencv. \u0422\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0432\u0441\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c 3 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: <\/p>\n<pre><code>QScopedPointer&lt;QCamera> m_camera; QVideoSink *m_video_sink{new QVideoSink{this}}; QMediaCaptureSession m_captureSession;<\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043c\u0435\u0440\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b:<\/p>\n<pre><code class=\"cpp\">m_camera.reset(QMediaDevices::defaultVideoInput()); m_captureSession.setCamera(m_camera.data()); m_camera->start(); m_captureSession.setVideoSink(m_video_sink);<\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438  \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 cv:Mat:<\/p>\n<pre><code class=\"cpp\">m_curr_image = m_video_sink->videoFrame().toImage(); m_frame = QImage2Mat(m_curr_image);<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 QImage \u0432 cv::Mat \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">using namespace cv;  QImage Mat2QImage(cv::Mat const&amp; src) {      cv::Mat temp; \/\/ make the same cv::Mat      cvtColor(src, temp, COLOR_BGR2RGBA); \/\/ cvtColor Makes a copt, that what i need      QImage dest((const uchar *) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB32);      dest.bits(); \/\/ enforce deep copy, see documentation      \/\/ of QImage::QImage ( const uchar * data, int width, int height, Format format )      return dest; }  cv::Mat QImage2Mat(QImage const&amp; src) {      cv::Mat tmp(src.height(),src.width(),CV_8UC4,(uchar*)src.bits(),src.bytesPerLine());      cv::Mat result; \/\/ deep copy just in case (my lack of knowledge with open cv)      cvtColor(tmp, result, COLOR_RGBA2BGR);      return result; }<\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0441\u0432\u043e\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0443\u0436\u0438\u0435, \u0443\u0436\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 opencv \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0438 \u043b\u0438\u0446 cv::dnn::Net, \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">auto prepared_frame = cv::dnn::blobFromImage(frame, 1.0, Size(300,300), Scalar(104.0, 177.0, 123.0)); m_face_detect_model.setInput(prepared_frame); Mat output = m_face_detect_model.forward(); const int SHIFT = 7; using currTp = Vec&lt;float,SHIFT>; auto it = output.begin&lt;currTp>(); while(it != output.end&lt;currTp>())   {     currTp pred = *it;     if (pred[2] &lt; 0.5)       break;      int x = pred[3]*m_img_width;     int y = pred[4]*m_img_height;     int width = (pred[5] - pred[3])*m_img_width;     int height = (pred[6] - pred[4])*m_img_height;     coords.push_back(Rect{x, y, width, height});     it+=SHIFT;   }<\/code><\/pre>\n<p>\u041f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u0434 Android \u043c\u043e\u0434\u0435\u043b\u0438 opencv \u0443 \u043c\u0435\u043d\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u0440\u0430\u0437 \u0432 40 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 tensorflow \u043c\u043e\u0434\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0438\u0448\u0438\u0442\u0435, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434. <br \/>Tensorflow \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u0443\u0447\u0443 \u0433\u043e\u0442\u043e\u0432\u044b\u0445, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 mediapipe \u0438 \u043f\u043e\u0434 python \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u043f\u043e\u0434 \u0441++ \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0412\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0435\u0441\u044c \u0432 mediapipe, \u0430 \u043d\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0441++, \u0442\u043e \u0412\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.  <br \/>\u0418\u0434\u0435\u044f mediapipe \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0432\u0432\u043e\u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043a\u0430\u043c\u0435\u0440\u044b, \u0434\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 mediapipe, \u0442\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0439 \u043e\u0442 mediapipe::CalculatorBase, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. <a href=\"https:\/\/habr.com\/ru\/post\/502440\/\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0442\u0435\u043c\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><a href=\"https:\/\/github.com\/KapPing-Git\/emotion_detector_qt.git\" rel=\"noopener noreferrer nofollow\">\u0412\u043e\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 <\/a><br \/>\u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0432\u0435\u0442\u043a\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/719888\/\"> https:\/\/habr.com\/ru\/post\/719888\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0412\u044b \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439, \u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0412\u044b \u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441++ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Qt  \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u043d\u0430 Python c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 tensorflow.<br \/>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0412\u0430\u043c\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 Qt \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<p>\u0410 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b tensorflow<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b opencv<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c android SDK \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Qt \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c<\/p>\n<\/li>\n<li>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 Qt \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u0441\u0430\u043c\u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b tensorflow<\/h3>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430.<br \/>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0412\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 (\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e) git clone\u00a0<a href=\"https:\/\/github.com\/tensorflow\/tensorflow.git\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/tensorflow\/tensorflow.git<\/a>\u00a0\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<br \/>git checkout branch_name \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e tensorflow.<\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 tensorflow \u0412\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f bazel. \u041d\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f tensorflow \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 basel. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u043c\u0443 \u0441 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u0441\u0442\u043e\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c bazelisk. \u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0441\u00a0<a href=\"https:\/\/github.com\/bazelbuild\/bazelisk\/releases\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/bazelbuild\/bazelisk\/releases<\/a>, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432 bazelisk \u0438 \u043a\u043b\u0430\u0434\u0451\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u00a0<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/usr\/local\/bin<\/a>\u00a0(\u0434\u043b\u044f linux), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e bazel \u043f\u0438\u0448\u0435\u043c bazelisk.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f tensorflow:<\/p>\n<ul>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 tensorflow<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f tensorflow lite<\/p>\n<\/li>\n<\/ul>\n<h4>\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 tensorflow<\/h4>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0421\u043b\u043e\u0436\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0422\u0443\u0442 \u0438\u043c\u0435\u043d\u043d\u043e tensorflow \u0431\u0435\u0437 keras, \u0442\u043e \u0435\u0441\u0442\u044c \u0412\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044c, \u0441\u043b\u043e\u0439, \u0430 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u043a\u043e\u043b\u043e 300 MB<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u041e\u0421<\/p>\n<\/li>\n<\/ul>\n<h4>Tensorflow lite<\/h4>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a keras<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 &#8212; \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u041e\u0421<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 &#171;.h5&#187; \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 &#171;.tflite&#187; (\u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043d\u0430 python).<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0432 \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e).<\/p>\n<\/li>\n<\/ul>\n<h4>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 tensorflow<\/h4>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<br \/>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c protobuf:<\/p>\n<pre><code class=\"bash\">git clone\u00a0https:\/\/github.com\/protocolbuffers\/protobuf.git\u00a0 cd protobufgit  checkout 3.9.x .\/autogen.sh .\/confugure make -j$(nproc) sudo make install sudo ldconfig  git clone\u00a0https:\/\/github.com\/tensorflow\/tensorflowcd tensorflow git checkout r2.7 git clone\u00a0https:\/\/github.com\/abseil\/abseil-cpp.git ln -s abseil-cpp\/absl .\/absl\/<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\u00a0<em>google<\/em>protobuf*; \u0432 tensorflow\/tensorflow\/tf_version_script.lds <br \/>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e:<\/p>\n<pre><code>.\/confugure bazelisk build --jobs=10 --verbose_failures -c opt --config=monolithic \/\/tensorflow:libtensorflow_cc.so<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f protobuf \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u0438 tensorflow. \u042f \u043d\u0430\u0448\u0451\u043b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 tensorflow \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<h4>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 tensorflow lite<\/h4>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">git clone\u00a0https:\/\/github.com\/tensorflow\/tensorflow cd tensorflow git checkout r2.7 .\/confugure bazelisk build -c opt --config=android_arm64 --config=monolithic \/\/tensorflow\/lite:libtensorflowlite.so<\/code><\/pre>\n<p>.\/confugure \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0431\u043e\u0440\u043a\u0443, \u0435\u0441\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 android, \u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Android NDK, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 Android studio.<br \/>\u0417\u0434\u0435\u0441\u044c android_arm64 &#8212; \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 64 \u0431\u0438\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e android.<br \/>\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 android_arm \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 32 \u0431\u0438\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e android.<br \/>\u0423\u0431\u0435\u0440\u0438\u0442\u0435 &#8212;config=android_arm64 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 \u0442\u0443 \u041e\u0421, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0412\u044b \u0432\u0435\u0434\u0451\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443.<br \/>\u0421\u0441\u044b\u043b\u043a\u0430 \u043f\u043e \u0442\u0435\u043c\u0435 \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442\u00a0<a href=\"https:\/\/www.tensorflow.org\/lite\/android\/development\" rel=\"noopener noreferrer nofollow\">https:\/\/www.tensorflow.org\/lite\/android\/development<\/a><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f bazel-bin, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 tensorflow\/lite<\/p>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Qt \u0434\u043b\u044f android \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;\/bazel-bin\/<br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/bazel-tensorflow\/external<\/a><br \/>INCLUDEPATH += &#171;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/bazel-bin\/external\/flatbuffers\/_virtual_includes\/flatbuffers<\/a><\/p>\n<p>LIBS += -L&#187;\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 tensorflow&#187;<a href=\"https:\/\/colab.research.google.com\/drive\/1JNNxDWSOn6bjm-_n_KgcFHLUz0r7EkCw#\" rel=\"noopener noreferrer nofollow\">\/bazel-bin\/tensorflow\/lite<\/a>\u00a0-ltensorflowlite<\/p>\n<h3>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b opencv<\/h3>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c git clone\u00a0<a href=\"https:\/\/github.com\/opencv\/opencv.git\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/opencv\/opencv.git<\/a><br \/>\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e git checkout &#171;\u0412\u0435\u0442\u043a\u0430&#187;, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 opencv \u0435\u0441\u0442\u044c \u0432\u0435\u0442\u043a\u0430.<br \/>\u0420\u044f\u0434\u043e\u043c \u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0435\u0439 opencv \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 opencv_build, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<br \/>\u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 opencv_build \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Android 64 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f, \u0437\u0430\u043c\u0435\u043d\u044f\u044f <br \/>&#171;\u041f\u0430\u043f\u043a\u0430 \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421&#187;<br \/>&#171;\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439\u00a0\u0432\u0435\u0440\u0441\u0438\u0435\u0439\u00a0android\u00a0NDK&#187;<br \/>&#171;\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438&#187;,<br \/>\u0412\u0430\u0448\u0438\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u0430\u043f\u043e\u043a.<\/p>\n<pre><code class=\"bash\">#\u00a0!\/bin\/bash\u00a0\u00a0 cd\u00a0\"\u041f\u0430\u043f\u043a\u0430 \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421\"\u00a0\u00a0 rm\u00a0-R\u00a0*\u00a0\u00a0 PATH=$PATH:\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439\u00a0\u0432\u0435\u0440\u0441\u0438\u0435\u0439\u00a0android\u00a0NDK\"\/toolchains\/llvm\/prebuilt\/linux-x86_64\/bin\u00a0\u00a0 export\u00a0ANDROID_HOME=\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u00a0SDK\"\u00a0\u00a0 export\u00a0ANDROID_SDK_ROOT=\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u00a0SDK\"\u00a0\u00a0 export\u00a0CMAKE_CONFIG_GENERATOR=\"Unix\u00a0Makefiles\"\u00a0\u00a0 cmake\u00a0-DCMAKE_BUILD_TYPE=Debug\u00a0-DANDROID_NATIVE_API_LEVEL=lastest\u00a0-DANDROID_ABI=arm64-v8a\u00a0-DCMAKE_BUILD_TYPE=Debug\u00a0-G\"$CMAKE_CONFIG_GENERATOR\"\u00a0-DANDROID_ARM_NEON=ON\u00a0-DANDROID_STL=c++_static\u00a0-DBUILD_ANDROID_PROJECTS:BOOL=ON\u00a0-DBUILD_opencv_world:BOOL=OFF\u00a0-DBUILD_PERF_TESTS:BOOL=OFF\u00a0-DBUILD_TESTS:BOOL=OFF\u00a0-DBUILD_DOCS:BOOL=OFF\u00a0-DWITH_CUDA:BOOL=ON\u00a0-DBUILD_EXAMPLES:BOOL=OFF\u00a0-DENABLE_PRECOMPILED_HEADERS=OFF\u00a0-DWITH_IPP=ON\u00a0-DWITH_MSMF=ON\u00a0-DOPENCV_ENABLE_NONFREE:BOOL=ON\u00a0-DWITH_OPENEXR=OFF\u00a0-DWITH_CAROTENE=ON\u00a0\\-DINSTALL_CREATE_DISTRIB=ON\u00a0-DOPENCV_EXTRA_MODULES_PATH=..\/..\/opencv_contrib\/modules\u00a0-DCMAKE_TOOLCHAIN_FILE=\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439\u00a0\u0432\u0435\u0440\u0441\u0438\u0435\u0439\u00a0android\u00a0NDK\"\/build\/cmake\/android.toolchain.cmake\u00a0..\/..\/opencv\u00a0\u00a0 make\u00a0-j16\u00a0\u00a0 cmake\u00a0--install\u00a0.\u00a0--prefix\u00a0\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"<\/code><\/pre>\n<p>\u0414\u043b\u044f 32-\u0431\u0438\u0442\u043d\u043e\u0439  Android \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0443\u0436\u043d\u043e arm64-v8a \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 armeabi-v7a<\/p>\n<p>\u0414\u043b\u044f desktop \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash cd \"\u041f\u0430\u043f\u043a\u0430 \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421\" rm -R * cmake ..\/..\/opencv make -j16 cmake --install . --prefix \"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"<\/code><\/pre>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f desktop \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>INCLUDEPATH\u00a0+=\u00a0\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"\/include\/opencv4\u00a0\u00a0\u00a0\u00a0 LIBS\u00a0+=\u00a0-L\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\"\/lib\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_dnn\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_videoio\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_objdetect\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_calib3d\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_imgcodecs\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_features2d\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_flann\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_imgproc\u00a0\\\u00a0\u00a0\u00a0\u00a0 -lopencv_core<\/code><\/pre>\n<p>\u0412 pro \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f android \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>OPENCV_ANDROID\u00a0=\u00a0\"\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438\" INCLUDEPATH\u00a0+=\u00a0\"$$OPENCV_ANDROID\/sdk\/native\/jni\/include\" LIBS\u00a0+=\u00a0-lmediandkcontains(ANDROID_TARGET_ARCH,armeabi-v7a){\u00a0\u00a0\u00a0 LIBS\u00a0+=\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/3rdparty\/libs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -ltbb\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lIlmImf\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LIBS\u00a0+=\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/libs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/staticlibs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -L\"$$OPENCV_ANDROID\/sdk\/native\/3rdparty\/libs\/$$ANDROID_TARGET_ARCH\"\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lade\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -littnotify\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibjpeg-turbo\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibwebp\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibpng\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibtiff\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibopenjp2\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lquirc\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -ltegra_hal\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_dnn\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_objdetect\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_calib3d\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_imgcodecs\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_features2d\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_flann\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_imgproc\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_core\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lopencv_videoio\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -lcpufeatures\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -llibprotobuf\u00a0\\\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ANDROID_EXTRA_LIBS\u00a0=\u00a0$$OPENCV_ANDROID\/sdk\/native\/libs\/arm64-v8a\/libopencv_java4.so<\/code><\/pre>\n<h3>\u0422\u0430\u043a \u0436\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 desktop tensorflow \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c flatbuffers<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438:<\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/google\/flatbuffers.git cmake -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=Release make sudo make install sudo ldconfig<\/code><\/pre>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c flatbuffers \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0432<br \/>sudo make install<br \/>cmake &#8212;install . &#8212;prefix &#171;\u041f\u0430\u043f\u043a\u0430\u00a0\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438&#187;,<br \/>\u0430 \u0437\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e INCLUDEPATH\u00a0+= \u0438 LIBS\u00a0+= \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Qt<\/p>\n<h3> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u041f\u041e<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043e\u043f\u0438\u0448\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 tensorflow lite<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 tensorflow lite \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442:<\/p>\n<pre><code class=\"python\">pred_center_model.save('pred_center_model_full') converter = tf.lite.TFLiteConverter.from_saved_model('pred_center_model_full') # path to the SavedModel directory tflite_model = converter.convert()  # Save the model. with open('pred_center_model2.tflite', 'wb') as f:   f.write(tflite_model)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;opencv2\/opencv.hpp> #include \"tensorflow\/lite\/interpreter.h\" #include \"tensorflow\/lite\/kernels\/register.h\" #include \"tensorflow\/lite\/c\/c_api_types.h\"<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<pre><code class=\"cpp\">std::unique_ptr&lt;tflite::FlatBufferModel> m_model; tflite::ops::builtin::BuiltinOpResolver resolver; std::unique_ptr&lt;tflite::Interpreter> interpreter; m_model = tflite::FlatBufferModel::BuildFromFile(\"\u043f\u0443\u0442\u044c \u043a \u043c\u043e\u0434\u0435\u043b\u0438\"); tflite::InterpreterBuilder builder(*m_model, resolver); TfLiteStatus tatus = builder(&amp;interpreter); interpreter->AllocateTensors();<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 status == <em>kTfLiteOk, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u043c\u043e\u0434\u0435\u043b\u0438.<br \/>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0438\u0437 \u0441\u0430\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0442\u044c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u0445\u043e\u0434 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u0444\u0440\u0435\u0439\u043c cv:Mat , \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 9 \u0447\u0438\u0441\u0435\u043b (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430).<\/em><\/p>\n<pre><code class=\"cpp\">\/\/ \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043b\u043e\u0439 \u0441onst size_t DATA_SIZE 224*224*3 float* input = interpreter->typed_input_tensor&lt;float>(0); auto *from_data = (uint8_t*)frame.data;. copy(from_data, from_data + DATA_SIZE, input);  \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 auto status = interpreter->Invoke();  \/\/ \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f float* output = interpreter->typed_output_tensor&lt;float>(0); if (status == kTfLiteOk)   {     auto size = 9;    <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-346135","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=346135"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346135\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=346135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=346135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=346135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}