私は、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;
現在、「静的」を使用して関数自体の内部にロードしていますが、正しいかどうかわかりません。疑問の奇妙な形式のためのお詫びは、このフォーラムでの私の最初の質問です。理解を助け、助けてください! ありがとう
機能外の静的。複数のファイルの場合、その変数を "extern"として再宣言します。他のすべてのソースファイルに含まれるヘッダーで行うこともできます。ソース:http://www.learncpp.com/cpp-tutorial/42-global-variables/ – namar0x0309
はい、あなたの使い方は正しいです:関数内の静的なスコープ(関数のみが見えるかもしれません)、1つしかありませんプログラムの実行ごとのインスタンス化、およびインスタンス化は、関数が呼び出された最初に発生します。ただし、スレッド化されたプログラムを使用している場合は、mutexロックが必要です。これらの制限があなたの仕様に従うことを妨げないならば、関数内で静的を使用するのはいいです。 – kfmfe04
ありがとうkfmfe04。それは助ける。 – Ampa08