DEV Community

MrChoke
MrChoke

Posted on • Originally published at Medium on

1 1

Compile OpenCV 4 บน Raspberry pi 4

ฉบับรวบรัดสำหรับมือใหม่ 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](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](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/


Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is 100% worth it for your career.

Okay let's go

Community matters

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay