添加面部跟蹤和實時識別到您的Android應(yīng)用程序-創(chuàng)新互聯(lián)

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有霞浦免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

今天的相機(jī)應(yīng)用可以做的不僅僅是拍完美的照片。無論是添加過濾器到您的圖像或讓您調(diào)整焦點和手動曝光,應(yīng)用程序可以從根本上把你變成一個專業(yè)攝影師。雖然應(yīng)用商店中的眾多應(yīng)用程序讓你用相機(jī)做很多事情,還有其他人可以實時地對你的圖像進(jìn)行巧妙的操作,例如在臉上添加自定義掩碼,操縱你的臉看起來更老或更年輕,和更多的。今天的社交媒體應(yīng)用程序有這樣的智能,所以你不必打開另一個應(yīng)用程序讓你的自拍看起來平凡的在你與朋友和家人分享。

無論是構(gòu)建一個提供有趣過濾器的用戶應(yīng)用程序,還是一個識別收入的企業(yè)應(yīng)用程序,添加像這樣的智能輪胎讓你比其他人更有優(yōu)勢。通過像微軟認(rèn)知服務(wù)API這樣的服務(wù),您只需添加幾行代碼即可快速分析和處理照片。

在這篇文章中,您將學(xué)習(xí)如何在Android應(yīng)用程序中顯示一個攝像頭,通過使用Google的移動視覺的APIs添加面部跟蹤并使用微軟認(rèn)知服務(wù)的API通過前置相機(jī)來識別人臉。

添加面部跟蹤和實時識別到您的Android應(yīng)用程序

在應(yīng)用程序中添加面部跟蹤

Google的移動視覺提供了一組用于“檢測面部”和“掃描條碼”的API。對于這個示例,我將使用面部API從應(yīng)用程序中的實時攝像機(jī)流中檢測人臉。

開始, 添加 Xamarin.GooglePlayServices.Vision的 NuGet包。

添加面部跟蹤和實時識別到您的Android應(yīng)用程序

為了在Android上訪問相機(jī),你需要在你的Android的mainifest中添加你的用戶權(quán)限請求和相機(jī)功能:

點擊(此處)折疊或打開

  1. if (ActivityCompat.CheckSelfPermission(this, Manifest.Permission.Camera) == Permission.Granted)

  2. {

  3.     CreateCameraSource();

  4.     //...

  5. }

  6. else

  7. {

  8. Log.Warn(TAG, "Camera permission is not granted. Requesting permission");

  9. var permissions = new string[] { Manifest.Permission.Camera };

  10. if (!ActivityCompat.ShouldShowRequestPermissionRationale(this,

  11.         Manifest.Permission.Camera))

  12. {

  13.     ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);

  14.     return;

  15. }

  16. Snackbar.Make(mGraphicOverlay, Resource.String.permission_camera_rationale,

  17.         Snackbar.LengthIndefinite)

  18.         .SetAction(Resource.String.ok, (o) => { ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM); })

  19.         .Show();

  20. }

創(chuàng)建相機(jī)源

通過指定的屬性使用FaceDetector.Builder創(chuàng)建FaceDetector的一個實例。在本例中,我們使用默認(rèn)的面部檢測器設(shè)置,并將處理器關(guān)聯(lián)到它。

點擊(此處)折疊或打開

  1. private void CreateCameraSource()

  2. {

  3.     var context = Application.Context;

  4.     FaceDetector detector = new FaceDetector.Builder(context)

  5.             .SetClassificationType(ClassificationType.All)

  6.             .Build();

  7.     detector.SetProcessor(

  8.             new MultiProcessor.Builder(this)

  9.                     .Build());

  10.     if (!detector.IsOperational)

  11.     {

  12.         // Note: The first time that an app using face API is installed on a device, GMS will

  13.         // download a native library to the device in order to do detection.  Usually this

  14.         // completes before the app is run for the first time.  But if that download has not yet

  15.         // completed, then the above call will not detect any faces.

  16.         //

  17.         // isOperational() can be used to check if the required native library is currently

  18.         // available.  The detector will automatically become operational once the library

  19.         // download completes on the device.

  20.         Log.Warn(TAG, "Face detector dependencies are not yet available.");

  21.     }

  22.     mCameraSource = new CameraSource.Builder(context, detector)

  23.             .SetRequestedPreviewSize(640, 480)

  24.             .SetFacing(CameraFacing.Front)

  25.             .SetRequestedFps(30.0f)

  26.             .Build();

  27. }

在上面的代碼中, MultiProcessor被用來接收偵測結(jié)果,CameraSource.Builder用來創(chuàng)建一個指定預(yù)覽尺寸,相機(jī)面對面和所需的FPS的相機(jī)源。

在相機(jī)顯示一個實時圖像

現(xiàn)在我們已經(jīng)進(jìn)入相機(jī)并且建立CameraSource,我們也可以通過自定義一個SurfaceView開始預(yù)覽;本例中CameraSourcePreview.GraphicOverlay實例也被傳遞,以便在檢測時繪制面部邊界。

點擊(此處)折疊或打開

  1. private void StartCameraSource()

  2. {

  3.     // check that the device has play services available.

  4.     int code = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(

  5.             this.ApplicationContext);

  6.     if (code != ConnectionResult.Success)

  7.     {

  8.         var dlg =

  9.                 GoogleApiAvailability.Instance.GetErrorDialog(this, code, RC_HANDLE_GMS);

  10.         dlg.Show();

  11.     }

  12.     if (mCameraSource != null)

  13.     {

  14.         try

  15.         {

  16.             mPreview.Start(mCameraSource, mGraphicOverlay);

  17.         }

  18.         catch (System.Exception e)

  19.         {

  20.             Log.Error(TAG, "Unable to start camera source.", e);

  21.             mCameraSource.Release();

  22.             mCameraSource = null;

  23.         }

  24.     }

  25. }

調(diào)用StartCameraSource()最好的地方是在Activity的OnResume()中,在OnPause()中停止預(yù)覽。它將確保只有在用戶使用應(yīng)用程序時才使用相機(jī)資源。

人臉檢測

從相機(jī)源接收的每個圖像幀可以包含多個面,并且每個面對應(yīng)由由多處理器創(chuàng)建的跟蹤器表示的明顯的面部標(biāo)識。

實現(xiàn)iFactory捕捉每個面

MultiProcessor要求實現(xiàn)IFactory,在相機(jī)檢測到一個人臉時以便回調(diào)。在本例中,在MainActivity中實現(xiàn)了IFactory,包含了Create():

點擊(此處)折疊或打開

  1. public Tracker Create(Java.Lang.Object item)

  2. {

  3.     return new GraphicFaceTracker(mGraphicOverlay, mCameraSource);

  4. }

在上面的代碼中,在每檢測到一張人臉時都會創(chuàng)建GraphicFaceTracker的一個實例,每個構(gòu)建人臉框圖形對象在使用構(gòu)造函數(shù)通過GraphicOverlay查看視頻流。

下面是GraphicFaceTracker的一個實現(xiàn):

點擊(此處)折疊或打開

  1. class GraphicFaceTracker : Tracker

  2. {

  3.     private GraphicOverlay mOverlay;

  4.     private FaceGraphic mFaceGraphic;

  5.     public GraphicFaceTracker(GraphicOverlay overlay)

  6.     {

  7.         mOverlay = overlay;

  8.         mFaceGraphic = new FaceGraphic(overlay);

  9.     }

  10.     public override void OnNewItem(int id, Java.Lang.Object item)

  11.     {

  12.         mFaceGraphic.SetId(id);

  13.     }

  14.     public override void OnUpdate(Detector.Detections detections, Java.Lang.Object item)

  15.     {

  16.         var face = item as Face;

  17.         mOverlay.Add(mFaceGraphic);

  18.         mFaceGraphic.UpdateFace(face);

  19.     }

  20.     public override void OnMissing(Detector.Detections detections)

  21.     {

  22.         mOverlay.Remove(mFaceGraphic);

  23.     }

  24.     public override void OnDone()

  25.     {

  26.         mOverlay.Remove(mFaceGraphic);

  27.     }

  28. }

在第一次檢測到一張臉時會創(chuàng)建FaceGraphic的一個實例,在臉發(fā)生變化時會更新,當(dāng)臉離開時會隱藏。

正是這樣,我們成功地在應(yīng)用程序中自定義的相機(jī)表面上創(chuàng)建了人臉跟蹤!接下來,我們將識別幀內(nèi)的人。

從實時流中識別臉

從實時視頻幀中識別臉,每當(dāng)檢測到新的人臉并將其發(fā)送給微軟認(rèn)知服務(wù)API來識別此人時,我們就捕捉圖像。人臉識別需要人工智能和高效的機(jī)器學(xué)習(xí)算法,提供給您的服務(wù)和免費開始。如果你是認(rèn)知服務(wù)新手,我強(qiáng)烈推薦閱讀博客文章,增加對移動應(yīng)用程序的面部識別。

捕獲檢測到的人臉

捕捉新發(fā)現(xiàn)的人臉,首先改變GraphicFaceTracker實現(xiàn)CameraSource.IPictureCallback。

點擊(此處)折疊或打開

  1. class GraphicFaceTracker : Tracker, CameraSource.IPictureCallback

  2. {

  3.     //...

  4. }

修改OnNewItem()捕捉面部圖像幀

點擊(此處)折疊或打開

  1. public override void OnNewItem(int id, Java.Lang.Object item)

  2. {

  3.     mFaceGraphic.SetId(id);

  4.     if (mCameraSource != null && !isProcessing)

  5.         mCameraSource.TakePicture(null, this);

  6. }

識別捕獲幀中的人

最后,使用助手類ImageAnalyzer 和iveCamHelper (這些抽象了COGs API調(diào)用),我們從視頻流中識別一個人。

點擊(此處)折疊或打開

  1. public void OnPictureTaken(byte[] data)

  2. {

  3.     Task.Run(async () =>

  4.     {

  5.         try

  6.         {

  7.             isProcessing = true;

  8.             Console.WriteLine("face detected: ");

  9.             var p_w_picpathAnalyzer = new ImageAnalyzer(data);

  10.             await LiveCamHelper.ProcessCameraCapture(p_w_picpathAnalyzer);

  11.         }

  12.         finally

  13.         {

  14.             isProcessing = false;

  15.         }

  16.     });

  17. }

https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/06/12050912/En-Face.mp4

結(jié)束語

人臉識別在許多場景中被廣泛使用,包括安全性,自然用戶界面、機(jī)器人技術(shù)等等。通過使用這些服務(wù)和平臺API的組合,你可以建立無與倫比的移動應(yīng)用程序,智能和五星級用戶提供經(jīng)驗。在這個博客文章,我們使用谷歌移動視覺API來檢測視頻流和微軟認(rèn)知服務(wù)中的人臉以識別幀內(nèi)的人。在iOS上構(gòu)建相同的示例,請閱讀如何在iOS應(yīng)用程序中顯示相機(jī) 和 添加面部識別到您的移動應(yīng)用程序。

在這篇文章中構(gòu)建并解釋的示例是由谷歌開發(fā)人員關(guān)于面部跟蹤的文檔啟發(fā)的。

對于iOS和Android從我的GitHub的回購下載樣本。 注意:對于這個演示,我編寫了代碼來識別框架中的一個單獨的面。不過,請隨意修改并使之變得更好。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文題目:添加面部跟蹤和實時識別到您的Android應(yīng)用程序-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://bm7419.com/article38/dgcosp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站網(wǎng)站維護(hù)、企業(yè)建站、面包屑導(dǎo)航、網(wǎng)站制作網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作