package imageis; import eu.pharos.kmi.videosegmentation.ContentBasedSearchWSProxyStub; import eu.pharos.kmi.videosegmentation.ContentBasedSearchWSProxyStub.QueryByID; import eu.pharos.kmi.videosegmentation.ContentBasedSearchWSProxyStub.QueryByIDResponse; import eu.pharos.kmi.videosegmentation.VSProcessor; import eu.pharos.kmi.videosegmentation.VSVideoBean; import eu.pharos.kmi.videosegmentation.VideoSegmentation; import java.io.File; import java.io.PrintStream; import mpegMpeg7Schema2001.MediaLocatorType; import mpegMpeg7Schema2001.Mpeg7Document; import mpegMpeg7Schema2001.Mpeg7Document.Factory; import org.apache.commons.io.FileUtils; import org.apache.xmlbeans.XmlObject; public class ImageIS { private final String namespaceDeclaration = "declare namespace mpeg7='urn:mpeg:mpeg7:schema:2001';"; private final String query2 = "$this//mpeg7:MediaLocator"; private static ContentBasedSearchWSProxyStub cbsStub = null; private static boolean proxy = false; private static String proxyHost = null; private static int proxyPort = 0; private VSProcessor vsp = null; public ImageIS() { if (!(VideoSegmentation.instanceCreated())){ VideoSegmentation.getInstance(); } String video_endpoint = VideoSegmentation.getCbseWSEndpoint(); try { this.cbsStub = new ContentBasedSearchWSProxyStub(video_endpoint); } catch (Exception e) { System.err.println(e); } } public String query(String collection, String id) throws Exception { ContentBasedSearchWSProxyStub.QueryByID req = new ContentBasedSearchWSProxyStub.QueryByID(); System.err.println("ImageIS, querying "+collection+":"+id+".jpg"); String input = query_xml; input=input.replace("**docid**", collection+":"+id+".jpg"); req.setQuery(input); ContentBasedSearchWSProxyStub.QueryByIDResponse res = getCbsStub().queryByID(req); return res.get_return(); } public static void main(String[] args) { try { if (args.length != 1) { System.out.println("USAGE: java -jar ImageIS.jar xmlinput.xml"); System.exit(0); } String dir = System.getProperty("user.dir"); File inputFile = new File(dir + System.getProperty("file.separator") + args[0]); String input = FileUtils.readFileToString(new File(args[0])); ImageIS inst = new ImageIS(); if (input.contains("kmi image annotation segment to add")) { System.err.println("adding an image"); String imageLocation = inst.getImageLocation(inst.processMpeg7Input(input)); //String video_endpoint = VideoSegmentation.getCbseWSEndpoint(); //ContentBasedSearchWSProxyStub cbse_stub = new ContentBasedSearchWSProxyStub(video_endpoint); //inst.setCbsStub(cbse_stub); ////inst.setCbsStub(new ContentBasedSearchWSProxyStub(VideoSegmentation.getCbseWSEndpoint())); inst.setVsp(new VSProcessor(VideoSegmentation.getWorkpath(), new VSVideoBean(imageLocation), inst.getCbsStub())); inst.getVsp().processExistingKeyframes(); inst.getVsp().addLFImageDB(); System.out.println("TRUE"); } else if (input.contains("kmi image annotation segment to remove")) { String imageLocation = inst.getImageLocation(inst.processMpeg7Input(input)); inst.setCbsStub(new ContentBasedSearchWSProxyStub(VideoSegmentation.getCbseWSEndpoint())); inst.setVsp(new VSProcessor(VideoSegmentation.getWorkpath(), new VSVideoBean(imageLocation), inst.getCbsStub())); inst.getVsp().removeExistingKeyframes(input); System.out.println("TRUE"); } else if (input.contains("QueryByMedia")) { inst.setCbsStub(new ContentBasedSearchWSProxyStub(VideoSegmentation.getCbseWSEndpoint())); ContentBasedSearchWSProxyStub.QueryByID req = new ContentBasedSearchWSProxyStub.QueryByID(); req.setQuery(input); ContentBasedSearchWSProxyStub.QueryByIDResponse res = inst.getCbsStub().queryByID(req); FileUtils.writeStringToFile(new File(dir + System.getProperty("file.separator") + "image_cbs_result.xml"), res.get_return()); } else { throw new RuntimeException("Unsuported action" + input); } } catch (Exception e) { // System.out.println(e); e.printStackTrace(); } } public static boolean isProxy() { return proxy; } public static void setProxy(boolean aProxy) { proxy = aProxy; } public static String getProxyHost() { return proxyHost; } public static void setProxyHost(String aProxyHost) { proxyHost = aProxyHost; } public static int getProxyPort() { return proxyPort; } public static void setProxyPort(int aProxyPort) { proxyPort = aProxyPort; } public ContentBasedSearchWSProxyStub getCbsStub() { return this.cbsStub; } public void setCbsStub(ContentBasedSearchWSProxyStub cbsStub) { this.cbsStub = cbsStub; } private String processMpeg7Input(String mpeg7) throws Exception { Mpeg7Document mpeg7doc = Mpeg7Document.Factory.parse(mpeg7); if (!(mpeg7doc.validate())) { System.out.println("Invalid instance!!!: " + mpeg7); } return getMediaURI(mpeg7doc); } private String getMediaURI(Mpeg7Document mpeg7doc) { XmlObject[] ml = mpeg7doc.selectPath("declare namespace mpeg7='urn:mpeg:mpeg7:schema:2001';$this//mpeg7:MediaLocator"); MediaLocatorType mlt = (MediaLocatorType)ml[0]; return mlt.getMediaUri().trim(); } private String getImageLocation(String input) throws Exception { if (input.startsWith("file://")) { return input.substring("file://".length(), input.length()); } return input; } public VSProcessor getVsp() { return this.vsp; } public void setVsp(VSProcessor vsp) { this.vsp = vsp; } private static String query_xml = "video/jpeg**docid**image-search-mediaid"; }