2016-09-12 2 views
-1

Я пытаюсь создать обнаружение лица с помощью библиотек opencv и openkinect. для ввода изображения я хочу использовать xbox kinect v2. Я основываю свой код на примере обнаружения лица в библиотеке opencv. Я работаю над Mac.Распознавание лиц с opencv, open kinect и kinect v2 в обработке

это мой код до сих пор:

import gab.opencv.*; 
import java.awt.Rectangle; 

/* KINECT */ 
import org.openkinect.freenect.*; 
import org.openkinect.freenect2.*; 
import org.openkinect.processing.*; 

OpenCV opencv; 
Kinect2 kinect2; 

Rectangle[] faces; 

void setup() { 
    opencv = new OpenCV(this, 640/2, 480/2); 
    size(640, 480); 
    // Kinectv2 
    kinect2 = new Kinect2(this); 
    kinect2.initVideo(); 
    kinect2.initDevice(); 

    opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 
    faces = opencv.detect(); 
} 

void draw() { 
    opencv.loadImage(kinect2.getVideoImage()); 
    image(kinect2.getVideoImage(), 0, 0, 640, 480); 

    noFill(); 
    stroke(0, 255, 0); 
    strokeWeight(3); 
    for (int i = 0; i < faces.length; i++) { 
    rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height); 
    } 
} 

проблема, как представляется, в строке "opencv.loadImage (kinect2.getVideoImage());" так как обнаружение не работает. при работе с камерой isight (с использованием встроенной функции «захват» и «видео» -add-on) вместо kinect все работает отлично.

Может ли кто-нибудь помочь?

+0

Вы должны быть более конкретными. Что именно вы имеете в виду, когда говорите, что проблема на этой линии? Что именно вы имеете в виду, когда говорите, что это не работает? Чего вы ожидаете? Что происходит вместо этого? На какой строке кода начинается другое поведение? –

+0

opencv.loadImage (kinect2.getVideoImage()); // здесь я ожидаю, что opencv обработает визуальные данные, записанные kinect, который НЕ работает. , когда я говорю, что «проблема должна быть в этой строке» заключается в том, что она может иметь какое-то отношение к opencv, неспособному обрабатывать данные, получаемые от функции «kinect2.getVideoImage()», и, возможно, нужна другая форма ввода. изображение (kinect2.getVideoImage(), 0, 0, 640, 480); // здесь я ожидаю вывод визуальных данных, записанных xbox kinect, который работает. – mindcraft

ответ

1

В будущем, пожалуйста, постарайтесь предоставить MCVE. Это означает, что вы начинаете с чистого эскиза и добавляете достаточно кода, чтобы мы могли увидеть проблему. В вашем случае нам не нужно видеть какой-либо код kinect. Просто загрузите жестко кодированное изображение и передайте его в OpenCV.

Вот пример эскиза, который делает именно это. Я получил URL-адрес изображения от human Wikipedia page.

import gab.opencv.*; 
import java.awt.Rectangle; 

PImage image; 
OpenCV opencv; 

void setup() { 
    size(500, 500); 
    image = loadImage("https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/A_young_Man_and_Lady.png/800px-A_young_Man_and_Lady.png"); 
    image.resize(width, height); 

    opencv = new OpenCV(this, width, height); 
    opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 
} 

void draw() { 

    image(image, 0, 0); 

    opencv.loadImage(image); 
    Rectangle[] faces = opencv.detect(); 

    noFill(); 
    stroke(255, 0, 0); 
    strokeWeight(3); 
    for (Rectangle face : faces) { 
    rect(face.x, face.y, face.width, face.height); 
    } 
} 

OpenCV face detection

Обратите внимание, что я звоню opencv.detect() функцию каждый кадр. Вы звоните только от setup(), что означает, что вы только обнаруживаете лица в самом первом кадре.

Если вы все еще не можете заставить его работать, вам придется выполнить некоторую отладку. Постарайтесь изолировать свою проблему как можно больше. Избавьтесь от кода kinect и просто используйте жестко кодированное изображение. Возьмите захват экрана изображения, полученного через ваш kinect, и используйте это вместо прямого потока. Работайте на более мелких шагах, таким образом, вы можете опубликовать более конкретный вопрос, когда вы застряли (трудно помочь с общим вопросом «это не работает» - гораздо проще помочь с конкретным «Я попробовал X, ожидаемый Y», но Z вместо этого задавали вопросы типа. Удачи.

+0

Благодарим вас за ответ и ваши советы. Поскольку я не смог найти решение этой проблемы вовремя, я переключился на разработку под окнами с библиотекой обработки «Kinect 2 для Windows», которая работает с официальным Xbox Kinect SDK, который также включает распознавание лиц, и, таким образом, я отклонил openCV для распознавания лиц. – mindcraft

+0

На самом деле попытка разобраться с жестким кодированным изображением была моим самым первым подходом, прежде чем спрашивать здесь, и, конечно же, это сработало. Моя проблема заключалась в том, что данные, полученные Kinect, которые не были обработаны openCV, по крайней мере, не так, как я ожидал, как это должно было быть реализовано в коде. Но то, что я до сих пор не пробовал, вызывает opencv.detect() вне функции setup(). Я попробую это, как только найду время. Тем не менее, я ценю ваши отзывы! – mindcraft

Смежные вопросы