หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: Cross Compile OpenCV บน Ubuntu 18.04.4 เพื่อใช้บน Pi4  (อ่าน 6600 ครั้ง)
0 สมาชิก และ 2 บุคคลทั่วไป กำลังดูหัวข้อนี้
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« เมื่อ: เมษายน 06, 2020, 08:42:25 AM »

  และแล้วมาถึงจุดที่ต้อง Compile CpenCV เพื่อใช้งาน Feature xfeatures2d   เนื่องด้วย Featrue นี้ใน OpenCV version ใหม่ๆจะถูกจัดออกไปอยู่หมวด NoFree ใช้เพื่อการค้าไม่ได้  แต่สามารถใช้เพื่อการศึกษาวิจัยได้  แถมใครเคย compile โดยตรงบน Pi คงทราบกันดีว่ารอกันหายห่วงแถมถ้าไม่ใช้ Active Cooling ช่วยระบายความร้อน Pi มี Overheat
  สามารถทำตามขั้นตอนจาก https://solarianprogrammer.com/2019/08/07/cross-compile-opencv-raspberry-pi-zero-raspbian/ หรือ https://solarianprogrammer.com/2018/12/18/cross-compile-opencv-raspberry-pi-raspbian/
บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #1 เมื่อ: เมษายน 06, 2020, 08:49:47 AM »

  เริ่มต้นหาเครื่อง PC แรงมากๆ  เพราะการ Compile นี้จะใช้ Emulate CPU x86 ทำงานเป็น ARM CPU แบบเดียวกับที่ใช้งานบน Raspberry Pi  ในตัวอย่างใช้เครื่อง Dual CPU Xeon E5-2620v3 ทำงานบน VMware โดย set vCPU จำนวน 16 Cores และ Memory 8GB  ใช้เวลาในการ Compile ราว 1 ชม. เศษ
  เริ่มแรกเตรียม เตรียมการจำลองโดยการใช้ QEMu ตาม Step ดังนี้
1 sudo apt install qemu-user-static debootstrap
2 mkdir raspbian
3 sudo debootstrap --no-check-gpg --foreign --arch=armhf buster ~/raspbian http://archive.raspbian.org/raspbian
4 sudo cp /usr/bin/qemu-arm-static ~/raspbian/usr/bin
5 sudo chroot ~/raspbian /debootstrap/debootstrap --second-stage
6 sudo chroot ~/raspbian apt update
7 sudo chroot ~/raspbian apt upgrade
บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #2 เมื่อ: เมษายน 06, 2020, 08:51:32 AM »

  เมื่อเตรียมการ  พร้อมแล้วได้เวลาเข้าใช้งาน Emu ผ่านคำสั่ง
sudo chroot ~/raspbian

  และถ้าต้องการออกจากการใช้งาน Emu ใช้คำสั่ง
exit
« แก้ไขครั้งสุดท้าย: เมษายน 06, 2020, 09:00:23 AM โดย cluangar » บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #3 เมื่อ: เมษายน 06, 2020, 09:00:00 AM »

  Step ต่อไป download Lib ที่จำเป็นสำหรับการ Cross Compile  พบปัญหา download Lib ไม่ได้  จำเป็นต้องเปลี่ยน Link สำหรับ download ใหม่ดังนี้
sudo nano /etc/opt/sources.list

  ลบหรือ # Linkเดิมออก แล้วใช้ Link นี้แทน
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

  จากนั้นทำการติดตั้ง Lib เพื่อเตรียม Compile ต่อไป
apt install build-essential gfortran
apt install cmake git pkg-config wget
apt install python-dev python-numpy python3-dev python3-numpy

apt install libtiff-dev zlib1g-dev
apt install libjpeg-dev libpng-dev
apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
apt install libxvidcore-dev libx264-dev

  แถมด้วย Lib ที่จำเป็นเพิ่มเติม
apt install libgtk2.0-dev pkg-config


* Install_Lib_cross_compile_opencv.png (387.32 KB, 1920x1080 - ดู 777 ครั้ง.)
« แก้ไขครั้งสุดท้าย: เมษายน 06, 2020, 09:17:35 AM โดย cluangar » บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #4 เมื่อ: เมษายน 06, 2020, 09:04:10 AM »

  Step Download OpenCV 4.2.0
1 mkdir opencv_all && cd opencv_all
2 wget -O opencv.tar.gz https://github.com/opencv/opencv/archive/4.2.0.tar.gz
3 tar xf opencv.tar.gz
4 wget -O opencv_contrib.tar.gz https://github.com/opencv/opencv_contrib/archive/4.2.0.tar.gz
5 tar xf opencv_contrib.tar.gz
6 rm *.tar.gz

  Step สร้าง Folder OpenCV  และเข้า folder build เพื่อเตรียม Config ก่อน Compile
1 cd opencv-4.2.0
2 mkdir build && cd build
บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #5 เมื่อ: เมษายน 06, 2020, 09:05:01 AM »

  Run คำสั่ง cmake เพื่อสร้าง Config
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/opt/opencv-4.2.0 \
-D OPENCV_EXTRA_MODULES_PATH=/opencv_all/opencv_contrib-4.2.0/modules \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_TESTS=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_OPENCV_PYTHON2=ON \
-D BUILD_OPENCV_PYTHON3=ON \
-D BUILD_EXAMPLES=OFF ..


* before_cross_compile_opencv.png (366.07 KB, 1920x1080 - ดู 867 ครั้ง.)
« แก้ไขครั้งสุดท้าย: เมษายน 06, 2020, 09:15:41 AM โดย cluangar » บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #6 เมื่อ: เมษายน 06, 2020, 09:10:30 AM »

  หลังจากเตรียม Config ผ่าน  ได้เวลา Compile ด้วยคำสั่ง (เปลี่ยนตัวเลขหลัง j ได้ตามจำนวน Cores CPU)
make -j1ุ6

  หลังจากจบการ Compile ถึงเวลาติดตั้ง OpenCV ที่ Compile เสร็จแล้ว  ใช้คำสั่ง
make install/strip

  โดยจะติดตั้งลงที่ /opt/opencv-4.2.0 ตามที่ set ไว้ใน config  จากนี้จะเป็น step การเก็บ OpenCV ที่ Compile แล้วเพื่อนำไปใช้งานที่ Pi
cd /opt/opencv-4.2.0/lib/python3.7/dist-packages/cv2/python-3.7/
cp cv2.cpython-37m-arm-linux-gnueabihf.so cv2.so
cd /opt
tar -cjvf /opencv_all/opencv-4.2.0-pi.tar.bz2 opencv-4.2.0


* between10min_cross_compile_opencv.png (352.5 KB, 1920x1080 - ดู 863 ครั้ง.)

* finish90mins_cross_compile_opencv.png (399.49 KB, 1920x1080 - ดู 850 ครั้ง.)

* B738EFCA-5645-4481-94EB-EF42CB2393A8.jpeg (44.92 KB, 943x529 - ดู 837 ครั้ง.)
« แก้ไขครั้งสุดท้าย: เมษายน 06, 2020, 09:18:46 AM โดย cluangar » บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #7 เมื่อ: เมษายน 06, 2020, 09:14:44 AM »

  ต่อไปนี้เป็น Step ที่ต้องทำบน Pi เพื่อใช้งาน OpenCV ที่ Compile เสร็จแล้วมาใช้  เริ่มด้วย  เพิ่ม Lib Path ลงใน shell
1 echo 'export LD_LIBRARY_PATH=/opt/opencv-4.2.0/lib:$LD_LIBRARY_PATH' >> .bashrc
2 source .bashrc

  สร้าง symoblic links เพื่อใช้งาน OpenCV
1 sudo ln -s /opt/opencv-4.2.0/lib/python2.7/dist-packages/cv2 /usr/lib/python2.7/dist-packages/cv2
2 sudo ln -s /opt/opencv-4.2.0/lib/python3.7/dist-packages/cv2 /usr/lib/python3/dist-packages/cv2

  ส่วนใครใช้ virtual envs  ต้องสร้าง Symbolic Link เพิ่มตามสะดวก  ในตัวอย่างนี้ใช้ virtual envs [cv]
sudo ln -s /opt/opencv-4.2.0/lib/python3.7/dist-packages/cv2 /home/pi/.virtualenvs/cv/lib/python3.7/site-packages/cv2
บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #8 เมื่อ: เมษายน 06, 2020, 09:29:34 AM »

  ทดลองใช้งาน OpenCV


* vis.jpg (309.55 KB, 1600x599 - ดู 407 ครั้ง.)

* result.jpg (215.2 KB, 1600x599 - ดู 828 ครั้ง.)
บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #9 เมื่อ: เมษายน 08, 2020, 12:51:14 PM »

และแล้วกลับมา install module เพิ่มเนื่องจากต้องการ  ดึงความสามารถของ GPU บน Pi ออกมาใช้งาน  ให้ install module เหล่านี้เพิ่มเข้าไป ดังนี้
apt install liblapack-dev
apt install libgtk-3-dev
apt install python3-pip
apt install libtbb2 libtbb-dev libdc1394-22-dev
apt install v4l-utils
apt install libjasper-dev libopenblas-dev libatlas-base-dev libblas-dev
apt install gcc-arm*
apt install protobuf-compiler
apt install ocl-icd-opencl-dev ocl-icd-dev opencl-headers clinfo


* Gen2_CrossCompile_to_support_GPU_on_Pi.png (571.22 KB, 1920x1080 - ดู 861 ครั้ง.)

* Gen2_CrossCompile_to_support_GPU_on_Pi2.png (1099.85 KB, 1920x1080 - ดู 816 ครั้ง.)
« แก้ไขครั้งสุดท้าย: เมษายน 08, 2020, 04:35:25 PM โดย cluangar » บันทึกการเข้า
cluangar
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

กระทู้: 761


ดูรายละเอียด
« ตอบ #10 เมื่อ: เมษายน 08, 2020, 04:37:28 PM »

  ปรับแก้ไข config เดิมก่อน compile ดังนี้ 
  - เข้าไปที่ build folder แล้วลบ file CMakeCache.txt ปัจจุบันทิ้
  - สร้าง Config file ขึ้นมาใหม่ก่อน rune compile ดังนี้
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/opt/opencv-4.2.0 \
-D OPENCV_EXTRA_MODULES_PATH=/opencv_all/opencv_contrib-4.2.0/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D WITH_OPENMP=ON \
-D WITH_VULKAN=ON \
-D WITH_OPENCL_SVM=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_TESTS=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_OPENCV_PYTHON2=ON \
-D BUILD_OPENCV_PYTHON3=ON \
-D BUILD_EXAMPLES=OFF ..
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: