- கூறுகள் தேவை
- யோலோ
- ராஸ்பெர்ரி பைவில் ஓபன்சிவியை நிறுவுதல்
- ராஸ்பெர்ரி பையில் தேவையான பிற தொகுப்புகளை நிறுவுதல்
- நிரல் விளக்கம்
- சமூக தொலைதூர கண்டறிதல் திட்டத்தை சோதித்தல்
கோவிட் -19 இன் காலத்தில், தொற்று வைரஸ் பரவுவதை மெதுவாக்குவதற்கு சமூக-தொலைவு ஒரு சிறந்த வழியாகும். நேரடி தொடர்பு மூலம் நோய் பரவும் அபாயத்தை குறைக்க மக்கள் ஒருவருக்கொருவர் தங்கள் தொடர்பைக் குறைக்க அறிவுறுத்தப்படுகிறார்கள். தொழிற்சாலைகள், வங்கிகள், பேருந்துகள் அல்லது ரயில் நிலையங்கள் போன்ற பல இடங்களுக்கு பாதுகாப்பான தூரத்தை பராமரிப்பது ஒரு சவாலாக உள்ளது.
ஆகவே, எங்கள் முந்தைய கொரோனா பாதுகாப்புத் திட்டங்களான தானியங்கி சுத்திகரிப்பு இயந்திரம் மற்றும் தொடர்பு இல்லாத வெப்பநிலை கண்காணிப்பு ஆகியவற்றின் தொடர்ச்சியாக, இங்கே நாம் ஓபன்சிவி மற்றும் ராஸ்பெர்ரி பை ஆகியவற்றைப் பயன்படுத்தி ஒரு சமூக தொலைதூர கண்டறிதல் அமைப்பை உருவாக்கப் போகிறோம். ஆழமான நரம்பியல் நெட்வொர்க் தொகுதிடன் YOLO v3 பொருள் கண்டறிதல் வழிமுறையின் எடைகளைப் பயன்படுத்துவோம்.
ராஸ்பெர்ரி பை எப்போதும் பட செயலாக்க திட்டங்களுக்கு ஒரு நல்ல தேர்வாகும், ஏனெனில் இது மற்ற கட்டுப்படுத்திகளை விட அதிக நினைவகத்தையும் வேகத்தையும் கொண்டுள்ளது. முக மைல்கல் கண்டறிதல் மற்றும் முகம் அடையாளம் காணும் பயன்பாடு போன்ற சில சிக்கலான பட செயலாக்க திட்டங்களுக்கு நாங்கள் முன்பு ராஸ்பெர்ரி பை பயன்படுத்தினோம்.
கூறுகள் தேவை
- ராஸ்பெர்ரி பை 4
இங்கே நமக்கு RPi 4 தேவை, அதில் OpenCV நிறுவப்பட்டுள்ளது. டிஜிட்டல் சிசி செயலாக்கத்திற்கு ஓபன்சிவி இங்கே பயன்படுத்தப்படுகிறது. டிஜிட்டல் பட செயலாக்கத்தின் மிகவும் பொதுவான பயன்பாடுகள் பொருள் கண்டறிதல், முகம் அங்கீகாரம் மற்றும் மக்கள் எதிர்.
யோலோ
யோலோ (நீங்கள் ஒரு முறை மட்டுமே பார்க்கிறீர்கள்) என்பது நிகழ்நேர பொருள் கண்டறிதலுக்கான ஸ்மார்ட் கன்வல்யூஷன் நியூரல் நெட்வொர்க் (சி.என்.என்) ஆகும். பொருள் கண்டறிதல் வழிமுறையின் சமீபத்திய மாறுபாடான YOLOv3, படங்கள் மற்றும் வீடியோக்களில் 80 வெவ்வேறு பொருள்களை YOLO அடையாளம் காண முடியும், மேலும் இது அதிவேகமானது மற்றும் சிறந்த துல்லியம் கொண்டது. வழிமுறை முழு படத்திற்கும் ஒற்றை நரம்பியல் வலையமைப்பைப் பயன்படுத்துகிறது, பின்னர் படத்தை பகுதிகளாகப் பிரித்து ஒவ்வொரு பகுதிக்கும் எல்லை பெட்டிகளையும் நிகழ்தகவுகளையும் கணக்கிடுகிறது. அடிப்படை யோலோ மாதிரி ஒரு நொடிக்கு 45 பிரேம்களில் நிகழ்நேரத்தில் படங்களை செயலாக்க முடியும். எஸ்.எஸ்.டி மற்றும் ஆர்-சி.என்.என் போன்ற பிற கண்டறிதல் முறைகளை யோலோ மாதிரி விஞ்சும்.
இந்த திட்டத்தில் நாம் பயன்படுத்தப் போகும் YOLOV3 மாதிரியை இங்கிருந்து பதிவிறக்கம் செய்யலாம்.
ராஸ்பெர்ரி பைவில் ஓபன்சிவியை நிறுவுதல்
ஓபன்சிவி மற்றும் பிற சார்புகளை நிறுவுவதற்கு முன், ராஸ்பெர்ரி பை முழுமையாக புதுப்பிக்கப்பட வேண்டும். ராஸ்பெர்ரி பை அதன் சமீபத்திய பதிப்பிற்கு புதுப்பிக்க பின்வரும் கட்டளைகளைப் பயன்படுத்தவும்:
sudo apt-get update
உங்கள் ராஸ்பெர்ரி பையில் OpenCV ஐ நிறுவ தேவையான சார்புகளை நிறுவ பின்வரும் கட்டளைகளைப் பயன்படுத்தவும்.
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 நிறுவ libqt4 சோதனை -y
இறுதியாக, கீழேயுள்ள கட்டளைகளைப் பயன்படுத்தி ராஸ்பெர்ரி பைவில் ஓபன்சிவியை நிறுவவும்.
pip3 install opencv-பங்களிப்பு-பைதான் == 4.1.0.25
நீங்கள் ஓபன்சிவிக்கு புதியவர் என்றால், ராஸ்பெர்ரி பை மூலம் எங்கள் முந்தைய ஓபன்சிவி டுடோரியல்களைச் சரிபார்க்கவும்:
- CMake ஐப் பயன்படுத்தி ராஸ்பெர்ரி பையில் OpenCV ஐ நிறுவுகிறது
- ராஸ்பெர்ரி பை மற்றும் ஓபன்சிவியுடன் நிகழ்நேர முக அங்கீகாரம்
- ராஸ்பெர்ரி பை மற்றும் ஓபன்சிவி பயன்படுத்தி உரிம தட்டு அங்கீகாரம்
- ஓபன்சிவி மற்றும் ராஸ்பெர்ரி பை ஆகியவற்றைப் பயன்படுத்தி கூட்ட அளவு மதிப்பீடு
தொடக்க நிலை முதல் தொடர் ஓபன்சிவி டுடோரியல்களையும் உருவாக்கியுள்ளோம்.
ராஸ்பெர்ரி பையில் தேவையான பிற தொகுப்புகளை நிறுவுதல்
சமூக தூரக் கண்டுபிடிப்பிற்கான ராஸ்பெர்ரி பை நிரலாக்கப்படுவதற்கு முன், தேவையான பிற தொகுப்புகளை நிறுவுவோம்.
Imutils ஐ நிறுவுதல்: மொழிபெயர்ப்பு, சுழற்சி, மறுஅளவிடுதல், எலும்புக்கூடுப்படுத்தல் மற்றும் ஓபன்சிவி மூலம் மேட்லோட்லிப் படங்களை எளிதாகக் காண்பித்தல் போன்ற அத்தியாவசிய பட செயலாக்க செயல்பாடுகளை உருவாக்க imutils பயன்படுத்தப்படுகிறது. Imutils ஐ நிறுவ பின்வரும் கட்டளையைப் பயன்படுத்தவும்:
pip3 install imutils
நிரல் விளக்கம்
பக்கத்தின் முடிவில் முழுமையான குறியீடு கொடுக்கப்பட்டுள்ளது. சிறந்த விளக்கத்திற்காக குறியீட்டின் முக்கியமான பிரிவுகளை இங்கே விளக்குகிறோம்.
எனவே குறியீட்டின் தொடக்கத்தில், இந்த திட்டத்தில் பயன்படுத்தப்பட வேண்டிய தேவையான அனைத்து நூலகங்களையும் இறக்குமதி செய்யுங்கள்.
இறக்குமதி எண்ணை np இறக்குமதி cv2 இறக்குமதி imutils இறக்குமதி os இறக்குமதி நேரம்
காசோலை () செயல்பாடு வீடியோவின் பிரேமானது இரண்டு பொருள்கள் அல்லது இரண்டு இடங்களுக்கு இடையே உள்ள தூரத்தை கணக்கிட பயன்படுத்தப்படுகிறது. புள்ளிகள் ஒரு மற்றும் ஆ சட்டத்தில் இரண்டு பொருட்களை குறிக்கிறது. பொருள்களுக்கு இடையிலான யூக்ளிடியன் தூரத்தை கணக்கிட இந்த இரண்டு புள்ளிகள் பயன்படுத்தப்படுகின்றன.
def சரிபார்ப்பு (a, b): dist = ((a - b) ** 2 + 550 / ((a + b) / 2) * (a - b) ** 2) ** 0.5 அளவுத்திருத்தம் = (a + b) / 2 என்றால் 0 <dist <0.25 * அளவுத்திருத்தம்: திரும்பவும் உண்மை: தவறானது
அமைவு செயல்பாடு YOLO எடைகள், cfg கோப்பு, கோகோ பெயர்கள் கோப்புக்கான பாதைகளை அமைக்க பயன்படுகிறது. os.path தொகுதி பொதுவான பாதை பெயர் கையாளுதலுக்கு பயன்படுத்தப்படுகிறது. os.path.join () தொகுதி என்பது os.path இன் துணை தொகுதி மற்றும் ஒன்று அல்லது அதற்கு மேற்பட்ட பாதை கூறுகளை புத்திசாலித்தனமாக சேர பயன்படுகிறது. சேமித்த எடையை பிணையத்தில் ஏற்ற cv2.dnn.readNetFromDarknet () முறை பயன்படுத்தப்படுகிறது. எடைகளை ஏற்றிய பிறகு, net.getLayerNames மாதிரியைப் பயன்படுத்தி பிணையத்தில் பயன்படுத்தப்படும் அனைத்து அடுக்குகளின் பட்டியலையும் பிரித்தெடுக்கவும்.
def அமைவு (யோலோ): உலகளாவிய நரம்பியல்_நெட், எல்.என்.).read (). துண்டு ().
பட செயலாக்க செயல்பாட்டின் உள்ளே, நாங்கள் வீடியோவின் ஒரு சட்டகத்தை எடுத்து, பின்னர் கூட்டத்தில் உள்ள ஒவ்வொரு நபருக்கும் இடையில் சமூக தொலைதூர கண்டறிதலுக்காக அதை செயலாக்குகிறோம். செயல்பாட்டின் முதல் இரண்டு வரிகளில், வீடியோ சட்டகத்தின் பரிமாணங்களை (W, H) ஆரம்பத்தில் (எதுவுமில்லை, எதுவுமில்லை) அமைக்கிறோம். அடுத்த வரியில், ஒரு தொகுப்பில் பிரேம்களை ஏற்றவும், அவற்றை பிணையத்தின் மூலம் இயக்கவும் cv2.dnn.blobFromImage () முறையைப் பயன்படுத்தினோம். குமிழ் செயல்பாடு ஒரு சட்டகத்தில் சராசரி கழித்தல், அளவிடுதல் மற்றும் சேனல் இடமாற்றம் செய்கிறது.
(எச்..
YOLO இலிருந்து அடுக்கு வெளியீடுகள் மதிப்புகளின் தொகுப்பைக் கொண்டுள்ளன. இந்த மதிப்புகள் எந்த பொருளை எந்த வகுப்பிற்கு சொந்தமானது என்பதை வரையறுக்க உதவுகின்றன. லேயர் அவுட்புட்களில் உள்ள ஒவ்வொரு வெளியீட்டையும் நாம் லூப் செய்கிறோம் , நாங்கள் மக்களைக் கண்டுபிடிப்பதால், வர்க்க லேபிளை "நபர்" என்று அமைப்போம். ஒவ்வொரு கண்டறிதலிலிருந்தும், வெளியீட்டில் கண்டறிவதற்கு எக்ஸ் சென்டர், ஒய் சென்டர், அகலம் மற்றும் பெட்டியின் உயரம் ஆகியவற்றைக் கொடுக்கும் ஒரு எல்லை பெட்டியைப் பெறுகிறோம்:
மதிப்பெண்கள் = கண்டறிதல் maxi_class = np.argmax (மதிப்பெண்கள்) நம்பிக்கை = மதிப்பெண்கள் LABELS == "நபர்": நம்பிக்கை என்றால்> 0.5: பெட்டி = கண்டறிதல் * np.array () (centerX, centerY, width, height) = box.astype ("int") x = int (centerX - (width / 2)) y = int (centerY - (height / 2)) outline.append () confidences.append (மிதவை (நம்பிக்கை))
அதன் பிறகு, தற்போதைய பெட்டியின் மையத்திற்கு இடையிலான தூரத்தை மற்ற அனைத்து கண்டறியப்பட்ட பெட்டிகளுடன் கணக்கிடுங்கள். எல்லை பெட்டிகள் நெருக்கமாக இருந்தால், நிலையை உண்மை என மாற்றவும்.
நான் வரம்பில் (லென் (மையம்)): வரம்பில் j க்கு (லென் (மையம்)): மூடு = சரிபார்க்கவும் (மையம், மையம்) நெருக்கமாக இருந்தால்: pair.append (, center]) status = உண்மை நிலை = உண்மையான குறியீட்டு = 0
அடுத்த வரிகளில், மாதிரியிலிருந்து நாங்கள் பெற்ற பெட்டி பரிமாணங்களைப் பயன்படுத்தி நபரைச் சுற்றி ஒரு செவ்வகத்தை வரையவும், பின்னர் பெட்டி பாதுகாப்பானதா அல்லது பாதுகாப்பற்றதா என்பதை சரிபார்க்கவும். பெட்டிகளுக்கு இடையிலான தூரம் நெருக்கமாக இருந்தால், பெட்டியின் நிறம் சிவப்பு நிறமாக இருக்கும், இல்லையெனில் பெட்டி பச்சை நிறமாக இருக்கும்.
(x, y) = (அவுட்லைன், அவுட்லைன்) (w, h) = (அவுட்லைன், அவுட்லைன்) நிலை என்றால் == உண்மை: cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 0, 150), 2) எலிஃப் நிலை == தவறு: cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
இப்போது லூப் செயல்பாட்டின் உள்ளே, வீடியோவின் ஒவ்வொரு சட்டத்தையும் படித்து, பின்னர் ஒவ்வொரு சட்டத்தையும் செயலாக்குகிறோம்.
ret, frame = cap.read () மீண்டும் இல்லாவிட்டால்: current_img = frame.copy () current_img = imutils.resize (current_img, width = 480) video = current_img.shape frameno + = 1 if (frameno% 2 == 0 அல்லது frameno == 1): அமைவு (யோலோ) ImageProcess (current_img) Frame = processedImg
அடுத்த வரிகளில், cv2.VideoWriter () செயல்பாட்டைப் பயன்படுத்தி வெளியீட்டு வீடியோவை நாம் முன்னர் வரையறுத்துள்ள opname ஆல் குறிப்பிடப்பட்ட இடத்தில் சேமிக்க வேண்டும்.
உருவாக்கினால் எதுவுமில்லை: fourcc = cv2.VideoWriter_fourcc (* 'XVID') create = cv2.VideoWriter (opname, fourcc, 30, (Frame.shape, Frame.shape), உண்மை) create.write (Frame)
சமூக தொலைதூர கண்டறிதல் திட்டத்தை சோதித்தல்
உங்கள் குறியீடு தயாரானதும், ஒரு பை முனையத்தைத் திறந்து திட்ட அடைவுக்குச் செல்லவும். குறியீடு, யோலோ மாடல் மற்றும் டெமோ வீடியோ ஆகியவை கீழே காட்டப்பட்டுள்ள அதே கோப்புறையில் இருக்க வேண்டும்.

