Ejemplo n.º 1
0
 def test_one_car(self):
     car1 = Car(description='car1',
                engine='2L',
                year=2015,
                make='Honda',
                owner='Chris',
                photo=self.img)
     car1.save()
     cars = Car.objects.all()
     self.assertEqual(len(cars), 1)
Ejemplo n.º 2
0
 def test_one_car(self):
     car1 = Car(description='car1',
                engine='2L',
                year=2015,
                make='Honda',
                owner='Chris',
                photo=self.img)
     car1.save()
     cars = Car.objects.all()
     self.assertEqual(len(cars), 1)
Ejemplo n.º 3
0
 def get(self, request):
     result = []
     car = request.GET.get("car")
     car = Car.get_by_id(car)
     odata = Spares.objects.filter(model=car)
     nodata = SparesAnalog.objects.filter(model=car)
     for d in odata:
         result.append(
             {
                 "name": d.name.name,
                 "part_number": d.part_number,
                 "cost": d.cost,
                 "count": d.count,
                 "type": "Оригинал",
             }
         )
     for nd in nodata:
         result.append(
             {
                 "name": nd.name.name,
                 "part_number": nd.part_number,
                 "cost": nd.cost,
                 "count": nd.count,
                 "type": "Аналог",
             }
         )
     return render(request, "spares/index.html", {"result": result})
Ejemplo n.º 4
0
    def post(self, request):
        car = Car(owner=request.user)
        form = self.form(data=request.POST, instance=car)
        if form.is_valid():
            form.save()
            response = HttpResponseRedirect(reverse('cars'))
            msg_level = messages.SUCCESS
            msg = _('Congrats! Now we are keeping your.car!\
                     Add some data about it.')
            messages.add_message(request, msg_level, msg)
        else:
            context = {'form': form}

            first_contact = request.POST.get('first_contact')
            if not first_contact:
                template = "car/car_list.html"
            else:
                template = "car/new_car_get_started.html"

            msg_level = messages.ERROR
            msg = _('You have some problems on your car info. \
                    Please, correct these trying to create it again.')
            messages.add_message(request, msg_level, msg)
            response = TemplateResponse(request, template, context)

        return response
Ejemplo n.º 5
0
    def test_handle_with_car_not_found(self, send_message_mock, car_mock):
        car_mock.side_effect = Car.DoesNotExist()

        chat_id = 1
        plate = 'ABC9876'
        self.inform_command.handle(chat_id, plate)

        car_mock.assert_called_with(license_plate=plate)

        text = 'No car with license plate %s found.' % plate
        message = {'chat_id': chat_id, 'text': text}
        send_message_mock.assert_called_with(message)
Ejemplo n.º 6
0
def AddCars():
   if request.method=='POST':
      name=request.form.get('name')
      car_type=request.form.get('type')
      price=request.form.get('price')
      image_url=request.form.get('image_url')
      new_car=Car(name=name,car_type=car_type,hire_price=price,image_url=image_url,owner=current_user)
      db.session.add(new_car)
      db.session.commit()
      flash('Added Successfully')
      return redirect('/cars')

   return render_template('mycars.html')
Ejemplo n.º 7
0
 def post(self, request, *args, **kwargs):
     serialize_data = self.get_serializer(data=request.data)
     if serialize_data.is_valid():
         file = serialize_data.validated_data['file']
         xl = pd.ExcelFile(file)
         df = xl.parse(xl.sheet_names[0])
         for index, row in df.iterrows():
             if isinstance(row['date'], str):
                 date = datetime.strptime(row['date'], '%d/%m/%Y')
             else:
                 date = row['date']
             if date.year < 1900:
                 date = jdatetime.date(day=date.day,
                                       month=date.month,
                                       year=date.year).togregorian()
             name = row['name']
             price = row['price']
             total = row['total']
             try:
                 car = Car.objects.get(name=name)
             except Car.DoesNotExist as e:
                 car = Car(name=name)
                 car.save()
             car_stock = CarStock(car=car,
                                  price=price,
                                  total=total,
                                  date=date)
             car_stock.save()
         data = {}
         return responses.SuccessResponse(data, status=200).send()
     else:
         dev_error = serialize_data.errors
         message = 'Failed to upload {}'.format(
             serialize_data.data['file'].name)
         return responses.ErrorResponse(message=message,
                                        dev_error=dev_error,
                                        status=400).send()
