﻿
{"id":6654,"date":"2017-07-16T04:17:42","date_gmt":"2017-07-16T04:17:42","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=6654"},"modified":"2017-07-22T18:36:58","modified_gmt":"2017-07-22T18:36:58","slug":"aforge-net-ile-hareket-algilama-ve-isleme-algoritmalari","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/aforge-net-ile-hareket-algilama-ve-isleme-algoritmalari\/","title":{"rendered":"AForge.NET \u0130le Hareket Alg\u0131lama ve \u0130\u015fleme Algoritmalar\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde AForge.NET k\u00fct\u00fcphanelerini kullanarak kendi k\u00fc\u00e7\u00fck savunma sanayimizin in\u015fas\u0131na ilk ad\u0131m\u0131m\u0131z\u0131 ataca\u011f\u0131z \ud83d\ude42 Hi\u00e7 \u00f6yle u\u00e7an ka\u00e7an bir\u015feye ihtiyac\u0131m\u0131z yok. Bir adet bilgisayar ve bir adet dahili yahut harici kamera sayesinde elde etti\u011fimiz g\u00f6r\u00fcnt\u00fcler \u00fczerinde hareketleri alg\u0131yacak, hareket unsurlar\u0131n\u0131 farkl\u0131 algoritmalar e\u015fli\u011finde alg\u0131layarak vurgulayacak, t\u00fcm bunlar\u0131n yan\u0131nda hareketin alg\u0131land\u0131\u011f\u0131 herhangi bir anda istedi\u011fimiz i\u015flemleri(\u00f6rn; mail ya da mesaj g\u00f6nderme) devreye sokabilece\u011fiz. Hadi buyrun hi\u00e7 vakit kaybetmeden \u00e7al\u0131\u015fmam\u0131za ba\u015flayal\u0131m.<\/p>\n<p>\u00c7al\u0131\u015fmaya e\u015flik etmek istiyorsan\u0131z e\u011fer bir adet Windows Form projesi olu\u015fturarak formun \u00fczerinde halihaz\u0131rda bir adet PictureBox nesnesi tan\u0131mlaman\u0131z yeterli olacakt\u0131r.<\/p>\n<blockquote><p><strong><span style=\"color: #ff0000;\">Hat\u0131rlayal\u0131m\u00a0 \ud83d\udca1\u00a0<\/span><\/strong><br \/>\nHer\u015feyden \u00f6nce ilgili projemize <a href=\"http:\/\/www.gencayyildiz.com\/blog\/aforge-net-kutuphanelerine-erisim-ve-sistemdeki-kameralari-listeleme\/\" target=\"_blank\" rel=\"noopener\">AForge.NET k\u00fct\u00fcphanelerini<\/a> entegre etmeyi unutmuyoruz.<\/p><\/blockquote>\n<p>\u00d6ncelikle, hareketleri alg\u0131layabilmek i\u00e7in sistemdeki kameralara eri\u015ferek g\u00f6r\u00fcnt\u00fcleri elde etmemiz gerekmektedir. O y\u00fczden hareket algoritmalar\u0131na gelmeden \u00f6nce hangi kamera \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131m\u0131z\u0131 belirlememiz gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public void KameralariGetir()\r\n        {\r\n            VideoCaptureDevice FinalVideoSource;\r\n            FilterInfoCollection VideoCaptuerDevices;\r\n            VideoCaptuerDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);\r\n            FinalVideoSource = new VideoCaptureDevice(VideoCaptuerDevices&#x5B;0].MonikerString);\r\n            FinalVideoSource.NewFrame += FinalVideoSource_NewFrame;\r\n            FinalVideoSource.DesiredFrameRate = 500;\r\n            FinalVideoSource.DesiredFrameSize = new Size(1, 500);\r\n            FinalVideoSource.Start();\r\n        }\r\n        private void FinalVideoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)\r\n        {\r\n            Bitmap image = (Bitmap)eventArgs.Frame.Clone();\r\n            pictureBox1.Image = image;\r\n        }\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            KameralariGetir();\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki yapm\u0131\u015f oldu\u011fumuz \u00e7al\u0131\u015fma neticesinde sistemdeki kameralar\u0131 elde ederek \u00e7al\u0131\u015faca\u011f\u0131m\u0131z kameray\u0131 belirlemi\u015f ve kameradan elde edilen g\u00f6r\u00fcnt\u00fcleri PictureBox nesnesine anl\u0131k olarak g\u00f6ndermi\u015f bulunmaktay\u0131z.<\/p>\n<p>Evet&#8230; \u015eimdi kameradan elde edilen g\u00f6r\u00fcnt\u00fcler \u00fczerinde hareketleri alg\u0131layacak algoritmalar\u0131m\u0131z\u0131 olu\u015fturabiliriz.<\/p>\n<p>Bu i\u015flemi yaparken \u00e7al\u0131\u015faca\u011f\u0131m\u0131z alan NewFrameEventHandler delegesiyle i\u015faretlenmi\u015f olan &#8220;FinalVideoSource_NewFrame&#8221; metodumuz olacakt\u0131r. \u00c7\u00fcnk\u00fc bu metot her bir g\u00f6r\u00fcnt\u00fc geldi\u011finde tetiklenmekte ve o anki elde edilen g\u00f6r\u00fcnt\u00fcy\u00fc bir \u00f6ncekiyle k\u0131yaslama imkan\u0131 tan\u0131maktad\u0131r.<\/p>\n<p>Ayriyetten, elde edilen g\u00f6r\u00fcnt\u00fc \u00fczerinde yap\u0131lacak hareket alg\u0131lamas\u0131n\u0131 hangi algoritmayla icra edece\u011fimizide belirtmemiz gerekmektedir. Bu i\u015flem i\u00e7in AForge.NET k\u00fct\u00fcphanesinde;<\/p>\n<ul>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/2cf71bcc-d011-80be-57f2-cd60b5665df9.htm\" target=\"_blank\" rel=\"noopener\">Two frames difference motion detector<\/a><\/li>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/f0ba842d-fc64-100b-88a5-3aea6cad03f3.htm\" target=\"_blank\" rel=\"noopener\">Simple background modeling motion detector<\/a><\/li>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/3ffdd2e8-d2cd-e4b9-fb50-97a1c6f12442.htm\" target=\"_blank\" rel=\"noopener\">Custom frame difference motion detector<\/a><\/li>\n<\/ul>\n<p>hareket alg\u0131lama algoritmalar\u0131 mevcuttur.<\/p>\n<p>Ve bunlar\u0131n yan\u0131nda;<\/p>\n<ul>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/d6c663ca-29ee-5c47-8bc3-91b6ff857cd8.htm\" target=\"_blank\" rel=\"noopener\">Motion area highlighting<\/a><\/li>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/68e3b377-ed5e-797d-1291-d9851345d20e.htm\" target=\"_blank\" rel=\"noopener\">Motion border highlighting<\/a><\/li>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/aa54dea0-7bda-cac2-9cf4-4bda106daf28.htm\" target=\"_blank\" rel=\"noopener\">Grid motion area processing<\/a><\/li>\n<li><a href=\"http:\/\/www.aforgenet.com\/framework\/docs\/html\/6d5a5986-9285-a15a-a446-5c130bf2d531.htm\" target=\"_blank\" rel=\"noopener\">Blob counting objects processing<\/a><\/li>\n<\/ul>\n<p>olmak \u00fczere hareket i\u015fleme algoritmalar\u0131da bulunmaktad\u0131r.<\/p>\n<p>T\u00fcm algoritmalarda kavranmas\u0131 gereken ortak yap\u0131 a\u015fa\u011f\u0131daki gibidir;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        MotionDetector detector = new MotionDetector(-Hareket Alg\u0131lama Algoritmas\u0131-, -Hareket \u0130\u015fleme Algoritmas\u0131-);\r\n        private void FinalVideoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)\r\n        {\r\n            Bitmap image = (Bitmap)eventArgs.Frame.Clone();\r\n            #region Hareket Alg\u0131lama\r\n            \/\/Hareket var m\u0131? kontrol edilir. Varsa e\u011fer image \u00fczerinde algoritmalara uygun \u00e7al\u0131\u015fma ger\u00e7ekle\u015ftirilir.\r\n            if (detector.ProcessFrame(image) &gt; 0.02)\r\n            {\r\n                \/\/E\u011fer hareket alg\u0131lan\u0131rsa buras\u0131 tetiklenir.\r\n                pictureBox1.Image = image;\r\n                \/\/Haliyle \u00e7al\u0131\u015fma yap\u0131lm\u0131\u015f o anki g\u00f6r\u00fcnt\u00fc PictureBox nesnesine aktar\u0131l\u0131r.\r\n            }\r\n            pictureBox1.Image = image;\r\n            #endregion\r\n        }\r\n<\/pre>\n<p>\u015eimdi biraz da bu algoritmalar \u00fczerinde konu\u015fal\u0131m.<br \/>\n\u00d6ncelikle hareket alg\u0131lama algoritmalar\u0131n\u0131 ele alal\u0131m.<\/p>\n<h4>Two frames difference motion detector<\/h4>\n<p>Bu algoritma i\u015flevsel olarak en basit lakin performans olarakta en h\u0131zl\u0131s\u0131d\u0131r. Hareketi alg\u0131layabilmek i\u00e7in T an\u0131ndaki bir g\u00f6r\u00fcnt\u00fcyle T + 1 an\u0131ndaki g\u00f6r\u00fcnt\u00fcy\u00fc k\u0131yaslayarak aradaki fark\u0131 vurgulamaktad\u0131r. Ancak hareketli g\u00f6r\u00fcnt\u00fcy\u00fc tam olarak vurgulamak i\u00e7in %100 bir performans g\u00f6sterememektedir. Sadece hareketin alg\u0131lanmas\u0131 gereken noktalarda tavsiye edilir.<\/p>\n<h4>Simple background modeling motion detector<\/h4>\n<p>Bu algoritma; yukar\u0131daki algoritmaya nazaran T ve T + 1 an\u0131ndaki \u00e7er\u00e7eveler aras\u0131ndaki fark\u0131 bularak vurgulamaktad\u0131r. Alg\u0131lanan hareketi daha net ve kesin vurgulama \u00f6zelli\u011fine sahiptir.<\/p>\n<h4>Custom frame difference motion detector<\/h4>\n<p>\u00d6zel bir \u00e7er\u00e7eveyle mevcut videonun T zaman\u0131ndaki bir karesini k\u0131yaslayarak hareket alg\u0131layan algoritmad\u0131r. Kullan\u0131c\u0131 \u00f6zel \u00e7er\u00e7eveyi manuel olarak belirlemekle m\u00fckelleftir. Aksi taktirde varsay\u0131lan olarak ilk video karesi \u00e7er\u00e7eve olarak kabul edilecektir.<\/p>\n<p>\u015eimdide s\u0131ra hareket i\u015fleme algoritmalar\u0131n\u0131 ele almaya geldi.<\/p>\n<h4><span style=\"color: #333333;\">Motion area highlighting<\/span><\/h4>\n<p>Bu algoritma sadece belirtilen renkte hareketi vurgulamaktad\u0131r. T\u00fcm hareket alg\u0131lama algoritmalar\u0131yla birlikte kullan\u0131labilir.<\/p>\n<h4><span style=\"color: #333333;\">Motion border highlighting<\/span><\/h4>\n<p>Bu hareket i\u015fleme algoritmas\u0131 ise sadece belirtilen renkte alg\u0131lanan harekete kenarl\u0131k olu\u015fturmaktad\u0131r. Ba\u015fka bir deyi\u015fle hareketi dikt\u00f6rtgen i\u00e7ine alarak vurgulamaktad\u0131r. SimpleBackgroundModelingDetector ve CustomFrameDifferenceDetector algoritmalar\u0131yla kullan\u0131labilir.<\/p>\n<h4><span style=\"color: #333333;\">Grid motion area processing<\/span><\/h4>\n<p>Bu algoritma alg\u0131lanan hareket \u00fczerinde \u0131zgara misali bir vurgulama imkan\u0131 sa\u011flamaktad\u0131r. Vurgulama an\u0131nda olu\u015fturulacak h\u00fccre miktar\u0131 kullan\u0131c\u0131 taraf\u0131ndan belirtilebilmekte ve olu\u015fturulacak \u0131zgaran\u0131n h\u00fccre boylar\u0131 miktar ile ters orant\u0131l\u0131 olarak k\u00fc\u00e7\u00fclmektedir. Bu da hassasiyeti artt\u0131rmaktad\u0131r. Bir yandan her bir h\u00fccre i\u00e7in hareket seviyesi ayr\u0131 olarak hesaplanmaktad\u0131r.<\/p>\n<h4><span style=\"color: #333333;\">Blob counting objects processing<\/span><\/h4>\n<p>Bu algoritma birbirinden ba\u011f\u0131ms\u0131z ayr\u0131 nesneleri rengi belirtilebilen bir dikd\u00f6rtgen ile vurgulamay\u0131 sa\u011flamaktad\u0131r. S\u0131n\u0131rlar manuel olarak belirtilebilmektedir. Mesela belirtilen boyuttan k\u00fc\u00e7\u00fck olan nesnelerin hareketleri g\u00f6rmezden gelinebilir.<\/p>\n<p>Evet&#8230; \u015eimdi s\u0131ra bu algoritmalar\u0131 kullanarak pratik uygulamaya gelmi\u015f bulunmaktad\u0131r.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">\u00d6rnek 1<\/span><\/strong><br \/>\n<span style=\"color: #333300;\">Hareket Alg\u0131lama Algoritmas\u0131 :<\/span> <em>Two frames difference motion detector<\/em><br \/>\n<span style=\"color: #333300;\">Hareket \u0130\u015fleme Algoritmas\u0131 :<\/span> <em>Motion area highlighting<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        MotionDetector detector = new MotionDetector(new TwoFramesDifferenceDetector(), new MotionAreaHighlighting { HighlightColor = Color.Red });\r\n        private void FinalVideoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)\r\n        {\r\n            Bitmap image = (Bitmap)eventArgs.Frame.Clone();\r\n            #region Hareket Alg\u0131lama\r\n\r\n            if (detector.ProcessFrame(image) &gt; 0.02)\r\n                pictureBox1.Image = image;\r\n            pictureBox1.Image = image;\r\n            #endregion\r\n        }\r\n<\/pre>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/hkFnvY6ZLKU\" frameborder=\"0\" allowfullscreen><\/iframe><br \/>\nVideodan da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere AForge.NET k\u00fct\u00fcphaneleri arac\u0131l\u0131\u011f\u0131yla kameradaki g\u00f6r\u00fcnt\u00fcy\u00fc rahatl\u0131kla alg\u0131layarak vurgulam\u0131\u015f bulunmaktay\u0131z.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">\u00d6rnek 2<\/span><\/strong><br \/>\n<span style=\"color: #333300;\">Hareket Alg\u0131lama Algoritmas\u0131 :<\/span> <em>Two frames difference motion detector<\/em><br \/>\n<span style=\"color: #333300;\">Hareket \u0130\u015fleme Algoritmas\u0131 :<\/span> <em>Grid motion area processing<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        MotionDetector detector = new MotionDetector(new TwoFramesDifferenceDetector(), new GridMotionAreaProcessing() { GridHeight = 5000, GridWidth = 5000 \/*ne kadar kare olaca\u011f\u0131n\u0131 belirliyor*\/, HighlightColor = Color.DarkSlateGray });\r\n        private void FinalVideoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)\r\n        {\r\n            Bitmap image = (Bitmap)eventArgs.Frame.Clone();\r\n            #region Hareket Alg\u0131lama\r\n\r\n            if (detector.ProcessFrame(image) &gt; 0.02)\r\n                pictureBox1.Image = image;\r\n            pictureBox1.Image = image;\r\n            #endregion\r\n        }\r\n<\/pre>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/sZXzYJgDzyE\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p><strong><span style=\"text-decoration: underline;\">\u00d6rnek 3<\/span><\/strong><br \/>\n<span style=\"color: #333300;\">Hareket Alg\u0131lama Algoritmas\u0131 :<\/span> <em>Two frames difference motion detector<\/em><br \/>\n<span style=\"color: #333300;\">Hareket \u0130\u015fleme Algoritmas\u0131 :<\/span> <em>Blob counting objects processing<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        MotionDetector detector = new MotionDetector(new TwoFramesDifferenceDetector(), new BlobCountingObjectsProcessing() { HighlightColor = Color.MediumVioletRed, MinObjectsHeight = 70, MinObjectsWidth = 70, HighlightMotionRegions = true });\r\n        private void FinalVideoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)\r\n        {\r\n            Bitmap image = (Bitmap)eventArgs.Frame.Clone();\r\n            #region Hareket Alg\u0131lama\r\n\r\n            if (detector.ProcessFrame(image) &gt; 0.02)\r\n                pictureBox1.Image = image;\r\n            pictureBox1.Image = image;\r\n            #endregion\r\n        }\r\n<\/pre>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/ihL4GS7TKH0\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Evet arkada\u015flar. Rastgele se\u00e7ti\u011fim algoritmalarla bir ka\u00e7 \u00f6rnek sergilemi\u015f bulunmaktay\u0131m. Art\u0131k ihtiyac\u0131n\u0131za d\u00f6n\u00fck do\u011fru algoritmay\u0131 se\u00e7ip kullanmak sizlere kalm\u0131\u015f bulunmaktad\u0131r.<\/p>\n<p>Ve son olarak nihayetinde gayemiz do\u011frultusunda t\u00fcm i\u015f y\u00fck\u00fcn\u00fc AForge.NET k\u00fct\u00fcphanesi \u00fcstlendi\u011fi ve bizlere sadece s\u0131n\u0131flar\u0131n\u0131 kullanma zahmetini b\u0131rakt\u0131\u011f\u0131 i\u00e7in bu k\u00fct\u00fcphaneyi \u00fcretenlerede edece\u011finiz te\u015fekk\u00fcr\u00fc hat\u0131rlat\u0131r ve makalemizi burada sonland\u0131r\u0131r\u0131m.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde AForge.NET k\u00fct\u00fcphanelerini kullanarak kendi k\u00fc\u00e7\u00fck savunma sanayimizin in\u015fas\u0131na ilk ad\u0131m\u0131m\u0131z\u0131 ataca\u011f\u0131z \ud83d\ude42 Hi\u00e7 \u00f6yle u\u00e7an ka\u00e7an bir\u015feye ihtiyac\u0131m\u0131z yok. Bir adet bilgisayar ve bir adet dahili yahut harici kamera sayesinde elde&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":6628,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1875,1904],"tags":[1868,1891,1895,1893,1890,1894,1892],"class_list":["post-6654","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aforge-net","category-goruntu-isleme","tag-aforge-net","tag-aforge-net-ile-hareket-algilama-algoritmalari","tag-aforge-net-ile-hareket-isleme-algoritmalari","tag-aforge-net-motion-detection","tag-hareket-algilama-algoritmalari","tag-hareket-isleme-algoritmalari","tag-motion-detection"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=6654"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6654\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/6628"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=6654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=6654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=6654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}