کمتر کسی هست که اسم پردازش تصویر رو نشنیده باشه یا با اون کار نکرده باشه. شاید روزمره ترین استفاده شما از این دانش فوقالعاده در تلفن همراه خودتون باشه درست زمانی که دارید یک سلفی از خودتون و دوستانتون میگیرین.
برای من به عنوان یک برنامه نویس بینایی ماشین انتخاب صورت یا لبخند بصورت اتوماتیک خیلی جذاب هست. انتخاب چهره (face detection) یا انواع دیگر اون که قطعا به اون بر خوردین مثل دوربین های راهنمایی و رانندگی (text detection) برای پردازش شماره پلاک خودرو شما کارایی های بسیار روزمره در پردازش تصاویر دیجیتال هستند.
کد زیر نمونه ای از face detection و Recognition در C# هست:
private async void btnProcess_Click(object sender, EventArgs e)
{
Face[] faces = await UploadAndDetectFaces(_imagePath);
if (faces.Length > 0)
{
var faceBitmap = new Bitmap(imgBox.Image);
using (var g = Graphics.FromImage(faceBitmap))
{
g.FillRectangle(new SolidBrush(Color.FromArgb(200, 0, 0, 0)), g.ClipBounds);
var br = new SolidBrush(Color.FromArgb(200, Color.LightGreen));
foreach (var face in faces)
{
var fr = face.FaceRectangle;
var fa = face.FaceAttributes;
var faceRect = new Rectangle(fr.Left, fr.Top, fr.Width, fr.Height);
g.DrawImage(imgBox.Image, faceRect, faceRect, GraphicsUnit.Pixel);
g.DrawRectangle(Pens.LightGreen, faceRect);
var pts = new List<Point>();
Type type = face.FaceLandmarks.GetType();
foreach (PropertyInfo property in type.GetProperties())
{
g.DrawRectangle(Pens.LightGreen, GetRectangle((FeatureCoordinate)property.GetValue(face.FaceLandmarks, null)));
}
int rectTop = fr.Top + fr.Height + 10;
if (rectTop + 45 > faceBitmap.Height) rectTop = fr.Top - 30;
g.FillRectangle(br, fr.Left - 10, rectTop, fr.Width < 120 ? 120 : fr.Width + 20, 25);
g.DrawString(string.Format("{0:0.0} / {1} / {2}", fa.Age, fa.Gender, fa.Emotion.ToRankedList().OrderByDescending(x => x.Value).First().Key),
this.Font, Brushes.Black,
fr.Left - 8,
rectTop + 4);
}
}
imgBox.Image = faceBitmap;
}
}
مهران قارزی