2017-01-31 5 views
1

Я новичок в классах C++ и использую dlib-детектор лица. В примере кода для использования с веб-камерой, обнаружение лица и позы модели загружаются внутри основной функции, как это:инициализация классов 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 лицо вызывается через другую функцию вместо основной, как в примере. Поэтому мне нужно сделать модели глобальными, чтобы функция, выполняющая dlib, знает, что «детектор» и «pose_model» не должны передавать ее в качестве аргументов этой функции. Есть ли способ сделать это? Если я загружаю модели внутри самой функции, она загружается каждый раз, когда я вызываю функцию, тем самым снижая производительность.

статический dlib :: frontal_face_detector детектор; static dlib :: shape_predictor pose_model;

В настоящее время я использую 'static' для загрузки их внутри самой функции, но я не уверен, что это правильно C++? Извиняюсь за странный формат вопроса, так как это мой первый вопрос на этом форуме. Цените понимание и помощь! Thanks

+0

статический вне функции. Если в нескольких файлах, переопределите эту переменную как «extern». Вы также можете сделать это в заголовке, включенном всеми другими исходными файлами. Источник: http://www.learncpp.com/cpp-tutorial/42-global-variables/ – namar0x0309

+0

Да, ваше использование верно: статический внутри функции ограничивает область действия (только функция может ее видеть), есть только один создание экземпляра для каждого прогона программы, и при первом вызове функции будет выполняться инстанцирование. Однако, если у вас есть потоковая программа, потребуется блокировка мьютекса. Если эти ограничения не мешают вам следовать вашим спецификациям, тогда использовать функцию static внутри функции. – 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; 
     ... 
}