package pl.piotrsukiennik.whowhen.classification.service; import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; import pl.piotrsukiennik.whowhen.backend.api.inner.classification.ClassificationRequest; import pl.piotrsukiennik.whowhen.backend.api.inner.classification.ClassificationResponse; import pl.piotrsukiennik.whowhen.backend.api.inner.classification.ClassificationService; import pl.piotrsukiennik.whowhen.backend.api.outer.IBackendService; import pl.piotrsukiennik.whowhen.classification.impl.ClassifierChain; import pl.piotrsukiennik.whowhen.classification.impl.ILabelingClassifier; import pl.piotrsukiennik.whowhen.classification.impl.ILabelingClusterer; import javax.annotation.Resource; import java.io.File; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author Piotr Sukiennik */ @Component( "classificationServiceImpl" ) public class ClassificationServiceImpl implements ClassificationService { Log log = LogFactory.getLog( ClassificationServiceImpl.class ); @Resource private IBackendService backendService; private static ExecutorService executorService = Executors.newFixedThreadPool( 4 ); @Resource( name = "silenceClassifier" ) private ILabelingClassifier silenceClassifier; @Resource( name = "classifierDataDirectory" ) private File classifierDataDirectory; @Resource( name = "kMeansLabelingClassifier" ) private ILabelingClusterer labelingClusterer; @Override public void handle( final ClassificationRequest classificationRequest ) { executorService.submit( new Runnable() { @Override public void run() { try { ClassifierChain classifierChain = new ClassifierChain( new ILabelingClassifier[] { silenceClassifier }, labelingClusterer, classifierDataDirectory ); List<Map<String, List<int[]>>> labeledIndexIntervals = classifierChain.process( classificationRequest.getFeaturesData(), classificationRequest.getSpeakersCount() ); ClassificationResponse classificationResponse = new ClassificationResponse( classificationRequest.getRequestIdentifier(), labeledIndexIntervals ); backendService.notify( classificationResponse ); } catch ( Exception e ) { if ( log.isInfoEnabled() ) { log.info( ExceptionUtils.getStackTrace( e ) ); } } } } ); } }