Почему распознавание лица так медленно работает?

Здравствуйте,
разбираюсь с JavaCV, у меня версия 1.5.3
пытаюсь сделать определение лица, взял пример тут
Если подключаться к веб камере, то работает нормально. Но как только я подключаюсь к IP камере, то люто лагает, не могу понять почему.
Вот мой код:
public static void main(String[] args) {
        try {
            OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
            
            CascadeClassifier classifier = new CascadeClassifier("haarcascade_frontalface_default.xml");
            if (classifier == null) {
                System.err.println("ошибка загрузки классификатора.");
                System.exit(1);
            }
            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("http://192.168.1.101:8080/video");
            grabber.start();
            
            Frame frame = grabber.grab();
            CanvasFrame canvasFrame = new CanvasFrame("IP camera");
            canvasFrame.setCanvasSize(frame.imageWidth, frame.imageHeight);
            
            Mat grabbedImage = converter.convert(grabber.grab());
            int height = grabbedImage.rows();
            int width = grabbedImage.cols();
            
            Mat grayImage = new Mat(height, width, CV_8UC1);
            Mat rotatedImage = grabbedImage.clone();
            
            RectVector faces = null;
            
            while(canvasFrame.isVisible() && (frame = grabber.grab())!= null){
                grabbedImage = converter.convert(frame);
                //cvtColor(grabbedImage, grayImage, CV_BGR2GRAY);
                
                faces = new RectVector();

////////////////////////////// Из за этого участка кода работает медленно////////////////////////////////////////

                classifier.detectMultiScale(grabbedImage, faces);
                System.out.println(faces.size());
                
                long total = faces.size();
                for(long i = 0; i < total; i++){
                    Rect r = faces.get(i);
                    int x = r.x(), y = r.y(), w = r.width(), h = r.height();
                    rectangle(grabbedImage, new Point(x, y), new Point(x + w, y + h), Scalar.RED, 1, CV_AA, 0);
                }
/////////////////////////////////////////////////////////////////////////////////                
                canvasFrame.showImage(converter.convert(grabbedImage));
                
                
            }
            canvasFrame.dispose();
        } catch (FrameGrabber.Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

Если тот участок кода убрать и показывать то что захвачено с камеры без определения, то работает отлично.
Может это как то подскажет Вам, но загруженность процессора висит на 100%
В IDE в консоль вылетает сообщение:
[swscaler @ 000000002aeb2000] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 000000002aeb2000] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 000000002aeb2000] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 000000002aeb2000] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 000000002aeb2000] deprecated pixel format used, make sure you did set range correctly

И эта строка вылетает пока работает приложение.
Заранее большое спасибо!
  • Вопрос задан
  • 312 просмотров
Пригласить эксперта
Ответы на вопрос 1
CellycoMobiles
@CellycoMobiles
indi developer @CellycoMobiles
Перефразируйте пожалуйста вопрос :

Если подключаться к веб камере, то работает нормально. Но как только я подключаюсь к веб камере, то люто лагает, не могу понять почему.


В этой фразе возможны разнопонимания.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы