- Thành phần bắt buộc
- Cài đặt OpenCV trong Raspberry Pi
- Cài đặt các Gói bắt buộc khác
- ThingSpeak thiết lập cho số người
- Thiết lập phần cứng
- Giải thích chương trình Python cho bộ đếm người
- Kiểm tra
Trong thế giới công nghệ tiên tiến hiện nay, Xử lý hình ảnh kỹ thuật số đang phát triển rất nhanh và trở thành một phần quan trọng của nhiều thiết bị kỹ thuật số như di động, camera an ninh, máy tính xách tay, v.v.
Các ứng dụng phổ biến nhất của Xử lý hình ảnh kỹ thuật số là phát hiện đối tượng, Nhận dạng khuôn mặt và bộ đếm người. Vì vậy, trong hướng dẫn này, chúng tôi sẽ xây dựng tính toán số lượng đám đông OpenCV bằng cách sử dụng Raspberry Pi và ThingSpeak. Tại đây, mô-đun camera pi sẽ được sử dụng để chụp liên tục các khung hình và sau đó các khung hình này sẽ được xử lý với HOG (Bộ mô tả đối tượng định hướng biểu đồ) để phát hiện các đối tượng trong ảnh. Sau đó, các khung này sẽ được so sánh với mô hình được đào tạo trước của OpenCV để phát hiện người. Số người sẽ được hiển thị trên kênh ThingSpeak có thể được theo dõi từ mọi nơi trên thế giới.
Thành phần bắt buộc
Phần cứng
- Raspberry Pi 3 (bất kỳ phiên bản nào)
- Máy ảnh Pi
Phần mềm & Dịch vụ Trực tuyến
- ThingSpeak
- Python3.0
- OpenCV3.0
Cài đặt OpenCV trong Raspberry Pi
Ở đây thư viện OpenCV sẽ được sử dụng để phát hiện đám đông. Để cài đặt OpenCV, trước tiên, hãy cập nhật Raspberry Pi.
sudo apt-get cập nhật
Sau đó, cài đặt các phụ thuộc cần thiết để cài đặt OpenCV trên Raspberry Pi của bạn.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Sau đó, cài đặt OpenCV trong Raspberry Pi bằng lệnh dưới đây.
pip3 cài đặt opencv-Contrib-python == 4.1.0.25
Trước đây chúng tôi đã sử dụng OpenCV với Raspberry pi và đã tạo rất nhiều hướng dẫn về nó.
- Cài đặt OpenCV trên Raspberry Pi bằng CMake
- Nhận dạng khuôn mặt thời gian thực với Raspberry Pi và OpenCV
- Nhận dạng biển số bằng Raspberry Pi và OpenCV
Chúng tôi cũng đã tạo một loạt các hướng dẫn OpenCV bắt đầu từ cấp độ người mới bắt đầu.
Cài đặt các Gói bắt buộc khác
Trước khi lập trình Raspberry Pi cho tính năng Đếm đám đông, hãy cài đặt các gói bắt buộc khác.
Cài đặt imutils : imutils được sử dụng để thực thi một số chức năng xử lý hình ảnh cần thiết như dịch, xoay, thay đổi kích thước, tạo khung và hiển thị hình ảnh Matplotlib dễ dàng hơn với OpenCV. Vì vậy, cài đặt imutils bằng lệnh dưới đây:
pip3 cài đặt imutils
matplotlib : Sau đó, cài đặtthư viện matplotlib. Matplotlib là một thư viện toàn diện để tạo các hình ảnh trực quan tĩnh, động và tương tác bằng Python.
pip3 cài đặt matplotlib
ThingSpeak thiết lập cho số người
ThingSpeak là một nền tảng IoT rất phổ biến và bằng cách sử dụng nền tảng ThingSpeak, chúng tôi có thể giám sát dữ liệu của mình qua Internet từ mọi nơi. Nó cũng được sử dụng để kiểm soát hệ thống qua Internet, sử dụng các Kênh và trang web do ThingSpeak cung cấp. Trước đây chúng tôi đã sử dụng ThingSpeak để xây dựng nhiều dự án dựa trên IoT.
Để tạo kênh trên ThingSpeak, trước tiên hãy Đăng ký trên ThingSpeak. Trong trường hợp nếu bạn đã có tài khoản trên ThingSpeak, hãy đăng nhập bằng id và mật khẩu của bạn.
Nhấp vào Hát lên và nhập thông tin chi tiết của bạn.
Sau đó, xác minh id E-mail của bạn và nhấp vào tiếp tục.
Bây giờ, sau khi đăng nhập, hãy tạo một kênh mới bằng cách nhấp vào nút “ Kênh mới ”.
Sau khi nhấp vào “ Kênh mới ” , hãy nhập Tên và Mô tả của dữ liệu bạn muốn tải lên trên kênh này. Ở đây chúng tôi đã tạo một trường có tên là Mọi người . Nhiều trường có thể được tạo theo yêu cầu.
Sau đó, nhấp vào nút lưu kênh để lưu chi tiết.
Để gửi dữ liệu đến ThingSpeak, hãy nhập khóa API và ID kênh bằng tập lệnh Python, vì vậy hãy sao chép khóa API và ID kênh.
Thiết lập phần cứng
Ở đây chúng tôi chỉ yêu cầu máy ảnh Raspberry Pi và Pi cho dự án đếm người OpenCV này và bạn chỉ cần gắn đầu nối dải băng máy ảnh vào khe cắm máy ảnh được cung cấp trong Raspberry pi
Camera Pi có thể được sử dụng để xây dựng các dự án thú vị khác nhau như Camera giám sát Raspberry Pi, Hệ thống giám sát khách truy cập, Hệ thống an ninh gia đình, v.v.
Giải thích chương trình Python cho bộ đếm người
Mã python hoàn chỉnh cho dự án OpenCV đếm đám đông này được đưa ra ở cuối trang. Ở đây chúng tôi đang giải thích các phần quan trọng của mã để giải thích rõ hơn.
Vì vậy, khi bắt đầu mã, hãy nhập tất cả các thư viện bắt buộc sẽ được sử dụng trong dự án này.
import imutils nhập cv2 từ imutils.object_detection import non_max_suppression import numpy as np import request import time import base64 from matplotlib import pyplot as plt from urllib.request import urlopen
Sau khi nhập các thư viện, hãy nhập ID kênh ThingSpeak và Viết khóa API mà bạn đã sao chép trước đó.
channel_id = 812060 # ĐẶT ID KÊNH TẠI ĐÂY WRITE_API = 'X5AQ3EGIKMBYW31H' # ĐẶT KHÓA VIẾT CỦA BẠN TẠI ĐÂY BASE_URL = "https://api.thingspeak.com/update?api_key= {}". format (WRITE_API)
Bây giờ, khởi tạo HOG (Bộ mô tả đối tượng định hướng biểu đồ). HOG là một trong những kỹ thuật phổ biến nhất để phát hiện đối tượng và đã được sử dụng trong một số ứng dụng. cv2.HOGDescriptor_getDefaultPeopleDetector () được sử dụng để gọi một mô hình OpenCV được đào tạo trước để phát hiện người. Trước đây chúng tôi đã giải thích chi tiết về HOG trong hướng dẫn OpenCV trước.
hog = cv2.HOGDescriptor () hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Bên trong máy dò (), Pi nhận được hình ảnh RGB được chia thành ba kênh màu. Sau đó, nó thay đổi kích thước hình ảnh bằng imutils . Sau đó, nó gọi phương thức DetMultiScale () để phân tích hình ảnh để biết liệu một người có tồn tại hay không bằng cách sử dụng kết quả phân loại từ mô hình SVM.
def detector (image): image = imutils.resize (image, width = min (400, image.shape)) clone = image.copy () rects, weights = hog.detectMultiScale (image, winStride = (4, 4), padding = (8, 8), scale = 1,05)
Đôi khi các hộp chụp chồng lên nhau và tạo ra các lỗi phát hiện hoặc xác thực sai, vì vậy mã bên dưới áp dụng loại bỏ không tối đa từ imutils cho các hộp chồng chéo khởi động.
for (x, y, w, h) trong rects: cv2.rectangle (image, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np.array (for (x, y, w, h) in rects]) result = non_max_suppression (rects, probs = Không, trùng lặpThresh = 0,7) trả về kết quả
Bên trong hàm record () , nó lấy hình ảnh trực tiếp từ camera Pi bằng phương thức VideoCapture () từ OpenCV, thay đổi kích thước bằng cách sử dụng imultis và gửi kết quả đến ThingSpeak.
bản ghi def (sample_time = 5): camera = cv2.VideoCapture (0) frame = imutils.resize (frame, width = min (400, frame.shape)) result = detector (frame.copy ()) thingspeakHttp = BASE_URL + " & field1 = {} ". format (result1)
Kiểm tra
Trước khi khởi chạy tập lệnh python, trước tiên, hãy kiểm tra xem camera PI của bạn có hoạt động hay không. Sau khi xem lại camera, khởi chạy tập lệnh python bằng cách ra lệnh sau:
Sau đó, bạn sẽ tìm thấy một cửa sổ bật lên với nguồn cấp dữ liệu video của bạn trong đó. Pi sẽ lấy khung hình đầu tiên và xử lý nó bằng OpenCV để phát hiện số lượng dân tộc. Nếu nó phát hiện ra mọi người, bạn sẽ tìm thấy một hộp xung quanh nó như thế này:
Bây giờ, hãy kiểm tra kênh ThingSpeak của bạn, nơi bạn có thể theo dõi quy mô đám đông từ mọi nơi trên thế giới.
Đây là cách bạn có thể đếm số lượng đám đông OpenCV bằng Raspberry Pi. Video và mã làm việc được đưa ra ở cuối trang.