日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【分享】虹软人脸识别应用开发过程

發布時間:2023/12/18 pytorch 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【分享】虹软人脸识别应用开发过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

趁晚上的時間向大家分享一波干貨。

虹軟的人臉識別是應用與離線開發的,因為不需要網絡,所以它的識別速度較快。好了,廢話不多說,接下來就開始教大家怎樣使用了。

1.首先就是去官網申請APPKEY,各種密匙,然后在下載jar包,這些就不一一給大家講解了。注意一下,要在app的gradle里面加上這句話,不然可能會造成so庫加載不了的錯誤。

sourceSets { main { jniLibs.srcDirs = ['libs'] } }

  


2.接下里就需要進行開發了。就拿人臉檢測的功能來說吧,首先需要 對引擎初始化,

AFD_FSDKEngine engine1 = new AFD_FSDKEngine(); AFD_FSDKError err = engine1.AFD_FSDK_InitialFaceEngine(Config.APP_ID, Config.FD_KEY, AFD_FSDKEngine.AFD_OPF_0_HIGHER_EXT, 16, 5);

  


我們還需要一個集合,用來存放我們檢測到的人臉,

List<AFD_FSDKFace> result = new ArrayList<AFD_FSDKFace>();//新建AFD_FSDKFacejihe,用于存放識別的人臉信息

  


接下來我們就可以進行人臉的檢測了,但是對于照片的選取和格式是有要求的,所以我們需要對照片進行格式處理一下。

Bitmap bitmap1 = decodeImage(path1);//path是照片的路徑,先選取照片,轉化為bitmap byte[] data1 = getNv21(bitmap1);//再將bitmap轉化為NV21格式的

  


下面是工具類decodeImage和getNv21的代碼:

//getNv21 和 decodeImage 是照片格式的轉化工具 public byte[] getNv21(Bitmap mBitmap) { byte[] data = new byte[mBitmap.getWidth() * mBitmap.getHeight() * 3 / 2]; ImageConverter convert = new ImageConverter(); convert.initial(mBitmap.getWidth(), mBitmap.getHeight(), ImageConverter.CP_PAF_NV21); if (convert.convert(mBitmap, data)) { Log.e("TAG", "convert ok!"); } convert.destroy(); return data; } public static Bitmap decodeImage(String path) { Bitmap res; try { ExifInterface exif = new ExifInterface(path); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); BitmapFactory.Options op = new BitmapFactory.Options(); op.inSampleSize = 1; op.inJustDecodeBounds = false; //op.inMutable = true; res = BitmapFactory.decodeFile(path, op); //rotate and scale. Matrix matrix = new Matrix(); if (orientation == ExifInterface.ORIENTATION_ROTATE_90) { matrix.postRotate(90); } else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) { matrix.postRotate(180); } else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) { matrix.postRotate(270); } Bitmap temp = Bitmap.createBitmap(res, 0, 0, res.getWidth(), res.getHeight(), matrix, true); Log.d("com.arcsoft", "check target Image:" + temp.getWidth() + "X" + temp.getHeight()); if (!temp.equals(res)) { res.recycle(); } return temp; } catch (Exception e) { e.printStackTrace(); } return null; } ``` 對格式進行轉化完成后,就開始進行人臉的檢測了。``` err = engine1.AFD_FSDK_StillImageFaceDetection(data1, bitmap1.getWidth(), bitmap1.getHeight(), AFD_FSDKEngine.CP_PAF_NV21, result); Log.e("TAG", "getBit: " + result.size());

  

我們可以查看集合result的size,來確定是否檢測到人臉。
在代碼的最后,一定要對初始化的引擎進行銷毀處理。不然程序會因為內存問題而崩潰。
engine1.AFD_FSDK_UninitialFaceEngine();

人臉對比是在人臉檢測的基礎上進行的,在一張照片上先檢測到人臉的信息,然后再將人臉的信息進行比對。
List result = new ArrayList();
上面已經介紹了,檢測到的人臉信息都是存放在result的集合中的,
然后是創建兩個存放人臉點位信息的類

AFR_FSDKFace face1 = new AFR_FSDKFace(); AFR_FSDKFace face2 = new AFR_FSDKFace(); 將檢測到的人臉信息的點位信息存放到 face類中 //新建兩個AFR_FSDKFace類,保存人臉特征信息 AFR_FSDKFace face1 = new AFR_FSDKFace(); AFR_FSDKFace face2 = new AFR_FSDKFace(); //對人臉特征信息的檢測 er = engine_camera.AFR_FSDK_ExtractFRFeature(data_image, bitmap_idcard.getWidth(), bitmap_idcard.getHeight(), AFR_FSDKEngine.CP_PAF_NV21, new Rect(result_image.get(0).getRect()), result_image.get(0).getDegree(), face1); er = engine_camera.AFR_FSDK_ExtractFRFeature(data, wid, hei, AFR_FSDKEngine.CP_PAF_NV21, new Rect(result_fd.get(0).getRect()), result_fd.get(0).getDegree(), face2);

  


最后的比對的相似度信息存放在score中, float score_face = score.getScore();

我們可以通過這種方式得到 我們想要的相似度信息,最后得到的數據是float類型的。

*注意!
在使用照片的時候,分辨率大小最好是偶數的,不然會發生未知的錯誤。
在進行人臉信息提取的時候,會耗時,耗時的時長,是根據設備的CPU處理能力來說的。

轉載于:https://www.cnblogs.com/Zzz-/p/10790708.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【分享】虹软人脸识别应用开发过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。