כך תפתחו אפליקציות שיזהו פנים, ינתחו תמונות ומה לא

רוצים להיות חלק מעיצוב ופיתוח העתיד? רוצים לפתח אפליקצייה המאפשרת אינטרקציה טבעית, מגניבה ואינטואטיבית? הגעתם למקום הנכון.

תמונה: צילומסך

תמונה: צילומסך

הפוסט נכתב על ידי עמית וקובי, מפתחים מצוות הפיתוח של מחשוב תפיסתי באינטל ישראל.

דמיינו מצב שבו כשהמחשב שלכם מזהה אתכם מתקרבים הוא אוטומטית מתיר את המשך השימוש מבלי שתצטרכו להקליד את הסיסמא שלכם. לאחר מכן תוכלו לשלוט על המחשב בעזרת פקודות קוליות ולשחק בעזרת הידיים שלכם.

אילו אפליקציות ושימושים הייתם יכולים לייצר אם היה לכם את היכולות האלו? בעצם, יש לכם.

אינטל שיחררה לאחרונה ערכת פיתוח (Perceptual Computing SDK) הכוללת יכולות מתקדמות בתחום הראייה הממוחשבת וההבנה של המשתמש. המטרה היא כאמור הפחתת מחסומי השימוש באלגוריתמים מתקדמים והסטת הפוקוס של מפתחי היישומים מקידוד פרטי האלגוריתמים לשימוש באלגוריתמים אלה ולאפשר למפתחים לעצב את חווית המשתמש הבאה.

מה ניתן לעשות?

הערכה מאפשרת פיתוח אפליקציות מתקדמות המעשירות את האינטרקציה וכוללות:

1. זיהוי פנים
a. זיהוי המשתמש
b. מיקום הפנים במרחב התמונה
c. מאפיינים כגון מין, תווך גילאים, עיניים עצומות או פתוחות והבעות פנים (כרגע רק חיוך).

2. זיהוי דיבור
a. זיהוי דיבור חופשי לפי מודל סטטיסטי.
b. זיהוי פקודות (זיהוי מילה אחת מתוך קבוצת מילים נתונה).

3. מציאות מעושרת
a. זיהוי תמונות (מיקום ואוריאנטציה ביחס למצלמה).

הדגמת זיהוי הפנים

הדגמת זיהוי הפנים

אם ברשותכם מצלמת עומק הניתנת לרכישה באתר, אז ישנן עוד יכולות מעיניינות:

1. זיהוי ידים ואצבעות
a. המצלמה מאפשרת זיהוי ידיים (שמאל וימין) ואצבעות. על כל אצבע יש מידע על המרחק והמיקום בתמונה.

pic1

2. זיהוי מחוות ידיים
a. בנוסף לזיהוי ידיים בלבד, אינטל מאפשרת זיהוי מחוות למשל לייק.

pic2

3. תמונת עומק
a. כמו כן, תמונת העומק ניתנת לשימושכם כמפתחים. לכל פיקסל בתמונה יש ערך המייצג את המרחק (או עומק) מהמצלמה. בתמונה שלמטה רואים פיקסלים קרובים כבהירים יותר ופיקסלים רחוקים ככהים יותר.

ועוד ועוד ועוד.

להרשמה להאקתון בנושא מחשוב תפיסתי שתערוך אינטל ב-17 ביולי

מה צריך כדי לפתח אפליקציה שכזו?

חומרה:
1. מחשב (נייד, נייח או טאבלט) הכולל 2nd, 3rd or 4th Generation Intel® Core™ processor with Intel® 64 architecture.
2. מצלמת רשת (חיצונית או זאת שבתוך המכשיר הנייד).
3. לפחות 500 מגה פנוי.

תוכנה:
1. מערכת ההפעלה של מיקרוסופט: חלונות 7 או 8 עם גרסת הדסקטופ.
2. ערכת הפיתוח: ניתן להוריד בחינם מהאתר.
3. סביבת פיתוח. אפשר להוריד בחינם את סביבת הפיתוח של מיקרוסופט Visual Studio 2008/2010/2012 Express.

Tutorial:
ערכת הפיתוח תומכת בשפות C++,C# ו – Unity Pro. אנחנו נראה דוגמא לשימוש פשוט במודול זיהוי הפנים הניתן להפעלה ללא מצלמת העומק. את הדוגמא נממש ב-C#, WPF.

האפליקציה אותה נדגים הינה אפליקציה פשוטה אשר מזהה את מיקום הפנים בתמונה ומניחה כובע על הראש אותו היא זיהתה.
נתחיל בהתקנת ערכת הפיתוח. ניתן להוריד את הערכה מהקישור הבא. ב-Visual Studio נפתח פרויקט WPF חדש:

pic3

נוסיף לפרויקט קישור ל-SDK

pic4

ה-DLL נמצא C:\Program Files (x86)\Intel\PCSDK\bin\win32

pic5

עכשיו ניצור Class חדש בשם MyPipeline, ה-Class יורש מ-UtilMPipeline שהוא אחראי על הפעלת ה-SDK.
נגדיר ב–class משתנה בוליאני בשם finished. משתנה זה יעזור לנו בהמשך לסיים את ריצת התוכנית.
בנוסף נגדיר event שבעזרתו נשלח את המידע על מיקום הפנים לשאר חלקי התוכנית:

class MyPipeline : UtilMPipeline
{
public delegate void FacePositionHandler(object sender, Bitmap bitmap, int x, int y, int w, int h);
public event FacePositionHandler FaceEvent;

private bool finished;
{

ב-Constructor נאפשר את היכולות של ה-SDK בהם אנו מעוניינים להשתמש, במקרה שלנו: התמונה מהמצלמה ומיקום הפנים.

public MyPipeline():base()
{
EnableFaceLocation();
EnableImage(PXCMImage.ColorFormat.COLOR_FORMAT_RGB24);
}

המתודה הבאה הינה מתודה שנקראת בכל פעם שתמונה חדשה מתקבלת מהמצלמה. במתודה זו נקבל את המידע על זיהוי הפנים. עבור כל תמונה חדשה שמתקבלת המתודה שולחת event המכיל מידע על זיהוי הפנים וכן מכיל גם את התמונה שהתקבלה.

public override bool OnNewFrame()
{
ulong timeStamp;
int faceId;
uint fidx = 0;
PXCMFaceAnalysis.Detection faceLocation;
PXCMFaceAnalysis.Detection.Data faceLocationData;
Bitmap _bitmap;

isReady = true;
PXCMFaceAnalysis faceAnalysis = QueryFace();
faceAnalysis.QueryFace(fidx, out faceId, out timeStamp);

//Get face location
faceLocation =(PXCMFaceAnalysis.Detection)faceAnalysis.DynamicCast(
PXCMFaceAnalysis.Detection.CUID);
pxcmStatus locationStatus = faceLocation.QueryData(faceId,
out faceLocationData);

int x = (int)(faceLocationData.rectangle.x);
int y = (int)(faceLocationData.rectangle.y);
int w = (int)(faceLocationData.rectangle.w);
int h = (int)(faceLocationData.rectangle.h);

/******************************RGB********************************/
PXCMImage rgbPXCMImage = QueryImage(PXCMImage.ImageType.IMAGE_TYPE_COLOR);

PXCMImage.ImageData rgbData;
if (rgbPXCMImage.AcquireAccess(PXCMImage.Access.ACCESS_READ, out rgbData)
== pxcmStatus.PXCM_STATUS_NO_ERROR)
{
rgbPXCMImage.QueryBitmap(QuerySession(), out _bitmap);

if (FaceEvent != null && _bitmap != null)
{
FaceEvent(this, (Bitmap)_bitmap.Clone(), x, y, w, h);

_bitmap.Dispose();
}
}

rgbPXCMImage.ReleaseAccess(ref rgbData);
return !finished;
}

נצרף עוד שתי מתודות שישמשו להרצת התוכנית ועצירתה.

public void Finish()
{
finished = true;
}

public void StartWork()
{
finished = false;
this.LoopFrames();
}

הביטוי this.LoopFrames() מפעיל את המתודה OnNewFrame() בלולאה שמסתיימת כאשר המתודה OnNewFrame() מחזירה false.

נרצה להריץ את הלוגיקה של MyPipeline ב-thred נפרד, לכן ניצור class חדש בשם PercFacade שיעשה זאת:

static class PercFacade
{

public static DepthPipeline depthPipe;
private static Thread thread;

public static void InitFacade()
{
depthPipe = new DepthPipeline();
thread = new Thread(new ThreadStart(depthPipe.StartWork));
thread.Start();
}

public static bool IsWorking()
{
return thread.IsAlive;
}

public static void EndWork()
{
if (depthPipe != null)
{
depthPipe.Finish();
thread.Join();
    }
  }
}

עכשיו כל שנותר לנו לעשות כדי להשתמש ב-PercFacade הוא לקרוא למתודה הסטטית InitFacade() ולהירשם ל – event שנשלח מ – MyPipeline.

הקוד המלא מצורף לאפליקציה זו. ניתן למצוא עוד עזרה בתחום בפורום.

מידע נוסף בפייסבוק.

האקאתון

ב-17-18 ביולי יתקיים האקאתון (Hackathon) במרכז הפיתוח בחיפה. האירוע מיועד למפתחי תוכנה מתחילים ומנוסים, חדשניים ומקוריים, אשר יוכלו להציע רעיונות ולפתח אפליקציות המשתמשות ב-Perceptual Computing SDK ובמצלמות התלת ממדיות של החברה.

הכתבה בחסות אינטל

במרכז הפיתוח בחיפה עובד בימים אלה צוות בראשות מולי אדן, נשיא אינטל ישראל , בנושא המיחשוב התפיסתי. הצוות מבוסס על יוצאי חברת הסטארט-אפ אינויז'ן מיקנעם, אשר נרכשה על ידי אינטל, יחד עם עשרות רבות של מהנדסים נוספים, שכעת נמצאים תחת בקבוצת המיחשוב התפיסתי. הקבוצה היחודית עובדת כדי ליצור דרך התקשורת חדשה בין אדם למחשב. אינטל מאמינה שמיחשוב תפיסתי צפוי לחולל מהפכה באופן שבו אנשים נמצאים באינטראקציה עם מחשבי ה-PC שלהם.

ערכת פיתוח התוכנה שאינטל מציעה כעת בתחום המיחשוב תפיסתי מאפשרת למפתחים לפתח אפליקציות סביב יכולות כמו זיהוי פנים מקרוב, מעקב אחר אצבע המשתמשים, ניתוח פנים, מעקב אחר אובייקטים דו ותלת ממדיים – וכעת גם זיהוי דיבור.

ערכת הפיתוח של אינטל למיחשוב תפיסתי עובדת כיום במקביל עם מצלמת וערכת פיתוח של חברת Creative Technology ועם ערכת פיתוח דרגון של חברת ניואנס. בחלק המוקדש באתר שלה לתחום המיחשוב התפיסתי.

Avatar

כתב אורח

אנחנו מארחים מפעם לפעם כותבים טכנולוגים אורחים, המפרסמים כתבות בתחומי התמחות שלהם. במידה ואתם מעוניינים לפרסם פוסט בשמכם, פנו אלינו באמצעות טופס יצירת קשר באתר.

הגב

1 תגובה על "כך תפתחו אפליקציות שיזהו פנים, ינתחו תמונות ומה לא"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.

סידור לפי:   חדש | ישן | הכי מדורגים
שוקי מARM
Guest

הכי מצחיק שרשום שבשביל לפתח כאלה אפליקציות צריך מעבד של אינטל

wpDiscuz

תגיות לכתבה: