Я новичок в классах 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
статический вне функции. Если в нескольких файлах, переопределите эту переменную как «extern». Вы также можете сделать это в заголовке, включенном всеми другими исходными файлами. Источник: http://www.learncpp.com/cpp-tutorial/42-global-variables/ – namar0x0309
Да, ваше использование верно: статический внутри функции ограничивает область действия (только функция может ее видеть), есть только один создание экземпляра для каждого прогона программы, и при первом вызове функции будет выполняться инстанцирование. Однако, если у вас есть потоковая программа, потребуется блокировка мьютекса. Если эти ограничения не мешают вам следовать вашим спецификациям, тогда использовать функцию static внутри функции. – kfmfe04
Спасибо kfmfe04. что помогает. – Ampa08