Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
 def test_distance(self):
     self.assertAlmostEqual(calculateDistance(0, 0, 0, 0), 0)
     self.assertAlmostEqual(calculateDistance(1, 1, 1, 1), 0)
Esempio n. 4
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()
Esempio n. 6
0
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)