Ejemplo n.º 8
0
 def get(self, request):
     result = {}
     result["spares"] = []
     result["original"] = True
     car = request.GET.get("car")
     id = request.GET.get("id")
     if id:
         cr = Car.get_by_id(car)
         original_cost = 0
         analog_cost = 0
         wrk = Work.get_by_id(id=id)
         for sc in SparesOriginalCount.objects.filter(work__id=id).order_by("name"):
             original_cost = original_cost + (sc.name.cost * sc.count)
             if not self.CHECK.get(request.GET.get("original")):
                 continue
             result["spares"].append(
                 {
                     "id": sc.name.id,
                     "name": sc.name.name.name,
                     "part_number": sc.name.part_number,
                     "cost": sc.name.cost,
                     "count": sc.count,
                     "type": "Оригинал",
                 }
             )
         for notsc in SparesAnalogCount.objects.filter(work__id=id).order_by("name"):
             analog_cost = analog_cost + (notsc.name.cost * notsc.count)
             if self.CHECK.get(request.GET.get("original")):
                 continue
             result["spares"].append(
                 {
                     "id": notsc.name.id,
                     "name": notsc.name.name.name,
                     "part_number": notsc.name.part_number,
                     "cost": notsc.name.cost,
                     "count": notsc.count,
                     "type": "Аналог",
                 }
             )
         cost = original_cost
         if not self.CHECK.get(request.GET.get("original")):
             cost = analog_cost
             result["original"] = False
         result["spares_cost"] = cost
         result["work_cost"] = cr.model.brand.clock_rate * wrk.work_ratio
         result["difference"] = original_cost - analog_cost
         result["summary"] = cr.model.brand.clock_rate * wrk.work_ratio + cost
         return render(request, "work/index.html", {"result": result})
     return JsonResponse({"success": False, "result": result})
Ejemplo n.º 9
0
def add_car(request):
    book_id = request.POST.get('book_id')
    book_count = int(request.POST.get('book_count'))
    print('add_car', book_count)
    print('add_car', book_id)
    # 字典方式存储book
    # book_list= []
    # book_list.append({"id":book_id})
    # request.session['car'] = book_list
    car = request.session.get('car')
    txtUsername = request.session.get('txtUsername')

    if txtUsername:
        user = TUser.objects.get(user_name=txtUsername)
        user_car = TCar.objects.filter(id=user.user_id)
        for user_book in user_car:
            if int(book_id) == user_book.book_id:
                try:
                    user_book.goods_number = int(
                        user_book.goods_number) + book_count
                    user_book.save()
                    print(user_book.goods_number)
                except:
                    print('update error')
    if car:
        car.add(book_id, book_count)
        request.session['car'] = car
        for res in car.book_list:
            print(res.id, res.name, res.count, res.price, res.picture)
    else:
        car = Car()
        car.add(book_id, book_count)
        request.session['car'] = car
        for res in car.book_list:
            print(res.id, res.name, res.count, res.price, res.picture)
    return HttpResponse('添加成功')
Ejemplo n.º 10
0
    def get(self, request):
        def sortdict(dct):
            res = OrderedDict()
            for x in sorted(dct):
                for k, v in dct.items():
                    if k == x:
                        res[k] = v
            return res

        result = {}
        car = request.GET.get("car")
        car = Car.get_by_id(car)
        for wrk in Work.objects.filter(active=True, cars=car):
            if result.get(wrk.type_work.name):
                result[wrk.type_work.name].append({
                    "id": wrk.id,
                    "name": wrk.name
                })
            else:
                result[wrk.type_work.name] = [{"id": wrk.id, "name": wrk.name}]
        return JsonResponse({"success": True, "result": sortdict(result)})
