Я использую последнюю версию 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.
Вопрос:
Есть идеи, почему это происходит? и как мы можем использовать более одной камеры для одного и того же графического процессора?
Спасибо