Я новичок в OpenCV, и я хочу запустить программу Java для обнаружения лиц с помощью OpenCV.Как запустить много файлов haarcascade xml в одной и той же программе Java с помощью OpenCV?
Только в том числе один файл xarcascade xml не дает ожидаемых результатов. Поэтому мне нужно запустить два, три файла haarcascade в одной программе. (специально «haarcascade_frontalface_alt.xml» и «haarcascade_profileface.xml» вместе).
Я попытался сделать это со следующим кодом, но это не сработало. Пожалуйста, укажите, как действовать.
спасибо.
public class LiveFeed extends WatchDogBaseFrame {
private DaemonThread myThread = null;
int count = 0;
VideoCapture webSource = null;
Mat frame = new Mat();
MatOfByte mem = new MatOfByte();
CascadeClassifier faceDetector1 = new CascadeClassifier("/home/erandi/NetBeansProjects/WatchDog/src/ueg/watchdog/view/haarcascade_frontalface_alt.xml");
CascadeClassifier faceDetector2 = new CascadeClassifier("/home/erandi/NetBeansProjects/WatchDog/src/ueg/watchdog/view/haarcascade_eye.xml");
MatOfRect faceDetections = new MatOfRect();
public LiveFeed(WatchDogBaseFrame parentFrame) {
super(parentFrame);
initComponents();
super.setCloseOperation();
jButtonExit.setVisible(false);
}
//class of demon thread
public class DaemonThread implements Runnable {
protected volatile boolean runnable = false;
@Override
public void run() {
synchronized (this) {
while (runnable) {
if (webSource.grab()) {
try {
webSource.retrieve(frame);
Graphics graphics = jPanelVideo.getGraphics();
faceDetector1.detectMultiScale(frame, faceDetections);
faceDetector2.detectMultiScale(frame, faceDetections);
for (Rect rect : faceDetections.toArray()) {
// System.out.println("ttt");
Imgproc.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
Imgcodecs.imencode(".bmp", frame, mem);
Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
BufferedImage buff = (BufferedImage) im;
if (graphics.drawImage(buff, 0, 0, getWidth(), getHeight() - 150, 0, 0, buff.getWidth(), buff.getHeight(), null)) {
if (runnable == false) {
System.out.println("Paused ..... ");
this.wait();
}
}
} catch (Exception ex) {
System.out.println("Error");
}
}
}
}
}
}
Второй вызов 'faceDetector2.detectMultiScale (кадр, faceDetections);' будет превалировать результаты предыдущего класса, хранящиеся в 'faceDetections'. Создайте 2 переменные 'faceDetections1' и' faceDetections2', затем повторите их по отдельности, они не будут неявно конкатцировать результаты – ZdaR