예제 #1
0
        //private void btncapture_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        if (_capture != null)
        //        {
        //            _capture.Dispose();
        //            Application.Idle -= new EventHandler(FrameGrabber);
        //            btnstart.Enabled = true;
        //            CaptureImgBox.Image = null;
        //        }
        //    }
        //    catch (Exception ex) { }
        //}

        private void TampilkanPesan()
        {
            Titik titikKanan = new Titik();

            DetekAtasBawah(rightSobelTreshold, titikKanan);
            Bitmap kananAtasBawah = CropAtasBawah(rightSobelTreshold, titikKanan);

            DetekKiriKanan(kananAtasBawah, titikKanan);
            Bitmap drawEyeKanan = DrawEye(kananAtasBawah, titikKanan);

            ptbHasilAkhirKanan.Image = drawEyeKanan;

            Titik titikKiri = new Titik();

            DetekAtasBawah(leftSobelTreshold, titikKiri);
            Bitmap kiriAtasBawah = CropAtasBawah(leftSobelTreshold, titikKiri);

            DetekKiriKanan(kiriAtasBawah, titikKiri);
            Bitmap drawEyeKiri = DrawEye(kiriAtasBawah, titikKiri);

            ptbHasilAkhirKiri.Image = drawEyeKiri;

            //Hitung Total Energy
            var    listEnergyKanan  = HitungEnergy(drawEyeKanan);
            var    listEnergyKiri   = HitungEnergy(drawEyeKiri);
            double totalEnergyKanan = listEnergyKanan.Sum(a => a.Total);
            double totalEnergyKiri  = listEnergyKiri.Sum(a => a.Total);

            //Pengecekan untuk mata setengah tertutup
            //if(totalEnergyKanan >= RangeEnergySetengahTertutup.start && totalEnergyKanan <= RangeEnergySetengahTertutup.end || totalEnergyKiri >= RangeEnergySetengahTertutup.start && totalEnergyKiri <= RangeEnergySetengahTertutup.end)
            //{
            //    System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"EfekSuara.wav");
            //    player.Play();
            //            //Untuk Menampilkan pesan jika masuk dalam range
            //    MessageBox.Show("Kiri: " + totalEnergyKiri.ToString("#,##0") + "\n" + "Kanan: " + totalEnergyKanan.ToString("#,##0"), "Mata Setengah Tertutup");
            //}

            //Pengecekan untuk mata tertutup penuh
            if (totalEnergyKanan >= RangeEnergyTertutupPenuh.start && totalEnergyKanan <= RangeEnergyTertutupPenuh.end || totalEnergyKiri >= RangeEnergyTertutupPenuh.start && totalEnergyKiri <= RangeEnergyTertutupPenuh.end)
            {
                System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"EfekSuara.wav");
                player.Play();

                //Untuk Menampilkan pesan jika masuk dalam range
                MessageBox.Show("Kiri: " + totalEnergyKiri.ToString("#,##0") + "\n" + "Kanan: " + totalEnergyKanan.ToString("#,##0"), "Anda Mengantuk");
            }
            LblEnergyKanan.Text = "Energi Kiri: " + totalEnergyKanan.ToString("#,##0");
            LblEnergyKiri.Text  = "Energi Kanan: " + totalEnergyKiri.ToString("#,##0");
        }
예제 #2
0
        Bitmap CropAtasBawah(Bitmap bmp, Titik titik)
        {
            int    newHeight = titik.Ybawah - titik.Yatas;
            Bitmap newBmp    = new Bitmap(bmp.Width, newHeight);

            for (int i = 1; i < bmp.Width - 1; i++)
            {
                for (int j = 0; j < newHeight; j++)
                {
                    newBmp.SetPixel(i, j, Color.White);
                    int   jT  = j + titik.Yatas;
                    Color clr = Color.FromArgb(bmp.GetPixel(i, jT).R, bmp.GetPixel(i, jT).G, bmp.GetPixel(i, jT).B);
                    newBmp.SetPixel(i, j, clr);
                }
            }
            return(newBmp);
        }
예제 #3
0
        // GET: Grid/Create
        public IActionResult AddOrEdit(int id, bool add = true)
        {
            bool isAjax = HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";

            if (!isAjax)
            {
                return(RedirectToAction(nameof(Index)));
            }

            if (id == 0)
            {
                return(NotFound());  //false; //RedirectToAction(nameof(Index));
            }

            int sumbId = 0;
            int polaId = 0;

            var modelView = _context.TblTitik.Find(id);

            if (add)
            {
                //buat baru
                modelView = new Titik();
                var tGrid = _context.TblTitik.Where(g => g.PolaId == id).ToList();
                if (tGrid.Count > 0)
                {
                    sumbId = tGrid.Where(g => g.Sumbu == ESumbu.X).Max(m => m.SumbuId) + 1;
                }
                polaId = id;
            }
            else
            {
                // edit yang sudah ada
                polaId = (int)modelView.PolaId;
                sumbId = modelView.SumbuId;
            }

            var pola = _context.TblPola.Find(polaId);

            ViewBag.PolaId   = polaId;
            ViewBag.PolaNama = pola.Nama;
            ViewBag.SumbuId  = sumbId == 0? 1 : sumbId;
            ViewBag.Satuan   = pola.SatuanPenyusun;
            return(View(modelView));
        }
예제 #4
0
 public async Task <IActionResult> AddOrEdit(int id, [Bind("PolaId,TtkId,Sumbu,SumbuId,Nama,Jarak,PosAbs,PosReal")] Titik grid)
 {
     if (ModelState.IsValid)
     {
         if (id == 0)
         {
             _context.Add(grid);
             await _context.SaveChangesAsync();
         }
         else if (id == grid.TtkId)
         {
             try
             {
                 // datang dari Edit
                 _context.Update(grid);
                 await _context.SaveChangesAsync();
             }
             catch (DbUpdateConcurrencyException)
             {
                 if (!TitikExists(grid.TtkId))
                 {
                     return(NotFound());
                 }
                 else
                 {
                     throw;
                 }
             }
         }
         // mendapatkan string view tanpa perlu ke methode yang bersangkutan
         var modalAjax = _context.TblTitik.Include(g => g.Pola)
                         .Where(g => g.PolaId == grid.PolaId)
                         .OrderBy(o => o.Sumbu).ThenBy(o => o.SumbuId)
                         .ToList();
         return(Json(new { isValid = true, html = Helper.RenderRazorViewToString(this, "RAB/_TblTitik", modalAjax) }));
     }
     // mendapatkan string view tanpa perlu ke methode yang bersangkutan
     //jika  gagal
     return(Json(new { isValid = false, html = Helper.RenderRazorViewToString(this, "AddOrEdit", grid) }));
 }
예제 #5
0
        //Deteksi Atas Bawah
        bool DetekAtasBawah(Bitmap bmp, Titik titik)
        {
            titik.AtasBawah = true; //Jika tepi mata terdeteksi dengan sempurna

            int height = bmp.Height;
            int width  = bmp.Width;

            bool titikAtas = false;
            bool titikBawah = false;
            int  i, j;

            for (i = width / 3; i < width / 1.5; i++)
            {
                for (j = 2; j < height; j++)
                {
                    int pixelR = bmp.GetPixel(i, j).R;
                    int pixelG = bmp.GetPixel(i, j).G;
                    int pixelB = bmp.GetPixel(i, j).B;

                    if (pixelR == 0 || pixelG == 0 || pixelB == 0)
                    {
                        titik.Xatas = i;
                        titik.Yatas = j;
                        titikAtas   = true;
                        break;
                    }
                }

                if (titikAtas == true)
                {
                    break;
                }
            }

            if (titikAtas == false)
            {
                titik.AtasBawah = false;
                return(titik.AtasBawah);
            }


            for (i = width / 3; i < width / 1.5; i++)
            {
                for (j = height - 1; j > 0; j--)
                {
                    int pixelR = bmp.GetPixel(i, j).R;
                    int pixelG = bmp.GetPixel(i, j).G;
                    int pixelB = bmp.GetPixel(i, j).B;

                    if (pixelR == 0 || pixelG == 0 || pixelB == 0)
                    {
                        titik.Xbawah = i;
                        titik.Ybawah = j;
                        titikBawah   = true;
                        break;
                    }
                }

                if (titikBawah == true)
                {
                    break;
                }
            }

            if (titik.Yatas > height / 2 || titik.Ybawah < height / 2)
            {
                titik.AtasBawah = false;
            }

            return(titik.AtasBawah);
        }
