def lvq3(train, lrate, prototypes, epochs): prots = lvq1(train, lrate, prototypes, epochs) for i in range(epochs): rate = lrate * (1.0 - (i / float(epochs))) totalError = 0.0 for item in train: prots = dt.calculateDistance(item, prototypes) mi = prots[0][0] mj = prots[1][0] if window(mi, mj, item, 0.3): if mi[-1] != mj[-1]: if mi[-1] == item[-1]: for attr in range(len(mi) - 1): errorMi = item[attr] - mi[attr] errorMj = item[attr] - mj[attr] totalError += errorMi**2 mi[attr] += rate * errorMi mj[attr] -= rate * errorMj elif mj[-1] == item[-1]: for attr in range(len(mi) - 1): errorMi = item[attr] - mi[attr] errorMj = item[attr] - mj[attr] totalError += errorMj**2 mj[attr] += rate * errorMj mi[attr] -= rate * errorMi elif mi[-1] == mj[-1]: for attr in range(len(mi) - 1): errorMi = item[attr] - mi[attr] errorMj = item[attr] - mj[attr] totalError += (errorMj + errorMi)**2 mi[attr] += (0.3 * rate) * errorMi mj[attr] -= (0.3 * rate) * errorMj return prototypes
def lvq1(train, lrate, prototypes, epochs): for i in range(epochs): rate = lrate * (1.0 - (i / float(epochs))) totalError = 0.0 for instance in train: prototype = dt.calculateDistance(instance, prototypes)[0][0] for j in range(len(instance) - 1): error = instance[j] - prototype[j] totalError += error**2 if (prototype[-1] == instance[-1]): prototype[j] += rate * error else: prototype[j] -= rate * error return prototypes
def test_distance(self): self.assertAlmostEqual(calculateDistance(0, 0, 0, 0), 0) self.assertAlmostEqual(calculateDistance(1, 1, 1, 1), 0)
import distance if distance.calculateDistance(2,3,4,23) != 20.09975124224178: print("error") else: print("success")
def run(video, pts_src, sport): Player_Marked = False # otherwise, grab a reference to the video file i = 0 FPS_SMOOTHING = 0.9 fps = 0.0 prev = 0 distance = 0 total_distance = 0 speed_list = [] max_speed = 0 min_speed = 0 pointer = 0 t = 3 frames_count = 0 if (sport == 1): per_frame = 90 t = 3 else: per_frame = 60 t = 2 # loop over frames from the video stream vs = cv2.VideoCapture(video) #change_res(vs,854,480) trackers = cv2.MultiTracker_create() while True: frames_count = frames_count + 1 # grab the current frame, then handle if we are using a # VideoStream or VideoCapture object frame = vs.read() frame = frame[1] # now = time.time() # fps = (fps*FPS_SMOOTHING + (1/(now - prev))*(1.0 - FPS_SMOOTHING)) # prev = now # fpstext = 'FPS = ' + str(int(fps)) ##real_time_stats_on_screen real_time(frame, distance, total_distance, max_speed, min_speed) # check to see if we have reached the end of the stream if frame is None: #print(corr) average_speed = sum(speed_list) / len(speed_list) return xs, ys, frames, total_distance, max_speed, min_speed, average_speed break # resize the frame (so we can process it faster) #frame = imutils.resize(frame, width=1920,height=1080) # grab the updated bounding box coordinates (if any) for each # object that is being tracked (success, boxes) = trackers.update(frame) # loop over the bounding boxes and draw then on the frame for box in boxes: (x, y, w, h) = [int(v) for v in box] cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 255), 2) # print(str(x+int(w/2))+','+str(y+int(h/2))) if (i % per_frame == 0): # xs.append(x+int(w/2)) # ys.append(y+int(h)) x_map, y_map = map.map([x + int(w / 2), y + int(h)], pts_src, sport) xs.append(x_map) ys.append(y_map) frames.append(frames_count) points.append(x_map) points.append(y_map) if (len(points) >= 4): #(x1,y1,x2,y2) #distance = mt.distance(points[pointer-3],points[pointer-2],points[pointer-1],points[pointer])/100 distance = dis.calculateDistance(points[pointer - 3], points[pointer - 2], points[pointer - 1], points[pointer], sport) total_distance = total_distance + distance speed = speedFunction.calculate_Speed(distance, t) speed_list.append(speed) max_speed = max(speed_list) min_speed = min(speed_list) pointer += 2 cv2.circle(frame, (x + int(w / 2), y + int(h)), 5, red, -1) i += 1 cv2.imshow("Frame", frame) key = cv2.waitKey(1) & 0xFF # if the 's' key is selected, we are going to "select" a bounding # box to track if (Player_Marked == False): if key == ord("s"): # select the bounding box of the object we want to track (make # sure you press ENTER or SPACE after selecting the ROI) # mt.mappingMatch() # mt.mappingPlayer() box = cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True) # create a new object tracker for the bounding box and add it # to our multi-object tracker tracker = OPENCV_OBJECT_TRACKERS['csrt']() trackers.add(tracker, frame, box) Player_Marked = True # if the `q` key was pressed, break from the loop if key == ord("q"): break if key == ord("p"): cv2.waitKey() # otherwise, release the file pointer else: vs.release() # close all windows cv2.destroyAllWindows()
def markAttendance(request): _teacher_username = request.GET['teacher_username'] _school_username = request.GET['school_username'] _date = request.GET['date'] _user = User.objects.filter(username=_school_username) _school = School.objects.filter(user=_user) _school_latitude = _school.latitude _school_longitude = _school.longitude _latitude_1 = float(request.GET['latitude_1']) _longitude_1 = float(request.GET['longitude_1']) _latitude_2 = float(request.GET['latitude_2']) _longitude_2 = float(request.GET['longitude_2']) _latitude_3 = float(request.GET['latitude_3']) _longitude_3 = float(request.GET['longitude_3']) _latitude_4 = float(request.GET['latitude_4']) _longitude_4 = float(request.GET['longitude_4']) try: query_check_user = Teacher.objects.filter( username=_teacher_username)[0] presence = 0 dist1 = calculateDistance(_school_latitude, _school_longitude, _latitude_1, _longitude_1) dist2 = calculateDistance(_school_latitude, _school_longitude, _latitude_2, _longitude_2) dist3 = calculateDistance(_school_latitude, _school_longitude, _latitude_3, _longitude_3) dist4 = calculateDistance(_school_latitude, _school_longitude, _latitude_4, _longitude_4) if dist1 <= 5 and dist2 <= 5 and dist2 <= 5 and dist2 <= 5: presence = 1 query_add_attendance = Attendance(teacher_username=query_check_user, date=datetime.strptime( _date, "%Y-%m-%d").date(), latitude_1=_latitude_1, longitude_1=_longitude_1, latitude_2=_latitude_2, longitude_2=_longitude_2, latitude_3=_latitude_3, longitude_3=_longitude_3, latitude_4=_latitude_4, longitude_4=_longitude_4, presence=_presence) query_add_attendance.save() return JsonResponse( { 'status': 'true', 'message': "User attendance added successfully" }, status=200) except: return JsonResponse({ 'status': 'false', 'message': "User not present" }, status=404)