Compile OpenCV 4 บน Raspberry pi 4

Supphachoke Suntiwichaya
NECTEC
Published in
2 min readAug 8, 2019

ฉบับรวบรัดสำหรับมือใหม่ Copy แปะ ทำบน Raspberry pi 4 4GB OpenCV 4.1.1 และ Raspbian GNU/Linux 10 เราจะเรียนรู้ไปด้วยกัน!!

จริงๆ มีหลายคนเขียนไว้บ้าง เท่าที่ลองก็ยังมีปัญหาบ้าง คือ สำเร็จบ้าง ไม่สำเร็จบ้าง เลยเรียบเรียงลำดับพิธีที่ผมทำแล้วสำเสร็จเก็บไว้ เพราะตัวเองก็ต้องใช้ในวันข้างหน้าอีก :P

เริ่มต้นกันเลย

ถ้ากลัวว่า RAM ไม่พอก็เพิ่ม SWAP ไว้ก่อน อันนี้จะใช้หนักๆ ตอน link ขั้นตอนสุดท้ายของการ compile ถ้ามั่นใจว่า 4GB เอาอยู่ก็ข้ามขั้นตอนนี้ไปได้

sudo nano /etc/dphys-swapfile

แล้วแก้ค่าดังนี้

CONF_SWAPSIZE=2048

แล้ว stop และ start swap

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

ติดตั้งทุกอย่างที่ต้องใช้

sudo apt update && sudo  apt upgrade
sudo apt install build-essential cmake unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libcanberra-gtk\* libatlas-base-dev gfortran python3-dev python3-pip libfontconfig1-dev libcairo2-dev libgdk-pixbuf2.0-dev libpango1.0-dev libhdf5-dev libhdf5-serial-dev libhdf5-103 libatomic1-armhf-cross

ติดตั้ง virtualenv ใช้ virtualenvwrapper ก็ง่ายดีนะ

sudo pip3 install  virtualenv virtualenvwrapper

ตั้งค่า default ให้ user ใช้ virtualenvwrapper

nano -w ~/.profile

ใส่ค่า

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

ใช้ค่าเพื่อใช้งานเลย

source ~/.profile

สร้าง virtualenv สำหรับใช้งาน ชื่อ cv

mkvirtualenv cv -p python3

เมื่อสร้างเสร็จแล้วมันจะ active ให้อัตโนมัน แต่ถ้า เปิด shell ใหม่ หรือ เราระบบครั้งหน้าต้องใช้คำสั่ง

workon cv

ติดตั้ง python numpy package สำหรับการ compile

pip install numpy

Download OpenCV

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.1.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.1.zip

แตก zip

unzip opencv.zip 
unzip opencv_contrib.zip

จะเปลี่ยนชื่อหรือไม่เปลี่ยนก็ได้ แต่ตอน config ใส่ path ของ contrib ให้ถูกก็พอ

mv opencv-4.1.1 opencv
mv opencv_contrib-4.1.1 opencv_contrib

เริ่มกระบวนการ config

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 \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D CMAKE_SHARED_LINKER_FLAGS='-latomic' \
-D BUILD_EXAMPLES=OFF ..

รอจนเสร็จถ้าไม่มีอะไรผิดพลาดต้อง successful นะ ฮาๆ เมื่อเสร็จแล้วก็ทำการ compile ใส่ -j4 ตามจำนวน cpu core จะได้เร็วๆ

time make -j4

ผมใช้ microSD ที่ขายพร้อมกันมากับ board จะใช้เวลาเกือบๆ ชั่วโมง แต่เคยลองกับ class 10 ดีๆ หน่อยก็ใช้เวลาลดลงมาหน่อย

ถ้า compile เสร็จ

ถ้ามีข้อผิดพลาดก็พยายามอ่านแล้วแก้ปัญหาดูครับ ฮาๆ แต่ถ้าสำเร็จก็ทำการ install

sudo make install
sudo ldconfig

ทำการ link lib ให้กับ virtualenv cv

cd ~/.virtualenvs/cv/lib/python3.7/site-packages/ln -s /usr/local/lib/python3.7/site-packages/cv2/python-3.7/cv2.cpython-37m-arm-linux-gnueabihf.so cv2.so

เป็นการเสร็จพิธีทดสอบ

python>>> import cv2>>> cv2.__version__'4.1.1'

การใช้งานครั้งต่อไปอย่าลืม activate virtualenv ก่อนทุกครั้งนะครับ

workon cv

ผมเอา code ตัวอย่างของ Python OpenCV มาทดสอบ

nano -w example.py

Copy code ไปใส่

import numpy as np
import cv2
cap = cv2.VideoCapture(0)while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

ก็ได้จะได้ประมาณนี้

ถือว่าสำเร็จ

หลังจากนี้จะตำยำทำแกงอะไรก็ได้ละ ขอให้มือใหม่สนุกกับผลไม้แสนอร่อย

อ้างอิง

https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/

--

--