2015-04-27 4 views
1

Я работаю над проектом, который посвящен посещению класса через видео класса. Я тренирую данные, когда программа работает, и для сбора данных требуется много времени. Есть ли способ, с помощью которого я могу сохранить подготовленные данные и использовать их непосредственно в программе. Ниже мой код:Как сохранить подготовленные данные в openimaj?

public static void main(String[] args) throws MalformedURLException, IOException, VideoCaptureException 
{ 
    FKEFaceDetector faceDetector = new FKEFaceDetector(new HaarCascadeDetector(40)); 
    EigenFaceRecogniser<KEDetectedFace, Person> faceRecogniser = EigenFaceRecogniser.create(20, new RotateScaleAligner(), 1, DoubleFVComparison.CORRELATION, 0.9f); 
    final FaceRecognitionEngine<KEDetectedFace, Person> faceEngine = FaceRecognitionEngine.create(faceDetector, faceRecogniser); 

    Video<MBFImage> video; 

    //video = new VideoCapture(320, 100); 
    video = new XuggleVideo(new URL("file:///home/kamal/Videos/Samplevideo1.mp4")); 

    Person[] dataset = new Person[12]; 

    dataset[0] = new Person("a"); 
    dataset[1] = new Person("b"); 
    dataset[2] = new Person("c"); 
    dataset[3] = new Person("d"); 
    dataset[4] = new Person("e"); 
    dataset[5] = new Person("f"); 
    dataset[6] = new Person("g"); 
    dataset[7] = new Person("h"); 
    dataset[8] = new Person("i"); 
    dataset[9] = new Person("j"); 
    dataset[10] = new Person("k"); 
    dataset[11] = new Person("l"); 

    int dcount; 

    for(int i = 0; i < 12; i++) 
    { 
     dcount = 0; 
     for(int j = 1; j <= 20 && dcount == 0; j++) 
     { 
      MBFImage mbfImage = ImageUtilities.readMBF(new URL("file:///home/kamal/Pictures/"+i+"/"+j+".png")); 
      FImage fimg = mbfImage.flatten(); 
      List<KEDetectedFace> faces = faceEngine.getDetector().detectFaces(fimg); 
      if(faces.size() > 0) 
      { 
       faceEngine.train(faces.get(0), dataset[i]); 
       dcount++; 
      } 
     } 
    } 
VideoDisplay<MBFImage> vd = VideoDisplay.createVideoDisplay(video); 

    vd.addVideoListener(new VideoDisplayListener<MBFImage>() { 

     public void afterUpdate(VideoDisplay<MBFImage> display) { 
     } 

     public void beforeUpdate(MBFImage frame) 
     { 
      FImage image = frame.flatten(); 
      List<KEDetectedFace> faces = faceEngine.getDetector().detectFaces(image); 

      for(DetectedFace face : faces) { 
       frame.drawShape(face.getBounds(), RGBColour.RED); 
       try { 
        List<IndependentPair<KEDetectedFace, ScoredAnnotation<Person>>> rfaces = faceEngine.recogniseBest(face.getFacePatch()); 
        ScoredAnnotation<Person> score = rfaces.get(0).getSecondObject(); 
        if (score != null) 
        { 
         System.out.println("Mr. "+score.annotation+" is Present."); 
        } 
        else 
        { 
         System.out.println("Recognizing"); 
        } 
       } catch (Exception e) { 
       } 
      } 
     } 

    }); 
} 

ответ

1

Да, просто использовать статические методы в классе org.openimaj.io.IOUtils писать faceEngine на диск после его подготовки и читать его снова.

+0

Спасибо @Jon за то, что посмотрел на мою проблему. Я прошел методы в классе 'org.openimaj.io.IOUtils' и использовал метод' IOUtils.writeToFile (faceEngine, новый файл («trainingdata.txt»)) 'для записи на диск. Как я могу создать конечный объект 'faceEngine' из файла' trainingdata.txt'? –