Dự án: Object detection trên Raspberry Pi

Hướng dẫn này cung cấp hướng dẫn từng bước về cách thiết lập API phát hiện đối tượng của TensorFlow trên Raspberry Pi. Bằng cách làm theo các bước trong hướng dẫn này, bạn sẽ có thể sử dụng Raspberry Pi để thực hiện phát hiện đối tượng trên nguồn cấp dữ liệu video trực tiếp từ Picamera hoặc webcam USB.


Bước 1: Update Raspberry Pi của các bạn

 

Nếu đây là lần đầu các bạn tiếp xúc vs Raspberry pi, các bạn hãy follow hướng dẫn sau để cài đặt Raspberry Pi của các bạn nhé: https://mechasolution.vn/Blog/bai-1-thiet-lap-raspberry-pi

Sau đó các bạn hãy mở Raspberry Pi của bạn lên hoặc connect vs Raspberry Pi qua Putty hoặc VNC. Mở một Terminal lên và chạy các dòng lệnh sau:

sudo apt-get update
sudo apt-get dist-upgrade

Sau đó các bạn chờ cho tới khi mà Raspberry Pi của bạn được update xong nhé (quá trình này có thể lên đến vài tiếng nếu bạn không cập nhật thường xuyên)

Bước 2: Cài đặt Tensorflow

Các bạn hãy tạo 1 thư mục vs tên tf để lưu trữ tensorflow và những thư viện cần thiết để chạy TensorFlow

mkdir tf
cd tf

Các bạn có thể xem bài viết này của Mechasolution để biết được cách cài đặt TensorFlow một cách đầy đủ và cụ thể nhất nhé !

TensorFlow cũng cần gói LibAtlas. Cài đặt nó bằng cách phát hành (nếu lệnh này không hoạt động, hãy đưa ra "sudo apt-get update" và sau đó thử lại):

sudo apt-get install libatlas-base-dev

 

Trong khi chúng ta đang ở đó, hãy cài đặt các phụ thuộc khác sẽ được sử dụng bởi API phát hiện đối tượng TensorFlow.

sudo pip3 install pillow lxml jupyter matplotlib cython
sudo apt-get install python-tk

 

Bước 3: Cài đặt Open CV

Tensorflow object’s detection examples thường sử dụng matplotlib để hiển thị hình ảnh, nhưng tôi thích sử dụng OpenCV hơn vì dễ làm việc hơn và ít bị lỗi hơn. Các script phát hiện đối tượng trong hướng dẫn này sử dụng OpenCV. Vì vậy, chúng ta cần phải cài đặt OpenCV.

 

Để có được OpenCV làm việc trên Raspberry Pi, có khá nhiều thư viện cần được cài đặt thông qua apt-get. Nếu bất kỳ lệnh nào sau đây không hoạt động, hãy đưa ra “sudo apt-get update” và sau đó thử lại.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools

 

Sau đó chúng ta cài đặt Open CV:

pip3 install opencv-python

 

Bước 4: Cài đặt Protobuf

Được rồi, đây là phần khó khăn. API phát hiện đối tượng TensorFlow sử dụng Protobuf, một gói triển khai định dạng dữ liệu Protocol Buffer của Google. Thật không may, hiện tại không có cách nào dễ dàng để cài đặt Protobuf trên Raspberry Pi. Chúng ta phải biên dịch nó từ chính nguồn và sau đó cài đặt nó

Đầu tiên, lấy các gói cần thiết để biên dịch Protobuf từ nguồn:

sudo apt-get install autoconf automake libtool curl

 

Sau đó tải xuống bản phát hành protobuf từ kho lưu trữ GitHub của nó bằng cách chạy lệnh sau:

wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.tar.gz

 

Nếu phiên bản mới hơn của protobuf có sẵn, hãy tải xuống phiên bản đó. Giải nén tệp và cd vào thư mục:

tar -zxvf protobuf-all-3.5.1.tar.gz
cd protobuf-3.5.1

Định cấu hình bản dựng bằng cách chạy lệnh sau (mất khoảng 2 phút):

./configure

 

Sau đó các bạn build các bạn build nhé, chạy lệnh sau:

make

 

