﻿
{"id":6774,"date":"2017-07-27T22:19:40","date_gmt":"2017-07-27T22:19:40","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=6774"},"modified":"2017-07-27T22:19:40","modified_gmt":"2017-07-27T22:19:40","slug":"emgucv-algilanan-yuzun-resimden-cikartilmasi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/emgucv-algilanan-yuzun-resimden-cikartilmasi\/","title":{"rendered":"EmguCV &#8211; Alg\u0131lanan Y\u00fcz\u00fcn Resimden \u00c7\u0131kart\u0131lmas\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>K\u00e2h kameradan k\u00e2h herhangi bir foto\u011fraf yahut resimden olsun farketmeksizin \u00fczerinde g\u00f6r\u00fcnt\u00fc i\u015fleme \u00e7al\u0131\u015fmas\u0131 yapt\u0131\u011f\u0131m\u0131z herhangi bir uygulamada, alg\u0131lanan g\u00f6r\u00fcnt\u00fcy\u00fc b\u00fct\u00fcnden \u00e7\u0131karmay\u0131 isteyebiliriz. Yani g\u00f6r\u00fcnt\u00fcy\u00fc kesip elde etmeyi isteyebiliriz. \u0130\u015fte bu i\u00e7eri\u011fimizde \u00f6rnek olarak face detection\/y\u00fcz alg\u0131lama i\u015flemi neticesinde, alg\u0131lanan y\u00fczleri ana resimden \u00e7\u0131karacak ve sadece ilgili objeyi elde edece\u011fiz.<\/p>\n<p><em><strong>Peki bu i\u015flemi nas\u0131l yapaca\u011f\u0131z?<\/strong><\/em><br \/>\nAsl\u0131nda yapaca\u011f\u0131m\u0131z i\u015flem \u00e7okta \u015fa\u015fal\u0131 bir u\u011fra\u015f gerektirmemektedir. EmguCV s\u0131n\u0131flar\u0131n\u0131 kullanarak elde etti\u011fimiz y\u00fcz\u00fcn zaten Rectangle bilgilerini elde edebilmekteyiz. Eee ayr\u0131\u015ft\u0131r\u0131lacak olan par\u00e7an\u0131n koordinat bilgileri ve y\u00fckseklik\/geni\u015flik \u00f6l\u00e7\u00fcleri belirli olaca\u011f\u0131ndan geriye o ilgili par\u00e7ay\u0131 resimden kesmek kalmaktad\u0131r.<\/p>\n<p>Tabi bu i\u015flemi yaparken kamera \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131m\u0131z i\u00e7in kullanaca\u011f\u0131m\u0131z teknolojiler; kameradan g\u00f6r\u00fcnt\u00fc elde etme ve bu g\u00f6r\u00fcnt\u00fcler \u00fczerinde gerekli face detection i\u015flemlerini EmguCV ile ger\u00e7ekle\u015ftirece\u011fiz. Lakin kesilmesi gereken par\u00e7ay\u0131 ise AForge.NET framework\u00fcn\u00fc kullanarak elde edece\u011fiz.<\/p>\n<p>Yani uzun laf\u0131n k\u0131sas\u0131 olay bir kesme i\u015fleminden ibaret olacakt\u0131r.<\/p>\n<p>As\u0131l konumuza girmeden hemen \u015furada kesme konusunda bir \u0131s\u0131nma turu yapabiliriz.<\/p>\n<div id=\"attachment_6778\" style=\"width: 411px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6778\" class=\"wp-image-6778 size-full\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131.png\" alt=\"EmguCV - Alg\u0131lanan Y\u00fcz\u00fcn Resimden \u00c7\u0131kart\u0131lmas\u0131\" width=\"401\" height=\"319\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131.png 401w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131-300x239.png 300w\" sizes=\"auto, (max-width: 401px) 100vw, 401px\" \/><\/a><p id=\"caption-attachment-6778\" class=\"wp-caption-text\">R\u0131fk\u0131 Abi<\/p><\/div>\n<p>Sizi yukar\u0131daki R\u0131fk\u0131 Abiyle tan\u0131\u015ft\u0131ray\u0131m. Varsayal\u0131m ki bizler burada R\u0131fk\u0131 Abinin kafas\u0131n\u0131 kesip elde etmeye \u00e7al\u0131\u015fal\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            Bitmap RifkiAbi = new Bitmap(&quot;rifkiabi.PNG&quot;);\r\n            \/\/Rectangle koordinatlar\u0131n\u0131 deneme yan\u0131lma ile buldum :]\r\n            Rectangle KafaKodlari = new Rectangle(60, 100, 100, 190);\r\n            AForge.Imaging.Filters.Crop Kes = new AForge.Imaging.Filters.Crop(KafaKodlari);\r\n            Bitmap RifkiAbiKafa = Kes.Apply(RifkiAbi);\r\n            pictureBox1.Image = RifkiAbi;\r\n            pictureBox2.Image = RifkiAbiKafa;\r\n<\/pre>\n<p>\u0130\u015fte bu kadar basit. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere elimizde hali haz\u0131rda bir resim ve o resimde kesilecek alan\u0131n Rectangle koordinatlar\u0131 bulunmas\u0131 bizim i\u00e7in amac\u0131m\u0131z do\u011frultusunda tam tam\u0131na yeterlidir. Dikkat ederseniz resmimiz static oldu\u011fu i\u00e7in sadece AForge.NET k\u00fct\u00fcphanesindeki Crop s\u0131n\u0131f\u0131n\u0131 kullanmam yeterli olmu\u015ftur. Ama biz kameradan elde edilen birden \u00e7ok g\u00f6r\u00fcnt\u00fc \u00fczerinde hem y\u00fcz alg\u0131lay\u0131p hemde alg\u0131lanan y\u00fcz \u00fczerinde bir kesim i\u015flemi yapaca\u011f\u0131m\u0131z i\u00e7in EmguCV ile AForge.NET&#8217;i bir b\u00fct\u00fcn olarak kullanaca\u011f\u0131z. Yukar\u0131 sat\u0131rlarda da bahsetti\u011fim gibi EmguCV gerekli kamera g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc elde edip, o g\u00f6r\u00fcnt\u00fc \u00fczerinde gerekli face datection i\u015flemlerini ger\u00e7ekle\u015ftirecek ve alg\u0131lad\u0131\u011f\u0131 y\u00fcz\u00fcn Rectangle koordinatlar\u0131yla beraber ilgili resmi bize getirecektir. Gerisi yukar\u0131daki kod blo\u011funda yapm\u0131\u015f oldu\u011fumuz i\u015flemle birebir ayn\u0131d\u0131r diyebilirim. Devreye AForge.NET girecek, ilgili y\u00fcz\u00fc Rectangle koordinatlar\u0131 arac\u0131l\u0131\u011f\u0131yla kesecek ve bize sunacakt\u0131r.<\/p>\n<p>Haa bu arada R\u0131fk\u0131 Abinin son halini merak ediyorsan\u0131z a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcne bakabilirsiniz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131-1.png\" alt=\"EmguCV - Alg\u0131lanan Y\u00fcz\u00fcn Resimden \u00c7\u0131kart\u0131lmas\u0131\" width=\"602\" height=\"412\" class=\"aligncenter size-full wp-image-6785\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131-1.png 602w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Alg\u0131lanan-Y\u00fcz\u00fcn-Resimden-\u00c7\u0131kart\u0131lmas\u0131-1-300x205.png 300w\" sizes=\"auto, (max-width: 602px) 100vw, 602px\" \/><\/a><\/p>\n<p>Velhas\u0131l \u015fimdi as\u0131l konumuzu in\u015fa ederek \u00fczerine yo\u011funla\u015fabiliriz. \u00d6nceki yaz\u0131lar\u0131mda <a href=\"http:\/\/www.gencayyildiz.com\/blog\/emgucv-projeye-entegrasyonu-ve-kamera-goruntusu-alma\/\" target=\"_blank\">EmguCV ile kameradan nas\u0131l g\u00f6r\u00fcnt\u00fc al\u0131nd\u0131\u011f\u0131n\u0131<\/a> ve <a href=\"http:\/\/www.gencayyildiz.com\/blog\/emgucv-face-eye-nose-and-mouth-detectionyuz-goz-burun-ve-agiz-algilama\/\" target=\"_blank\">y\u00fcz\u00fcn nas\u0131l alg\u0131land\u0131\u011f\u0131n\u0131<\/a> ele alm\u0131\u015ft\u0131m. O y\u00fczden hi\u00e7 h\u0131z kaybetmeden bu konular\u0131n anlat\u0131m\u0131n\u0131 es ge\u00e7ip yap\u0131n\u0131n in\u015fas\u0131na giriyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            Capture capture = new Capture();\r\n            capture.Start();\r\n\r\n            HaarCascade haaryuz = new HaarCascade(&quot;haarcascade_frontalface_default.xml&quot;);\r\n\r\n            capture.ImageGrabbed += (x, y) =&gt;\r\n            {\r\n                var image = capture.RetrieveBgrFrame();\r\n                if (image != null)\r\n                {\r\n                    var grayimage = image.Convert&lt;Gray, byte&gt;();\r\n\r\n                    MCvAvgComp&#x5B;]&#x5B;] Yuzler = grayimage.DetectHaarCascade(haaryuz, 1.2, 5, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(15, 15));\r\n\r\n                    foreach (MCvAvgComp yuz in Yuzler&#x5B;0])\r\n                    {\r\n                        \/*\r\n                            --- Burada \u0130\u015flem Yapaca\u011f\u0131z ---\r\n                            Elde edilen o anki y\u00fcz\u00fcn\/y\u00fczlerin\r\n                            Rectangle koordinatlar\u0131 ve ilgili\r\n                            ana resim burada elimizde mevcuttur.\r\n                         \r\n                         *\/\r\n\r\n                        \/\/Y\u00fcz\u00fc Vurguluyorum\r\n                        Graphics g = Graphics.FromImage(image.Bitmap);\r\n                        g.DrawEllipse(new Pen(Color.Gray, 3), yuz.rect);\r\n                        MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_COMPLEX, 0.3, 0.3);\r\n                        \/\/Yaz\u0131 Yaz\u0131yorum\r\n                        image.Draw(&quot;Yuz&quot;, ref font, new Point(yuz.rect.X + 10, yuz.rect.Y + 20), new Bgr(Color.Yellow));\r\n                    }\r\n                }\r\n                pictureBox1.Image = image.ToBitmap();\r\n            };\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funa bakarsan\u0131z e\u011fer a\u00e7\u0131klama sat\u0131r\u0131yla geni\u015f\u00e7e <em>&#8212; Burada \u0130\u015flem Yapaca\u011f\u0131z &#8212;<\/em> \u015feklinde ifade de bulundu\u011fum alanda \u00e7al\u0131\u015fmam\u0131z\u0131 ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            Capture capture = new Capture();\r\n            capture.Start();\r\n\r\n            HaarCascade haaryuz = new HaarCascade(&quot;haarcascade_frontalface_default.xml&quot;);\r\n\r\n            capture.ImageGrabbed += (x, y) =&gt;\r\n            {\r\n                var image = capture.RetrieveBgrFrame();\r\n                if (image != null)\r\n                {\r\n                    var grayimage = image.Convert&lt;Gray, byte&gt;();\r\n\r\n                    MCvAvgComp&#x5B;]&#x5B;] Yuzler = grayimage.DetectHaarCascade(haaryuz, 1.2, 5, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(15, 15));\r\n\r\n                    foreach (MCvAvgComp yuz in Yuzler&#x5B;0])\r\n                    {\r\n                        \/\/Gerekli G\u00f6r\u00fcnt\u00fcy\u00fc Kesiyoruz.\r\n                        AForge.Imaging.Filters.Crop Kes = new AForge.Imaging.Filters.Crop(yuz.rect);\r\n                        Bitmap YuzResmi = Kes.Apply(image.Bitmap);\r\n                        pictureBox2.Image = YuzResmi;\r\n\r\n                        \/\/Y\u00fcz\u00fc Vurguluyorum\r\n                        Graphics g = Graphics.FromImage(image.Bitmap);\r\n                        g.DrawEllipse(new Pen(Color.Gray, 3), yuz.rect);\r\n                        MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_COMPLEX, 0.3, 0.3);\r\n                        \/\/Yaz\u0131 Yaz\u0131yorum\r\n                        image.Draw(&quot;Yuz&quot;, ref font, new Point(yuz.rect.X + 10, yuz.rect.Y + 20), new Bgr(Color.Yellow));\r\n                    }\r\n                }\r\n                pictureBox1.Image = image.ToBitmap();\r\n            };\r\n        }\r\n<\/pre>\n<p>\u0130\u015fte bu kadar&#8230;<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/AVj1X2ZX8CM\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Asl\u0131nda bu noktadan sonra gayemize ermi\u015f bulunmaktay\u0131z lakin ben biraz daha geli\u015fmi\u015f\/kompleks bir \u00e7al\u0131\u015fmay\u0131 sizlerle payla\u015fmadan makalemizi sonland\u0131rmayaca\u011f\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            Capture capture = new Capture();\r\n            capture.Start();\r\n\r\n            HaarCascade haaryuz = new HaarCascade(&quot;haarcascade_frontalface_default.xml&quot;);\r\n\r\n            int Sayac = 1;\r\n            capture.ImageGrabbed += (x, y) =&gt;\r\n            {\r\n                var image = capture.RetrieveBgrFrame();\r\n                if (image != null)\r\n                {\r\n                    var grayimage = image.Convert&lt;Gray, byte&gt;();\r\n\r\n                    MCvAvgComp&#x5B;]&#x5B;] Yuzler = grayimage.DetectHaarCascade(haaryuz, 1.2, 5, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(15, 15));\r\n\r\n                    foreach (MCvAvgComp yuz in Yuzler&#x5B;0])\r\n                    {\r\n                        AForge.Imaging.Filters.Crop Kes = new AForge.Imaging.Filters.Crop(yuz.rect);\r\n                        Bitmap YuzResmi = Kes.Apply(image.Bitmap);\r\n\r\n                        if (Sayac != 7)\r\n                        {\r\n                            foreach (var nesne in Controls)\r\n                            {\r\n                                if (nesne is PictureBox pb)\r\n                                    if (pb.Name == &quot;p&quot; + Sayac)\r\n                                    {\r\n                                        pb.Image = YuzResmi;\r\n                                        Sayac++;\r\n                                    }\r\n                            }\r\n                        }\r\n                        else\r\n                            Sayac = 1;\r\n\r\n                        \/\/Y\u00fcz\u00fc Vurguluyorum\r\n                        Graphics g = Graphics.FromImage(image.Bitmap);\r\n                        g.DrawArc(new Pen(Color.Green, 3), yuz.rect, -30, 240);\r\n                        MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_COMPLEX, 0.3, 0.3);\r\n                        \/\/Yaz\u0131 Yaz\u0131yorum\r\n                        image.Draw(&quot;Yuz&quot;, ref font, new Point(yuz.rect.X + 10, yuz.rect.Y + 20), new Bgr(Color.Yellow));\r\n                    }\r\n                }\r\n                pictureBox1.Image = image.ToBitmap();\r\n            };\r\n        }\r\n<\/pre>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/WTrbpqb1ySU\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Evet&#8230; Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kameran\u0131n her karesinde alg\u0131lanan nesneleri yukar\u0131daki gibi seri bir \u015fekilde elde edebiliriz. Bu ve buna benzer bir\u00e7ok uygulamay\u0131 g\u00fcvenlik, kontrol, denetim, analiz, tan\u0131mlama, tan\u0131ma vs. gibi bir\u00e7ok farkl\u0131 alanda kullanabiliriz.<\/p>\n<p>Son olarak ilk projeyi <a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Algilanan-Resmin-Cikarilmasi-Proje-1.rar\">buradan<\/a>, ikinci projeyide<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/07\/EmguCV-Algilanan-Resmin-Cikarilmasi-Proje-2.rar\">buradan<\/a> indirebilirsiniz.<\/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, K\u00e2h kameradan k\u00e2h herhangi bir foto\u011fraf yahut resimden olsun farketmeksizin \u00fczerinde g\u00f6r\u00fcnt\u00fc i\u015fleme \u00e7al\u0131\u015fmas\u0131 yapt\u0131\u011f\u0131m\u0131z herhangi bir uygulamada, alg\u0131lanan g\u00f6r\u00fcnt\u00fcy\u00fc b\u00fct\u00fcnden \u00e7\u0131karmay\u0131 isteyebiliriz. Yani g\u00f6r\u00fcnt\u00fcy\u00fc kesip elde etmeyi isteyebiliriz. \u0130\u015fte bu i\u00e7eri\u011fimizde \u00f6rnek&#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":6785,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1875,1905,1904],"tags":[1926,1923,1924,1922,1925],"class_list":["post-6774","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aforge-net","category-emgucv","category-goruntu-isleme","tag-aforge-net-image-crop","tag-c-algilanan-parcanin-cikarilmasi","tag-c-image-crop","tag-emgucv-algilanan-yuzun-resimden-cikartilmasi","tag-emgucv-image-crop"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6774","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=6774"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6774\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/6785"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=6774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=6774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=6774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}