blog

HOSoft顔認識 - バージョンアップインターフェース修正手順

HongSoftが顔認識SDKの無料オフラインバージョンをリリースし、対応するC#デモをGithubで共有して以来、私は会社のプロジェクトでHongSoftのSDKを使用しているので、HongSoft...

Sep 13, 2020 · 5 min. read
シェア

HongSoftが顔認識SDKの無料版とオフライン版をリリースし、各バージョンの対応するC# DemoをGithubで次々と共有して以来、私の会社のプロジェクトはHongSoftのSDKを使用しているため、HongSoftの公式サイトで新しいバージョンがリリースされるたびに、私はそれを学び、Demoでその機能を検証しています。RainbowSoftの公式グループやフォーラムで、SDKをアップグレードした後、何人かの友人が以下の問題をフィードバックしているのを見ました:

  1. SDKファイルを置き換えると、インターフェースが2を返すことがあります。
  2. メモリのオーバーフロー、プログラムのクラッシュ
  3. 紛らわしい検査結果

私もバージョンアップの過程でこの種の問題に遭遇しましたので、バージョンアップの過程で必要な変更を以下に文書化しました。

**問題の原因:** ArcFace 2.0から3.1バージョンまで、HOSHINOFT SDKはアルゴリズム機能を最適化し続けており、最適化の過程でSDKのいくつかのインターフェースも最適化され、いくつかの変数パラメータが追加され、SDKのアップグレード時にC#コードが同期して修正されません

治療

  • 体験的な効果にのみ使用するのであれば、SDKバージョンはデモバージョンと同じにしてください。

  • 古いバージョンで開発していて、新しいバージョンにアップグレードする必要がある場合は、インターフェースの渡されるパラメータのリストを変更する必要があります。

Githubデモ

ArcFace 2.2 Demo ArcFace 3.0 SDK

  1. /// <summary>
    /// 検出モード
    /// </summary>
    public enum DetectionMode : uint
    {
     /// <summary>
     /// Video一般的にマルチフレーム連続検出に使用されるモード
     /// </summary>
     ASF_DETECT_MODE_VIDEO = 0x,
     /// <summary>
     /// Imageモード、一般に静止イメージの単一検出に使用される。
     /// </summary>
     ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF
    }
    

    また、ArcSoftFaceFaceForm.csのLine:661とLine:881をそれぞれ変更します:

    //Line166
    uint detectMode = (uint)DetectionMode.ASF_DETECT_MODE_IMAGE;
    //Line188
    uint detectModeVideo = (uint)DetectionMode.ASF_DETECT_MODE_VIDEO;
    
  2. 顔検出インターフェイスのSDKASFDetectFacesインターフェイスの新しいオプションのパラメータASF_DetectModelは、インターフェイスの呼び出しが正常であることを確認するために、行に変更する必要があります:50は、次のように変更しました:

    public static extern int ASFDetectFaces(IntPtr pEngine, int width, int height, int format, IntPtr imgData, IntPtr detectedFaces, int ASF_DetectModel=0x1);
    
    • ASF_LIFE_PHOTO: ライフフォト間の機能比較に使用され、この項目はデフォルトの項目です;
    • ASF_ID_PHOTO:ID写真、またはID写真とライフスタイル写真の特徴比較に使用されます。

    インターフェイスが一致するようにするには、まずASF_CompareModel.csという新しい列挙を以下のコードで追加します:

    /// <summary>
    /// 顔照合用オプションモデル
    /// </summary>
    public enum ASF_CompareModel
    {
     /// <summary>
     /// 生命写真間の特徴比較のための推奨しきい値。0.80
     /// </summary>
     ASF_LIFE_PHOTO = 0x1,
     /// <summary>
     /// IDフォトまたはライフフォトとIDフォトの特徴比較に使用される、推奨しきい値0.82
     /// </summary>
     ASF_ID_PHOTO = 0x2
    }
    

    次に、*ArcSoftFace\SDKUtil\ASFFunctions.cs*のLine:89を変更して、新しいオプション・パラメータを以下のコードで追加します:

    public static extern int ASFFaceFeatureCompare(IntPtr pEngine, 
     IntPtr faceFeature1, 
     IntPtr faceFeature2, 
     ref float similarity, 
     ASF_CompareModel compareModel = ASF_CompareModel.ASF_LIFE_PHOTO);
    
  3. このバージョンでは、顔特徴モデルをアップグレードしているため、SDK 2.*バージョンに保存されている顔特徴を再度抽出する必要があります

  4. さらに、新しい機能インターフェイスが追加されています。具体的な追加内容やインターフェイスの呼び出しについては、ArcFaceDemoV3.0コードを参照してください。

ArcFace 3.0 Demo ArcFace 3.1 SDK

  1. public static extern int ASFFaceFeatureExtract(IntPtr pEngine, 
     int width, 
     int height, 
     int format, 
     IntPtr imgData, 
     IntPtr faceInfo, 
     IntPtr faceFeature,
     int threadNum = 1);
    
  2. public static extern int ASFFaceFeatureExtractEx(IntPtr hEngine, 
     IntPtr imgData, 
     IntPtr faceInfo, 
     IntPtr feature, 
     int threadNum = 1);
    
  3. 古いアクティベーション・インターフェイスASFActivationを削除します。

  4. さらに、新しい機能インターフェイスが追加されました。新しいコンテンツ、インターフェイス呼び出しの詳細については、ArcFaceSDKのドキュメント**ArcFaceDemoV3.1**コードを参照してください。

第三に、SDKの基本バージョンは、対応する付加価値バージョンに置き換えられます。

  1. 以下のコードで、onlineActivation インタフェース ASFOnlineActivationactiveKeyパラメータを追加します:

    public static extern int ASFOnlineActivation(string appId, string sdkKey,string activeKey);
    
  2. 以下のコードで、ASFActivationインターフェイスにactiveKeyパラメータを追加します:

    public static extern int ASFActivation(string appId, string sdkKey,string activeKey);
    
  3. オフラインアクティベーション・インターフェースASFOfflineActivationを以下のコードで追加します:

    [DllImport(Dll_PATH, CallingConvention = CallingConvention.Cdecl)]
    public static extern int ASFOfflineActivation(IntPtr filePath);
    

関連製品については、オープンプラットフォーム「HOSHINO VISION」でご覧いただけます。

Read next

JavaJavaのfinalize()メソッド

Javaのゴミコレクタは、newによって生成されたメモリブロックのみを解放し、newによって生成されなかった「特殊メモリ」は管理しません。 いわゆる特殊メモリとは、C/C++を使ってJNI経由でシステムから要求されたメモリのことで、手動でクリアしないとメモリに残ってしまいます。 さらに、ごみ収集にはそれ自身のオーバーヘッドがあるため、VMは頻繁にGCを行わず、...

Sep 13, 2020 · 2 min read