- భాగాలు అవసరం
- యోలో
- రాస్ప్బెర్రీ పైలో ఓపెన్సివిని ఇన్స్టాల్ చేస్తోంది
- రాస్ప్బెర్రీ పైలో అవసరమైన ఇతర ప్యాకేజీలను వ్యవస్థాపించడం
- ప్రోగ్రామ్ వివరణ
- సామాజిక దూర డిటెక్టర్ ప్రాజెక్టును పరీక్షిస్తోంది
కోవిడ్ -19 సమయంలో, సాంఘిక-దూరం అనేది అంటు వైరస్ వ్యాప్తిని మందగించడానికి ఒక ప్రభావవంతమైన మార్గం. ప్రత్యక్ష సంపర్కం ద్వారా వ్యాధి సంక్రమించే ప్రమాదాన్ని తగ్గించడానికి ప్రజలు ఒకరితో ఒకరు తమ సంబంధాన్ని తగ్గించుకోవాలని సూచించారు. కర్మాగారాలు, బ్యాంకులు, బస్సులు లేదా రైల్వే స్టేషన్లు వంటి అనేక ప్రదేశాలకు సురక్షితమైన దూరాన్ని నిర్వహించడం ఒక సవాలు.
కాబట్టి ఆటోమేటిక్ శానిటైజర్ మెషిన్ మరియు కాంటాక్ట్లెస్ ఉష్ణోగ్రత పర్యవేక్షణ వంటి మా మునుపటి కరోనా భద్రతా ప్రాజెక్టుల కొనసాగింపుగా, ఇక్కడ మేము ఓపెన్సివి మరియు రాస్ప్బెర్రీ పైలను ఉపయోగించి సామాజిక దూర డిటెక్టర్ వ్యవస్థను నిర్మించబోతున్నాము. మేము డీప్ న్యూరల్ నెట్వర్క్ మాడ్యూల్తో YOLO v3 ఆబ్జెక్ట్ డిటెక్షన్ అల్గోరిథం యొక్క బరువులను ఉపయోగిస్తాము.
ఇమేజ్ ప్రాసెసింగ్ ప్రాజెక్టులకు రాస్ప్బెర్రీ పై ఎల్లప్పుడూ మంచి ఎంపిక, ఎందుకంటే ఇది ఇతర కంట్రోలర్ల కంటే ఎక్కువ మెమరీ మరియు వేగాన్ని కలిగి ఉంటుంది. ముఖ ల్యాండ్మార్క్ డిటెక్షన్ మరియు ఫేస్ రికగ్నిషన్ అప్లికేషన్ వంటి కొన్ని క్లిష్టమైన ఇమేజ్ ప్రాసెసింగ్ ప్రాజెక్టుల కోసం మేము గతంలో రాస్ప్బెర్రీ పైని ఉపయోగించాము.
భాగాలు అవసరం
- రాస్ప్బెర్రీ పై 4
ఇక్కడ మనకు ఓపెన్సివి ఇన్స్టాల్ చేయబడిన RPi 4 మాత్రమే అవసరం. ఓపెన్సివి డిజిటల్ ఇమేజ్ ప్రాసెసింగ్ కోసం ఇక్కడ ఉపయోగించబడుతుంది. డిజిటల్ ఇమేజ్ ప్రాసెసింగ్ యొక్క అత్యంత సాధారణ అనువర్తనాలు ఆబ్జెక్ట్ డిటెక్షన్, ఫేస్ రికగ్నిషన్ మరియు పీపుల్ కౌంటర్.
యోలో
YOLO (మీరు ఒక్కసారి మాత్రమే చూస్తారు) అనేది రియల్ టైమ్ ఆబ్జెక్ట్ డిటెక్షన్ కోసం స్మార్ట్ కన్వల్యూషన్ న్యూరల్ నెట్వర్క్ (CNN). ఆబ్జెక్ట్ డిటెక్షన్ అల్గోరిథం యొక్క తాజా వేరియంట్ అయిన YOLOv3 చిత్రాలు మరియు వీడియోలలో 80 విభిన్న వస్తువులను గుర్తించగలదు మరియు ఇది చాలా వేగంగా ఉంటుంది మరియు అద్భుతమైన ఖచ్చితత్వాన్ని కలిగి ఉంటుంది. అల్గోరిథం మొత్తం చిత్రానికి ఒకే న్యూరల్ నెట్వర్క్ను వర్తింపజేస్తుంది, ఆపై చిత్రాన్ని ప్రాంతాలుగా వేరు చేస్తుంది మరియు ప్రతి ప్రాంతానికి సరిహద్దు పెట్టెలు మరియు సంభావ్యతలను లెక్కిస్తుంది. బేస్ యోలో మోడల్ సెకనుకు 45 ఫ్రేమ్ల వద్ద నిజ సమయంలో చిత్రాలను ప్రాసెస్ చేయగలదు. యోలో మోడల్ SSD మరియు R-CNN వంటి అన్ని ఇతర గుర్తింపు పద్ధతులను అధిగమిస్తుంది.
ఈ ప్రాజెక్ట్లో మనం ఉపయోగించబోయే YOLOV3 మోడల్ను ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు.
రాస్ప్బెర్రీ పైలో ఓపెన్సివిని ఇన్స్టాల్ చేస్తోంది
ఓపెన్సివి మరియు ఇతర డిపెండెన్సీలను ఇన్స్టాల్ చేయడానికి ముందు, రాస్ప్బెర్రీ పై పూర్తిగా నవీకరించబడాలి. రాస్ప్బెర్రీ పైని దాని తాజా సంస్కరణకు నవీకరించడానికి క్రింది ఆదేశాలను ఉపయోగించండి:
sudo apt-get update
మీ రాస్ప్బెర్రీ పైలో ఓపెన్సివిని ఇన్స్టాల్ చేయడానికి అవసరమైన డిపెండెన్సీలను ఇన్స్టాల్ చేయడానికి క్రింది ఆదేశాలను ఉపయోగించండి.
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 సుడో వర్ణనాత్మక-పొందుటకు ఇన్స్టాల్ libqt4 పరీక్ష-y
చివరగా, కింది ఆదేశాలను ఉపయోగించి రాస్ప్బెర్రీ పై ఓపెన్సివిని ఇన్స్టాల్ చేయండి.
పైప్ 3 ఇన్స్టాల్ ఓపెన్సివి-కంట్రిబ్యూట్-పైథాన్ == 4.1.0.25
మీరు ఓపెన్సివికి కొత్తగా ఉంటే, రాస్ప్బెర్రీ పైతో మా మునుపటి ఓపెన్సివి ట్యుటోరియల్లను తనిఖీ చేయండి:
- CMake ఉపయోగించి రాస్ప్బెర్రీ పై ఓపెన్సివిని ఇన్స్టాల్ చేస్తోంది
- రాస్ప్బెర్రీ పై మరియు ఓపెన్ సివిలతో రియల్ టైమ్ ఫేస్ రికగ్నిషన్
- రాస్ప్బెర్రీ పై మరియు ఓపెన్ సివి ఉపయోగించి లైసెన్స్ ప్లేట్ గుర్తింపు
- ఓపెన్సివి మరియు రాస్ప్బెర్రీ పై ఉపయోగించి క్రౌడ్ సైజు అంచనా
మేము అనుభవశూన్యుడు స్థాయి నుండి ప్రారంభమయ్యే ఓపెన్సివి ట్యుటోరియల్ల శ్రేణిని కూడా సృష్టించాము.
రాస్ప్బెర్రీ పైలో అవసరమైన ఇతర ప్యాకేజీలను వ్యవస్థాపించడం
సామాజిక దూర డిటెక్టర్ కోసం రాస్ప్బెర్రీ పై ప్రోగ్రామింగ్ చేయడానికి ముందు, అవసరమైన ఇతర ప్యాకేజీలను ఇన్స్టాల్ చేద్దాం.
ఇముటిల్స్ను ఇన్స్టాల్ చేస్తోంది: అనువాదం, భ్రమణం, పున izing పరిమాణం, అస్థిపంజరం మరియు ఓపెన్సివితో మాట్ప్లోట్లిబ్ చిత్రాలను సులభంగా ప్రదర్శించడం వంటి ముఖ్యమైన ఇమేజ్ ప్రాసెసింగ్ విధులను చేయడానికి ఇముటిల్స్ ఉపయోగించబడతాయి. Imutils ని వ్యవస్థాపించడానికి క్రింది ఆదేశాన్ని ఉపయోగించండి:
పైప్ 3 ఇన్స్టాల్ ఇమ్యుటిల్స్
ప్రోగ్రామ్ వివరణ
పేజీ చివరిలో పూర్తి కోడ్ ఇవ్వబడుతుంది. ఇక్కడ మేము మంచి వివరణ కోసం కోడ్ యొక్క ముఖ్యమైన విభాగాలను వివరిస్తున్నాము.
కాబట్టి కోడ్ ప్రారంభంలో, ఈ ప్రాజెక్ట్లో ఉపయోగించబోయే అన్ని లైబ్రరీలను దిగుమతి చేయండి.
దిగుమతి సంఖ్యను 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 ఫైల్, COCO పేర్ల ఫైల్ కోసం మార్గాలను సెట్ చేయడానికి ఉపయోగించబడుతుంది. os.path మాడ్యూల్ సాధారణ పాత్ నేమ్ మానిప్యులేషన్ కోసం ఉపయోగించబడుతుంది. os.path.join () మాడ్యూల్ os.path యొక్క ఉప మాడ్యూల్ మరియు తెలివిగా ఒకటి లేదా అంతకంటే ఎక్కువ మార్గ భాగాలలో చేరడానికి ఉపయోగిస్తారు. cv2.dnn.readNetFromDarknet () పద్ధతిని సేవ్ చేసిన బరువులు నెట్వర్క్లోకి లోడ్ చేయడానికి ఉపయోగిస్తారు. బరువులు లోడ్ చేసిన తరువాత, net.getLayerNames మోడల్ను ఉపయోగించి నెట్వర్క్లో ఉపయోగించిన అన్ని పొరల జాబితాను సేకరించండి .
డెఫ్ సెటప్ (యోలో): గ్లోబల్ న్యూరల్_నెట్, ఎల్ఎన్, లేబుల్స్ బరువులు = os.path.sep.join () config = os.path.sep.join () లేబుల్స్ పాత్ = os.path.sep.join () LABELS = ఓపెన్ (లేబుల్స్ పాత్).read (). స్ట్రిప్ (). స్ప్లిట్ ("\ n") న్యూరల్_నెట్ = cv2.dnn.readNetFromDarknet (కాన్ఫిగర్, బరువులు) ln = న్యూరల్_నెట్.
ఇమేజ్ ప్రాసెసింగ్ ఫంక్షన్ లోపల, మేము వీడియో యొక్క ఒకే ఫ్రేమ్ను తీసుకుంటాము, ఆపై జనంలో ఉన్న ప్రతి వ్యక్తి మధ్య సామాజిక దూరాన్ని గుర్తించడం కోసం దాన్ని ప్రాసెస్ చేస్తాము. ఫంక్షన్ యొక్క మొదటి రెండు పంక్తులలో, మేము మొదట వీడియో ఫ్రేమ్ (W, H) యొక్క కొలతలు (ఏమీలేదు, ఏదీ లేదు) గా సెట్ చేసాము. తరువాతి పంక్తిలో, ఫ్రేమ్లను ఒక బ్యాచ్లో లోడ్ చేయడానికి మరియు వాటిని నెట్వర్క్ ద్వారా అమలు చేయడానికి మేము cv2.dnn.blobFromImage () పద్ధతిని ఉపయోగించాము. బొట్టు ఫంక్షన్ ఒక ఫ్రేమ్లో మీన్ వ్యవకలనం, స్కేలింగ్ మరియు ఛానల్ మార్పిడిని చేస్తుంది.
. (416, 416), స్వాప్ఆర్బి = ట్రూ, క్రాప్ = ఫాల్స్
YOLO నుండి లేయర్ అవుట్పుట్లు విలువల సమితిని కలిగి ఉంటాయి. ఈ విలువలు ఏ వస్తువు ఏ తరగతికి చెందినదో నిర్వచించడంలో మాకు సహాయపడతాయి. లేయర్ ut ట్పుట్స్లోని ప్రతి అవుట్పుట్పై మేము లూప్ చేస్తాము మరియు మేము వ్యక్తులను గుర్తించేటప్పుడు, మేము క్లాస్ లేబుల్ను "వ్యక్తి" గా సెట్ చేస్తాము. ప్రతి డిటెక్షన్ నుండి, అవుట్పుట్లో గుర్తించడానికి మాకు X సెంటర్, Y సెంటర్, వెడల్పు మరియు బాక్స్ యొక్క ఎత్తును ఇచ్చే సరిహద్దు పెట్టె లభిస్తుంది:
స్కోర్లు = గుర్తింపు 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
తదుపరి పంక్తులలో, మోడల్ నుండి మేము అందుకున్న బాక్స్ కొలతలు ఉపయోగించి వ్యక్తి చుట్టూ ఒక దీర్ఘచతురస్రాన్ని గీయండి, ఆపై బాక్స్ సురక్షితంగా లేదా సురక్షితం కాదా అని తనిఖీ చేయండి. బాక్సుల మధ్య దూరం దగ్గరగా ఉంటే, బాక్స్ రంగు ఎరుపు రంగులో ఉంటుంది, లేకపోతే బాక్స్ ఆకుపచ్చ రంగులో ఉంటుంది.
. (0, 0, 150), 2) ఎలిఫ్ స్థితి == తప్పు: cv2.rectangle (ఫ్రేమ్, (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 లేదా ఫ్రేమెనో == 1): సెటప్ (యోలో) ఇమేజ్ప్రోసెస్ (ప్రస్తుత_ఇమ్జి) ఫ్రేమ్ = ప్రాసెస్డ్ఇమ్జి
తరువాతి పంక్తులలో, cv2.VideoWriter () ఫంక్షన్ను ఉపయోగించి మనం ఇంతకుముందు నిర్వచించిన opname ద్వారా పేర్కొన్న ప్రదేశంలో అవుట్పుట్ వీడియోను నిల్వ చేయండి.
సృష్టిస్తే ఏదీ లేదు: fourcc = cv2.VideoWriter_fourcc (* 'XVID') create = cv2.VideoWriter (opname, fourcc, 30, (Frame.shape, Frame.shape), True) create.write (Frame)
సామాజిక దూర డిటెక్టర్ ప్రాజెక్టును పరీక్షిస్తోంది
మీ కోడ్ సిద్ధమైన తర్వాత, పై టెర్మినల్ను తెరిచి ప్రాజెక్ట్ డైరెక్టరీకి నావిగేట్ చేయండి. కోడ్, యోలో మోడల్ మరియు డెమో వీడియో క్రింద చూపిన విధంగా ఒకే ఫోల్డర్లో ఉండాలి.
మీరు ఇక్కడ నుండి యోలోవి 3 డైరెక్టరీని, పెక్సెల్స్ నుండి వీడియోలను డౌన్లోడ్ చేసుకోవచ్చు మరియు క్రింద ఇచ్చిన పైథాన్ కోడ్ను కాపీ చేసి, పైన చూపిన విధంగానే వాటిని డైరెక్టరీలో ఉంచవచ్చు.
మీరు ప్రాజెక్ట్ డైరెక్టరీలో ఉన్న తర్వాత, కోడ్ను ప్రారంభించడానికి కింది ఆదేశాన్ని అమలు చేయండి:
python3 detor.py
నేను ఈ కోడ్ను పెక్సెల్స్ నుండి పొందిన వీడియో ఉదాహరణలో ప్రయత్నించాను. నాకు, FPS చాలా నెమ్మదిగా ఉంది మరియు మొత్తం వీడియోను ప్రాసెస్ చేయడానికి సుమారు 10 నుండి 11 నిమిషాలు పట్టింది.
వీడియోను ఉపయోగించటానికి బదులుగా, మీరు కోడ్ యొక్క 98 వ పంక్తిలో cv2.VideoCapture (ఇన్పుట్) ను cv2.VideoCapture (0) తో భర్తీ చేయడం ద్వారా రాస్ప్బెర్రీ పై కెమెరాతో పరీక్షించవచ్చు. లింక్ను అనుసరించడం ద్వారా రాస్ప్బెర్రీ పైతో పికామెరాను ఉపయోగించడం గురించి మరింత తెలుసుకోండి.
సామాజిక దూర ఉల్లంఘనలను గుర్తించడానికి మీరు రాస్ప్బెర్రీ పైతో ఓపెన్సివిని ఈ విధంగా ఉపయోగించవచ్చు. అవుట్పుట్ వీడియో మరియు కోడ్ క్రింద ఇవ్వబడ్డాయి: