- بسٹر اور اوپن سی وی کے ذریعہ راسبیری پائ کو ترتیب دینا
- راسبیری پائ 5 انچ ڈسپلے میں بزر شامل کرنا
- سی سی ٹی وی موشن کھوج کے لئے پروگرامنگ راسبیری پائی
- راسبیری پائی کا استعمال کرتے ہوئے اوپن سی وی پر حرکت کا پتہ لگانا
- موشن کی کھوج کے ل A الارم مرتب کرنا
- سی پی یو درجہ حرارت اور استعمال کی نگرانی
- آپ کا سی سی ٹی وی موشن سراغ لگانا شروع کر رہا ہے
اوپن سی وی ایک طاقتور ٹول ہے اور جس میں راسبیری پائی مل کر بہت سے پورٹیبل سمارٹ آلات کے دروازے کھول سکتی ہے۔ ہمارے پچھلے راسبیری پی سی سی ٹی وی مانیٹرنگ آرٹیکل میں ، ہم نے یہ سیکھا ہے کہ کس طرح ڈی وی آر سے براہ راست سی سی ٹی وی ویڈیو آر ٹی ایس پی کا استعمال کرتے ہوئے حاصل کیا جا and اور رسبری پِی پر ڈسپلے کریں ، آگے بڑھنے سے پہلے اس کی جانچ کیج do۔ اس مضمون میں ، ہم سیکھیں گے کہ کس طرح اوپن سی وی کی طاقت سے فائدہ اٹھانا اور اپنی براہ راست سی سی ٹی وی فوٹیجز پر راسبیری پی موشن ڈیٹیکشن سسٹم کی تشکیل کرنا ہے۔ اگر آپ کے پاس سی سی ٹی وی نصب نہیں ہے تو ، آپ پھر بھی USB کیمروں کو براہ راست اپنے پائ سے منسلک کرکے راسبیری پائی نگرانی کا نظام بنا سکتے ہیں۔ اور اگر آپ پائی اور ازگر کے بڑے پرستار نہیں ہیں تو ، آپ ESP32 کے ساتھ کچھ ایسا ہی بنا سکتے ہیں ، مزید تفصیلات کے لئے ESP32 وائی فائی ڈور بیل سے رجوع کریں۔
ہم ایک ازگر کا اسکرپٹ لکھیں گے جو کسی بھی سرگرمیوں (تحریک) کے لئے بیک وقت چاروں سی سی ٹی وی کیمروں کی نگرانی کرسکتا ہے۔ اگر کسی بھی کیمرے پر کسی سرگرمی کا پتہ چل جاتا ہے تو ، ہمارا رسبری پائی خود بخود اس مخصوص کیمرے کی اسکرین میں تبدیل ہوجائے گی اور اس بات کو اجاگر کرے گی کہ کون سی سرگرمی رونما ہوئی ہے ، یہ سب کچھ صرف 1.5 سیکنڈ کے وقفے کے ساتھ ریئل ٹائم میں ہوگا۔ میں نے ایک الارم کی خصوصیت بھی شامل کی ہے ، جیسے بزر جس میں کسی سرگرمی کا پتہ چلنے پر بپ لگانے سے صارف کو متنبہ کیا جاسکتا ہے۔ لیکن آپ میسج یا ای میل بھیجنے کے لئے آسانی سے اس کی پیمائش کرسکتے ہیں یا نہیں! دلچسپ حق ہے !! آو شروع کریں
بسٹر اور اوپن سی وی کے ذریعہ راسبیری پائ کو ترتیب دینا
میں راسبیری پائ 3 بی + استعمال کر رہا ہوں جس میں بسٹر OS چل رہا ہے اور اوپن سی وی کا ورژن 4.1 ہے۔ اگر آپ مکمل طور پر نئے ہیں تو ، شروع کرنے سے پہلے نیچے دیئے گئے سبق کی پیروی کریں۔
مقصد یہ ہے کہ آپ اپنی پائ تیار کرو اور ترقی کے ل ready تیار ہو۔ آپ کے پائ پر راسبیئن OS کا کوئی ورژن رکھنا ٹھیک ہے لیکن اوپن سی وی کا ورژن 4.1 یا اس سے زیادہ ہونا یقینی بنائیں۔ آپ اپنے اوپن سی وی کو مرتب کرنے کے لئے مذکورہ ٹیوٹوریل کی پیروی کرسکتے ہیں جس میں گھنٹوں لگیں گے لیکن بھاری منصوبوں کے ل more زیادہ قابل اعتماد ہے یا مندرجہ ذیل کمانڈز کا استعمال کرکے اسے براہ راست پائپ سے انسٹال کریں۔
$ ان پٹ انسٹال کریں اوپنکیو-شراکت-ازگر == 4.1.0.25
اگر آپ پہلی بار اوپن سی وی کو پائپ کے ساتھ نصب کر رہے ہیں تو ، آپ کو دوسری انحصار بھی انسٹال کرنا ہوگی۔ اس کے لئے نیچے دیئے گئے احکامات استعمال کریں۔
do sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get libxvidcore-dev libx264-dev $ sudo apt-get libatlas-base-dev gfortran $ sudo apt-get libhdf5 انسٹال کریں دیو libhdf5- سیریل-دیو libhdf5-103 do sudo apt-get انسٹال کریں libqtgui4 libqtwebkit4 libqt4-python3-pyqt5
ہم نے پہلے ہی بہت سے راسبیری پی او پی سی او سی سی پروجیکٹس تیار کر رکھے ہیں ، آپ مزید پریرتاوں کے ل that بھی اسے جانچ سکتے ہیں۔
راسبیری پائ 5 انچ ڈسپلے میں بزر شامل کرنا
ہارڈ ویئر کی طرف ، ہمارے پاس 5 انچ ڈسپلے اور بزر کے علاوہ اور کچھ نہیں ہے۔ راسبیری پائی کے ساتھ انٹرفیس 5 انچ ڈسپلے کے بعد ، ہم براہ راست ڈسپلے کے پچھلے حصے میں بوزر کو سوار کرسکتے ہیں جس نے ہمارے لئے کچھ GPIO پنوں کو بڑھایا ہے۔ جیسا کہ ذیل میں دکھایا گیا ہے میں نے اپنے بزر سے رابطہ قائم کیا ہے۔
اگر آپ زیادہ سے زیادہ I / O پنوں کو استعمال کرنے میں دلچسپی رکھتے ہیں تو ، نیچے دیئے گئے پن کی تفصیل مفید ہوگی۔ جیسا کہ آپ توسیع شدہ پنوں میں دیکھ سکتے ہیں ، زیادہ تر پنوں کو ٹچ اسکرین انٹرفیس کے لئے خود ڈسپلے کے ذریعہ استعمال کیا جاتا ہے۔ لیکن پھر بھی ، ہمارے پاس 3،5،7،8،10،11،12،13،15،16، اور 24 پن ہیں جن کا کوئی رابطہ نہیں ہے اور ہم اسے اپنی درخواست کے لئے استعمال کرسکتے ہیں۔ اس ٹیوٹوریل میں ، میں نے ایک بزر کو GPIO 3 سے مربوط کیا ہے۔
سی سی ٹی وی موشن کھوج کے لئے پروگرامنگ راسبیری پائی
اس پروجیکٹ کے لئے مکمل ازگر کا اسکرپٹ اس صفحے کے نیچے پایا جاسکتا ہے ، لیکن آئیے اس کو سمجھنے کے لئے کوڈ کے ہر طبقہ پر گفتگو کرتے ہیں۔
آر پی ایس پی کا استعمال کرتے ہوئے راسبیری پائی پر لگ کے بغیر ایک سے زیادہ کیمروں کی نگرانی کرنا
اس کام کو کرنے میں ایک مشکل حص.ہ یہ تھا کہ راسبیری پائی پر بوجھ کو کم کرنا تھا تاکہ اسٹریمنگ میں تعطل سے بچا جاسکے۔ ابتدا میں ، میں نے حرکت تلاش کرنے کے لئے چاروں کیمروں کے مابین سوئچ کرنے کی کوشش کی لیکن یہ بہت پیچھے (تقریبا 10 10 سیکنڈ) تھا۔ لہذا میں نے چاروں کیمرے ایک ہی شبیہہ کے ساتھ جوڑ دیئے اور اس شبیہہ پر حرکت پذیری کی تمام سرگرمیاں کیں۔ میں نے دو کام لکھے تھے ، یعنی ایک کیمرا بنائیں اور کیمرا پڑھیں۔
کیمرے کی تخلیق تقریب اس کے متعلقہ چینل نمبر کے ساتھ کیمرے کو کھولنے کے لئے استعمال کیا جاتا ہے. نوٹ کریں کہ آر ٹی ایس پی یو آر ایل کا اختتام "02" کے ساتھ ہوتا ہے ، اس کا مطلب ہے کہ میں ذیلی اسٹریم ویڈیو فیڈ استعمال کر رہا ہوں جس کی ریزولیوشن کم ہوگی اور اس ل faster اس کو تیز تر پڑھنا تیز ہوگا۔ نیز ، آپ جس طرح کا ویڈیو کوڈیک استعمال کرتے ہیں اس کی رفتار میں بھی اہم کردار ادا کرتا ہے ، میں نے مختلف کوڈز کے ساتھ تجربہ کیا اور FFMPEG کو سب سے روزہ دار پایا۔
Def create_camera (چینل): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@" + rtsp_IP + ": 554 / سٹریمنگ / چینلز /" + چینل + "02" # آئی پی کو مناسب بنائیں۔ آپ کی ٹوپی = cv2.VideoCapture (rtsp، cv2.CAP_FFMPEG) cap.set (3، cam_width) # چوڑائی کا ID نمبر 3 cap.set (4، cam_height) ہے # اونچائی کے لئے ID نمبر 480 cap.set ہے (10 ، 100) # چمک کے لئے ID نمبر 10 ریٹرن کیپ ہے
میں پڑھا کیمرہ فعل، ہم نامی ایک تصویر میں ان سب کو اکٹھا کرنے یعنی cam1، cam2، cam3، اور آپ Cam4 چاروں کیمرے پڑھے گا Main_screen . ایک بار جب یہ مرکزی اسکرین تیار ہوجائے گی ، تو ہم اس تصویر پر اپنے تمام اوپن سی وی کام کریں گے۔
ڈیف ریڈ_کیمرا (): کامیابی ، موجودہ_سکرین = کیم 1.ریڈ () مین_سکرین = موجودہ_سکرین کامیابی ، موجودہ_سکرین = کیم 2.ریڈ () مین_سکرین = موجودہ_سکرین کامیابی ، موجودہ_سکرین = کیم3.ریڈ () مین_سکرین = موجودہ_سکرین کامیابی ، موجودہ_سکرین = کیم 4.ریڈ () مین_سکرین = موجودہ_سکرین کی واپسی (مین_سکرین)
چاروں کیموں کے ساتھ مشترکہ مرکزی اسکرین امیج ذیل میں دکھائی گئی تصویر کی طرح نظر آئے گی۔
راسبیری پائی کا استعمال کرتے ہوئے اوپن سی وی پر حرکت کا پتہ لگانا
اب جب کہ ہمارے پاس شبیہہ تیار ہے ، ہم اپنی حرکت کا پتہ لگانے کے ساتھ شروع کرسکتے ہیں۔ جبکہ لوپ کے اندر ، ہم دو مختلف فریموں یعنی فریم ون اور فریم 2 کو پڑھ کر شروع کرتے ہیں ، پھر انہیں گرے اسکیل میں تبدیل کرتے ہیں۔
فریم 1 = ریڈ_کیمرا () # پہلے فریم گرے آئیمج_ ایف 1 = سی وی 2 سی وٹ کلر کو پڑھیں (فریم 1 ، سی وی 2۔کولور_بی جی آر 2 جی آر) #) # گرے فریم 2 میں تبدیل کریں = پڑھیں_کیمرا () # دوسرا فریم گرے آئیمج_ ایف 2 = سی وی 2 سی آر جی آر سی آر 2 سی آر 2 سی آر 2
پھر ہم ان دونوں امیجوں کے مابین فرق دیکھتے ہیں کہ کیا تبدیل ہوا ہے اور ایک دہلیز کے ساتھ ، ہم ان تمام جگہوں پر گروپ بناتے ہیں جن میں تبدیلی آئی تھی ، جیسے ایک بلاب کی طرح۔ تیز دھاروں سے بچنے کے لئے شبیہہ کو دھندلا جانا اور اس میں جدا ہونا بھی عام ہے۔
ڈرافٹ امیج = cv2.absdiff (گرے آئیمیج_ ایف 1 ، گرے آئی ایمج_ ایف 2) # فرق کی بات کیج - - یہ ٹھنڈا دھندلا پن ہے۔ cv2. گاوسین بلور (مختلف تصویر، (5،5)، 0) _، تھریشیلڈ امیج = cv2.threshold (بلوری امیج، 20،255، cv2. Cv2) dilatedImage = cv2.dilate (دہلیزاماز ، کرنل ، تکرار = 5)
اگلا مرحلہ یہ ہے کہ کاؤنٹر ڈھونڈیں اور ہر کاؤنٹر کا رقبہ دیکھیں ، رقبہ تلاش کرکے ہم اندازہ کرسکتے ہیں کہ تحریک کتنی بڑی ہے۔ اگر یہ علاقہ متغیر تحریک_معلومات میں ایک مخصوص قدر سے بڑا ہے تو ، پھر ہم اس کو سرگرمی کی حیثیت سے سمجھتے ہیں اور اس کو صارف کے سامنے اجاگر کرنے کے ل around تبدیلی کے گرد ایک خانہ کھینچتے ہیں۔
شکلیں ، _ = cv2.findContours (dilatedImage، cv2.RETR_TREE، cv2.CHAIN_APPROX_SIMPLE) شکل میں سموچ کے لئے # فائنڈ سموچ جادو کا کام ہے: (سموچ) # مقام کی جگہ بنائیں جہاں تبدیلی مل گئی تھی اگر cv2.contourArea (سموچ)> تحریک_حاصل: cv2.rectangle (فریم 1 ، (x ، y) ، (x + w ، y + h) ، (255 ، 255 ، 0) ، 1) ڈسپلے_ اسکرین = تلاش_سکرین ()
تقریب find_screen () سرگرمی چار کیمروں کے درمیان پیش آیا جہاں تلاش کرنے کے لئے استعمال کیا جاتا ہے. ہم تلاش کرسکتے ہیں کہ چونکہ ہم تحریک کی X اور y اقدار کو جانتے ہیں۔ ہم ان x اور y اقدار کا موازنہ ہر اسکرین کے مقام سے کرتے ہیں تاکہ معلوم کریں کہ کس اسکرین نے سرگرمی دی ہے اور ہم دوبارہ اس مخصوص اسکرین کو کاٹتے ہیں ، تاکہ ہم اسے پائ ٹچ اسکرین پر ظاہر کرسکیں۔
Def find_screen (): if (x <cam_width): if (y <cam_hight): اسکرین = فریم 1 پرنٹ ("کیم سکرین 1 میں سرگرمی") ورنہ: اسکرین = فریم 1 پرنٹ ("کیم سکرین 2 میں سرگرمی"): اور اگر (y <cam_height): اسکرین = فریم 1 پرنٹ ("کیم اسکرین 3 میں سرگرمی")) اور: اسکرین = فریم 1 پرنٹ ("کیم سکرین 4 میں سرگرمی") ریٹرن (اسکرین)
موشن کی کھوج کے ل A الارم مرتب کرنا
ایک بار جب ہم جان لیں ، کس اسکرین میں ، حرکت کا پتہ چل جاتا ہے ، تو ہمیں کسی بھی قسم کے الارم کو شامل کرنا آسان ہے۔ یہاں ہم GPIO 3 سے منسلک ایک بزر کو بیپ کریں گے۔ اگر بیان جانچ پڑتال کرتا ہے کہ آیا اس حرکت کا پتہ اسکرین 3 میں پایا گیا تھا اور ٹرائگالرم نامی متغیر میں اضافہ ہوتا ہے ۔ آپ اپنی پسند کی کسی بھی اسکرین یا ایک سے زیادہ اسکرینوں کا بھی پتہ لگاسکتے ہیں۔
اگر ((x> cam_width)) اور (y)
اگر ٹریگ_الرم کی قیمت 3 سے زیادہ تک پہنچ جاتی ہے تو ، ہم ایک بار بززر کو بیپ کریں گے۔ اس گنتی کی وجہ یہ ہے کہ بعض اوقات میں نے سائے یا پرندوں کو جعلی الارم بنایا ہوا دیکھا۔ اس طرح صرف اس صورت میں جب 3 فریموں کے لئے مستقل سرگرمی ہو ، ہمیں ایک الارم ملے گا۔
if (tri_alarm> = 3): # 3 محرکات کے لئے انتظار کریں
سی پی یو درجہ حرارت اور استعمال کی نگرانی
سسٹم 24x7 کام کرنے پر راضی ہے اور اسی وجہ سے پائ بہت گرم ہوسکتی ہے ، لہذا میں ان اقدار کو اسکرین پر ظاہر کرکے درجہ حرارت اور سی پی یو کے استعمال کی نگرانی کرنے کا فیصلہ کرتا ہوں۔ ہم نے یہ معلومات gpiozero لائبریری کا استعمال کرکے حاصل کی ہے۔
cpu = CPUTemperature () لوڈ = لوڈ (اوسط) () cpu_temperature = str ((cpu.temperature) // 1) لوڈ_ویریج = str (لوڈ.لوڈ لوڈ) # پرنٹ (cpu.tempe ادب) # پرنٹ (لوڈ.لوڈ لوڈ) ، cpu_temperature ، (250،250)، cv2.FONT_HERSHEY_SIMPLEX، 0.4، (0،0،255)، 1) cv2.putText (ڈسپلے_سکرین، بوجھ_اوڑا گیری، (300،250)، cv2.FONT_HERSHEY_SIMPLEX، 0،5، 0.4 (0،0)،
آپ کا سی سی ٹی وی موشن سراغ لگانا شروع کر رہا ہے
میں نے اس کو کئی دن جمع کرنے کے لئے آزمایا ہے اور یہ ہر بار کام کرتا ہے اور جب تک میں نے ایک کیمرہ کو نقصان نہیں پہنچا تب تک یہ واقعی ایک تفریحی مقام تھا۔