Add code to take photo from camera, needs fine-tuning

This commit is contained in:
kougyokugentou 2021-01-22 21:35:23 -08:00
parent e2a36e00c9
commit bdeb116e14
3 changed files with 202 additions and 74 deletions

132
frmChildCrud.Designer.cs generated
View File

@ -34,9 +34,11 @@
System.Windows.Forms.Label raceLabel;
System.Windows.Forms.Label genderLabel;
System.Windows.Forms.Label photoLabel;
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmChildCrud));
System.Windows.Forms.Label addressLabel;
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmChildCrud));
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.firstNameTextBox = new System.Windows.Forms.TextBox();
this.childBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.lastNameTextBox = new System.Windows.Forms.TextBox();
this.raceTextBox = new System.Windows.Forms.TextBox();
this.genderComboBox = new System.Windows.Forms.ComboBox();
@ -49,29 +51,30 @@
this.PhoneNumber = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.EmailAddress = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.btnAddGuardian = new System.Windows.Forms.Button();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.btnEditGuardian = new System.Windows.Forms.Button();
this.btnDeleteGuardian = new System.Windows.Forms.Button();
this.btnPhotoFromCam = new System.Windows.Forms.Button();
this.btnStartCam = new System.Windows.Forms.Button();
this.btnPhotoFromDisk = new System.Windows.Forms.Button();
this.btnSave = new System.Windows.Forms.Button();
this.photoPictureBox = new System.Windows.Forms.PictureBox();
this.btnCancel = new System.Windows.Forms.Button();
this.idNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.openFileDialogPhotoFromDisk = new System.Windows.Forms.OpenFileDialog();
this.childBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.frmChildCrudBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.photoPanel = new System.Windows.Forms.Panel();
this.btnTakePhoto = new System.Windows.Forms.Button();
firstNameLabel = new System.Windows.Forms.Label();
lastNameLabel = new System.Windows.Forms.Label();
raceLabel = new System.Windows.Forms.Label();
genderLabel = new System.Windows.Forms.Label();
photoLabel = new System.Windows.Forms.Label();
addressLabel = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.childBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dgvGuardians)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.photoPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.idNumericUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.childBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.frmChildCrudBindingSource)).BeginInit();
this.photoPanel.SuspendLayout();
this.SuspendLayout();
//
// firstNameLabel
@ -119,6 +122,31 @@
photoLabel.TabIndex = 21;
photoLabel.Text = "photo:";
//
// addressLabel
//
addressLabel.AutoSize = true;
addressLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
addressLabel.ImageIndex = 1;
addressLabel.ImageList = this.imageList1;
addressLabel.Location = new System.Drawing.Point(12, 165);
addressLabel.Name = "addressLabel";
addressLabel.Size = new System.Drawing.Size(84, 17);
addressLabel.TabIndex = 9;
addressLabel.Text = " Address:";
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "AddButton_16x.png");
this.imageList1.Images.SetKeyName(1, "Address_16x.png");
this.imageList1.Images.SetKeyName(2, "Camera_16x.png");
this.imageList1.Images.SetKeyName(3, "Cancel_16x.png");
this.imageList1.Images.SetKeyName(4, "DeleteUser_16x.png");
this.imageList1.Images.SetKeyName(5, "Edit_16x.png");
this.imageList1.Images.SetKeyName(6, "SaveClose_16x.png");
this.imageList1.Images.SetKeyName(7, "OpenfileDialog_16x.png");
//
// firstNameTextBox
//
this.firstNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.childBindingSource, "FirstName", true));
@ -127,6 +155,10 @@
this.firstNameTextBox.Size = new System.Drawing.Size(100, 22);
this.firstNameTextBox.TabIndex = 2;
//
// childBindingSource
//
this.childBindingSource.DataSource = typeof(GreatHomeChildcare.Models.Child);
//
// lastNameTextBox
//
this.lastNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.childBindingSource, "LastName", true));
@ -243,19 +275,6 @@
this.btnAddGuardian.UseVisualStyleBackColor = true;
this.btnAddGuardian.Click += new System.EventHandler(this.btnAddGuardian_Click);
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "AddButton_16x.png");
this.imageList1.Images.SetKeyName(1, "Address_16x.png");
this.imageList1.Images.SetKeyName(2, "Camera_16x.png");
this.imageList1.Images.SetKeyName(3, "Cancel_16x.png");
this.imageList1.Images.SetKeyName(4, "DeleteUser_16x.png");
this.imageList1.Images.SetKeyName(5, "Edit_16x.png");
this.imageList1.Images.SetKeyName(6, "SaveClose_16x.png");
this.imageList1.Images.SetKeyName(7, "OpenfileDialog_16x.png");
//
// btnEditGuardian
//
this.btnEditGuardian.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
@ -282,25 +301,25 @@
this.btnDeleteGuardian.UseVisualStyleBackColor = true;
this.btnDeleteGuardian.Click += new System.EventHandler(this.btnDeleteGuardian_Click);
//
// btnPhotoFromCam
// btnStartCam
//
this.btnPhotoFromCam.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnPhotoFromCam.ImageIndex = 2;
this.btnPhotoFromCam.ImageList = this.imageList1;
this.btnPhotoFromCam.Location = new System.Drawing.Point(325, 204);
this.btnPhotoFromCam.Name = "btnPhotoFromCam";
this.btnPhotoFromCam.Size = new System.Drawing.Size(146, 42);
this.btnPhotoFromCam.TabIndex = 18;
this.btnPhotoFromCam.Text = "From Camera";
this.btnPhotoFromCam.UseVisualStyleBackColor = true;
this.btnPhotoFromCam.Click += new System.EventHandler(this.btnPhotoFromCam_Click);
this.btnStartCam.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnStartCam.ImageIndex = 2;
this.btnStartCam.ImageList = this.imageList1;
this.btnStartCam.Location = new System.Drawing.Point(325, 204);
this.btnStartCam.Name = "btnStartCam";
this.btnStartCam.Size = new System.Drawing.Size(146, 42);
this.btnStartCam.TabIndex = 18;
this.btnStartCam.Text = "Start Camera";
this.btnStartCam.UseVisualStyleBackColor = true;
this.btnStartCam.Click += new System.EventHandler(this.btnStartCam_Click);
//
// btnPhotoFromDisk
//
this.btnPhotoFromDisk.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnPhotoFromDisk.ImageIndex = 7;
this.btnPhotoFromDisk.ImageList = this.imageList1;
this.btnPhotoFromDisk.Location = new System.Drawing.Point(323, 263);
this.btnPhotoFromDisk.Location = new System.Drawing.Point(325, 263);
this.btnPhotoFromDisk.Name = "btnPhotoFromDisk";
this.btnPhotoFromDisk.Size = new System.Drawing.Size(147, 41);
this.btnPhotoFromDisk.TabIndex = 19;
@ -324,8 +343,9 @@
// photoPictureBox
//
this.photoPictureBox.DataBindings.Add(new System.Windows.Forms.Binding("Image", this.childBindingSource, "photo", true));
this.photoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.photoPictureBox.Image = global::GreatHomeChildcare.Properties.Resources.child;
this.photoPictureBox.Location = new System.Drawing.Point(323, 21);
this.photoPictureBox.Location = new System.Drawing.Point(0, 0);
this.photoPictureBox.Name = "photoPictureBox";
this.photoPictureBox.Size = new System.Drawing.Size(156, 161);
this.photoPictureBox.TabIndex = 22;
@ -355,42 +375,49 @@
this.idNumericUpDown.TabStop = false;
this.idNumericUpDown.Visible = false;
//
// addressLabel
//
addressLabel.AutoSize = true;
addressLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
addressLabel.ImageIndex = 1;
addressLabel.ImageList = this.imageList1;
addressLabel.Location = new System.Drawing.Point(12, 165);
addressLabel.Name = "addressLabel";
addressLabel.Size = new System.Drawing.Size(84, 17);
addressLabel.TabIndex = 9;
addressLabel.Text = " Address:";
//
// openFileDialogPhotoFromDisk
//
this.openFileDialogPhotoFromDisk.FileName = "openFileDialog1";
//
// childBindingSource
//
this.childBindingSource.DataSource = typeof(GreatHomeChildcare.Models.Child);
//
// frmChildCrudBindingSource
//
this.frmChildCrudBindingSource.DataSource = typeof(GreatHomeChildcare.frmChildCrud);
//
// photoPanel
//
this.photoPanel.Controls.Add(this.photoPictureBox);
this.photoPanel.Location = new System.Drawing.Point(315, 21);
this.photoPanel.Name = "photoPanel";
this.photoPanel.Size = new System.Drawing.Size(156, 161);
this.photoPanel.TabIndex = 25;
//
// btnTakePhoto
//
this.btnTakePhoto.Enabled = false;
this.btnTakePhoto.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnTakePhoto.ImageIndex = 2;
this.btnTakePhoto.ImageList = this.imageList1;
this.btnTakePhoto.Location = new System.Drawing.Point(487, 204);
this.btnTakePhoto.Name = "btnTakePhoto";
this.btnTakePhoto.Size = new System.Drawing.Size(136, 42);
this.btnTakePhoto.TabIndex = 26;
this.btnTakePhoto.Text = "Take Photo";
this.btnTakePhoto.UseVisualStyleBackColor = true;
this.btnTakePhoto.Click += new System.EventHandler(this.btnTakePhoto_Click);
//
// frmChildCrud
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(834, 608);
this.Controls.Add(this.btnTakePhoto);
this.Controls.Add(this.photoPanel);
this.Controls.Add(this.idNumericUpDown);
this.Controls.Add(this.btnCancel);
this.Controls.Add(photoLabel);
this.Controls.Add(this.photoPictureBox);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.btnPhotoFromDisk);
this.Controls.Add(this.btnPhotoFromCam);
this.Controls.Add(this.btnStartCam);
this.Controls.Add(this.btnDeleteGuardian);
this.Controls.Add(this.btnEditGuardian);
this.Controls.Add(this.btnAddGuardian);
@ -409,11 +436,12 @@
this.Name = "frmChildCrud";
this.Text = "Child Management : Great Home Childcare";
this.Load += new System.EventHandler(this.frmChildCrud_Load);
((System.ComponentModel.ISupportInitialize)(this.childBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dgvGuardians)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.photoPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.idNumericUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.childBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.frmChildCrudBindingSource)).EndInit();
this.photoPanel.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -432,7 +460,7 @@
private System.Windows.Forms.Button btnAddGuardian;
private System.Windows.Forms.Button btnEditGuardian;
private System.Windows.Forms.Button btnDeleteGuardian;
private System.Windows.Forms.Button btnPhotoFromCam;
private System.Windows.Forms.Button btnStartCam;
private System.Windows.Forms.Button btnPhotoFromDisk;
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.Button btnSave;
@ -446,5 +474,7 @@
private System.Windows.Forms.DataGridViewTextBoxColumn PhoneNumber;
private System.Windows.Forms.DataGridViewTextBoxColumn EmailAddress;
private System.Windows.Forms.OpenFileDialog openFileDialogPhotoFromDisk;
private System.Windows.Forms.Panel photoPanel;
private System.Windows.Forms.Button btnTakePhoto;
}
}

View File

@ -5,9 +5,15 @@ using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using GreatHomeChildcare.Models;
using OpenCvSharp;
using OpenCvSharp.Extensions;
//Refs:
// https://ourcodeworld.com/articles/read/761/how-to-take-snapshots-with-the-web-camera-with-c-sharp-using-the-opencvsharp-library-in-winforms
namespace GreatHomeChildcare
{
@ -18,6 +24,46 @@ namespace GreatHomeChildcare
//Global instance of the SqliteDataAccess object.
SqliteDataAccess SqliteDataAccess = new SqliteDataAccess();
Child child = new Child();
//Smile, you're on candid camera
VideoCapture capture;
Mat frame;
Bitmap image;
private Thread camera;
bool isCameraRunning = false;
#region camera
//https://ourcodeworld.com/articles/read/761/how-to-take-snapshots-with-the-web-camera-with-c-sharp-using-the-opencvsharp-library-in-winforms
// Declare required methods
private void CaptureCamera()
{
camera = new Thread(new ThreadStart(CaptureCameraCallback));
camera.Start();
}
private void CaptureCameraCallback()
{
frame = new Mat();
capture = new VideoCapture(0);
capture.Open(0);
if (capture.IsOpened())
{
while (isCameraRunning)
{
capture.Read(frame);
image = BitmapConverter.ToBitmap(frame);
if (photoPictureBox.Image != null)
{
photoPictureBox.Image.Dispose();
}
photoPictureBox.Image = image;
}
}
}
#endregion
enum Gender
{
@ -61,7 +107,7 @@ namespace GreatHomeChildcare
*/
private void LoadChild(int child_id_in)
{
Child child = SqliteDataAccess.GetChildByID(child_id_in);
child = SqliteDataAccess.GetChildByID(child_id_in);
Gender genderOut;
// sanity check, though it shouldn't be needed...
@ -101,9 +147,43 @@ namespace GreatHomeChildcare
Close();
}
private void btnPhotoFromCam_Click(object sender, EventArgs e)
private void btnStartCam_Click(object sender, EventArgs e)
{
MessageBox.Show("From cam");
if (btnStartCam.Text.StartsWith("Start"))
{
btnTakePhoto.Enabled = true;
CaptureCamera();
btnStartCam.Text = "Stop Camera";
isCameraRunning = true;
}
else
{
btnTakePhoto.Enabled = false;
capture.Release();
btnStartCam.Text = "Start Camera";
isCameraRunning = false;
}
}
private void btnTakePhoto_Click(object sender, EventArgs e)
{
if (isCameraRunning)
{
// Take snapshot of the current image generate by OpenCV in the Picture Box
Bitmap snapshot = new Bitmap(photoPictureBox.Image);
//TODO: Do something with the new snapshot, desired state is to stick
//whatever image is there on "take photo".
// Save in some directory
// in this example, we'll generate a random filename e.g 47059681-95ed-4e95-9b50-320092a3d652.png
// snapshot.Save(@"C:\Users\sdkca\Desktop\mysnapshot.png", ImageFormat.Png);
//snapshot.Save(string.Format(@"C:\Users\sdkca\Desktop\{0}.png", Guid.NewGuid()), ImageFormat.Png);
}
else
{
MessageBox.Show("Cannot take picture without starting the camera!", "Great Home Childcare", MessageBoxButtons.OK, MessageBoxIcon.None);
}
}
private void btnPhotoFromDisk_Click(object sender, EventArgs e)

View File

@ -132,23 +132,8 @@
<metadata name="photoLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="childBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="id.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LastName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="FirstName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PhoneNumber.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="EmailAddress.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
<metadata name="addressLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>205, 17</value>
@ -158,7 +143,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACO
DgAAAk1TRnQBSQFMAgEBCAEAAYABAAGAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
DgAAAk1TRnQBSQFMAgEBCAEAAZgBAAGYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -223,8 +208,41 @@
AeMBwwX/Ae8B9ws=
</value>
</data>
<metadata name="addressLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
<metadata name="childBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="childBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="id.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LastName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="FirstName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PhoneNumber.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="EmailAddress.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="id.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LastName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="FirstName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PhoneNumber.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="EmailAddress.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="openFileDialogPhotoFromDisk.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>581, 17</value>