Ejemplo n.º 11
0
def car(request):
    txtUsername = request.session.get('txtUsername')
    # 登录

    if txtUsername:
        car = request.session.get('car')
        user = TUser.objects.get(user_name=txtUsername)
        user_car = TCar.objects.filter(id=user.user_id)
        # 外面有车
        if car:

            if request.session.get('car'):

                for book in car.book_list:
                    flag = False
                    for user_book in user_car:
                        if int(book.id) == user_book.book_id:
                            try:
                                with transaction.atomic():
                                    if int(user_book.goods_number) > int(
                                            book.count):
                                        pass
                                    else:
                                        user_book.goods_number = int(
                                            book.count)
                                    user_book.save()
                                    flag = True
                            except:
                                print('update error')
                    if not flag:
                        try:
                            with transaction.atomic():
                                TCar.objects.create(book_id=book.id,
                                                    goods_number=book.count,
                                                    id=user)
                        except:
                            print('insert1 error')
            else:

                for book in car.book_list:
                    try:
                        with transaction.atomic():
                            TCar.objects.create(book_id=book.id,
                                                goods_number=book.count,
                                                id=user)
                    except:
                        print('insert2 error')

            for user_book in user_car:
                flag = False
                for book in car.book_list:
                    if int(book.id) == user_book.book_id:
                        book.count = int(user_book.goods_number)
                        flag = True
                if not flag:
                    car.add(user_book.book_id, user_book.goods_number)

            request.session['car'] = car
            sum_price = 0
            sum_count = 0
            for i in car.book_list:
                sum_price = sum_price + float(i.price) * int(i.count)
                sum_count = sum_count + int(i.count)

            return render(
                request, 'dangdang/car.html', {
                    'txtUsername': txtUsername,
                    'car': car,
                    'sum_price': sum_price,
                    'sum_count': sum_count
                })
        else:
            car = Car()
            for user_book in user_car:
                print(user_book.book_id, user_book.goods_number)
                car.add(user_book.book_id, user_book.goods_number)

            print(car)
            request.session['car'] = car

            sum_price = 0
            sum_count = 0
            for i in car.book_list:
                sum_price = sum_price + float(i.price) * int(i.count)
                sum_count = sum_count + int(i.count)

            return render(
                request, 'dangdang/car.html', {
                    'car': car,
                    'sum_price': sum_price,
                    'sum_count': sum_count,
                    'txtUsername': txtUsername
                })

    elif request.session.get('car'):
        car = request.session.get('car')
        sum_price = 0
        sum_count = 0
        for i in car.book_list:
            sum_price += i.price * i.count
            sum_count += i.count

        return render(request, 'dangdang/car.html', {
            'car': car,
            'sum_price': sum_price,
            'sum_count': sum_count
        })
    # 未登录 外面无车
    else:
        car = request.session.get('car')
        return render(request, 'dangdang/car.html', {'car': car})
Ejemplo n.º 12
0
def Wls(video, start_time, location, latitude, longtitude):
    """"""
    savePath = video
    video = 'static/videos/'+video
    uploaded_time = 0.0

    baseline_01 = 0.55
    baseline_02 = 1.0
    writer = None
    frame_per_second = 30
    maxLost = 3  # maximum number of object losts counted when the object is being tracked

    car_label_strlist = np.loadtxt("Module/car_label2.csv", delimiter=',', dtype='str')

    #load vgg16
    pre_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3), backend=keras.backend,
                      layers=keras.layers, models=keras.models, utils=keras.utils)
    pre_model.trainable = True
    pre_model.summary()

    # add output layer for VGG16 output (4096 -> 1000 => 4096 -> 1000 -> 100)
    vgg_model = models.Sequential()
    vgg_model.add(pre_model)
    vgg_model.add(layers.Flatten())
    vgg_model.add(layers.Dense(4096, activation='relu'))
    vgg_model.add(layers.Dense(1024, activation='relu'))
    vgg_model.add(layers.Dense(20, activation='softmax'))  # practical

    vgg_model.summary()
    vgg_model.compile(loss='categorical_crossentropy', optimizer=optimizers.RMSprop(lr=2e-5), metrics=['acc'])
    #vgg_model.load_weights("y_s_weights.h5") # 가중치 모델 1
    #vgg_model.load_weights("y_up_weights.h5") # 가중치 모델 2
    vgg_model.load_weights("Module/CarDatabaseShare/y_seventh_car_weight.hdf5") #가중치 모델 3
    # Load Yolo
    net = cv.dnn.readNet("Module/CarDatabaseShare/yolov3.weights", "Module/CarDatabaseShare/yolov3.cfg")
    classes = []
    with open("Module/CarDatabaseShare/coco.names", "r") as f:
        classes = [line.strip() for line in f.readlines()]
    layer_names = net.getLayerNames()
    output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

    #print(len(classes))
    colors = np.random.uniform(0, 255, size=(len(classes), 3))
    #print(colors)

    bbox_colors = np.random.randint(0, 255, size=(len(classes), 3))
    #print(bbox_colors)

    tracker = Tracker(maxLost=maxLost)
    cap = cv.VideoCapture(video)

    # Check if camera opened successfully
    if not cap.isOpened():
        print("Error opening video stream or file")
        sys.exit()

    vwidth = cap.get(3)  # float
    vheight = cap.get(4)  # float
    frame_count = 0
    while True:
        _, frame = cap.read()

        if _ is not True:
            break

        height, width, channels = frame.shape

        # Detecting objects
        blob = cv.dnn.blobFromImage(frame, 0.00392, (320, 320), (0, 0, 0), True, crop=False)

        net.setInput(blob)
        outs = net.forward(output_layers)

        # Showing informations on the screen
        class_ids = []
        confidences = []
        boxes = []
        detected_boxes = []
        detected_label = []
        detected_times = []
        detected_colors = []

        for out in outs:
            for detection in out:
                scores = detection[5:]
                class_id = np.argmax(scores)
                confidence = scores[class_id]
                if confidence > 0.5:
                    # Object detected
                    center_x = int(detection[0] * width)
                    center_y = int(detection[1] * height)
                    w = int(detection[2] * width)
                    h = int(detection[3] * height)

                    # Rectangle coordinates
                    x = int(center_x - w / 2)
                    y = int(center_y - h / 2)

                    boxes.append([x, y, w, h])
                    confidences.append(float(confidence))
                    class_ids.append(class_id)

        indexes = cv.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
        # print(indexes)
        font = cv.FONT_HERSHEY_PLAIN

        for i in range(len(boxes)):
            if i in indexes:
                x, y, w, h = boxes[i]
                if h > 40 and w > 50 and class_ids[i] == 2 and y > (vheight * baseline_01) and (y + h) < (vheight * baseline_02):
                    cropimg = frame.copy()
                    cropimg = frame[y:y+h, x:x+w]
                    try:
                        colorlabel = process_image(cropimg)
                        cropimg = cv.cvtColor(cropimg, cv.COLOR_BGR2GRAY)
                        cropimg = cv.resize(cropimg, dsize=(224, 224), interpolation=cv.INTER_AREA)
                        cropimg = cv.GaussianBlur(cropimg, (3, 3), 0)
                        cannimg = cv.Canny(cropimg, 25, 50)
                        npimg = np.asarray(cannimg)
                        npimg = np.stack((cannimg,)*3, axis=-1)
                        npimg = np.expand_dims(npimg, axis=0)
                        #print(npimg.shape)
                        car_recog = CarClassifier(npimg, vgg_model, car_label_strlist)
                        detected_boxes.append((x, y, x + w, y + h))
                        detected_label.append(car_recog)
                        detected_times.append(int(frame_count/frame_per_second) + 1)
                        detected_colors.append(colorlabel)
                    except:
                        continue
                    color = colors[i]
                    cv.rectangle(frame, (x, y), (x + w, y + h), color, 2)
                    #cv.putText(frame, car_recog, (x, y + 30), font, 2, color, 3)
                    #cv.putText(frame, label, (x, y + 20), font, 3, color, 3)
                elif (class_ids[i] == 3 or class_ids[i] == 5 or class_ids[i] == 7) and y > (vheight * baseline_01) and (y + h) < (vheight * baseline_02):
                    cropimg = frame.copy()
                    cropimg = frame[y:y+h, x:x+w]
                    colorlabel = process_image(cropimg)
                    label = str(classes[class_ids[i]])
                    color = colors[i]
                    cv.rectangle(frame, (x, y), (x + w, y + h), color, 2)
                    #cv.putText(frame, label, (x, y + 20), font, 2, color, 3)
                    detected_boxes.append((x, y, x + w, y + h))
                    detected_label.append(label)
                    detected_times.append(int(frame_count/frame_per_second) + 1)
                    detected_colors.append(colorlabel)

        cv.line(frame, (0,int(vheight*baseline_01)), (int(vwidth-1), int(vheight*baseline_01)), (0,0,0), 2)
        cv.line(frame, (0, int(vheight * baseline_02)), (int(vwidth - 1), int(vheight * baseline_02)), (0, 0, 0), 2)
        objects = tracker.update(detected_boxes, detected_label, detected_times, detected_colors)  # update tracker based on the newly detected objects

        for (objectID, centroid) in objects.items():
            text = "ID {}".format(objectID)
            if centroid[1] > (vheight * baseline_01) and centroid[1] < (vheight * baseline_02):
                cv.putText(frame, text, (centroid[0] - 10, centroid[1] - 10), cv.FONT_HERSHEY_SIMPLEX,
                           0.5, (0, 255, 0), 2)
                cv.circle(frame, (centroid[0], centroid[1]), 4, (0, 255, 0), -1)

        # cv.imshow('', frame)
        key = cv.waitKey(1)
        if key == 27:
            break
        if writer is None:
            startTime = start_time.replace(" ", "-")
            startTime = startTime.replace(":", "-")
            savepath=savePath.split(".")[0]
            filePath= "static/output/" + savepath + "-"  + startTime + ".mp4"
            print(filePath)
            fourcc = cv.VideoWriter_fourcc(*"h264")
            # fourcc = cv.VideoWriter_fourcc(*"mp4v")
            writer = cv.VideoWriter(filePath, fourcc, 30, (int(vwidth), int(vheight)), True)
        writer.write(frame)
        if frame_count % 50 == 0:
            classified_info_list = tracker.getClassifiedInfo()
            for obj in classified_info_list:
                print(obj)

        frame_count+=1


    cctv = Cctv(video_link=filePath, location=location, start_time=start_time, latitude=latitude, longtitude=longtitude)
    cctv.save()

    classified_info_list = tracker.getClassifiedInfo()
    for obj in classified_info_list:
        print(obj)

#car model 이름 나오게하기, appearance_time 에다가 초 더하기, 브랜드 넣으면 좋음
#CCTV video_link 제대로 넣기 // 했고
    for obj in classified_info_list:
        try:
            model_brand = obj[1][0][0].split("-")
            model = model_brand[0]
            brand = model_brand[1]
        except:
            model = obj[1][0][0]
            brand = obj[1][0][0]
        try:
            car = Car.objects.get(model=model)
            # car = Car.objects.get(model='a')
        except:
            car = Car(model=model, brand=brand)
            # car = Car(model='a', brand="")
            car.save()

        start_time = datetime.datetime.strptime(str(start_time), '%Y-%m-%d %H:%M:%S')
        appearance_time = start_time + timedelta(seconds=obj[2])

        cctv_log = CctvLog(car_model=car, color=obj[3], appearance_time=appearance_time, cctv_id=cctv)
        cctv_log.save()

    writer.release()
    cap.release()
    os.remove(video)
    cv.destroyAllWindows()