2017-01-31 24 views
1

私は、C++クラスの初心者で、dlib face detectorを使用しています。ウェブカメラで使用するためのコード例では、顔検出とは、このようにメイン関数内にロードされているモデルをポーズ:C++クラスをグローバルに初期化する

int main(){ 
    frontal_face_detector detector = get_frontal_face_detector(); 
    shape_predictor pose_model; 
    deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; 

}

しかし、私のプロジェクトは、DLIBの顔検出があるような方法で構成されています例のようにmainの代わりに別の関数を通して呼び出されます。したがって、モデルをグローバルにして、dlibを実行する関数がその関数の引数として '検出器'と 'pose_model'を渡す必要がないことを知るようにする必要があります。それをどうにかしていますか?モデルを関数自体の中にロードすると、関数を呼び出すたびにロードされ、パフォーマンスが低下します。

static dlib :: frontal_face_detector detector; static dlib :: shape_predictor pose_model;

現在、「静的」を使用して関数自体の内部にロードしていますが、正しいかどうかわかりません。疑問の奇妙な形式のためのお詫びは、このフォーラムでの私の最初の質問です。理解を助け、助けてください! ありがとう

+0

機能外の静的。複数のファイルの場合、その変数を "extern"として再宣言します。他のすべてのソースファイルに含まれるヘッダーで行うこともできます。ソース:http://www.learncpp.com/cpp-tutorial/42-global-variables/ – namar0x0309

+0

はい、あなたの使い方は正しいです:関数内の静的なスコープ(関数のみが見えるかもしれません)、1つしかありませんプログラムの実行ごとのインスタンス化、およびインスタンス化は、関数が呼び出された最初に発生します。ただし、スレッド化されたプログラムを使用している場合は、mutexロックが必要です。これらの制限があなたの仕様に従うことを妨げないならば、関数内で静的を使用するのはいいです。 – kfmfe04

+0

ありがとうkfmfe04。それは助ける。 – Ampa08

答えて

1

他のグローバル変数と同じように初期化すると、それらをグローバルに宣言できます。

frontal_face_detector detector = get_frontal_face_detector(); 
shape_predictor pose_model; 

int main(){ 

     deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; 
     ... 
} 
関連する問題