Die Vorverarbeitung, Nachbearbeitung usw. von MobileNetV2-SSD Lite wird teilweise in eine gemeinsam genutzte C ++ - Bibliothek umgewandelt und von Python aufgerufen

  1. Introduction Dies ist mein eigenes Entwicklungsprotokoll. Schreiben Sie die Ergebnisse des Lernens zum Aufrufen einer gemeinsam genutzten C ++ - Bibliothek von Python auf, um die Vor- und Nachbearbeitung Ihres Raspberry Pi 4-Deep-Learning-Programms teilweise zu beschleunigen. Dieses Mal verwenden wir eine Bibliothek namens ** boost_python3 **, um eine gemeinsam genutzte Bibliothek zum Ausführen von Python zu erstellen. Es dauerte eine Weile, bis ich die Abhängigkeiten zwischen dem Header-Datei-Include und der gemeinsam genutzten Bibliothek herausgefunden hatte, aber als ich wusste, was ich tat, war es wirklich einfach.

  2. Environment

  1. Procedure 3-1. Tutorial implementation Umwelt vorbereiten

Install_boost-python


$ sudo apt-get update
$ sudo apt-get install libboost-all-dev python3-dev

Erstellen eines Verkostungsprogramms

python


$ nano CModule.cpp

CModule.cpp


#include <boost/python.hpp>

std::string hello() {
    return "hello world";
}

BOOST_PYTHON_MODULE(CModule) {
    using namespace boost::python;
    def("hello", &hello);
}

Zusammenstellung des Verkostungsprogramms

compile


$ g++ -I/usr/include/aarch64-linux-gnu/python3.7m \
      -I/usr/include/python3.7m \
      -DPIC \
      -shared \
      -fPIC \
      -o CModule.so \
      CModule.cpp \
      -lboost_python3

Rufen Sie den Test der gemeinsam genutzten Bibliothek zur Verkostung (CModule.so) von Python auf

test


$ python3
>>> import CModule
>>> CModule.hello()
'hello world'

3-2. Pre-processing test implementation and operation verification Einfache Implementierung des Vorverarbeitungsprogramms in C ++

Edit


$ nano preprocessing.cpp

preprocessing.cpp


#include <string>
#include <stdio.h>
#include <boost/python.hpp>
#include <opencv2/opencv.hpp>

void resize_and_normalize(std::string image_file, int width, int height) {
    cv::Mat image = cv::imread(image_file, 1), prepimage;
    cv::resize(image, prepimage, cv::Size(width, height));
    cv::imshow("InputImage", prepimage);
    cv::waitKey(0);
}

BOOST_PYTHON_MODULE(preprocessing) {
    using namespace boost::python;
    def("resize_and_normalize", &resize_and_normalize);
}

Kompilieren Sie das erstellte Vorverarbeitungsprogramm Die gemeinsam genutzte Bibliothek (.so) wird generiert

compile_ubuntu1910_aarch64


$ g++ -I/usr/include/aarch64-linux-gnu/python3.7m \
      -I/usr/include/python3.7m \
      -I/usr/local/include/opencv4 \
      -DPIC \
      -shared \
      -fPIC \
      -o preprocessing.so \
      preprocessing.cpp \
      -lboost_python3 \
      -L/usr/local/lib \
      -lopencv_core \
      -lopencv_imgcodecs \
      -lopencv_highgui

compile_ubuntu1804_x86_64


$ g++ -I/usr/include/x86_64-linux-gnu/python3.6m/ \
      -I/usr/include/python3.6m \
      -I/opt/intel/openvino_2019.3.376/opencv/include \
      -DPIC \
      -shared \
      -fPIC \
      -o preprocessing.so \
      preprocessing.cpp \
      -lboost_python3 \
      -L/opt/intel/openvino_2019.3.376/opencv/lib \
      -lopencv_core \
      -lopencv_imgcodecs \
      -lopencv_highgui

Screenshot 2020-02-06 18:08:23.png

Erstellen eines Python-Programms zum Testen

Edit


$ nano test.py

test.py


import preprocessing
preprocessing.resize_and_normalize("dog.jpg ", 300, 300)

Execution


$ python3 test.py

Screenshot 2020-02-06 18:05:15.png

  1. Reference articles

  2. ** Veröffentlichen Sie C ++ in Python3 mit Ubuntu --Qiita --mink0212 **

  3. ** Bibliothek für Python in C ++ erstellen **

  4. ** Python-Tipps: Ich möchte den Speicherort von Bibliotheksmodulen herausfinden **

  5. ** Eine kurze Zusammenfassung der gemeinsam genutzten Linux-Bibliotheken **

  6. https://stackoverflow.com/questions/51308292/swig-linker-undefined-symbol-zn2cv8fastfreeepv-cvfastfreevoid

  7. ** Grundlegende Verarbeitung von cv :: Mat **

  8. CV_Assert, CV_DbgAssert, CV_StaticAssert

  9. ** Schreiben Sie nicht so viele Doppelschleifen wie möglich in die Bildverarbeitung - Qiita --nonbiri15 **

Recommended Posts

Die Vorverarbeitung, Nachbearbeitung usw. von MobileNetV2-SSD Lite wird teilweise in eine gemeinsam genutzte C ++ - Bibliothek umgewandelt und von Python aufgerufen
Rufen Sie mit ctypes Ihre eigene gemeinsam genutzte Bibliothek in C-Sprache von Python aus auf