Search This Blog

Monday, November 20, 2017

OpenCV on Linux using g++, CMake, Qt, Code::Blocks

  1. နိဒါန်း
  2. GCC ၊ CMake တို့ဖြင့် အသုံးပြုခြင်း
  3. Qt ဖြင့် အသုံးပြုခြင်း
  4. Code::Blocks ဖြင့်အသုံးပြုခြင်း
  5. အကိုးအကားများ

နိဒါန်း

OpenCV ကို Linux တွင် တပ်ဆင် ရန် ပထမ အဆင့် အနေနှင့် အောက်ပါ packages များ စက်ထဲ တွင် ရှိရန် လိုအပ် သည် [Ope17g]။
  • GCC 4.4.x or later
  • CMake 2.6 or higher
  • Git
  • GTK+2.x or higher, including headers (libgtk2.0-dev)
  • pkg-config
  • Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
  • ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
  • [optional] libtbb2 libtbb-dev
  • [optional] libdc1394 2.x
  • [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
ထို packages များအား စက်ထဲသို့ ထည့်သွင်း လိုပါက Synaptic Manager သုံး၍ သော် လည်းကောင်း၊ terminal တွင် အောက်ပါ စာရင်း များပါ command များ ရိုက်နှိပ်၍ သော် လည်းကောင်း ထည့်နိုင် သည်။

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk-3-dev pkg-config
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
Listing. OpenCV အတွက် လိုအပ်သော packages များ ရယူခြင်း။

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev
sudo apt-get install libpng-dev libtiff-dev libdc1394-22-dev
sudo apt install libv4l-dev libxvidcore-dev libx264-dev
Listing. OpenCV အတွက် optional packages များ ရယူခြင်း။

OpenCV ကို Linux တွင် ရယူ တပ်ဆင် ရန် လွယ်ကူ ရိုးရှင်း သော နည်းလမ်း တစ်ခု အဖြစ် အောက်ပါ အတိုင်း terminal တွင် ရိုက်ယူ နိုင်သည်။
sudo apt-get install libopencv-dev


ထိုသို့ မဟုတ်ပဲ လက်ရှိ OpenCV အခြေကျ ဗာရှင်း ကို ရယူ တပ်ဆင်လို ပါက OpenCV for Linux/Mac (https://opencv.org/) တွင် ရယူ ရန်လိုသည်။ ထိုမှ ရလာသော zip ဖိုင်အား Archive Manager သုံး၍ extract လုပ်နိုင်သည်။

ထိုထက် မကပဲ နောက်ဆုံးထွက် cutting-edge opencv ဗားရှင်း ကို ရယူ မည် ဆိုပါက Git repository ရှိ OpenCV repository တွင် ရယူ နိုင်သည်။ OpenCV contrib repository များ ကိုပါ တပ်ဆင် မည် ဆိုပါက လည်း အောက်ပါ အတိုင်း ယူနိုင် သည်။
cd ~
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git


ဤနေရာတွင် ရလာသည့် folder မှာ opencv ဖြစ်သဖြင့် ထို နေရာသို့ သွား၍ build ဆိုသည့် folder တစ်ခု ဖန်တီးကာ ဖိုင်များ ထုတ်၍ သိမ်းဆည်းရန် အောက်ပါ စာရင်း ရှိ command များ ရိုက်မည်။
cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..
Listing. OpenCV ကို build လုပ်ခြင်း။

Shared libs ကို unset လုပ်ချင် ပါက အောက်ပါ option ကို ထည့်နိုင် သည်။
-D BUILD_SHARED_LIBS=OFF
Listing. Static libs ပြုလုပ်ခြင်း။

ခေတ္တ စောင့်ဆိုင်း ပြီးသည့် အခါ အောက်ပါ စာရင်း အတိုင်း build လုပ်၍၊ install လုပ်မည်။
make
sudo make install
Listing. OpenCV ကို install လုပ်ခြင်း။

တပ်ဆင် ပြီးသည့် OpenCV ဗားရှင်း ကို အောက်ပါ command ဖြင့် ကြည့် နိုင်သည်။
pkg-config --modversion opencv
Listing. OpenCV ဗားရှင်းကို စစ်ခြင်း။

GCC ၊ CMake တို့ဖြင့် အသုံးပြုခြင်း

OpenCV ကို သုံးရန် အလွယ်ဆုံး နည်းမှာ CMake ဖြင့် သုံးခြင်း ဖြစ်သည် [Ope17l]။ CMake နှင့် မရင်းနှီး ပါက CMake tutorial (https://cmake.org/cmake-tutorial/) တွင် သွား ရောက် လေ့လာ နိုင်သည်။

ပထမ ခြေလှမ်း အနေ နှင့် ပုံတစ်ပုံ ကို ဖတ်၍ ပြသည့် ရိုးရှင်းသည့် နမူနာ လေးအား စမ်းသပ် ကြည့်မည်။ ထို အတွက် thiri.jpg ဆိုသည့် ဓာတ်ပုံကို home folder တွင် ထားလိုက် မည်။ ထို့နောက် အောက်ပါ DisplayImage.cpp (online) ဆိုသည့် ပရိုဂရမ် လေးအား ဖန်တီး လိုက်မည်။ ပြီးသည့် အခါ DisplayImage ဟူသည့် folder တစ်ခု ဖွဲ့၍ ထိုထဲ တွင် သိမ်းဆည်း လိုက်မည်။
#include < stdio.h >
#include < opencv2/opencv.hpp >
using namespace cv;
int main(int argc, char** argv )
{
 Mat image;
 image = imread( "/home/yan/thiri.jpg", 1 );
 if ( !image.data ) {
  printf("No image data \n");
  return -1;
 }
 namedWindow("Display Image", WINDOW_AUTOSIZE );
 imshow("Display Image", image);
 waitKey(0);
 return 0;
}
Listing. ပုံတစ်ပုံ ကို ဖတ်၍ ပြသည့် DisplayImage.cpp ပရိုဂရမ်။

ဤနေရာ တွင် thiri.jpg အတွက် path မှာ "/home/yan/thiri.jpg" ဖြစ်ပြီး သင့်ပုံ ရှိသည့် folder ၊ username တို့နှင့် ကိုက်ညီသည့် path ကို အစားထိုး ရမည်။ imread သည် လမ်းကြောင်း ပေးလိုက်သည့် ပုံဖိုင်ကို ဖတ်သည်။ ဒုတိယ argument ဖြစ်သည့် 1 မှာ ကာလာပုံ ဖတ်မည် ဟု ဆိုလိုခြင်း ဖြစ်သည်။ 0 ဆိုပါက အဖြူ အမည်း ပြောင်း၍ ဖတ်မည်။ ပုံကို ဖတ်၍ မရ ပါက message ရိုက်ပြ၍ ထွက်သွားမည် ဖြစ်ပြီး၊ ဖတ်၍ အောင်မြင် ပါက imshow ကိုသုံး၍ ပုံကို ထုတ်ပြမည် ဖြစ်သည်။ တဖန် CMakeLists.txt ဆိုသည့် ဖိုင်ကို အောက်ပါ စာရင်း အတိုင်း ဖန်တီးမည်။
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
Listing. CMakeLists.txt

ဤတွင် လိုချင်သည့် ပရိုဂရမ် ကို အောက်ပါ command များအား terminal တွင် ရိုက်ခြင်းဖြင့် build လုပ်နိုင်၊ run ကြည့်နိုင် သည်။
cd DisplayImage
cmake .
make
./DisplayImage
Listing. DisplayImage ကို CMake ဖြင့် build လုပ်၍ run ခြင်း။

pkg-config

CMake ကို မသုံးပဲ pkg-config ဖြင့် build လုပ်၍ လည်း run နိုင်သည်။
g++ DisplayImage.cpp `pkg-config --cflags --libs opencv` -o DisplayImage
./DisplayImage
Listing. DisplayImage ကို g++, pkg-config တို့ဖြင့် build လုပ်၍ run ခြင်း။

Run လိုက်သည့် အခါ အောက်ပါ ပုံ အတိုင်း ရရှိမည်။

Figure. DisplayImage ပရိုဂရမ် ၏ ရလာဒ် ကို terminal နှင့် ယှဉ်တွဲ ပြထား သည်။


Shared lib အား ရှာ မရ သည့် error ရခဲ့ လျှင် /etc/ld.so.conf.d/opencv.conf ဟူသည့် ဖိုင်အား အောက်ပါ အတိုင်း ဖန်တီး နိုင်သည်။
sudo nano /etc/ld.so.conf.d/opencv.conf
ပြီးသည့် အခါ opencv ကို တပ်ဆင် ထားသည့် နေရာ ပေါ် မူတည် ၍
/usr/local/opencv/
သို့မဟုတ်
/usr/local/lib/
ကို opencv.conf တွင် ဖြည့်မည်။ ထို့နောက် အောက်ပါ command အား terminal တွင် ရိုက်ထည့် နိုင်သည်။
sudo ldconfig


Qt ဖြင့် အသုံးပြုခြင်း

အသုံး များသော IDE တစ်ခု ဖြစ်သည့် Qt နှင့် OpenCV ကို အသုံး ပြုခြင်း အကြောင်း ဆွေးနွေး မည်။ Qt ကို ရယူ၍ တပ်ဆင်ရန် အောက်ပါ စာရင်း ရှိ command များကို terminal တွင်ရိုက်နိုင်သည်။
wget http://download.qt.io/official_releases/qt/5.9/5.9.0/qt-opensource-linux-x64-5.9.0.run
chmod +x qt-opensource-linux-x64-5.9.0.run
./qt-opensource-linux-x64-5.9.0.run
Listing. Qt ကို Linux တွင် တပ်ဆင် ခြင်း။

ထို့နောက် အခြား လိုအပ်သော g++ ၊ font configuration ၊ OpenGL များ ရယူ ရန် အောက်ပါ စာရင်း အတိုင်း လုပ်ဆောင် နိုင်သည်။
sudo apt-get install build-essential
sudo apt-get install libfontconfig1
sudo apt-get install mesa-common-dev
sudo apt-get install libglu1-mesa-dev -y
Listing. Qt အတွက် အခြား လိုအပ်သော packages များရယူ ခြင်း။

တပ်ဆင် ပြီးပါက ရိုးရှင်းသော OpenCV နမူနာ တစ်ခုကို စမ်းသပ်ရန် Qt ကို ဖွင့်မည်။ New Project ကို နှိပ်၍ Non-Qt Project နှင့် Plain C++ Application ကို ပုံတွင် ပြထား သလို choose မည်။

Figure. Qt တွင် new project တစ်ခုကို ဖန်တီးခြင်း။


Project Location အတွက် DisplayImageQt စသဖြင့် အမည်ပေး၊ folder ဖွဲ့၍ ရွေးချယ် မည်။ Build System တွင် qmake အတိုင်း ထားမည်။ Kit Selection တွင်လည်း Desktop Qt 5.9.0 GCC 64bit အတိုင်း ထားနိုင် သည်။ Next ထပ်နှိပ် ၍ Project Management တွင် None အတိုင်း ထားမည်။ ထို့နောက် Project အောက်မှ Sources ရှိ main.cpp (online) တွင် အောက်ပါ စာရင်း ရှိ ပရိုဂရမ် အတိုင်း ရေးမည်။
#include < stdio.h >
#include < opencv2/opencv.hpp >
using namespace cv;
int main(int argc, char** argv )
{
 Mat image,bw_img;
 image = imread( "/home/yan/thiri.jpg", 1 );
 if ( !image.data ) {
  printf("No image data \n");
  return -1;
 }
 namedWindow("Original Image", WINDOW_AUTOSIZE );
 imshow("Original Image", image);
 cvtColor(image, bw_img, COLOR_BGR2GRAY);
 namedWindow("BW Image", WINDOW_AUTOSIZE );
 imshow("BW Image", bw_img);
 waitKey(0);
 return 0;
}
Listing. ပုံ တစ်ပုံကို ဖတ်ပြ၍ အဖြူ အမည်း ပြောင်းပေးသော ပရိုဂရမ်။

ဤ ပရိုဂရမ် တွင် ပုံကို ဖတ်၍ ရသည့် အခါ cvtColor ကို သုံး၍ အဖြူ အမည်း ပုံ ဖြစ်အောင် ပြောင်းသည်။ တဖန် DisplayImageQt.pro ဟူသည့် ဖိုင်ကို ဖွင့်၍ အောက်ပါ စာရင်း အတိုင်း ဖြစ်အောင် ထပ်ဖြည့် မည်။
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
INCLUDEPATH += /usr/local/include/opencv
LIBS += -L/usr/local/lib -lopencv_core -lopencv_highgui
 -lopencv_imgproc -lopencv_imgcodecs
Listing. DisplayImageQt.pro

ပြီးနောက် ပရိုဂရမ် အား run ကြည့်ပါက အောက်ပါပုံ အတိုင်း သီရိ၏ မူရင်း နှင့် အဖြူ အမည်း ပုံများ လှပစွာ ပေါ်ထွက် လာမည်။

Figure. ပရိုဂရမ်မှ ထွက်ပေါ်လာသည့် သီရိ၏ မူရင်းပုံ နှင့် အဖြူ အမည်း ပုံများ။


Code::Blocks ဖြင့် အသုံးပြုခြင်း

Code::Blocks IDE ကို တပ်ဆင် ရန် terminal တွင် အောက်ပါ စာရင်း အတိုင်း ရိုက်ထည့် နိုင်သည်။
sudo apt-get install build-essential
sudo apt-get install libgtk-3-dev
sudo apt-get install gdb
sudo add-apt-repository ppa:damien-moore/codeblocks-stable
sudo apt-get update
sudo apt-get install codeblocks codeblocks-contrib
Listing. Code Blocks တပ်ဆင်ခြင်း။

Code::Blocks ကို တပ်ဆင် ပြီးသည့် အခါ သူ့ကို ဖွင့်လိုက်ပြီး ပုံ တွင် ပြထား သလို File menu → New → Project... သို့မဟုတ် Start here ဆိုသည့် tab ရှိ Create a new project ကို နှိပ်နိုင် သည်။ ပြီးသည့် အခါ ပေါ်လာသည့် ဝင်းဒိုး တွင် project အမျိုးအစား သတ်မှတ်ရန် OpenCV project ကို ရွေးပြီး Go ကို နှိပ်မည်။

Figure. Code::Blocks IDE တွင် OpenCV project အသစ် ဖန်တီးမှု။


ပြီးသည့် အခါ Next ကို နှိပ်ပြီး ပရောဂျက် အမည် နှင့် သိမ်းမည့် နေရာ များ သတ်မှတ် မည်။

Figure. နာမည်နှင့်နေရာ သတ်မှတ်ခြင်း။


ထို့နောက် Compiler ကို GNU GCC compiler ကို အောက်ပါ ပုံ အတိုင်း ရွေးပြီး Finish ကို နှိပ်မည်။

Figure. Compiler သတ်မှတ်ခြင်း။


ထိုအခါ ဖန်တီး ရရှိလာ သော ပရောဂျက် တွင် နမူနာ OpenCV ကုဒ်များ နှင့် ထိုကုဒ်တွင် သုံးထားသော lena.jpg ကိုပါ တွေ့ရမည်။ Header အတွက် #include < opencv2/opencv.hpp > ဟု ပြင်ပြီး သည့် အခါ အောက်ပါ ပုံ နှင့် စာရင်း အတိုင်း တွေ့ရမည် (online)။

Figure. Source နမူနာအား ပြုပြင် စမ်းသပ်ခြင်း။


#include < opencv2/opencv.hpp >
using namespace cv;
int main(int argc, char *argv[])
{
    Mat img = imread("lena.jpg", CV_LOAD_IMAGE_COLOR);
    if(img.empty())
       return -1;
    namedWindow( "lena", CV_WINDOW_AUTOSIZE );
    imshow("lena", img);
    waitKey(0);
    return 0;
}
Listing. Code::Blocks အတွက် နမူနာ OpenCV ပရိုဂရမ်။

Build Options များသတ်မှတ်ခြင်း

Project Menu → Build Options... ကို နှိပ်ပြီး Search directories tab → Compiler tab တွင် အောက်ပါ ပုံ အတိုင်း /usr/local/include ကို Debug နှင့် Release နှစ်ခုလုံး အတွက် သတ်မှတ် နိုင်သည်။

Figure. Compiler Search directories များသတ်မှတ်ခြင်း။


ပြီးသည့် အခါ ဘေးဘက် ရှိ Linker tab တွင် အောက်ပါ ပုံ အတိုင်း lib များ၏ လမ်းကြောင်း /usr/local/lib ကို သတ်မှတ် မည်။

Figure. Library ဖိုင်များအတွက်Search directories များသတ်မှတ်ခြင်း။


နောက်တစ်ဖန် Linker settings tab တွင် ပုံ အတိုင်း Link libraries များအား သတ်မှတ်မည်။

Figure. Link libraries များသတ်မှတ်ခြင်း။


နောက်ဆုံးတွင် F9 ခလုပ်ကို နှိပ်ပြီး Build and run လုပ်လိုက်လျင် အောက်ပါ ပုံ တွင် ပြထား သကဲ့သို့ ပရိုဂရမ် ၏ output ကို တွေ့နိုင် မည်။

Figure. OpenCV နမူနာ ပရိုဂရမ်ကို Code::Blocks တွင် run ခြင်း။


pkg-config သုံးခြင်း

Build Options များကို pkg-config ကို သုံး၍ သတ်မှတ်မည် ဆိုပါက လည်း ရသည်။ Project Menu → Build Options... ကို နှိပ်ပြီး Compiler settings tab → Other compiler options tab တွင် အောက်ပါပုံ အတိုင်း
`pkg-config --cflags opencv`
ကို Debug နှင့် Release နှစ်ခုလုံး အတွက် သတ်မှတ် နိုင်သည်။

Figure. pkg-config ကို compiler settings တွင်သတ်မှတ်ခြင်း။


ထို နည်းတူ Linker settings tab → Other linker options tab တွင် အောက်ပါ ပုံ အတိုင်း
`pkg-config --libs opencv`

Figure. pkg-config ကို linker settings တွင်သတ်မှတ်ခြင်း။


ကို သတ်မှတ်မည်။ ဤ ပရောဂျက် (online) ကို F9 ခလုပ်ကို နှိပ် ပြီး Build and run လုပ်လိုက်လျင် ပုံ (OpenCV နမူနာ ပရိုဂရမ်ကို Code::Blocks တွင် run ခြင်း) တွင် ပြထား သည့် အတိုင်း တူညီသည့် ရလဒ်ကို ရနိုင်သည်။

Related Posts



အကိုးအကားများ

[Ope17g] OpenCV. Installation in Linux. 2017.
url: http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html.

[Ope17l] OpenCV. Using OpenCV with gcc and CMake. 2017.
url: http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html.

No comments:

Post a Comment