У меня есть приложение реального времени, встроенное в c # .NET и sql как DB.
Приложение состоит из трех модулей:
- Получение изображений под автомобилем (UVSS) с использованиемкамера,
- Обнаружение номера автомобильного номера (ALPR)
- Запись видео с информацией о драйвере (DIC).
Сначала мы получаем триггер от ADM 6060, который затемактивирует камеры (через код), а затем эти три модуля происходят одновременно с использованием потоков (и затем сохраняются в БД).Наконец, мы отображаем их в WinForm.
В настоящее время я использую два потока:
- Поток 1 для отслеживания значения триггера, полученного ADM
- Поток 2 для захвата в реальном времениИзображения под автомобилем
Далее, получив соответствующее значение триггера от ADM6060, я создаю две задачи - для обнаружения ALPR и видео DIC.
Я не могу опубликовать весь код из-за карты компанииполитика, но вот фрагмент:
У меня есть два потока в Form1:
ThreadStart tsmain = new ThreadStart(this.ServiceCaptureImage);
thread = new Thread(tsmain);
ThreadStart tsmain1 = new ThreadStart(this.Draw_Bitmap);
continuous = new Thread(tsmain1);
thread.start () и непрерывный.start () выполняются в form_Load.
private void ServiceCaptureImage()
{
try{
while(true)
{
if(bdata[0]==false)
{
var task1 = Task.Factory.StartNew(() => ALPRdetect());
var task2 = Task.Factory.StartNew(() => DICcapture());
Task.WhenAll(task1, task2);
}
}
}
catch (Exception ex){
MessageBox.show(ex.message)
}
}
Я вручную посчитал количество автомобилей, которые были обнаружены системой.В общей сложности 70 пропущенных автомобилей: 53 были полностью обнаружены (ALPR, под транспортным средством и DIC), 4 автомобиля остались незамеченными, 9 автомобилей ALPR пропали без вести, а в оставшихся под автомобилем пропали без вести.
Эффективностьпока достигнут 84%, в некоторых случаях приложение выполняет только ALPR, но не UVSS или наоборот.
В чем может быть причина?Кроме того, я должен использовать ThreadPool в этом случае?