اندازه گیری جمعیت با پردازش تصویر رزبری پای و 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 شما کار می کند یا نه. پس از بررسی دوربین ، با صدور دستور زیر اسکریپت پایتون را اجرا کنید:
سپس پنجره ای را مشاهده میکنید که در آن ویدیوی شما ظاهر می شود. Pi اولین فریم را می گیرد و با استفاده از OpenCV آن را پردازش می کند تا تعداد افراد را تشخیص دهد. اگر این افراد را تشخیص دهد ، مربعی در اطراف افراد ظاهر میشود، دقیقا مانند تصویر زیر :
به این ترتیب می توانید با استفاده از رزبری پای و OpenCV تعداد افراد موجود در کادر دوربین را بشمارید.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود