Уже в продаже: первая в своем роде книга «BEAM-робототехника. От азов до создания практических устрйств». Книга для кружков робототехники и самостоятельного обучения на дому. Книга доступна по цене 699 руб Подробнее о книге
Программу нашел. ЗАпустил, но тестирование не понравилось, с вебкамеры она как то работает не правильно. Хотя расширение не изменял.
Код программы:
Code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.VideoSurveillance; using Emgu.Util;
namespace MotionDetection { public partial class Form1 : Form { private Capture _capture; private MotionHistory _motionHistory; private IBGFGDetector<Bgr> _forgroundDetector;
public Form1() { InitializeComponent();
//try to create the capture if (_capture == null) { try { _capture = new Capture(); } catch (NullReferenceException excpt) { //show errors if there is any MessageBox.Show(excpt.Message); } }
if (_capture != null) //if camera capture has been successfully created { _motionHistory = new MotionHistory( 1.0, //in second, the duration of motion history you wants to keep 0.05, //in second, parameter for cvCalcMotionGradient 0.5); //in second, parameter for cvCalcMotionGradient
Application.Idle += ProcessFrame; } }
private void ProcessFrame(object sender, EventArgs e) { using (Image<Bgr, Byte> image = _capture.QueryFrame()) using (MemStorage storage = new MemStorage()) //create storage for motion components { if (_forgroundDetector == null) { //_forgroundDetector = new BGCodeBookModel<Bgr>(); //_forgroundDetector = new FGDetector<Bgr>(Emgu.CV.CvEnum.FORGROUND_DETECTOR_TYPE.FGD); _forgroundDetector = new BGStatModel<Bgr>(image, Emgu.CV.CvEnum.BG_STAT_TYPE.FGD_STAT_MODEL); }
_forgroundDetector.Update(image);
capturedImageBox.Image = image;
//update the motion history _motionHistory.Update(_forgroundDetector.ForgroundMask);
#region get a copy of the motion mask and enhance its color double[] minValues, maxValues; Point[] minLoc, maxLoc; _motionHistory.Mask.MinMax(out minValues, out maxValues, out minLoc, out maxLoc); Image<Gray, Byte> motionMask = _motionHistory.Mask.Mul(255.0 / maxValues[0]); #endregion
//create the motion image Image<Bgr, Byte> motionImage = new Image<Bgr, byte>(motionMask.Size); //display the motion pixels in blue (first channel) motionImage[0] = motionMask;
//Threshold to define a motion area, reduce the value to detect smaller motion double minArea = 100;
storage.Clear(); //clear the storage Seq<MCvConnectedComp> motionComponents = _motionHistory.GetMotionComponents(storage);
//iterate through each of the motion component foreach (MCvConnectedComp comp in motionComponents) { //reject the components that have small area; if (comp.area < minArea) continue;
// find the angle and motion pixel count of the specific area double angle, motionPixelCount; _motionHistory.MotionInfo(comp.rect, out angle, out motionPixelCount);
//reject the area that contains too few motion if (motionPixelCount < comp.area * 0.05) continue;
//Draw each individual motion in red DrawMotion(motionImage, comp.rect, angle, new Bgr(Color.Red)); }
// find and draw the overall motion angle double overallAngle, overallMotionPixelCount; _motionHistory.MotionInfo(motionMask.ROI, out overallAngle, out overallMotionPixelCount); DrawMotion(motionImage, motionMask.ROI, overallAngle, new Bgr(Color.Green));
//Display the amount of motions found on the current image UpdateText(String.Format("Total Motions found: {0}; Motion Pixel count: {1}", motionComponents.Total, overallMotionPixelCount));
//Display the image of the motion motionImageBox.Image = motionImage; } }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) {
if (disposing && (components != null)) { components.Dispose(); }
Алгоритм немного другой. Судя по всему отличие только в том, что прорисовка окружности, показывающей направление движения в кадре происходит только тогда, когда motionComponents.Total больше чем X. Тот самый пример на C: http://rghost.ru/20603821 Заработает ли он хз, все библиотеки в папке в .exe, с ними должен запуститься.
Открыт набор на БЕСПЛАТНОЕ ОБУЧЕНИЕ в кружке BEAM-робототехника на 2022 - 2023 год!
Для учащихся г. Санкт-Петербург: Уважаемые учащиеся и родители! Мы сообщаем Вам о начале открытой регистрации в кружок "BEAM-робототехника (радиоэлектронные системы управления)" Центра робототехники Президентского физико-математического лицея №239 на новый 2022-2023 учебный год!
Записаться в нашу группу может совершенно любой учащийся города Санкт-Петербург в возрасте от 10 - 18 лет. Обучение в кружке полностью бесплатное. В рамках обучения в кружке ребята получат необходимые теоретические и практические знания по электротехнике, схемотехнике, созданию электронных схем и своих собственных печатных плат для роботов. Научатся работать с ручными инструментами, 3D-принтерами для изготовления деталей робота, лазерным станком для изготовления корпусов робота. Количество свободных мест - ограниченное, успейте подать Вашу заявку первыми! Перешлите этот пост своим друзьям и знакомым, кого может заинтересовать BEAM-робототехника
***
Давайте поближе разберемся, что же мы изучаем на кружке BEAM-робототехники. И так, приступим:
1. Вы начинающий робототехник Смотрите видео BEAM-робототехника
Вы новенький в робототехнике. Вам интересно это современное направление, вы очень хотите научиться создавать крутых роботов самостоятельно, но вы пока не знаете как именно это делать? Не беда! Мы с удовольствием обучаем начинающих робототехнике всем необходимым навыкам настоящего робототехника, с которыми в последствии вы с легкостью будете собирать крутых роботов , участвовать в соревнованиях , выставках или просто делать крутые поделки для себя. Для этого мы открыли специальное направление: Радиоэлектроника (#BEAM-роботы). В ходе обучения в этом кружке вы научитесь понимать и разбираться в электронике - знать что такое резистор, транзистор, светодиод, мотор и как это работает. Закон #Ома - куда же без него :) Вы изучите схемотехнику - будете разбираться и уметь читать схемы - без этого робота не сделать. Вы научитесь делать свои собственные платы роботов (куда паяют детальки по крутому - без проводков!) Вы поработаете с механикой - нужно знать как и каким образом использовать моторчики, редукторы и различные хитрости их применения. Конечно же научитесь правильно и профессионально паять - это очень важно, иначе ваши роботы постоянно будут разваливаться. Также в рамках этого кружка вы сможете собрать несколько роботов для участия в соревнованиях, и выставках, так как мы считаем, что ваш творческий потенциал очень важен для робототехники в целом.
***
В этом году мы соберем с вами шагающих роботов, будем участвовать в соревнованиях "шагающих роботов", роботов для "следование по линии", роботов для участия в "сумо", а также в творческих выставках.
*** 2. Как подать заявку в кружок?
Прошлый год показал, что желающих заниматься аналоговой робототехникой, создавать beam'ов и участвоват ьс ними в соревнованиях - достаточно много. Поэтому на новый учебный год мы решили увеличить количество мест, создав две группы.
Первая группа по BEAM-робототехнике #261РЭ Радиоэлектроника (BEAM-роботы). Эта группа рассчитана на ребят, кто только начинает изучать робототехнику и кому необходимо получить базовые знания по электротехнике, схемотехнике, и самим бим-роботам. Для того, чтобы записаться в группу 261РЭ , вам нужно пройти по этой ссылке https://robofinist.ru/educationcenter/main/groups/id/1?groupId=796 (кликай) и заполнить анкету (чтобы подать заявку - сперва зарегистрируйтесь на сайте Робофинист как "ученик". Обязательно сохраните логины и пароли - потом они вам очень понадобятся!).
Вторая группа по BEAM-робототехнике #371РЭ Радиоэлектроника (BEAM-роботы). Эта группа рассчитана для учащихся, кто уже сталкивался с направлением BEAM или сам изучал электротехнику и схемотехнику, кто уже принимал участие в соревнованиях с этими роботами. В рамках этой группы мы будет улучшать ваши теоретические и практические навыки, создавать сложных роботов и большую часть занятий посвящать интересным проектам и соревнованиям. Для того, чтобы записаться в группу 371РЭ , вам нужно пройти по этой ссылке https://robofinist.ru/educationcenter/main/groups/id/1?groupId=797 (кликай) и заполнить анкету (чтобы подать заявку - сперва зарегистрируйтесь на сайте Робофинист как "ученик". Обязательно сохраните логины и пароли - потом они вам очень понадобятся!).
Преподаватель данного направления: Мельников Сергей Алексеевич, педагог дополнительного образования Президентского физико-математического лицея №239, руководитель образовательного проекта SERVODROID - Центр робототехники для начинающих. Группа № 261РЭ и 371РЭ. Будьте внимательны, при заполнении анкеты.
*** Краткий план годового обучения:
1. Повторение теоретических знаний по электротехнике, схемотехнике, радиоэлектронике. Закрепление знаний на практике на основе создания самых простых конструкций роботов.
2. Создание роботов для участия в соревнованиях и выставках. Творческие проекты. Много много соревнований
3. Закрепление знаний для дальнейшего перехода с аналоговой робототехники (от BEAM-роботов) к цифровой робототехнике (роботам на Arduino). На последних занятиях вы соберете BEAM-ARDUINO подобного робота ;)