C\#OpenCV 3-EigenFaceRecognizer 얼굴 인식 사용
3573 단어 c#프로 그래 밍컴퓨터 시각C#OpenCV 시리즈
...
public void TrainRecognizer()
{
var allFaces = new FRService().All();
if (allFaces.Count > 0)
{
var faceImages = new Image[allFaces.Count];
var faceLabels = new int[allFaces.Count];
for (int i = 0; i < allFaces.Count; i++)
{
Stream stream = new MemoryStream();
stream.Write(allFaces[i].Face, 0, allFaces[i].Face.Length);
var faceImage = new Image(new Bitmap(stream));
faceImages[i] = faceImage.Resize(100, 100, Inter.Cubic);
faceLabels[i] = (int)(allFaces[i].Id);
}
// can also try :LBPHFaceRecognizer
var fr = new EigenFaceRecognizer();
fr.Train(faceImages, faceLabels);
var retPath = ConfigurationManager.AppSettings["trainedPath"];
var savedFile = retPath + $"{DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss")}_frModel";
fr.Save(savedFile);
MessageBox.Show($"Model trained successfully. saved into {savedFile}");
}
else
{
MessageBox.Show("No face found in db");
}
}
...
얼굴 데이터 서비스 클래스
public class FRService
{
public bool Enroll(UserFace record, out string error)
{
error = "";
try
{
using (var context = new EmguFRContext())
{
var existing = context.UserFaces.FirstOrDefault(x => x.UserName == record.UserName);
if (existing != null)
{
context.UserFaces.Remove(existing);
}
context.UserFaces.Add(record);
context.SaveChanges();
}
return true;
}
catch (DbEntityValidationException ex)
{
error = ex.Message;
if (ex.InnerException != null)
{
error += "\r
" + ex.InnerException;
}
return false;
}
catch (Exception ex)
{
error = ex.Message;
return false;
}
}
public IList All()
{
try
{
using (var context = new EmguFRContext())
{
var all = context.UserFaces.ToList();
return all;
}
}
catch (Exception ex)
{
return new List();
}
}
}
public partial class EmguFRContext : DbContext
{
public EmguFRContext()
: base("name=FRDataContext")
{
}
public virtual DbSet UserFaces { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
[Table("UserFace")]
public partial class UserFace
{
public long Id { get; set; }
[StringLength(50)]
public string UserName { get; set; }
[Column(TypeName = "image")]
public byte[] Face { get; set; }
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.