использование 2 видеопотоков с аппаратным ускорением графического процессора на openalpr - PullRequest
0 голосов
/ 05 июня 2019

Я использую последнюю версию openALPR SDK с привязкой Python3.

Мы используем функцию ускорения GPU openALPR на ноутбуке с Windows, у которого есть GTX1050. При использовании одного потока камеры (с использованием объекта alprstream) все работает хорошо, но при использовании 2 камер с включенной функцией ускорения графического процессора я начал получать нарушения доступа к памяти для чтения / записи, случайные ошибки, такие как «высота изображения неверно "и некоторые другие исключения, связанные с GPU Сбой происходит при выполнении следующего кода (выполняемого обоими потоками):

def start_feed(self):

    while True:

        while self.alpr_stream.video_file_active() and self.alpr_stream.get_queue_size() > 0:

            self.alpr_stream.process_batch(self.alpr)
            active_groups = len(self.alpr_stream.peek_active_groups())

            if active_groups > 0:
                groups = self.alpr_stream.pop_completed_groups()

                for group in groups:
                    print("=" * 50)
                    print(json.dumps(group, indent=4))
                    print("Group ({}-{}): {} ({:.2f}% confident)".format(
                        group['epoch_start'], group['epoch_end'],
                        group['best_plate']['plate'], group['best_plate']['confidence']))
                    print("=" * 50)

                    group['best_plate']['camera_id'] = group['camera_id']
                    self.signal.emit(group['best_plate'])

В частности, в этой строке происходит сбой:

self.alpr_stream.process_batch(self.alpr)

Каждый видеопоток имеет свои собственные объекты thread, alpr и alprstream. Однако, похоже, что поток обработки / пакет GPU используется совместно, так как приложение падает только тогда, когда оба потока камеры используют функцию process_batch ().

Я пытался одновременно запретить доступ к функции с помощью sing mutex.acquire () и mutex.release (), но это не сработало.

Вот некоторые исключения, которые я получаю:

''» Ошибка OSE: исключение: запись нарушения прав доступа 0x00000000E50A1CA0 '' '

''» OSError: исключение: чтение прав доступа 0x0000000000000000 '' '

Вот еще несколько деталей о том, что мы используем:

openALPR SDK версия: 2.6.103

Python версия: 3.6.8

gpu_batch = 10

alprstream frame_queue_size = 10 (для каждого потока)

Единственный способ получить 2 видеопотока для работы теперь - это назначить поток для GPU, а другой - для CPU, но поток CPU намного медленнее, чем для GPU.

Вопрос: Есть идеи, почему это происходит? и как мы можем использовать более одной камеры для одного и того же графического процессора?

Спасибо

...