quá trình này sẽ mất khoảng 1 tiếng đến 2 tiếng tùy vào Raspberry Pi của các bạn. Raspberry Pi của mình chạy khoảng 1 tiếng nhé.

Sau khi đã build xong, các bạn install nó nhé:

sudo make install

 

Sau đó chuyển vào thư mục python và export đường dẫn thư viện:

cd python
export LD_LIBRARY_PATH=../src/.libs

 

Sau đó chạy các lệnh sau:

python3 setup.py build --cpp_implementation 
python3 setup.py test --cpp_implementation
sudo python3 setup.py install --cpp_implementation

 

sau đó các bạn thay đổi các đường dẫn bằng cách chạy các lệnh sau:

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3

 

Cuối cùng là config:

sudo ldconfig

 

Sau đó để kiểm tra quá trình cài đặt đã thành công các bạn chạy dòng lệnh sau:

protoc

 

nếu thành công command line của các bạn sẽ hiện lên bản hướng dẫn. Sau đó các bạn chỉ cần reboot lại Raspberry Pi thôi là thành công rồi.

Bước 5: Set up Tensorflow Directory Structure và PYTHONPATH

Quay lại file home của các bạn và tạo ra một đường dẫn mới:

mkdir tensorflow1
cd tensorflow1

 

Tải xuống kho lưu trữ tensorflow từ GitHub bằng cách chạy lệnh:

git clone --recurse-submodules https://github.com/tensorflow/models.git

Tiếp theo, chúng ta cần phải sửa đổi biến PYTHONPATH để trỏ vào một số thư mục bên trong kho lưu trữ TensorFlow mà chúng ta vừa tải xuống. Chúng tôi muốn PYTHONPATH được thiết lập mỗi lần chúng tôi mở một terminal, vì vậy chúng tôi phải sửa đổi tệp .bashrc. Mở nó bằng cách chạy lệnh:

sudo nano ~/.bashrc

 

Chuyển xuống cuối file và điền vào như sau:

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

 

TensorFlow Object Detection on the Raspberry Pi

 

Sau đó, lưu và thoát tệp. Điều này làm cho lệnh "export PYTHONPATH" được gọi là mỗi khi bạn mở một terminal mới, do đó, biến PYTHONPATH sẽ luôn luôn được thiết lập một cách thích hợp. Đóng và sau đó mở lại terminal

Bây giờ, chúng ta cần sử dụng Protoc để biên dịch các tệp Protocol Buffer (.proto) được sử dụng bởi API phát hiện đối tượng. Các tệp .proto nằm trong / research / object_detection / protos, nhưng chúng ta cần thực hiện lệnh từ thư mục / research. Chạy lệnh:

cd /home/pi/tensorflow1/models/research
protoc object_detection/protos/*.proto --python_out=.

 

Tiếp theo chuyển vào thư mục object_detection:

cd /home/pi/tensorflow1/models/research/object_detection

 

Bây giờ, chúng ta sẽ tải xuống mô hình SSD_Lite TensorFlow detection model zoo - là bộ sưu tập các mô hình phát hiện đối tượng được đào tạo trước của Google có các cấp tốc độ và độ chính xác khác nhau. Raspberry Pi có bộ xử lý yếu, vì vậy chúng tôi cần sử dụng một mô hình có ít công suất xử lý hơn. Mặc dù mô hình sẽ chạy nhanh hơn, nhưng nó có một sự cân bằng có độ chính xác thấp hơn. Đối với hướng dẫn này, chúng tôi sẽ sử dụng SSDLite-MobileNet, đây là mô hình nhanh nhất hiện có.

Google liên tục phát hành các mô hình với tốc độ và hiệu suất được cải thiện, vì vậy hãy kiểm tra lại tại model zoo thường xuyên để xem có mô hình nào tốt hơn không.

Tải xuống mô hình SSDLite-MobileNet và giải nén nó bằng cách chạy lệnh:

wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz
tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

 

tới đây là xong bước này rồi.

Bước 6: Testing

Sau đó cá bạn tạo ra một file Python và copy đoạn code sau:


 

Sau đó các bạn đóng lại và chạy. Hãy đảm bảo là bạn cho phép sử dụng PiCamera.

 

Chúc các bạn thành công nhé.

 

Tham khảo: 

https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi 

Có thể bạn quan tâm ???