예제 #6
0
        //Gambar mata
        Bitmap DrawEye(Bitmap bmp, Titik titik)
        {
            int    newHeight = titik.Ybawah - titik.Yatas;
            int    newWidth  = titik.XKanan - titik.XKiri;
            Bitmap newBmp    = new Bitmap(newWidth, newHeight);

            for (int x = 0; x < newBmp.Width; x++)
            {
                for (int y = 0; y < newBmp.Height; y++)
                {
                    newBmp.SetPixel(x, y, Color.Black);
                }
            }

            //Left
            int j       = titik.YKiri;
            int tengah  = newWidth / 2;
            int mod     = 1;
            int segment = (newHeight / j) * 2;
            int loop    = 1;

            while (loop <= tengah || j > 0)
            {
                newBmp.SetPixel(loop, j, Color.White);

                if (loop >= tengah)
                {
                    loop = tengah;
                    j   -= 1;
                }
                else if (loop % mod == 0)
                {
                    j -= 1;
                }

                if (loop % segment == 0)
                {
                    mod += 1;
                }

                if (j < 0)
                {
                    j = 0;
                }

                loop += 1;
            }

            mod     = 1;
            j       = titik.YKiri;
            segment = (newHeight / j) * 2;
            loop    = 1;
            while (loop < tengah || j < newHeight - titik.YKiri)
            {
                newBmp.SetPixel(loop, j, Color.White);
                if (loop % mod == 0)
                {
                    j += 1;
                }

                if (loop % segment == 0)
                {
                    mod += 1;
                }

                if (j >= newHeight - titik.YKiri)
                {
                    j = newHeight - titik.YKiri;
                }

                if (loop >= tengah)
                {
                    loop = tengah;
                    j   += 1;
                }
                else
                {
                    loop += 1;
                }
            }

            //Right
            mod     = 1;
            j       = titik.YKanan;
            segment = (newHeight / j) * 2 == 0 ? 1 : (newHeight / j) * 2;
            tengah  = newWidth / 2;
            loop    = newWidth - 1;
            while (loop >= tengah || j > 0)
            {
                newBmp.SetPixel(loop, j, Color.White);

                if (loop <= tengah)
                {
                    loop = tengah;
                    j   -= 1;
                }
                else if (loop % mod == 0)
                {
                    j -= 1;
                }

                if (loop % segment == 0)
                {
                    mod += 1;
                }

                if (j < 0)
                {
                    j = 0;
                }

                loop -= 1;
            }

            mod     = 1;
            j       = titik.YKanan;
            segment = (newHeight / j) * 2 == 0 ? 1 : (newHeight / j) * 2;
            loop    = newWidth - 1;
            while (loop > tengah || j < newHeight - titik.YKiri)
            {
                newBmp.SetPixel(loop, j, Color.White);
                if (loop % mod == 0)
                {
                    j += 1;
                }

                if (loop % segment == 0)
                {
                    mod += 1;
                }

                if (j >= newHeight - titik.YKiri)
                {
                    j = newHeight - titik.YKiri;
                }

                if (loop <= tengah)
                {
                    loop = tengah;
                    j   += 1;
                }
                else
                {
                    loop -= 1;
                }
            }

            Bitmap resultBmp = new Bitmap(newWidth, newHeight - titik.YKiri);

            for (int x = 1; x < resultBmp.Width - 1; x++)
            {
                for (int y = 1; y < resultBmp.Height - 1; y++)
                {
                    resultBmp.SetPixel(x, y, newBmp.GetPixel(x, y));
                }
            }

            return(resultBmp);
        }
예제 #7
0
        //Deteksi Titik Kiri dan Kanan Mata
        bool DetekKiriKanan(Bitmap bmp, Titik titik)
        {
            titik.KiriKanan = true; //Jika tepi mata terdeteksi dengan sempurna

            int height = bmp.Height;
            int width  = bmp.Width;

            bool titikKiri  = false;
            bool titikKanan = false;

            //titik kiri
            int i = 1;
            int j = 0;

            for (i = 1; i < width; i++)
            {
                for (j = height / 3; j < height / 1.5; j++)
                {
                    int pixelR = bmp.GetPixel(i, j).R;
                    int pixelG = bmp.GetPixel(i, j).G;
                    int pixelB = bmp.GetPixel(i, j).B;

                    if (pixelR == 0 || pixelG == 0 || pixelB == 0)
                    {
                        titik.XKiri = i;
                        titik.YKiri = j;
                        titikKiri   = true;
                        break;
                    }
                }

                if (titikKiri == true)
                {
                    break;
                }
            }

            if (titikKiri == false)
            {
                titik.KiriKanan = false;
                return(titik.KiriKanan);
            }


            //titik kanan
            for (i = width - 2; i > 1; i--)
            {
                for (j = height / 3; j < height / 1.5; j++)
                {
                    int pixelR = bmp.GetPixel(i, j).R;
                    int pixelG = bmp.GetPixel(i, j).G;
                    int pixelB = bmp.GetPixel(i, j).B;

                    if (pixelR == 0 || pixelG == 0 || pixelB == 0)
                    {
                        titik.XKanan = i;
                        titik.YKanan = j;
                        titikKanan   = true;
                        break;
                    }
                }

                if (titikKanan == true)
                {
                    break;
                }
            }

            if (titik.XKiri > width * 0.25 || titik.XKanan < width * 0.75)
            {
                titik.KiriKanan = false;
            }

            return(titik.KiriKanan);
        }