நீங்கள் இங்கிருந்து யோலோவி 3 கோப்பகத்தையும், பெக்சல்களிலிருந்து வீடியோக்களையும் பதிவிறக்கம் செய்து கீழே கொடுக்கப்பட்டுள்ள பைதான் குறியீட்டை நகலெடுத்து, மேலே காட்டப்பட்டுள்ள அதே கோப்பகத்தில் வைக்கலாம்.
நீங்கள் திட்ட அடைவில் வந்ததும், குறியீட்டைத் தொடங்க பின்வரும் கட்டளையை இயக்கவும்:
python3 detor.py
இந்த குறியீட்டை பெக்சல்களிடமிருந்து பெறப்பட்ட வீடியோ எடுத்துக்காட்டில் முயற்சித்தேன். என்னைப் பொறுத்தவரை, FPS மிகவும் மெதுவாக இருந்தது, முழு வீடியோவையும் செயலாக்க சுமார் 10 முதல் 11 நிமிடங்கள் எடுத்தது.

வீடியோவைப் பயன்படுத்துவதற்குப் பதிலாக, குறியீட்டின் 98 வது வரியில் cv2.VideoCapture (உள்ளீடு) ஐ cv2.VideoCapture (0) உடன் மாற்றுவதன் மூலம் இந்த குறியீட்டை ராஸ்பெர்ரி பை கேமரா மூலம் சோதிக்கலாம். இணைப்பைப் பின்தொடர்வதன் மூலம் ராஸ்பெர்ரி பை உடன் பிகாமெராவைப் பயன்படுத்துவது பற்றி மேலும் அறிக.
சமூக தொலைதூர மீறல்களைக் கண்டறிய நீங்கள் ராஸ்பெர்ரி பை உடன் ஓபன்சிவி பயன்படுத்தலாம். வெளியீட்டு வீடியோ மற்றும் குறியீடு கீழே கொடுக்கப்பட்டுள்ளது:
