Exemple #1
0
class GenericBuilder:
    def __init__(self, job, log_dir, finished_queue, cv):
        self.log_dir = log_dir
        self.job = job
        self.finished_queue = finished_queue

        if self.job.type == 'image_classification':
            self.network = ImageClassifier(self.job, self.log_dir,
                                           self.finished_queue, cv)
        elif self.job.type == 'object_detection':
            self.network = ObjectDetector(self.job, log_dir,
                                          self.finished_queue, cv)
        elif self.job.type == 'structured_prediction':
            # TODO: Structured data predictor should be built
            pass
        elif self.job.type == 'structured_classification':
            # TODO: Structured classifier should be built
            pass
        elif self.job.type == 'custom':
            # TODO: Custom built nn should be built
            pass
        else:
            raise Exception()

    def build(self):
        self.network.build()
        self.model = self.network.model
Exemple #2
0
 def __init__(self):
     super(CameraReader, self).__init__()
     # self.cam = cv2.VideoCapture(0)
     self.cam = cv2.VideoCapture("/home/dek/my_video-1.mkv")
     self.width = int(self.cam.get(cv2.CAP_PROP_FRAME_WIDTH))
     self.height = int(self.cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
     self.objdet = ObjectDetector()
Exemple #3
0
    def __init__(self):
        self.camera = cv2.VideoCapture(-1)
        self.camera.set(3, 320)
        self.camera.set(4, 240)
        self.camera.set(5, 60)

        self.tracker = LaneTracker(self)
        self.detector = ObjectDetector(self)

        self.mot = None
 def startDetection(self):
     msgBox = QMessageBox()
     msgBox.setIcon(QMessageBox.Information)
     msgBox.setText("Do you confirm these coordiations?")
     msgBox.setWindowTitle("Confirmation")
     msgBox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
     
     returnValue = msgBox.exec()
     if returnValue == QMessageBox.Ok:
         detector = ObjectDetector(self.output)
         detector.detect_motion()
Exemple #5
0
def get_blur_experiment_results(video, blur):
    cam = cv2.VideoCapture(args.movie)
    width = int(cam.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
    objdet = ObjectDetector(args.path_to_ckpt, args.path_to_labels,
                            args.num_classes)

    detection_counts = []  # Just the raw number of detections
    weighted_detection_counts = []  # Sum the scores

    ret, frame = cam.read()
    while ret == True:
        img = frame  # Aliased, but lets us turn off as necessary.

        img = cv2.GaussianBlur(img, (blur, blur), 0)  # Magic happens here

        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        h, w, _ = img.shape
        expand = np.expand_dims(img, axis=0)
        result = objdet.detect(expand)
        boxes = []

        detection_counts.append(0)
        weighted_detection_counts.append(0)

        for i in range(result['num_detections']):
            if result['detection_scores'][i] > 0.6:
                class_ = result['detection_classes'][i]
                box = result['detection_boxes'][i]
                score = result['detection_scores'][i]
                y1, x1 = int(box[0] * h), int(box[1] * w)
                y2, x2 = int(box[2] * h), int(box[3] * w)
                boxes.append((class_, score, x1, y1, x2, y2))

                # Less efficient, but keeps it all in the same place.
                weighted_detection_counts[-1] += score
                detection_counts[-1] += 1

        for box in boxes:
            class_, score, x1, y1, x2, y2 = box
            w1 = x2 - x1
            h1 = y2 - y1
            cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2)
            cv2.putText(img, "%s: %5.2f" % (layers[class_ - 1], score),
                        (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        cv2.imshow('image', img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        ret, frame = cam.read()

    return np.array(detection_counts), np.array(weighted_detection_counts)
Exemple #6
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.scene = QtWidgets.QGraphicsScene(self)
        self.scene.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(131, 213, 247)))
        self.scene.setSceneRect(0, 0, WIDTH, HEIGHT)

        self.machine = QtSvg.QGraphicsSvgItem('../static/assets/burger_chute.svg')
        self.scene.addItem(self.machine)
        self.machine.setScale(2)
        self.machine.setPos(1000,0)
 
        self.setFixedSize(WIDTH,HEIGHT)
        self.setScene(self.scene)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.cam = cv2.VideoCapture(0)
        self.cam.set(cv2.CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH)
        self.cam.set(cv2.CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT)
        # # self.cam = cv2.VideoCapture(filename)
        self.width = int(self.cam.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
        self.cam_pixmap = None
        self.aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_6X6_1000)
        self.parameters =  cv2.aruco.DetectorParameters_create()
        rms, self.mtx, self.dist, rvecs, tvecs = pickle.load(open("calib.pkl","rb"))
        self.objdet = ObjectDetector()
        self.burger_pixmap = None
        self.rectified_pixmap = None
        font = QtGui.QFont('Arial', 75)
        self.label_text = self.scene.addText("", font)
        self.label_text.setDefaultTextColor(QtCore.Qt.red)
        
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.camera)
        self.timer.start(0) 

        self.counter = 0
        self.burger_classifier = BurgerClassifier()

        font = QtGui.QFont('Arial', 100)
        self.explanation_text = self.scene.addText("test", font)
        self.explanation_text.setHtml("Design your own burger!")
        self.explanation_text.setPos(0, 100)

        font = QtGui.QFont('Arial', 60)
        self.detail_text = self.scene.addText("test", font)
        self.detail_text.setHtml("Place burger layers on the white board<br>Then show the board to the camera<br>Can the computer recognize burgers?<br>Can you fool the computer with a bad burger?")
        self.detail_text.setPos(0, 250)
class CameraReader(QtCore.QThread):
    signal = QtCore.Signal(QtGui.QImage, object)

    def __init__(self):
        super(CameraReader, self).__init__()
        self.cam = cv2.VideoCapture(0)
        self.width = long(self.cam.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH))
        self.height = long(self.cam.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))
        self.objdet = ObjectDetector()

    def run(self):
        while True:
            ret, img = self.cam.read()
            expand = np.expand_dims(img, axis=0)
            result = self.objdet.detect(expand)
            image = QtGui.QImage(img.data, self.width, self.height,
                                 QtGui.QImage.Format_RGB888).rgbSwapped()
            boxes = []
            for i in range(result['num_detections']):
                if result['detection_scores'][i] > 0.5:
                    class_ = result['detection_classes'][i]
                    box = result['detection_boxes'][i]
                    y1, x1 = box[0] * self.width, box[1] * self.height
                    y2, x2 = box[2] * self.width, box[3] * self.height
                    boxes.append((class_, x1, y1, x2, y2))

            self.signal.emit(image, boxes)
Exemple #8
0
class CameraReader(QtCore.QThread):
    signal = QtCore.pyqtSignal(QtGui.QImage, object)

    def __init__(self):
        super(CameraReader, self).__init__()
        # self.cam = cv2.VideoCapture(0)
        self.cam = cv2.VideoCapture("/home/dek/my_video-1.mkv")
        self.width = int(self.cam.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
        self.objdet = ObjectDetector()

    def run(self):
        while True:
            ret, img = self.cam.read()
            expand = np.expand_dims(img, axis=0)
            result, category_index = self.objdet.detect(expand)
            image = QtGui.QImage(img.data, self.width, self.height,
                                 QtGui.QImage.Format_RGB888).rgbSwapped()
            w, h = self.width, self.height
            boxes = []
            for i in range(result['num_detections']):
                if result['detection_scores'][i] > 0.4:
                    class_ = result['detection_classes'][i]
                    box = result['detection_boxes'][i]
                    score = result['detection_scores'][i]
                    y1, x1 = box[0] * h, box[1] * w
                    y2, x2 = box[2] * h, box[3] * w
                    boxes.append((category_index[class_]['name'], score, x1,
                                  y1, x2, y2))

            self.signal.emit(image, boxes)
Exemple #9
0
class AutonomousCar(object):
    def __init__(self):
        self.camera = cv2.VideoCapture(-1)
        self.camera.set(3, 320)
        self.camera.set(4, 240)
        self.camera.set(5, 60)

        self.tracker = LaneTracker(self)
        self.detector = ObjectDetector(self)

        self.mot = None

    def run(self):
        """nb_modules == number of modules to use, excluding the network module."""
        with MODI_Connector(1) as m:
            self.mot = m.motors[0]

        i = 0
        while self.camera.isOpened():
            _, image_lane = self.camera.read()
            h, w = image_lane.shape[:2]
            m = cv2.getRotationMatrix2D((w / 2, h / 2), 180, 1)
            image_lane = cv2.warpAffine(image_lane, m, (w, h))
            image_objs = image_lane.copy()
            i += 1

            image_objs = self.process_object(image_objs)
            show_image('Detected Objects', image_objs)

            image_lane = self.process_lane(image_lane)
            show_image('Lane Lines', image_lane)

            if cv2.waitKey(1) & 0xFF == ord('q'):

                mot.set_torque(0, 0)
                self.camera.release()
                cv2.destroyAllWindows()
                break

    def process_object(self, image):
        image = self.detector.process_objects_on_road(image)
        return image

    def process_lane(self, image):
        image = self.tracker.follow_lane(image)
        return image

    def turn_left(self):
        self.mot.set_torque(30, 30)

    def turn_right(self):
        self.mot.set_torque(-30, -30)

    def go_straight(self):
        self.mot.set_torque(20, 20)
        time.sleep(0.01)

    def stop(self):
        self.mot.set_torque(0, 0)
        time.sleep(0.01)
Exemple #10
0
def train_model(restore):
    """ Distributed function"""
    num_classes = max(len(DotaDataset.get_labels_dict()),
                      len(VedaiDataset.get_labels_dict()))

    detector = ObjectDetector(num_classes, restore)
    detector.train(DotaDataset, config.INIT_SCHEDULE)
    detector.init_optimizer()
    detector.train(VedaiDataset, config.TRAINED_SCHEDULE)
Exemple #11
0
 def __init__(self, framework, weights_file_name, model_file_name,
              classes_file_name, input_width, input_height, mean_value,
              scale_factor, bgr, threshold):
     ObjectDetector.__init__(self, weights_file_name)
     self.model_file_name = model_file_name
     self.classes_file_name = classes_file_name
     self.net = cv2.dnn.readNet(model_file_name, weights_file_name,
                                framework)
     self.input_size = (input_width, input_height)
     self.mean_value = mean_value
     self.scale_factor = scale_factor
     self.threshold = threshold
     if bgr == 'bgr':
         self.reorder_channels = False
     elif bgr == 'rgb':
         self.reorder_channels = True
     else:
         raise ValueError('Unsupported channel sequence')
Exemple #12
0
def get_object_detector() -> ObjectDetector:
    object_detector = ObjectDetector()

    LOG.info('initializing camera parameters')
    if config.CALIBRATE_FRAME and os.path.isfile(config.CALIBRATE_FRAME):
        LOG.info('using existing frame for calibration %s',
                 config.CALIBRATE_FRAME)
        frame = cv2.imread(config.CALIBRATE_FRAME)
    else:
        LOG.info('capturing frame from source')
        frame = capture_from_vid(source=0, width=1920, height=1080)

    object_detector.init_camera_parameters(frame, viz=False)

    LOG.info('camera parameters (rvec: %s, tvec: %s)', object_detector.rvec,
             object_detector.tvec)

    return object_detector
Exemple #13
0
def read_cam():

    detector = ObjectDetector()

    # OpenCV main loop
    vid_center = VideoStream(src=0).start()

    while True:

        windowName = "car detection"
        cv2.namedWindow(windowName, cv2.WINDOW_NORMAL)
        cv2.resizeWindow(windowName, 416, 416)
        cv2.moveWindow(windowName, 0, 0)
        cv2.setWindowTitle(windowName, "car detection")

        while True:

            # -----------------------------------------------------
            # Check to see if the user closed the window
            if cv2.getWindowProperty(windowName, 0) < 0:
                # This will fail if the user closed the window; get printed to the console
                break
            image = vid_center.read()

            # -----------------------------------------------------
            # run the network and detection

            result = detector.detect_object(image, visualize=True)

            displayBuf = np.array(result)

            # show the stuff
            # -----------------------------------------------------

            cv2.imshow(windowName, displayBuf)
            key = cv2.waitKey(10)
            if key == 27:  # ESC key
                cv2.destroyAllWindows()
                break
Exemple #14
0
def detect_and_output():
    result_file = base_folder + '/input_json.json'
    model_path = 'VOC2012model_v1.hdf5'
    recognizer = ObjectDetector(model_path)
    results = []
    for sub_folder in os.listdir(base_folder):
        for filename in os.listdir(base_folder + '/' + sub_folder):
            extension = os.path.splitext(filename)[1]
            if extension != '.jpg':
                continue
            img = Image.open(base_folder + '/' + sub_folder + '/' + filename)
            sizes = [img.size]
            array = [img_to_array(img.resize((300, 300)))]
            array = preprocess_input(np.array(array))
            result = recognizer.recognize(
                DetectionJob(array=array, sizes=sizes, paths=[base_folder]))
            results.append({
                "filename": sub_folder + '/' + filename,
                "result": result
            })

    with open(result_file, 'w') as f:
        f.write(json.dumps(results))
Exemple #15
0
def main():
    dataset = VedaiDataset(for_training=False)
    loader = DataLoader(
        dataset,
        batch_size=1,
        collate_fn=get_transform_collate_fn(for_training=False))
    num_classes = len(VedaiDataset.get_labels_dict())
    detector = ObjectDetector(num_classes, restore=True)
    labels_dict = dataset.get_labels_dict()

    all_ground_truths, all_detections = [], []
    mAPs = []
    for images, targets in loader:
        ground_truths, detections = detector.get_ground_truths_and_detections(
            images, targets, labels_dict)
        mAP = get_mean_average_precision(ground_truths, detections)
        mAPs.append(mAP)
        all_ground_truths.extend(ground_truths)
        all_detections.extend(detections)

    mAP = get_mean_average_precision(all_ground_truths, all_detections)
    logging.info("mAP for validation set: %.2f%%", mAP * 100.)
    mAP = sum(mAPs) / len(mAPs)
    logging.info("Individual mAP for validation set: %.2f%%", mAP * 100.)
def run_capture_loop(capture, object_detector: ObjectDetector, result_queue):
    LOG.info('running capture loop...')

    while True:
        then = time.time()
        ret, frame = capture.read()
        timestamp = time.time()  # frame timestamp

        _, labels, positions, heights, widths = object_detector.estimate_pose(
            frame, viz=False)

        if LOG.isEnabledFor(logging.DEBUG):
            LOG.info('object_detection took %.4f s', time.time() - then)

        for i in range(len(labels)):
            position = positions[i]
            label = labels[i]
            height = float(heights[i])
            width = float(widths[i])

            message = {
                'Timestamp': timestamp,
                'Type': label,
                'Position': {
                    'X': float(position[0]),
                    'Y': float(position[1]),
                    'Z': float(position[2])
                },
                'Shape': [{
                    'X': width,
                    'Y': 0.0,
                    'Z': height
                }]
            }

            LOG.debug('queueing message %s', message)

            result_queue.put(message)
Exemple #17
0
import numpy as np
from PIL import Image

from data_provider import IntegralImageDataProvider
from integral_image import get_integral_image, integral_window
from object_detector import ObjectDetector
from viola_jones_classifier import ViolaJonesCascadeClassifier

if __name__ == '__main__':
    test_positive_dir = 'C:/Users/Admin/Desktop/AI/data/multi/face/'
    test_negative_dir = 'C:/Users/Admin/Desktop/AI/data/multi/non-face/'
    test_data_provider = IntegralImageDataProvider(test_positive_dir, test_negative_dir, 19, 19,
                                                   max_positive=0, max_negative=None)

    save_file = 'C:/Users/Admin/Desktop/AI/my_classifier_3_6_12_24_48_96_192_multi'
    test_file = 'C:/Users/Admin/Desktop/AI/2.jpg'

    # c = ViolaJonesCascadeClassifier.train_new_classifier(test_data_provider, (3,6,12,24,48,96,192), save_file)
    # c.save(save_file)
    c = ViolaJonesCascadeClassifier.load(save_file)
    # err = c.test(test_data_provider)
    # print(err)
    ObjectDetector(c).parallel_detect_objects(Image.open(test_file), 'RED')
Exemple #18
0
class Widget(QtWidgets.QWidget):
    def __init__(self):
        super(Widget, self).__init__()

        self.scene = QtWidgets.QGraphicsScene()
        self.scene.setSceneRect(0, 0, WIDTH, HEIGHT)
        self.scene.changed.connect(self.changed)

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.classify)
        self.timer.start(250)

        self.view = QGraphicsView(self.scene)
        self.view.setFixedSize(WIDTH, HEIGHT)
        self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setMouseTracking(True)
        # pixmap = QtGui.QPixmap("my_photo-1-crop.jpg")
        # topbun_webcam = QGraphicsPixmapItem(pixmap)
        # topbun_webcam.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # topbun_webcam.setScale(2)
        # self.scene.addItem(topbun_webcam)

        # lettuce = QGraphicsSvgItem("../../../assets/lettuce.svg")
        # lettuce.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # lettuce.setScale(2)
        # self.scene.addItem(lettuce)

        self.image_widget = QtWidgets.QLabel(self)
        self.image_widget.setFixedSize(WIDTH, HEIGHT)

        self.icons = QtWidgets.QWidget(self)
        self.icons.setFixedSize(128, 6 * 64)
        self.iconsLayout = QtWidgets.QVBoxLayout()
        self.icons.setLayout(self.iconsLayout)

        self.topbun = QSvgWidget("../../../static/assets/topbun.svg")
        self.lettuce = QSvgWidget("../../../static/assets/lettuce.svg")
        self.tomato = QSvgWidget("../../../static/assets/tomato.svg")
        self.cheese = QSvgWidget("../../../static/assets/cheese.svg")
        self.patty = QSvgWidget("../../../static/assets/patty.svg")
        self.bottombun = QSvgWidget("../../../static/assets/bottombun.svg")
        self.banana = QSvgWidget("../../../static/assets/banana.svg")
        self.book = QSvgWidget("../../../static/assets/book.svg")
        self.shoe = QSvgWidget("../../../static/assets/shoe.svg")
        self.iconsLayout.addWidget(self.topbun)
        self.iconsLayout.addWidget(self.lettuce)
        self.iconsLayout.addWidget(self.tomato)
        self.iconsLayout.addWidget(self.cheese)
        self.iconsLayout.addWidget(self.patty)
        self.iconsLayout.addWidget(self.bottombun)
        self.iconsLayout.addWidget(self.banana)
        self.iconsLayout.addWidget(self.book)
        self.iconsLayout.addWidget(self.shoe)

        self.buttons = QtWidgets.QWidget(self)
        self.buttonsLayout = QtWidgets.QHBoxLayout()
        self.buttons.setLayout(self.buttonsLayout)
        self.buttonA = QtWidgets.QPushButton("Classify")
        self.buttonA.clicked.connect(self.buttonAClicked)
        self.buttonsLayout.addWidget(self.buttonA)

        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.icons)
        # self.layout.addWidget(self.buttons)
        self.layout.addWidget(self.view)
        self.layout.addWidget(self.image_widget)
        self.setLayout(self.layout)

        self.objdet = ObjectDetector()

    def topbun_clicked(self, *args):
        print(args)

    def buttonAClicked(self, *args):
        self.classify()

    def changed(self):
        self.classify()

    def classify(self):
        image = QtGui.QImage(QtCore.QSize(WIDTH, HEIGHT),
                             QtGui.QImage.Format_RGB888)
        image.fill(QtCore.Qt.white)
        painter = QtGui.QPainter(image)
        self.scene.render(painter)
        painter.end()
        bits = image.constBits().asstring(HEIGHT * WIDTH * 3)
        img = np.fromstring(bits, dtype=np.uint8).reshape(HEIGHT, WIDTH, 3)
        # image = canny(img)

        expand = np.expand_dims(img, axis=0)
        result = self.objdet.detect(expand)
        boxes = []
        for i in range(result['num_detections']):
            if result['detection_scores'][i] > 0.4:
                class_ = result['detection_classes'][i]
                box = result['detection_boxes'][i]
                score = result['detection_scores'][i]
                y1, x1 = box[0] * HEIGHT, box[1] * WIDTH
                y2, x2 = box[2] * HEIGHT, box[3] * WIDTH
                boxes.append((class_, score, x1, y1, x2, y2))

        pixmap = QtGui.QPixmap.fromImage(image)
        p = QtGui.QPainter()
        p.begin(pixmap)
        for box in boxes:
            p.setPen(QtCore.Qt.red)
            class_, score, x1, y1, x2, y2 = box
            w = x2 - x1
            h = y2 - y1
            p.drawRect(x1, y1, w, h)
            p.drawText(x1, y1, "%s: %5.2f" % (labels[class_], score))
        p.end()
        self.image_widget.setPixmap(pixmap)
Exemple #19
0
class MainWindow(QtWidgets.QGraphicsView):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.scene = QtWidgets.QGraphicsScene(self)
        self.scene.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(131, 213, 247)))
        self.scene.setSceneRect(0, 0, WIDTH, HEIGHT)

        self.machine = QtSvg.QGraphicsSvgItem('../static/assets/burger_chute.svg')
        self.scene.addItem(self.machine)
        self.machine.setScale(2)
        self.machine.setPos(1000,0)
 
        self.setFixedSize(WIDTH,HEIGHT)
        self.setScene(self.scene)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.cam = cv2.VideoCapture(0)
        self.cam.set(cv2.CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH)
        self.cam.set(cv2.CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT)
        # # self.cam = cv2.VideoCapture(filename)
        self.width = int(self.cam.get(cv2.CAP_PROP_FRAME_WIDTH))
        self.height = int(self.cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
        self.cam_pixmap = None
        self.aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_6X6_1000)
        self.parameters =  cv2.aruco.DetectorParameters_create()
        rms, self.mtx, self.dist, rvecs, tvecs = pickle.load(open("calib.pkl","rb"))
        self.objdet = ObjectDetector()
        self.burger_pixmap = None
        self.rectified_pixmap = None
        font = QtGui.QFont('Arial', 75)
        self.label_text = self.scene.addText("", font)
        self.label_text.setDefaultTextColor(QtCore.Qt.red)
        
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.camera)
        self.timer.start(0) 

        self.counter = 0
        self.burger_classifier = BurgerClassifier()

        font = QtGui.QFont('Arial', 100)
        self.explanation_text = self.scene.addText("test", font)
        self.explanation_text.setHtml("Design your own burger!")
        self.explanation_text.setPos(0, 100)

        font = QtGui.QFont('Arial', 60)
        self.detail_text = self.scene.addText("test", font)
        self.detail_text.setHtml("Place burger layers on the white board<br>Then show the board to the camera<br>Can the computer recognize burgers?<br>Can you fool the computer with a bad burger?")
        self.detail_text.setPos(0, 250)
        
    def imageTo(self, image):
        pixmap = QtGui.QPixmap.fromImage(image)
        pixmap = pixmap.transformed(QtGui.QTransform().scale(-1, 1))

        if self.cam_pixmap is None:
            self.cam_pixmap = self.scene.addPixmap(pixmap)
            self.cam_pixmap.setPos(QtCore.QPointF(50, 2160-720-50))
        else:
            self.cam_pixmap.setPixmap(pixmap)

    def imageTo2Clear(self):
        if self.rectified_pixmap is not None:
            self.scene.removeItem(self.rectified_pixmap)
            self.rectified_pixmap = None
            self.label_text.setPlainText("")
        if self.burger_pixmap is not None:
            self.scene.removeItem(self.burger_pixmap)
            self.burger_pixmap = None
            self.label_text.setPlainText("")
            
    def imageTo2(self, image2, boxes):
        pixmap2 = QtGui.QPixmap.fromImage(image2)
        boxes = self.analyzeBoxes(boxes)
        if boxes is None:
            return
        p = QtGui.QPainter()
        p.begin(pixmap2)
        for box in boxes:
            p.setPen(QtCore.Qt.red)
            class_, score, x1, y1, x2, y2 = box
            w = x2-x1
            h = y2-y1
            p.drawRect(QtCore.QRect(QtCore.QPoint(x1, y1), QtCore.QSize(w, h)))
            p.drawText(x1, y1, "%s: %5.2f" % (labels[class_], score))
        p.end()
        pixmap2 = pixmap2.scaled(pixmap2.width()*2, pixmap2.height()*2)
        if self.rectified_pixmap == None:
            self.rectified_pixmap = self.scene.addPixmap(pixmap2)
            self.rectified_pixmap.setPos(QtCore.QPointF(3840 - pixmap2.width(), 2160-pixmap2.height()))
        else:
            self.rectified_pixmap.setPixmap(pixmap2)

    def analyzeBoxes(self, boxes):
        all_intersections = []
        for i in range(len(boxes)):
            first = boxes[i]
            first_rect = QtCore.QRectF(QtCore.QPointF(first[2], first[3]), QtCore.QPointF(first[4], first[5]))
            intersections = []
            for j in range(i+1, len(boxes)):
                second = boxes[j]
                second_rect = QtCore.QRectF(QtCore.QPointF(second[2], second[3]), QtCore.QPointF(second[4], second[5]))
                if first_rect.intersects(second_rect):
                    intersections.append((first, second))
            if intersections != []:
                all_intersections.append(intersections)

        nonoverlapping_boxes = set(boxes)
        if len(all_intersections):
            for intersections in all_intersections:
                for intersection in intersections:
                    first, second = intersection
                    if first[1] > second[1]:
                        if second in nonoverlapping_boxes:
                            nonoverlapping_boxes.remove(second)
                    else:
                        if first in nonoverlapping_boxes:
                            nonoverlapping_boxes.remove(first)

            boxes = nonoverlapping_boxes


            
        ordered_boxes = sorted(nonoverlapping_boxes, key=lambda x: boxCenter(x)[1])
        ordered_boxes_with_gaps = []
        for i in range(len(ordered_boxes)):
            box = ordered_boxes[i]
            bc = boxCenter(box[2:])
            ordered_boxes_with_gaps.append(box)
            if i < len(ordered_boxes) - 1:
                nextBox = ordered_boxes[i+1]
                dy = nextBox[3] - box[5]
                nbc = boxCenter(nextBox[2:])
                height = 50
                if dy > height:
                    pos = int(dy / height)
                    width = (((box[4] - box[2]) + (nextBox[4] - nextBox[2]))/2)/2
                    centerX = (box[4] + nextBox[2]) / 2
                    for j in range(1, pos):
                        currPosY = box[5] + ((height+5)*j)
                        newBox = (0, 1.0, centerX - width, currPosY - height/2, centerX + width, currPosY + height/2)
                        ordered_boxes_with_gaps.append(newBox)
                        if len(ordered_boxes_with_gaps) == 6:
                            break
            if len(ordered_boxes_with_gaps) == 6:
                break

        classes_ = [box[0] for box in ordered_boxes_with_gaps]
        while len(classes_) < 6:
            classes_.insert(0, 0)
            
        burger_renderer = BurgerRenderer(classes_, 720, 720, renderEmpty=True)
        image = burger_renderer.image
        image_128 = burger_renderer.image.scaled(128, 128).convertToFormat(QtGui.QImage.Format_RGB888)
        bits = image_128.constBits().asstring(128*128*3)
        img = np.fromstring(bits, dtype=np.uint8).reshape(128, 128, 3)
        pixmap3 = QtGui.QPixmap.fromImage(image)
        if self.burger_pixmap is None:
            self.burger_pixmap = self.scene.addPixmap(pixmap3)
            self.burger_pixmap.setPos(QtCore.QPointF(1370, 190))
        else:
            self.burger_pixmap.setPixmap(pixmap3)

        if len(classes_) != 6:
            print("Wrong size:", len(classes_))
            return None
        result = self.burger_classifier.classify(classes_)[0]
        if result[1] > 0.5:
            label = 'burger'
            self.label_text.setPlainText("BURGER")
            self.label_text.setPos(1500,1150)
            self.label_text.setDefaultTextColor(QtCore.Qt.green)
        else:
            label = 'notburger'
            self.label_text.setHtml("NOT<br>BURGER")
            self.label_text.setPos(1500,1150)
            self.label_text.setDefaultTextColor(QtCore.Qt.red)
        # self.image3_text.setText("P(burger) = %5.2f P(notburger) = %5.2f (%s" % (result[1], result[0], label))
        # label = label_burger(classes_)
        
        return ordered_boxes_with_gaps
        
    def camera(self):
        ret, img = self.cam.read()
        if ret == True:
            h, w, _ = img.shape
            newcameramtx, roi=cv2.getOptimalNewCameraMatrix(self.mtx, self.dist, (w,h), 1, (w,h))
            dst = cv2.undistort(img, self.mtx, self.dist, None, newcameramtx)
            # # crop the image
            x, y, w2, h2 = roi
            dst = dst[y:y+h2, x:x+w2]
            img = np.ascontiguousarray(dst, dst.dtype)
            h3, w3, _ = img.shape

            img2 = img.copy()
            corners, ids, rejectedImgPoints = cv2.aruco.detectMarkers(img2, self.aruco_dict, parameters=self.parameters)
            cv2.aruco.drawDetectedMarkers(img2, corners, ids)
            for corner in corners:
                rvec, tvec, _ = cv2.aruco.estimatePoseSingleMarkers(corner, 0.195, newcameramtx, self.dist)
                try:
                    cv2.aruco.drawAxis(img2, newcameramtx, self.dist, rvec, tvec, 0.1)
                except cv2.error:
                    print( "bad matrix")
            d = {}
            boxes = []
            image2 = QtGui.QImage(self.width, self.height, QtGui.QImage.Format_RGB888)
            boxes = []
            if ids is None:
                image = QtGui.QImage(img2.data, w3, h3, w3*3, QtGui.QImage.Format_RGB888).rgbSwapped()
                self.imageTo(image)
                self.imageTo2Clear()
                return
            else:
                short_ids = [id_[0] for id_ in ids]
                for i, corner in enumerate(corners):
                    d[short_ids[i]] = corner
                if len(d.keys()) != 4:
                    image = QtGui.QImage(img2.data, w3, h3, w3*3, QtGui.QImage.Format_RGB888).rgbSwapped()
                    self.imageTo(image)
                    self.imageTo2Clear()
                    return
                ul = d[0][0][0]
                ur = d[1][0][0]
                lr = d[2][0][0]
                ll = d[3][0][0]
                pts = np.array([ul, ur, lr, ll], np.int32)
                pts = pts.reshape((-1,1,2))
                cv2.polylines(img,[pts],True,(255,0,255))
                image = QtGui.QImage(img2.data, w3, h3, w3*3, QtGui.QImage.Format_RGB888).rgbSwapped()
                self.imageTo(image)

                orig_width = ur[0] - ul[0]
                orig_height = ll[1] - ul[1]
                # ratio = orig_width / float(orig_height)
                destCorners = np.array([ [0, 0], [WARPED_WIDTH, 0], [WARPED_WIDTH, WARPED_HEIGHT], [0, WARPED_HEIGHT]], dtype=np.float32)
                srcCorners = np.array([ul, ur, lr, ll], dtype=np.float32)
                pt = cv2.getPerspectiveTransform(srcCorners, destCorners)
                warped = cv2.warpPerspective(img, pt, (WARPED_WIDTH, WARPED_HEIGHT))
                cv2.imwrite("rectified/%05d.png" % self.counter, warped)
                expand = np.expand_dims(warped, axis=0)
                result = self.objdet.detect(expand)
                for i in range(result['num_detections']):
                    if result['detection_scores'][i] > 0.5:
                        class_ = result['detection_classes'][i]
                        box = result['detection_boxes'][i]
                        score = result['detection_scores'][i]
                        y1, x1 = box[0] * WARPED_HEIGHT, box[1] * WARPED_WIDTH
                        y2, x2 = box[2] * WARPED_HEIGHT, box[3] * WARPED_WIDTH
                        boxes.append((class_, score, x1, y1, x2, y2))
                warped_image = QtGui.QImage(warped.data, WARPED_WIDTH, WARPED_HEIGHT, 3*WARPED_WIDTH, QtGui.QImage.Format_RGB888).rgbSwapped()
                self.imageTo2(warped_image, boxes)
                self.counter += 1
    def __init__(self):
        super(Widget, self).__init__()

        self.scene = QtWidgets.QGraphicsScene()
        self.scene.setSceneRect(0, 0, WIDTH, HEIGHT)
        self.scene.changed.connect(self.changed)

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.classify)
        self.timer.start(250) 

        self.view = QGraphicsView(self.scene)
        self.view.setFixedSize(WIDTH,HEIGHT)
        self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setMouseTracking(True)
        # pixmap = QtGui.QPixmap("my_photo-1-crop.jpg")
        # topbun_webcam = QGraphicsPixmapItem(pixmap)
        # topbun_webcam.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # topbun_webcam.setScale(2)
        # self.scene.addItem(topbun_webcam)

        # lettuce = QGraphicsSvgItem("../../../assets/lettuce.svg")
        # lettuce.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # lettuce.setScale(2)
        # self.scene.addItem(lettuce)

        self.image_widget = QtWidgets.QLabel(self)
        self.image_widget.setFixedSize(WIDTH,HEIGHT)

        self.icons = QtWidgets.QWidget(self)
        self.icons.setFixedSize(128, 6*64)
        self.iconsLayout = QtWidgets.QVBoxLayout()
        self.icons.setLayout(self.iconsLayout)
        
        self.topbun = QSvgWidget("../../../static/assets/topbun.svg")
        self.lettuce = QSvgWidget("../../../static/assets/lettuce.svg")
        self.tomato = QSvgWidget("../../../static/assets/tomato.svg")
        self.cheese = QSvgWidget("../../../static/assets/cheese.svg")
        self.patty = QSvgWidget("../../../static/assets/patty.svg")
        self.bottombun = QSvgWidget("../../../static/assets/bottombun.svg")
        self.banana = QSvgWidget("../../../static/assets/banana.svg")
        self.book = QSvgWidget("../../../static/assets/book.svg")
        self.shoe = QSvgWidget("../../../static/assets/shoe.svg")
        self.iconsLayout.addWidget(self.topbun)
        self.iconsLayout.addWidget(self.lettuce)
        self.iconsLayout.addWidget(self.tomato)
        self.iconsLayout.addWidget(self.cheese)
        self.iconsLayout.addWidget(self.patty)
        self.iconsLayout.addWidget(self.bottombun)
        self.iconsLayout.addWidget(self.banana)
        self.iconsLayout.addWidget(self.book)
        self.iconsLayout.addWidget(self.shoe)

        self.buttons = QtWidgets.QWidget(self)
        self.buttonsLayout = QtWidgets.QHBoxLayout()
        self.buttons.setLayout(self.buttonsLayout)
        self.buttonA = QtWidgets.QPushButton("Classify")
        self.buttonA.clicked.connect(self.buttonAClicked)
        self.buttonsLayout.addWidget(self.buttonA)

        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.icons)
        # self.layout.addWidget(self.buttons)
        self.layout.addWidget(self.view)
        self.layout.addWidget(self.image_widget)
        self.setLayout(self.layout)

        self.objdet = ObjectDetector()
def main():
    ''' input '''
    # choose the input stream
    #captureSource = 0  # webcam
    #captureSource = 'video/video_116.mp4'
    #captureSource = 'video/video_205.mp4'
    captureSource = 'video/video_white.mp4'
    cap = cv2.VideoCapture(captureSource)
    ''' some background subtractor with default params '''
    # bgSubtractor = cv2.bgsegm.createBackgroundSubtractorMOG(history=200, nmixtures=5, backgroundRatio=0.7, noiseSigma=0)
    # bgSubtractor = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=16,	detectShadows=True)
    # bgSubtractor = cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=120, decisionThreshold=0.8)
    # bgSubtractor = cv2.createBackgroundSubtractorKNN(history=500, dist2Threshold=400.0, detectShadows=True)
    # bgSubtractor = CompositeBackgroundSubtractor(bgSubtractor1, bgSubtractor2, ...)
    ''' list of background subtractors '''
    backgroundSubtractors = [
        cv2.createBackgroundSubtractorMOG2(
            history=200, varThreshold=25,
            detectShadows=True),  # good for video/video_116.mp4
        cv2.createBackgroundSubtractorKNN(
            history=500, dist2Threshold=500.0,
            detectShadows=True),  # good for video/video_205.mp4
        CompositeBackgroundSubtractor(
            cv2.bgsegm.createBackgroundSubtractorMOG(history=600,
                                                     nmixtures=3,
                                                     backgroundRatio=0.2,
                                                     noiseSigma=2.3),
            cv2.createBackgroundSubtractorMOG2(
                history=200, varThreshold=14,
                detectShadows=True))  # good for video/video_white.mp4
    ]
    ''' pipeline steps applied after background subtraction '''
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
    pipeline = ProcessPipeline()
    pipeline \
        .add(cv2.medianBlur, ksize=5) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(fillHoles) \
        .add(cv2.erode, kernel=kernel) \
        .add(cv2.erode, kernel=kernel)
    ''' detectors creation and beginning of video analysis '''
    detectors = [
        ObjectDetector(bgSub, pipeline) for bgSub in backgroundSubtractors
    ]
    show = True
    oneSkipOnly = False
    while True:
        ''' handle input: esc to quit; space to pause/start; "n" to go one frame at a time '''
        k = cv2.waitKey(30) & 0xff
        if k == 27:
            break
        elif k == ord(' ') or oneSkipOnly:
            show = not show
            oneSkipOnly = False
        elif k == ord('n'):
            show = True
            oneSkipOnly = True
        if not show:
            if oneSkipOnly:
                show = False
            continue
        ''' reading next frame '''
        ret, frame = cap.read()
        if not ret:
            break
        frame = imutils.resize(frame, width=512)
        frame = cv2.flip(frame, 1)
        ''' detection '''
        color = (255, 0, 0)  # blue
        outputFrames = [
            draw_bboxes(frame, detector.detect(frame), color)
            for detector in detectors
        ]
        ''' show frames '''
        imgOutput = mergeImgs(
            [[*detector.pipeline.intermediateOutputsBGR, outputFrame]
             for detector, outputFrame in zip(detectors, outputFrames)])
        imgOutput = cv2.resize(imgOutput, (1920, 1000))
        cv2.imshow('frame', imgOutput)

    cap.release()
    cv2.destroyAllWindows()
Exemple #22
0
def main():
    """
    メイン関数
    実行時の引数としてモデルファイルのパスを受け取る
    """
    camera = None
    client = None

    try:
        parser = argparse.ArgumentParser(
            formatter_class=argparse.ArgumentDefaultsHelpFormatter)
        parser.add_argument('--model',
                            help='File path of .tflite file.',
                            required=True)

        parser.add_argument('--label',
                            help='File path of label file.',
                            required=True)

        args = parser.parse_args()

        # AWS IoT Coreを設定する
        cfg = configparser.ConfigParser()
        cfg.read('config.ini', encoding='utf-8')
        port = cfg['DEFAULT'].getint('PORT')
        cert = cfg['DEFAULT'].get('CERT')
        rootCA = cfg['DEFAULT'].get('ROOT_CA')
        key = cfg['DEFAULT'].get('KEY')
        endpoint = cfg['DEFAULT'].get('ENDPOINT')
        topic = cfg['DEFAULT'].get('TOPIC')

        client = mqtt.Client(protocol=mqtt.MQTTv311)
        client.tls_set(ca_certs=rootCA,
                       certfile=cert,
                       keyfile=key,
                       cert_reqs=ssl.CERT_REQUIRED,
                       tls_version=ssl.PROTOCOL_TLSv1_2,
                       ciphers=None)
        client.connect(endpoint, port=port, keepalive=60)
        client.loop_start()

        # カメラを接続する
        camera = cv2.VideoCapture(0)
        camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
        camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

        tpe = ThreadPoolExecutor()

        detector = ObjectDetector(args.model, args.label)

        annotations = None
        number = 1  # 保存時の名前用
        pre = time()
        while True:
            # 撮影する
            _, image_array = camera.read()

            # 物体検出を行う (スレッドを立てる)
            now = time()
            if now - pre > 2:
                annotations = tpe.submit(detect, image_array, detector, number)
                pre = now
                number += 1

                with open('/tmp/persons.json') as f:
                    load = json.load(f)
                    count = load['count']
                    message = {
                        'ID':
                        'SRC',
                        'people_num':
                        count,
                        'timestamp':
                        datetime.datetime.fromtimestamp(now).strftime(
                            '%Y-%m-%d %H:%M:%S')
                    }

                    client.publish(topic, json.dumps(message))

            # プレビューを表示する
            if annotations != None:
                for annotation in annotations.result():
                    xmin, ymin, xmax, ymax = annotation[0]
                    cv2.rectangle(image_array, (xmin, ymin), (xmax, ymax),
                                  (0, 0, 255))
                    cv2.putText(image_array,
                                f'{annotation[1]}: {annotation[2]}',
                                (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 1,
                                (0, 0, 0))

            cv2.imshow('preview', image_array)

            # ループ内にwaitKeyは必要
            if cv2.waitKey(1) == ord('q'):
                break
    except Exception as e:
        print(e)
    finally:
        cv2.destroyAllWindows()

        if camera != None:
            camera.release()

        if client != None:
            client.disconnect()
Exemple #23
0
                                          interesting_classes)
            mjpg_frame = object_detector.draw_frame(frame, boxes, classes,
                                                    scores)
            web_server.frame_available(mjpg_frame)
            #new_frame_queue.put(frame.copy())
        except Exception:
            logging.exception("Unknown failure processing frame.")

    # Clean up
    video.release()
    #pool.close()
    #pool.join()


if __name__ == '__main__':
    object_detector = ObjectDetector(PATH_TO_CKPT, PATH_TO_LABELS, USE_CORAL,
                                     USE_TPU, 1296, 730, MIN_CONF_THRESHOLD)
    web_server = WebServer(WEB_PORT)

    #manager = Manager()
    #new_frame_queue = manager.Queue()
    motion_detector = MotionDetector(0, 1296, 0, 730, 1296, 730)
    web_server.start()

    while (True):
        try:
            start_video()
        except Exception:
            logging.exception("Failure processing video.")
        time.sleep(120)

    #pool = Pool(1)
Exemple #24
0
def main():
    ''' input '''
    # choose the input stream
    #captureSource = "video/video_116.mp4"
    #captureSource = "video/video_205.mp4"
    captureSource = "video/video_white.mp4"
    #captureSource = 0  # webcam
    cap = cv2.VideoCapture(captureSource)
    ''' trackers typology '''
    # choose the tracker
    trackerName = "CSRT"  # "MOSSE" | "KCF" | "CSRT"
    tm = TrackerManager(trackerName, maxFailures=20)
    ''' parameters '''
    # try to change these parameters
    period = 1  # length of the period: only on the first frame of the period we detect objects (instead, we track them in every frame)
    maintainDetected = True  # True if in transition frames, in case of overlapping bboxes,  we want to keep those of the detector (False if we want to keep those of the tracker)
    frameWidth = 512
    ''' some background subtractor with default params '''
    # bgSubtractor = cv2.bgsegm.createBackgroundSubtractorMOG(history=200, nmixtures=5, backgroundRatio=0.7, noiseSigma=0)
    # bgSubtractor = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=16,	detectShadows=True)
    # bgSubtractor = cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=120, decisionThreshold=0.8)
    # bgSubtractor = cv2.createBackgroundSubtractorKNN(history=500, dist2Threshold=400.0, detectShadows=True)
    # bgSubtractor = CompositeBackgroundSubtractor(bgSubtractor1, bgSubtractor2, ...)
    ''' background subtractor '''
    # define a background subtractor to be used for object detection
    #bgSubtractor = cv2.createBackgroundSubtractorMOG2(history=200, varThreshold=25, detectShadows=True)     # good for video/video_116.mp4
    bgSubtractor = cv2.createBackgroundSubtractorKNN(
        history=500, dist2Threshold=500.0,
        detectShadows=True)  # good for video/video_205.mp4
    # bgSubtractor = CompositeBackgroundSubtractor(
    #     cv2.bgsegm.createBackgroundSubtractorMOG(history=600, nmixtures=3, backgroundRatio=0.2, noiseSigma=2.3),
    #     cv2.createBackgroundSubtractorMOG2(history=200, varThreshold=14, detectShadows=True)) # good for video/video_white.mp4
    ''' pipeline '''
    # define the pipeline of functions to be executed on the b/w image, after the background subtraction and before getting bounding rects of contours
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
    pipeline = ProcessPipeline()
    pipeline \
        .add(cv2.medianBlur, ksize=5) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(cv2.dilate, kernel=kernel) \
        .add(fillHoles) \
        .add(cv2.erode, kernel=kernel) \
        .add(cv2.erode, kernel=kernel) \
    ''' create object detector and face detector '''
    od = ObjectDetector(bgSubtractor, pipeline)
    fd = FaceDetector()
    ''' auto-definition of output folder '''
    outputDir = "output"
    if captureSource == 0:
        outputDir = os.path.join(outputDir, "webcam")
    else:
        outputDir = os.path.join(outputDir,
                                 captureSource[:captureSource.find(".")])
    outputDir = os.path.join(outputDir, trackerName)
    print("Tracking video '%s' with tracker %s" % (captureSource, trackerName))
    ''' cycle begins '''
    frameNumber = 0
    frames = 0
    seconds = 0
    eta = 0.05
    totalTime = 0
    show = True
    oneSkipOnly = False
    while True:
        ''' handle input: esc to quit; space to pause/start; "n" to go one frame at a time '''
        k = cv2.waitKey(30) & 0xff
        if k == 27:
            break
        elif k == ord(' ') or oneSkipOnly:
            show = not show
            oneSkipOnly = False
        elif k == ord('n'):
            show = True
            oneSkipOnly = True
        if not show:
            if oneSkipOnly:
                show = False
            continue

        start = timer()
        ''' reading next frame '''
        ret, frameOrig = cap.read()
        if not ret:
            break
        frameOrig = cv2.flip(frameOrig, 1)
        frame = imutils.resize(frameOrig, width=frameWidth)
        scale = frameOrig.shape[1] / frameWidth

        detectedObjects = []
        if frameNumber % period == 0:
            ''' detection by background subtraction '''
            detectedObjects = od.detect(frame)
            ''' objects tracking, faces detection'''
        ''' tracking '''
        success, objects = tm.update(frame,
                                     detectedObjects,
                                     maintainDetected=maintainDetected)
        objIDs = tm.getIDs()
        tm.removeDeadTrackers()

        failed_objects = [obj for suc, obj in zip(success, objects) if not suc]
        failed_objIDs = [
            objID for suc, objID in zip(success, objIDs) if not suc
        ]
        succ_objIDs = [objID for suc, objID in zip(success, objIDs) if suc]
        objects = [obj for suc, obj in zip(success, objects) if suc]
        ''' detection of faces '''
        faces_bboxes = fd.detectFaces(frameOrig, objects, objIDs, scale=scale)
        ''' images merging and show '''
        frameOrig = draw_bboxes(frameOrig,
                                objects, (255, 0, 0),
                                succ_objIDs,
                                scale=scale)
        frameOrig = draw_bboxes(frameOrig,
                                failed_objects, (0, 0, 255),
                                failed_objIDs,
                                scale=scale)
        frameOrig = draw_bboxes(frameOrig, faces_bboxes, (0, 255, 0))
        frameOrig = cv2.resize(frameOrig, (640, 640))
        cv2.imshow('frame', frameOrig)
        ''' some stats '''
        frameNumber += 1
        end = timer()
        frames = eta + (1 - eta) * frames
        seconds = eta * (end - start) + (1 - eta) * seconds
        print(
            "\rFrame: %04d    FPS: %03d   Active trackers: %02d    Failed trackers: %02d           "
            % (frameNumber, int(
                frames // seconds), len(objects), len(failed_objects)),
            end="")
        totalTime += end - start

    cap.release()
    cv2.destroyAllWindows()
    ''' save on disk '''
    fd.dump(outputDir)

    avgFPS = str(round(frameNumber / totalTime, 2))
    print("\rAverage FPS: " + avgFPS)
    with open(os.path.join(outputDir, "info.txt"), "w") as file:
        bgSubClsName = str(bgSubtractor.__class__)
        bgSubClsName = bgSubClsName[bgSubClsName.index("'") +
                                    1:bgSubClsName.rindex("'")]
        file.write("tracker: " + trackerName + "\n")
        file.write("background subtractor: " + bgSubClsName + "\n")
        file.write("average FPS: " + avgFPS + "\n")
    sp.set_transform(t)
    car.apply_control(carla.VehicleControl(throttle=0, steer=0))

    #Set controll parameters
    K = np.array([.01, 0.15]).reshape((1, 2))
    L = 3.5

    #Wait for car to be ready
    time.sleep(1)

    #Import and create instances of modules
    from lidar import Lidar
    lidar = Lidar(world, car)

    from object_detector import ObjectDetector
    object_detector = ObjectDetector(lidar, 1)

    from route_planner import RoutePlanner
    route_planner = RoutePlanner([r[0] for r in route], .5)

    lidar.start()

    from controller import Controller
    ctrl = Controller(K, L, world.debug)

    previous_time = -1
    while True:
        tck = world.wait_for_tick(1)
        t = car.get_transform()
        v = car.get_velocity()
        v = np.sqrt(v.x**2 + v.y**2 + v.z**2)
Exemple #26
0
from threading import Thread
from video import VideoObject  #, VideoWriter
#import requests
from PIL import Image
from io import BytesIO
import base64
import json, os
import glob
import numpy as np
import settings
import cv2
#from bbox_visualiser import draw_bboxes_on_image
#import concurrent.futures
from object_detector import ObjectDetector

_OBD = ObjectDetector()


def send_request_object(frame):
    frame = np.asarray(frame)
    #buff = BytesIO()
    #Image.fromarray(frame).save(buff, format='png')
    #files = {'image': buff.getvalue()}

    #r=requests.post(settings.OBJECT_URL,files=files)
    D = _OBD.inference(frame)
    print("[OBJECT] Done")
    return D


def get_req_handled(method, frame, cache_file):
Exemple #27
0
    def __init__(self):
        super(Widget, self).__init__()

        self.scene = QtWidgets.QGraphicsScene()
        self.scene.setSceneRect(0, 0, WIDTH, HEIGHT)
        self.scene.changed.connect(self.changed)

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.classify)
        self.timer.start(250)

        self.view = QGraphicsView(self.scene)
        self.view.setFixedSize(WIDTH, HEIGHT)
        self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setMouseTracking(True)
        # pixmap = QtGui.QPixmap("my_photo-1-crop.jpg")
        # topbun_webcam = QGraphicsPixmapItem(pixmap)
        # topbun_webcam.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # topbun_webcam.setScale(2)
        # self.scene.addItem(topbun_webcam)

        # lettuce = QGraphicsSvgItem("../../../assets/lettuce.svg")
        # lettuce.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # lettuce.setScale(2)
        # self.scene.addItem(lettuce)

        self.image_widget = QtWidgets.QLabel(self)
        self.image_widget.setFixedSize(WIDTH, HEIGHT)

        self.icons = QtWidgets.QWidget(self)
        self.icons.setFixedSize(128, 6 * 64)
        self.iconsLayout = QtWidgets.QVBoxLayout()
        self.icons.setLayout(self.iconsLayout)

        self.topbun = QSvgWidget("../../../static/assets/topbun.svg")
        self.lettuce = QSvgWidget("../../../static/assets/lettuce.svg")
        self.tomato = QSvgWidget("../../../static/assets/tomato.svg")
        self.cheese = QSvgWidget("../../../static/assets/cheese.svg")
        self.patty = QSvgWidget("../../../static/assets/patty.svg")
        self.bottombun = QSvgWidget("../../../static/assets/bottombun.svg")
        self.banana = QSvgWidget("../../../static/assets/banana.svg")
        self.book = QSvgWidget("../../../static/assets/book.svg")
        self.shoe = QSvgWidget("../../../static/assets/shoe.svg")
        self.iconsLayout.addWidget(self.topbun)
        self.iconsLayout.addWidget(self.lettuce)
        self.iconsLayout.addWidget(self.tomato)
        self.iconsLayout.addWidget(self.cheese)
        self.iconsLayout.addWidget(self.patty)
        self.iconsLayout.addWidget(self.bottombun)
        self.iconsLayout.addWidget(self.banana)
        self.iconsLayout.addWidget(self.book)
        self.iconsLayout.addWidget(self.shoe)

        self.buttons = QtWidgets.QWidget(self)
        self.buttonsLayout = QtWidgets.QHBoxLayout()
        self.buttons.setLayout(self.buttonsLayout)
        self.buttonA = QtWidgets.QPushButton("Classify")
        self.buttonA.clicked.connect(self.buttonAClicked)
        self.buttonsLayout.addWidget(self.buttonA)

        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.icons)
        # self.layout.addWidget(self.buttons)
        self.layout.addWidget(self.view)
        self.layout.addWidget(self.image_widget)
        self.setLayout(self.layout)

        self.objdet = ObjectDetector()
Exemple #28
0
parser = argparse.ArgumentParser()
parser.add_argument("--movie", type=str, default="movie.mp4", help="Movie file to run prediction on")
parser.add_argument("--write_output", type=bool, default=False, help="Whether to write output")
parser.add_argument("--output_dir", type=str, default="movie", help="Directory to write output to")
args = parser.parse_args()

from layers import layers

if not os.path.exists(args.movie):
  print("Movie file %s missing" % args.movie)
  sys.exit(1)

cam = cv2.VideoCapture(args.movie)
width = int(cam.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
objdet = ObjectDetector()


counter = 0

ret, img = cam.read()
while ret == True:
    img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    h, w, _ = img.shape
    expand = np.expand_dims(img, axis=0)
    result = objdet.detect(expand)
    boxes = []
    for i in range(result['num_detections']):
        if result['detection_scores'][i] > 0.75:
            class_ = result['detection_classes'][i]
Exemple #29
0
                    help="Whether the model was optimized with TRT")
args = parser.parse_args()

if args.movie is not "" and not os.path.exists(args.movie):
    print("Movie file %s missing" % args.movie)
    sys.exit(1)

if args.movie is not "":
    cam = cv2.VideoCapture(args.movie)
else:
    cam = cv2.VideoCapture(0)
    args.movie = "movie.mkv"

width = int(cam.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
objdet = TFObjectDetector(args.path_to_model, args.path_to_labels, args.trt)

model_name = os.path.splitext(os.path.basename(args.path_to_model))[0]
movie_name = os.path.splitext(os.path.basename(args.movie))[0]

if args.write_movie:
    out_path = os.path.join(os.path.dirname(args.movie),
                            "_".join([movie_name, model_name, "boxes"]))
    movie_path = "%s.mkv" % out_path
    print("Writing movie to", movie_path)
    writer = cv2.VideoWriter(movie_path, cv2.VideoWriter_fourcc(*"MJPG"),
                             int(cam.get(cv2.CAP_PROP_FPS)), (width, height))

    # Quit if there was a problem
    if not writer.isOpened():
        print("Unable to open video!")
Exemple #30
0
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    # load text line recongize model
    config_file = sys.argv[1]
    rpn_model_path = sys.argv[2]
    rcnn_model_path = sys.argv[3]
    classes = sys.argv[4].split(',')
    net = sys.argv[5]
    #classes = ['background', 'text', 'seal', 'photo']

    detector = ObjectDetector(rpn_model_path,
                              rcnn_model_path,
                              config_file,
                              classes,
                              conf_thresh=0.01,
                              net=net)

    while True:
        path = raw_input("Image path (press 0 to exit):")
        if path == '0':
            break

        if not os.path.isfile(path):
            print("Image not exists!")
            continue

        img = cv2.imread(path)

        # detect text regions
class Widget(QtWidgets.QWidget):
    def __init__(self):
        super(Widget, self).__init__()

        self.scene = QtWidgets.QGraphicsScene()
        self.scene.setSceneRect(0, 0, WIDTH, HEIGHT)
        self.scene.changed.connect(self.changed)

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.classify)
        self.timer.start(250) 

        self.view = QGraphicsView(self.scene)
        self.view.setFixedSize(WIDTH,HEIGHT)
        self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.view.setMouseTracking(True)
        # pixmap = QtGui.QPixmap("my_photo-1-crop.jpg")
        # topbun_webcam = QGraphicsPixmapItem(pixmap)
        # topbun_webcam.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # topbun_webcam.setScale(2)
        # self.scene.addItem(topbun_webcam)

        # lettuce = QGraphicsSvgItem("../../../assets/lettuce.svg")
        # lettuce.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
        # lettuce.setScale(2)
        # self.scene.addItem(lettuce)

        self.image_widget = QtWidgets.QLabel(self)
        self.image_widget.setFixedSize(WIDTH,HEIGHT)

        self.icons = QtWidgets.QWidget(self)
        self.icons.setFixedSize(128, 6*64)
        self.iconsLayout = QtWidgets.QVBoxLayout()
        self.icons.setLayout(self.iconsLayout)
        
        self.topbun = QSvgWidget("../../../static/assets/topbun.svg")
        self.lettuce = QSvgWidget("../../../static/assets/lettuce.svg")
        self.tomato = QSvgWidget("../../../static/assets/tomato.svg")
        self.cheese = QSvgWidget("../../../static/assets/cheese.svg")
        self.patty = QSvgWidget("../../../static/assets/patty.svg")
        self.bottombun = QSvgWidget("../../../static/assets/bottombun.svg")
        self.banana = QSvgWidget("../../../static/assets/banana.svg")
        self.book = QSvgWidget("../../../static/assets/book.svg")
        self.shoe = QSvgWidget("../../../static/assets/shoe.svg")
        self.iconsLayout.addWidget(self.topbun)
        self.iconsLayout.addWidget(self.lettuce)
        self.iconsLayout.addWidget(self.tomato)
        self.iconsLayout.addWidget(self.cheese)
        self.iconsLayout.addWidget(self.patty)
        self.iconsLayout.addWidget(self.bottombun)
        self.iconsLayout.addWidget(self.banana)
        self.iconsLayout.addWidget(self.book)
        self.iconsLayout.addWidget(self.shoe)

        self.buttons = QtWidgets.QWidget(self)
        self.buttonsLayout = QtWidgets.QHBoxLayout()
        self.buttons.setLayout(self.buttonsLayout)
        self.buttonA = QtWidgets.QPushButton("Classify")
        self.buttonA.clicked.connect(self.buttonAClicked)
        self.buttonsLayout.addWidget(self.buttonA)

        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.icons)
        # self.layout.addWidget(self.buttons)
        self.layout.addWidget(self.view)
        self.layout.addWidget(self.image_widget)
        self.setLayout(self.layout)

        self.objdet = ObjectDetector()
        
    def topbun_clicked(self, *args):
        print(args)
        
    def buttonAClicked(self, *args):
        self.classify()
        
    def changed(self):
        self.classify()
        
    def classify(self):
        image = QtGui.QImage(QtCore.QSize(WIDTH, HEIGHT), QtGui.QImage.Format_RGB888)
        image.fill(QtCore.Qt.white)
        painter = QtGui.QPainter(image)
        self.scene.render(painter)
        painter.end()
        bits = image.constBits().asstring(HEIGHT*WIDTH*3)
        img = np.fromstring(bits, dtype=np.uint8).reshape(HEIGHT, WIDTH, 3)
        # image = canny(img)

        expand = np.expand_dims(img, axis=0)
        result = self.objdet.detect(expand)
        boxes = []
        for i in range(result['num_detections']):
            if result['detection_scores'][i] > 0.4:
                class_ = result['detection_classes'][i]
                box = result['detection_boxes'][i]
                score = result['detection_scores'][i]
                y1, x1 = box[0] * HEIGHT, box[1] * WIDTH
                y2, x2 = box[2] * HEIGHT, box[3] * WIDTH
                boxes.append((class_, score, x1, y1, x2, y2))
        
        pixmap = QtGui.QPixmap.fromImage(image)
        p = QtGui.QPainter()
        p.begin(pixmap)
        for box in boxes:
            p.setPen(QtCore.Qt.red)
            class_, score, x1, y1, x2, y2 = box
            w = x2-x1
            h = y2-y1
            p.drawRect(x1, y1, w, h)
            p.drawText(x1, y1, "%s: %5.2f" % (labels[class_], score))
        p.end ()
        self.image_widget.setPixmap(pixmap)
import pickle
from moviepy.editor import VideoFileClip

from object_detector import ObjectDetector
import config

if __name__ == '__main__':
    print('Processing video frames')

    with open('./trained_model/model.pkl', 'rb') as f:
        svc = pickle.load(f)
    with open('./trained_model/xscaler.pkl', 'rb') as f:
        X_scaler = pickle.load(f)

    detector = ObjectDetector(config.feature_config,
                              config.sliding_windows_config, svc, X_scaler)

    video_output = 'output_images/project_video_output.mp4'
    clip1 = VideoFileClip('project_video.mp4')
    #clip1 = VideoFileClip('test_video.mp4')
    clip1_output = clip1.fl_image(
        detector.process)  #NOTE: this function expects color images!!
    clip1_output.write_videofile(video_output, audio=False)

    print('Video processing completed')
Exemple #33
0
from object_detector import ObjectDetector

detector = ObjectDetector()
image_path = "/home/mathieu/Bureau/All Vinelab projects/Standalone experiments/OpenImages_object_detection/test_images/" \
             "shutterstock_159281780.jpg"
print(detector.get_labels(image_path))