今天的相機應(yīng)用可以做的不僅僅是拍完美的照片。無論是添加過濾器到您的圖像或讓您調(diào)整焦點和手動曝光,應(yīng)用程序可以從根本上把你變成一個專業(yè)攝影師。雖然應(yīng)用商店中的眾多應(yīng)用程序讓你用相機做很多事情,還有其他人可以實時地對你的圖像進(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通過前置相機來識別人臉。
Google的移動視覺提供了一組用于“檢測面部”和“掃描條碼”的API。對于這個示例,我將使用面部API從應(yīng)用程序中的實時攝像機流中檢測人臉。
開始, 添加 Xamarin.GooglePlayServices.Vision的 NuGet包。
為了在Android上訪問相機,你需要在你的Android的mainifest中添加你的用戶權(quán)限請求和相機功能:
點擊(此處)折疊或打開
if (ActivityCompat.CheckSelfPermission(this, Manifest.Permission.Camera) == Permission.Granted)
{
CreateCameraSource();
//...
}
else
{
Log.Warn(TAG, "Camera permission is not granted. Requesting permission");
var permissions = new string[] { Manifest.Permission.Camera };
if (!ActivityCompat.ShouldShowRequestPermissionRationale(this,
Manifest.Permission.Camera))
{
ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);
return;
}
Snackbar.Make(mGraphicOverlay, Resource.String.permission_camera_rationale,
Snackbar.LengthIndefinite)
.SetAction(Resource.String.ok, (o) => { ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM); })
.Show();
}
通過指定的屬性使用FaceDetector.Builder創(chuàng)建FaceDetector的一個實例。在本例中,我們使用默認(rèn)的面部檢測器設(shè)置,并將處理器關(guān)聯(lián)到它。
點擊(此處)折疊或打開
private void CreateCameraSource()
{
var context = Application.Context;
FaceDetector detector = new FaceDetector.Builder(context)
.SetClassificationType(ClassificationType.All)
.Build();
detector.SetProcessor(
new MultiProcessor.Builder(this)
.Build());
if (!detector.IsOperational)
{
// Note: The first time that an app using face API is installed on a device, GMS will
// download a native library to the device in order to do detection. Usually this
// completes before the app is run for the first time. But if that download has not yet
// completed, then the above call will not detect any faces.
//
// isOperational() can be used to check if the required native library is currently
// available. The detector will automatically become operational once the library
// download completes on the device.
Log.Warn(TAG, "Face detector dependencies are not yet available.");
}
mCameraSource = new CameraSource.Builder(context, detector)
.SetRequestedPreviewSize(640, 480)
.SetFacing(CameraFacing.Front)
.SetRequestedFps(30.0f)
.Build();
}
在上面的代碼中, MultiProcessor被用來接收偵測結(jié)果,CameraSource.Builder用來創(chuàng)建一個指定預(yù)覽尺寸,相機面對面和所需的FPS的相機源。
現(xiàn)在我們已經(jīng)進(jìn)入相機并且建立CameraSource,我們也可以通過自定義一個SurfaceView開始預(yù)覽;本例中CameraSourcePreview.GraphicOverlay實例也被傳遞,以便在檢測時繪制面部邊界。
點擊(此處)折疊或打開
private void StartCameraSource()
{
// check that the device has play services available.
int code = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(
this.ApplicationContext);
if (code != ConnectionResult.Success)
{
var dlg =
GoogleApiAvailability.Instance.GetErrorDialog(this, code, RC_HANDLE_GMS);
dlg.Show();
}
if (mCameraSource != null)
{
try
{
mPreview.Start(mCameraSource, mGraphicOverlay);
}
catch (System.Exception e)
{
Log.Error(TAG, "Unable to start camera source.", e);
mCameraSource.Release();
mCameraSource = null;
}
}
}
調(diào)用StartCameraSource()最好的地方是在Activity的OnResume()中,在OnPause()中停止預(yù)覽。它將確保只有在用戶使用應(yīng)用程序時才使用相機資源。
從相機源接收的每個圖像幀可以包含多個面,并且每個面對應(yīng)由由多處理器創(chuàng)建的跟蹤器表示的明顯的面部標(biāo)識。
MultiProcessor要求實現(xiàn)IFactory,在相機檢測到一個人臉時以便回調(diào)。在本例中,在MainActivity中實現(xiàn)了IFactory,包含了Create():
點擊(此處)折疊或打開
public Tracker Create(Java.Lang.Object item)
{
return new GraphicFaceTracker(mGraphicOverlay, mCameraSource);
}
在上面的代碼中,在每檢測到一張人臉時都會創(chuàng)建GraphicFaceTracker的一個實例,每個構(gòu)建人臉框圖形對象在使用構(gòu)造函數(shù)通過GraphicOverlay查看視頻流。
下面是GraphicFaceTracker的一個實現(xiàn):
點擊(此處)折疊或打開
class GraphicFaceTracker : Tracker
{
private GraphicOverlay mOverlay;
private FaceGraphic mFaceGraphic;
public GraphicFaceTracker(GraphicOverlay overlay)
{
mOverlay = overlay;
mFaceGraphic = new FaceGraphic(overlay);
}
public override void OnNewItem(int id, Java.Lang.Object item)
{
mFaceGraphic.SetId(id);
}
public override void OnUpdate(Detector.Detections detections, Java.Lang.Object item)
{
var face = item as Face;
mOverlay.Add(mFaceGraphic);
mFaceGraphic.UpdateFace(face);
}
public override void OnMissing(Detector.Detections detections)
{
mOverlay.Remove(mFaceGraphic);
}
public override void OnDone()
{
mOverlay.Remove(mFaceGraphic);
}
}
在第一次檢測到一張臉時會創(chuàng)建FaceGraphic的一個實例,在臉發(fā)生變化時會更新,當(dāng)臉離開時會隱藏。
正是這樣,我們成功地在應(yīng)用程序中自定義的相機表面上創(chuàng)建了人臉跟蹤!接下來,我們將識別幀內(nèi)的人。
從實時視頻幀中識別臉,每當(dāng)檢測到新的人臉并將其發(fā)送給微軟認(rèn)知服務(wù)API來識別此人時,我們就捕捉圖像。人臉識別需要人工智能和高效的機器學(xué)習(xí)算法,提供給您的服務(wù)和免費開始。如果你是認(rèn)知服務(wù)新手,我強烈推薦閱讀博客文章,增加對移動應(yīng)用程序的面部識別。
捕捉新發(fā)現(xiàn)的人臉,首先改變GraphicFaceTracker實現(xiàn)CameraSource.IPictureCallback。
點擊(此處)折疊或打開
class GraphicFaceTracker : Tracker, CameraSource.IPictureCallback
{
//...
}
修改OnNewItem()捕捉面部圖像幀
點擊(此處)折疊或打開
public override void OnNewItem(int id, Java.Lang.Object item)
{
mFaceGraphic.SetId(id);
if (mCameraSource != null && !isProcessing)
mCameraSource.TakePicture(null, this);
}
最后,使用助手類ImageAnalyzer 和iveCamHelper (這些抽象了COGs API調(diào)用),我們從視頻流中識別一個人。
點擊(此處)折疊或打開
public void OnPictureTaken(byte[] data)
{
Task.Run(async () =>
{
try
{
isProcessing = true;
Console.WriteLine("face detected: ");
var p_w_picpathAnalyzer = new ImageAnalyzer(data);
await LiveCamHelper.ProcessCameraCapture(p_w_picpathAnalyzer);
}
finally
{
isProcessing = false;
}
});
}
https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/06/12050912/En-Face.mp4
人臉識別在許多場景中被廣泛使用,包括安全性,自然用戶界面、機器人技術(shù)等等。通過使用這些服務(wù)和平臺API的組合,你可以建立無與倫比的移動應(yīng)用程序,智能和五星級用戶提供經(jīng)驗。在這個博客文章,我們使用谷歌移動視覺API來檢測視頻流和微軟認(rèn)知服務(wù)中的人臉以識別幀內(nèi)的人。在iOS上構(gòu)建相同的示例,請閱讀如何在iOS應(yīng)用程序中顯示相機 和 添加面部識別到您的移動應(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ù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文題目:添加面部跟蹤和實時識別到您的Android應(yīng)用程序-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/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)