Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:10
Rörelseobjektdetektering är en teknik som används vid datorsyn och bildbehandling. Flera ramar i rad från en video jämförs med olika metoder för att avgöra om något rörligt objekt detekteras.
Rörelseobjektdetektering har använts för ett brett spektrum av applikationer som videoövervakning, aktivitetsigenkänning, vägtillståndsövervakning, flygplats säkerhet, övervakning av skydd längs marin gräns och etc.
Rörelseobjektdetektering är att känna igen den fysiska rörelsen för ett objekt på en given plats eller region. [2] Genom att agera segmentering bland rörliga föremål och stationärt område eller område kan rörliga föremåls rörelse spåras och kan således analyseras senare. För att uppnå detta, överväga att en video är en struktur byggd på enstaka ramar, rörlig objektdetektering är att hitta förflyttningsobjekt i förgrunden, antingen i varje videoram eller bara när det rörliga målet visar det första utseendet i videon.
Jag ska använda Opnecv och Python -kombinationen för att upptäcka och spåra objekten baserat på färgen
Steg 1: Rita en rektangel på det igenkända objektet
Om din dator inte har python eller opencv, följ det här nedan
här är pythonkoden:
importera cv2import numpy som np
cap = cv2. VideoCapture (0)
medan det är sant:
_, frame = cap.read () hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV)
lägre_gul = np.array ([20, 110, 110])
upper_yellow = np.array ([40, 255, 255])
gul_mask = cv2.inRange (hsv, lägre_gul, övre_gul)
(_, konturer, _) = cv2.findContours (gul_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
för kontur i konturer:
område = cv2.contourArea (kontur)
om (område> 800):
x, y, w, h = cv2.boundingRect (kontur) ram = cv2.rektangel (ram, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow ("spårning", ram)
k = cv2.waitKey (5) & 0XFF
om k == 27: paus
cv2.destroyAllWindows ()
cap.release ()
Steg 2: Spåra sökvägen som objektet har flyttat sig i
för att spåra vägen:
för i i intervallet (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ram, center_points [i - 1], center_points , (b, g, r), 4)
Steg 3: Integrera båda koder
Jag ska integrera båda koden
import cv2import numpy som np importera slumpmässigt från samlingar import deque
cap = cv2. VideoCapture (1)
# För att hålla reda på alla punkter där objektet besökt center_points = deque ()
medan det är sant:
# Läs och vänd ram _, ram = cap.read () ram = cv2.flip (ram, 1)
# Oskärpa ramen lite
blur_frame = cv2. GaussianBlur (ram, (7, 7), 0)
# Konvertera från BGR till HSV -färgformat
hsv = cv2.cvtColor (oskärpa_ram, cv2. COLOR_BGR2HSV)
# Definiera nedre och övre intervallet för hsv -färg att upptäcka. Blå här
lower_blue = np.array ([100, 50, 50]) upper_blue = np.array ([140, 255, 255]) mask = cv2.inRange (hsv, lower_blue, upper_blue)
# Gör elliptisk kärna
kärna = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# Öppningsmorph (erosion följt av vidgning)
mask = cv2.morphologyEx (mask, cv2. MORPH_OPEN, kärna)
# Hitta alla konturer
konturer, hierarki = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
om len (konturer)> 0:
# Hitta den största konturen grutste_kontur = max (konturer, nyckel = cv2.contourArea)
# Hitta konturcentrum och rita en fylld cirkel
moment = cv2.moments (största_kontur) centre_of_contour = (int (moment ['m10'] / ögonblick ['m00']), int (ögonblick ['m01'] / ögonblick ['m00'])) cv2.circle (ram, center_of_contour, 5, (0, 0, 255), -1)
# Bind konturen med cirkel
ellips = cv2.fitEllipse (största_kontur) cv2.ellipse (ram, ellips, (0, 255, 255), 2)
# Spara mitten av konturen så att vi drar en linje som spårar den
center_points.appendleft (center_of_contour)
# Dra linje från mittpunkten av konturen
för i i intervallet (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ram, center_points [i - 1], center_points , (b, g, r), 4)
cv2.imshow ('original', ram)
cv2.imshow ('mask', mask)
k = cv2.waitKey (5) & 0xFF
om k == 27: paus
cv2.destroyAllWindows ()
cap.release ()
Rekommenderad:
Object Sensor Machine: 6 steg
Object Sensor Machine: videon på toppen Inledning: Det är alltid ett problem att människor inte vet var de lägger saker eller inte vet om objektet är på rätt plats, och människor glömmer alltid att ta saker och glömmer att sätta den till deras tillhörande plats. Så min sak
Raspberry Pi Object Detection: 7 steg
Raspberry Pi Object Detection: Den här guiden innehåller steg-för-steg-instruktioner för hur du konfigurerar TensorFlows Object Detection API på Raspberry Pi. Genom att följa stegen i den här guiden kommer du att kunna använda din Raspberry Pi för att utföra objektdetektering på livevideo från en P
Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking: 7 steg (med bilder)
Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking: Drivs av en Raspberry Pi 3, Open CV -objektigenkänning, ultraljudssensorer och växlade DC -motorer. Denna rover kan spåra alla föremål den är utbildad för och röra sig på vilken terräng som helst
ChatterBox - Object Translator: 6 steg
ChatterBox - Object Translator: En enhet som får alla objekt att prata! Använd med försiktighet
WalabotEye - Object Tracker With Haptic Feedback: 11 steg
WalabotEye - Object Tracker With Haptic Feedback: För synskadade, använd detta för att få en bättre förståelse av världen runt dig