Comment enregistrer l'image captueré par un wabcam dans une base
djimta
Messages postés3Date d'inscriptionmercredi 23 janvier 2013StatutMembreDernière intervention 5 septembre 2014
-
Modifié par Whismeril le 5/09/2014 à 12:38
D4rkTiger
Messages postés22Date d'inscriptionvendredi 11 novembre 2005StatutMembreDernière intervention23 septembre 2014
-
23 sept. 2014 à 18:26
salut!
j'ai une fenêtre WinForm dans la quelle il y a ces éléments:
1/Un picturBox1(Qui capture l'image a partir d'un Webcam)
2/ Un PicturBox2(qui afficher l'image capture lors de l'enregistrement )
3/ boute1 (c'est le bouton qui lance le camera de capture dans le PictureBox1 pour détecter un reconnaitre le visage )
2/ bouton2 (Pour ajouter l'image dans une base de donnée XML) le visage est ajouter dans un dossier ou il contient seulement le nom et le num de l'image est affiché sur un label, lorsque l'image est détecte,il affiche le nom de l'image et le numéro de l'image sur un label.
je n'arrive pas à enregistrer tous ces informations dans une base de donné sqlServer205
Mainant comment on peut enregistrée tous ces information dans une base de donnée sqlserver2005(IDimage,NomImage,Image) et afficher les information de l'image détecté, le nom de l'image et le numéro de l'image et l'image.
Voici le code que je utilisé pour enregistrer dans une base de donnée sqlsrever2005 et detection de l'image a partir de la base de donnée sqlserver2005
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Diagnostics;
using Microsoft.VisualBasic;
using System.Data;
namespace MultiFaceRec
{
public partial class FrmPrincipal : Form
{
OleDbConnection con = new OleDbConnection();
OleDbCommand AddData = new OleDbCommand();
DataSet DR = new DataSet();
OleDbDataAdapter Jm;
string Mphoto;
int a, MaxRows;
int NumImage;
string Imagedetect = "";
string ImageLire = "";
OleDbCommand SelectData;
Declararation of all variables, vectors and haarcascades
Image<Bgr, Byte> currentFrame;
Capture grabber;
HaarCascade face;
HaarCascade eye;
MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_TRIPLEX, 0.5d, 0.5d);
Image<Gray, byte> result, TrainedFace = null;
Image<Gray, byte> gray = null;
List<Image<Gray, byte>> trainingImages = new List<Image<Gray, byte>>();
List<string> labels= new List<string>();
List<string> NamePersons = new List<string>();
int ContTrain, NumLabels, t;
string name, names = null;
public FrmPrincipal()
{
InitializeComponent();
//Load haarcascades for face detection
face = new HaarCascade("haarcascade_frontalface_default.xml");
//eye = new HaarCascade("haarcascade_eye.xml");
try
{
//con.ConnectionString = "Provider=SQLOLEDB; Data Source=.\\SQLEXPRESS;initial catalog=Projetmemoire;integrated Security = SSPI";
//con.Open();
//Mphoto = "Select* from Photo ";
Jm = new OleDbDataAdapter(Mphoto, con);
Jm.Fill(DR, "Projetmemoire");
Navigate();
MaxRows = DR.Tables[0].Rows.Count;
con.Close();
a = 0;
Load of previus trainned faces and labels for each image
string Labelsinfo = File.ReadAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt");
string[] Labels = Labelsinfo.Split('%');
NumLabels = Convert.ToInt16(Labels[0]);
ContTrain = NumLabels;
string LoadFaces;
for (int tf = 1; tf < NumLabels+1; tf++)
{
LoadFaces = "face" + tf + ".bmp";
trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "/TrainedFaces/"+ LoadFaces));
labels.Add(Labels[tf]);
}
}
catch(Exception e)
{
//MessageBox.Show(e.ToString());
MessageBox.Show("Nothing in binary database, please add at least a face(Simply train the prototype with the Add Face Button).", "Triained faces load", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void button1_Click(object sender, EventArgs e)
{
//Initialize the capture device
grabber = new Capture();
grabber.QueryFrame();
//Initialize the FrameGraber event
Application.Idle += new EventHandler(FrameGrabber);
button1.Enabled = false;
}
private void button2_Click(object sender, System.EventArgs e)
{
try
{
con.Open();
AddData.CommandText = "Inser into Photo(NumImage,NomImage,Image)Value(" + int.Parse(TxtNumImage.Text) + ",'" + TxtNomImage.Text + "','" + imageBox1 + "' ) ";
AddData.CommandType = CommandType.Text;
AddData.CommandText = "insert into Photo (StartupPath,NumImage,NomImage,Imagedetec) values(@StartupPath, @NumImage,@NomImage,@Imagedetec)";
AddData.CommandType = CommandType.Text;
AddData.Parameters.Add(new SqlParameter("@StartupPath", (object)face));
AddData.Parameters.Add(new SqlParameter("@NumImage", (object)TxtNumImage.Text));
AddData.Parameters.Add(new SqlParameter("@NomImage", (object)TxtNomImage.Text));
AddData.Parameters.Add(new SqlParameter("@Imagedetec", (object)TrainedFace));
AddData.Connection = con;
con.Open();
AddData.ExecuteNonQuery();
con.Close();
Trained face counter
ContTrain = ContTrain + 1;
//Get a gray frame from capture device
gray = grabber.QueryGrayFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
//Face Detector
MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
face,
1.2,
10,
Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
new Size(30, 30));
//Action for each element detected
foreach (MCvAvgComp f in facesDetected[0])
{
TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>();
break;
}
//resize face detected image for force to compare the same size with the
//test image with cubic interpolation type method
TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
trainingImages.Add(TrainedFace);
labels.Add(TxtNomImage.Text);
//Show face added in gray scale
imageBox1.Image = TrainedFace;
//Write the number of triained faces in a file text for further load
File.WriteAllText(Application.StartupPath + "/TrainedFac/TrainedLabels.txt", trainingImages.ToArray().Length.ToString() + "%");
//Write the labels of triained faces in a file text for further load
for (int i = 1; i < trainingImages.ToArray().Length + 1; i++)
{
trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp");
File.AppendAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt", labels.ToArray()[i - 1] + "%");
// MessageBox.Show("Vous avez ajouté un enregistrement avec succès");
}
MessageBox.Show(TxtNomImage.Text + "'s face detected and added :)", "Training OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("Enable the face detection first", "Training Fail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
MessageBox.Show("Probleme d'ajout de l'enregistrement");
}
}
void FrameGrabber(object sender, EventArgs e)
{
label3.Text = "0";
//label4.Text = "";
NamePersons.Add("");
//Get the current frame form capture device
currentFrame = grabber.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
//Convert it to Grayscale
gray = currentFrame.Convert<Gray, Byte>();
//Face Detector
MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
face,
1.2,
10,
Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
new Size(20, 20));
//Action for each element detected
foreach (MCvAvgComp f in facesDetected[0])
{
t = t + 1;
result = currentFrame.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
//draw the face detected in the 0th (gray) channel with blue color
currentFrame.Draw(f.rect, new Bgr(Color.Red), 2);
if (trainingImages.ToArray().Length != 0)
{
//TermCriteria for face recognition with numbers of trained images like maxIteration
MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001);
//Eigen face recognizer
EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
trainingImages.ToArray(),
labels.ToArray(),
3000,
ref termCrit);
name = recognizer.Recognize(result);
//Draw the label for each face detected and recognized
currentFrame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.LightGreen));
}
NamePersons[t-1] = name;
NamePersons.Add("");
//Set the number of faces detected on the scene
label3.Text = facesDetected[0].Length.ToString();
}
t = 0;
//Names concatenation of persons recognized
for (int nnn = 0; nnn < facesDetected[0].Length; nnn++)
{
names = names + NamePersons[nnn] + ", ";
}
//Show the faces procesed and recognized
imageBoxFrameGrabber.Image = currentFrame;
label4.Text = names;
names = "";
//Clear the list(vector) of names
NamePersons.Clear();
}
private void FrmPrincipal_Load(object sender, EventArgs e)
{
}
}
}
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024344 5 sept. 2014 à 12:58
Bonjour,
comment on peut enregistrée tous ces information dans une base de donnée sqlserver2005(IDimage,NomImage,Image) et afficher les information de l'image détecté, le nom de l'image et le numéro de l'image et l'image.
Voici le code que je utilisé pour enregistrer dans une base de donnée sqlsrever2005 et detection de l'image a partir de la base de donnée sqlserver2005
... Si tu as déjà le code... à quoi servons nous ????
par contre.. si ton code ne fonctionne pas....là... il va falloir que tu sois plus explicite...
- Quel est le comportement attendu de ton code... ?
- Quel est le comportement actuel de ton code (et qui te popse problème) ?
- Si tu as des messages d'erreur.... donne les nous ...
NB :
sqlserver2005(IDimage,NomImage,Image)
Pour ce qui est de "stocker" l'image dans la BDD .. je te dirai qu'il est plutôt préférable de la stocker SUR le serveur... et de ne mettre dans la BDD .. QUE le chemin pour y accéder.
djimta
Messages postés3Date d'inscriptionmercredi 23 janvier 2013StatutMembreDernière intervention 5 septembre 2014 5 sept. 2014 à 13:39
le problème en est que je n'arrive pas à stoker dans ma base de donnée sqlserver2005 avec le code que je ajouté pour enregistrer dans la base de donnée; avant on enregistrer les donnée dans un dossier,je cherche comment les enregistrés dans un base de donnée sqlserver2005 pour chaque fois établir le rapport.Vous pouvez voir le code de détection de visage les images sont enregistré dans un dossier TrainedFace; Comment mainent le ramèner dans une base de donnée sqlserver?
Si vous avez des ajouts ou des modification sur le code veuillez nous aidé.
cordialement djimta.