3.1. 統合ガイド
FacePro SDKで提供されるSampleプロジェクトは、Xcode開発環境をベースとしており、統合手順は主にiOS 開発の知識、およびXcodeの経験を有する方を対象に記述されています。
1. 開発コンポーネント
ZIP パッケージには主に次のファイルが含まれています。
STFaceProSample:
FacePro SDKを統合する完全なプロジェクトのサンプルSTFaceProSDK:
FacePro SDKを統合して使用するために必要な SDK とモデルファイルを含むDocs:統合ドキュメント
2. サンプルの概要
準備
有効なライセンス認証ファイルが利用可能であること。
Cocoapodsツールを含むMac(オプション)がインストールされていること。
Xcode 統合実行サンプル
統合手順は次のとおりです。
ZIP ファイルを解凍し、ターミナルを開きます。Podfileがあるディレクトリに移動し、実行してインストールします。
Cocoapodsツールがローカルにない場合、リンク(抽出コード: e00c40)をクリックして、関連ファイルをダウンロードし、解凍したPodsフォルダをPodfileがあるディレクトリにコピーしてください。
podが正常に実行されたら、STFaceProSample.xcworkspaceをダブルクリックして、Xcodeでプロジェクトを開きます。
認証用のライセンスファイル "SENSEID_....lic" を STFaceProSDKディレクトリにコピーし、名前を "senseid_facepro.lic" に変更します。
ライセンスファイルの名前を変更する理由: ZIP パッケージ内のSampleのSTFaceProMainViewController.swiftには、ファイル名を指定することで、ファイルの読み込み認証を完了します。プロジェクトで使用されているライセンスファイルは "senseid_facepro.lic" という名前です。STFaceProMainViewController.swift ファイルで、ライセンス認証タイプに従って、
パラメーターを修正します:
let licType: LicenseType = .online / .offline。iOSデバイスに接続し、プログラムを実行してテストします。
3. お客様のプロジェクトへの FacePro SDK の統合
手順は次のとおりです。
ZIPファイルを解凍します。
解凍した
STFaceProSDKフォルダーのすべてのコンテンツをお客様のプロジェクトに追加します。
上記の手順を実行すると、FacePro SDK がお客様のプロジェクトに統合されます。
4. FacePro SDK API に関する手順
FacePro SDK は、顔トラッキング、顔検知、属性検知、品質検知、姿勢角情報の検知、モーションブラー品質検知、なりすまし防止検知、顔特徴抽出、顔特徴比較、および検索機能を提供します。
主要な関数について
API
Info
ビデオフレームシーンでの顔トラッキング
静止画像シーンでの顔トラッキング
顔属性の検知
品質検知
姿勢角情報の検知
モーションブラー品質の検知
なりすまし防止検知
顔特徴情報の抽出
顔特徴の比較および検索。
TrackerまたはDetectorは、同じスレッドで使用する必要があります。
API 呼び出しと SDK のワークフロー
SDK の基本的なワークフロー
ライセンス認証
TrackerまたはDetectorインスタンスを作成するTrackまたはdetectを開始する(FaceDetector以外のDetectorのdetectメソッドは、すべて Trackの結果に依存します)Trackまたはdetectの結果を取得する使用しなくなった場合は、APIに対応するリリースメソッドを呼び出して解放する
呼び出し方法について
プロジェクトに
FacePro SDKを統合します。詳細については、「お客様のプロジェクトへのFacePro SDKの統合」をご参照ください。ライセンス認証を実行するには、
Sample内のSTFaceProMainViewController.swiftのメソッドをご参照ください。... // MARK: - Authorization / 認証 // offline / オフラインでのライセンス認証 func loadLicense(with fileName: String) { let licensePath = Bundle.main.path(forResource: fileName, ofType: "lic") apiResult = self.loadLicense.load(withLicensePath: licensePath ?? "") } // online / オンラインでのライセンス認証 func activateLicense(with fileName: String) { if let filePath = self.loadLicense.activatedLicenseFilePath() { // There is already an authorized lic locally, it can be loaded directly / 既に認証されたライセンスファイルがローカルにあり、直接ロードできます apiResult = self.loadLicense.load(withLicensePath: filePath) } else { // There is no authorized lic locally, online activation is required / ローカルに認証用のライセンスファイルが存在しません。オンラインでのライセンス認証を要求します let licensePath = Bundle.main.path(forResource: fileName, ofType: "lic") apiResult = self.loadLicense.activate(withLicensePath: licensePath ?? "") // Load after successful authorization / ライセンス認証に成功したらロードします if let filePath = self.loadLicense.activatedLicenseFilePath() { apiResult = self.loadLicense.load(withLicensePath: filePath) } } } ...機能要件に従って、
STFaceProFaceTrackerを使用して Tracker インスタンスを作成します。正常に作成されたら、trackメソッドを介して顔トラッキングを行います。サンプルコードの詳細については、Sample 内のSTFaceProTrackViewController.swiftをご参照ください。func createTracker() { let bundlePath = Bundle.main.path(forResource: "st_facepro_resource", ofType: "bundle") ?? "" let occlusionModelPath = bundlePath + "/model" + "/M_Align_occlusion.model" apiResult = self.faceTracker.create(withModelPath: occlusionModelPath, config: .SMALL_FACE) apiResult = self.faceTracker.setTrackingLimitWithMaxNum(Int32(STFaceProDetectionMaxNum)) { (realNum) in print("---setTrackingLimitWithMaxNum--realNum \(realNum)") } self.faceTracker.delegate = self }機能要件に従って、異なる
Detectorを作成します。作成方法は、上記のTrackerインスタンスの作成手順と同様です。作成後、detectメソッドを呼び出して、検知処理を行います。FaceDetectorを除くその他のDetectorのdetectメソッドは、すべてTrackの結果に依存します。FaceDetectorは静止画像の顔検知に使用され、detectメソッドのパラメーターは静止画像に依存します。... let bundlePath = Bundle.main.path(forResource: "st_facepro_resource", ofType: "bundle") ?? "" let calcposeModelPath = bundlePath + "/model" + "/M_Align_CalcPose.model" let antispootingGeneralModelPath = bundlePath + "/model" + "/M_Liveness_Antispoofing_General.model" let verifyModelPath = bundlePath + "/model" + "/M_Verify_Mobilenetv2Pruned.model" let occlusionModelPath = bundlePath + "/model" + "/M_Align_occlusion.model" let attributeModelPath = bundlePath + "/model" + "/M_Attribute.model" // FaceDetector detect apiResult = self.faceDetector.create(withModelPath: occlusionModelPath, config: .LARGE_FACE) // AttributeDetector detect apiResult = self.attributeDetector.create(withModelPath: attributeModelPath) self.attributeDetector.delegate = self // HeadPoseDetector detect apiResult = self.headPoseDetector.create(withModelPath: calcposeModelPath) self.headPoseDetector.delegate = self // QualityDetector detect self.qualityDetector.delegate = self // MotionSharpnessDetector detect apiResult = self.motionSharpnessDetector.create() self.motionSharpnessDetector.delegate = self // AntiSpoofingDetector detect apiResult = self.antiSpoofingDetector.create(withModelPath: antispootingGeneralModelPath) self.antiSpoofingDetector.delegate = self apiResult = self.antiSpoofingDetector.defaultHacknessThreshold { [weak self] (threshold) in print("----antiSpoofingDetector----threshold \(threshold)") self?.defaultHacknessThreshold = threshold } ...顔のなりすまし防止検知には
STFaceProFeatureExtractionを使用します。詳細については、API に関する説明とサンプルをご参照ください。apiResult = self.featureExtraction.create(withModelPath: verifyModelPath)顔特徴の比較および検索には
STFaceProFeatureComparisonを使用します。詳細については、API に関する説明と Sample をご参照ください。apiResult = self.featureComparison.create(withModelPath: verifyModelPath) self.featureComparison.delegate = self
Last updated
Was this helpful?