آموزش پردازش تصویرآموزش رزبری پایپروژه رزبری پای

اندازه گیری جمعیت با پردازش تصویر رزبری پای و OpenCV

در دنیای پیشرفته فناوری های امروزی ، پردازش تصویر دیجیتال بسیار سریع در حال رشد است و به بخشی مهم در بسیاری از دستگاه های دیجیتال مانند تلفن همراه ، دوربین های امنیتی ، لپ تاپ و … تبدیل شده است.

رایج ترین برنامه های پردازش تصویر دیجیتال ، تشخیص شی object ، تشخیص چهره و شمارش افراد است. بنابراین در این آموزش ، ما می خواهیم با استفاده از Raspberry Pi و OpenCV یک سیستم اندازه گیری جمعیت و شمارش افراد بسازیم. در اینجا از ماژول دوربین pi برای ضبط مداوم فریم ها استفاده می شود و سپس این فریم ها برای شناسایی افراد موجود در تصویر با HOG پردازش می شوند.

بعد از این ، این فریم ها با مدل آموزش دیده OpenCV برای تشخیص افراد مقایسه می شوند. برای این پروژه ما فقط به رزبری پای و دوربین رزبری پای پای نیاز داریم. فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.

فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

نصب OpenCV در Raspberry Pi

در اینجا از کتابخانه OpenCV برای شناسایی جمعیت استفاده خواهد شد. برای نصب OpenCV ، ابتدا باید رزبری پای را به روز کنید.

sudo apt-get update

سپس وابستگی های مورد نیاز برای نصب OpenCV را روی Raspberry Pi خود نصب کنید.

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

پس از آن ، OpenCV را با استفاده از دستور زیر در Raspberry Pi نصب کنید.

pip3 install opencv-contrib-python==4.1.0.25

ما قبلاً از OpenCV با Raspberry pi استفاده کردیم و آموزشهای زیادی را روی آن ایجاد کردیم.

در صورت بوجود آمدن مشکل در روش نصب بالا، آموزش نصب OpenCV در رزبری پای را مشاهده کنید.

نصب سایر بسته های مورد نیاز

قبل از برنامه نویسی رزبری پای برای شمارش جمعیت، باید تعدادی از بسته های مورد نیاز را نصب کنیم.

نصب imutils: برای اجرای چند عملکرد لازم پردازش تصویر مانند ترجمه ، چرخش ، تغییر اندازه ، اسکلت بندی و نمایش آسان تر تصاویر Matplotlib با OpenCV از imutils استفاده می شود. بنابراین با استفاده از دستور زیر imutils را نصب کنید :

pip3 install imutils

matplotlib: پس از آن ، کتابخانه matplotlib را نصب کنید. Matplotlib یک کتابخانه جامع برای ایجاد تجسمهای ایستا ، متحرک و تعاملی در پایتون است.

pip3 install matplotlib

برنامه پایتون شمارش افراد با رزبری پای

کد پایتون کامل برای این پروژه OpenCV شمارش جمعیت در انتهای صفحه آورده شده است. در اینجا ما برای توضیح بهتر بخش های مهم کد را توضیح می دهیم.

ابتدا همه کتابخانه های مورد نیاز را که قرار است در این پروژه استفاده شوند را وارد میکنیم.

import cv2
import imutils
from imutils.object_detection import non_max_suppression
import numpy as np
import requests
import time
import base64
from matplotlib import pyplot as plt
from urllib.request import urlopen​

پس از وارد کردن کتابخانه ها ، شناسه کانال ThingSpeak را وارد کنید و کلید API را بنویسید. (مهم : متاسفانه وبسایت ThingSpeak در ایران فیلتر شده است و نمیتوانید از قسمت اینترنتی این پروژه استفاده کنید. بنابراین نیازی به تکمیل این قسمت ندارید و فقط میتوانید با در رزبری پای تعداد افراد محاسبه شده را مشاهده کنید.)

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
channel_id = 812060 # PUT CHANNEL ID HERE
WRITE_API = 'X5AQ3EGIKMBYW31H' # PUT YOUR WRITE KEY HERE
BASE_URL = "https://api.thingspeak.com/update?api_key= {}".format(WRITE_API)

اکنون ، HOG (توصیف کننده شی گرا) را پیکربندی کنید. HOG یکی از محبوب ترین تکنیک ها برای تشخیص اشیا است.

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

درون detector() ، رزبری پای یک تصویر RGB دریافت می کند که به سه کانال رنگ تقسیم شده است. بعد از آن ، با استفاده از imutils اندازه تصویر را تغییر می دهد. سپس () DetectMultiScale را فراخوانی می کند تا تصویر را تجزیه و تحلیل کند تا بداند آیا شخصی وجود دارد یا خیر.

def detector(image):
   image = imutils.resize(image, width=min(400, image.shape[1]))
   clone = image.copy()
   rects, weights = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)

بعضی اوقات مربع های رسم شده دور افراد با هم همپوشانی دارند و باعث ایجاد نتیجه نادرست یا خطاهای تشخیصی می شوند ، بنابراین کد زیر را برای جلوگیری از تداخل استفاده میکنیم.

def detector(image):
   image = imutils.resize(image, width=min(400, image.shape[1]))
   clone = image.copy()
   rects, weights = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)

در داخل تابع record () ، تصویر مستقیماً از دوربین Pi با استفاده از روش VideoCapture () از OpenCV بازیابی می شود، اندازه آن را با استفاده از imultis تغییر می دهد و نتایج را به ThingSpeak ارسال می کند.

for (x, y, w, h) in rects:
       cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
   rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
   result = non_max_suppression(rects, probs=None, overlapThresh=0.7)
   return result

فیلم عملکرد پروژه شمارش افراد با OpenCV

قبل از اجرای اسکریپت پایتون ، ابتدا بررسی کنید که آیا دوربین PI شما کار می کند یا نه. پس از بررسی دوربین ، با صدور دستور زیر اسکریپت پایتون را اجرا کنید:

پروژه شمارش افراد با OpenCV
سپس پنجره ای را مشاهده میکنید که در آن ویدیوی شما ظاهر می شود. Pi اولین فریم را می گیرد و با استفاده از OpenCV آن را پردازش می کند تا تعداد افراد را تشخیص دهد. اگر این افراد را تشخیص دهد ، مربعی در اطراف افراد ظاهر میشود، دقیقا مانند تصویر زیر :

برنامه پایتون شمارش افراد

به این ترتیب می توانید با استفاده از رزبری پای و OpenCV تعداد افراد موجود در کادر دوربین را بشمارید.

موارد موجود در فایل : سورس کامل

5 (8 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *