【分享】虹軟人臉識別應用開發過程

趁空閒的一點點時間向你們分享一個好用的人臉識別的應用——來自虹軟公司的人臉識別html

推薦這家的產品主要有如下幾個理由~c++

一、免費!免費!免費!

它家比較良心。人臉識別、人證覈驗、活體檢測等等一切的sdk都是免費下載使用的- -即便商用也能夠~很是適合我這種小窮人bash

二、根據不一樣操做平臺提供不一樣的SDK

目前可下載Windows x86,x64平臺(c++/Java語言)、Linux x64平臺(c++/Java語言)、iOS平臺(Objective-C語言)與Android arm32平臺(Java語言)
網絡

三、官方針對各版本的SDK均提供了對應的Demo,下載的SDK包裏面有示例代碼能夠參考

這裏丟個地址來算了……想試用demo的能夠去下:ai.arcsoft.com.cn/ucenter/res…app

除官方提供的demo之外,如需使用其它語言開發,也能夠自行封裝。
工具

 四、虹軟的人臉識別是應用於離線開發的,由於不須要網絡,因此它的識別速度較快。

只有首次激活須要聯網,後面就均可以離線用了,比較方便~post

       

好了,廢話很少說,接下來就開始教你們怎樣使用了。  gradle

1. 首先就是去官網申請APPKEY,各類密匙,而後在下載jar包,這些就不一一給你們講解了。注意一下,要在app的gradle裏面加上這句話,否則可能會形成so庫加載不了的錯誤。ui

sourceSets {   
     main {         
   jniLibs.srcDirs = ['libs']       
   }    
} 
複製代碼

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

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類型的。

注意:

一、在使用照片的時候,分辨率大小最好是偶數的,否則會發生未知的錯誤。 圖像尺寸限制寬高大於0,寬度爲4的倍數,YUYV/I420/NV21/NV12格式的圖片高度爲2的倍數,BGR24格式的圖片高度不限制。

二、在進行人臉信息提取的時候,會耗時,耗時的時長,是根據設備的CPU處理能力來講的。

好了,先分享這麼多,後面再慢慢寫使用體會,也歡迎你們與我交流~

若是有想體驗虹軟人臉識別功能的,連接拿去~:ai.arcsoft.com.cn/product/arc…

相關文章
相關標籤/搜索