Skip to content
Snippets Groups Projects
app.js 5.57 KiB
Newer Older
Laurent Velez's avatar
Laurent Velez committed
/*******************************************************************************
 * Copyright (c) 2018 Sensinov (www.sensinov.com)
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var request = require('request');
var app = express();
var fs = require('fs');
var config = require('./config.json');
var cseUri = config.csePoa+"/~/"+config.cseId+"/"+config.cseName;

app.use(bodyParser.json({limit: '50mb', extended: true}))
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}))

app.listen(config.aePort, function () {
	console.log('AE Monitor listening on port '+config.aePort);
});

app.post('/', function (req, res) {
	console.log("\n◀◀◀◀◀")
	//console.log(req.body);
	var content = req.body['m2m:sgn'].nev.rep["m2m:cin"].con;
	//console.log("Content: "+JSON.stringify(content));

	var jsonContent= JSON.parse(content);
	base64image = jsonContent.base64image;
	//console.log(base64image);

	require("fs").writeFile('out', base64image, {encoding: 'base64'}, function(err) {
		console.log('File created');
		for (var i=0;i<config.visualRecognitionClassifierIds.length; i++){
			config.visualRecognitionClassifierIds[i]
			visualRecognitionClassify(config.visualRecognitionClassifierIds[i],content);
		}
	});
	res.sendStatus(204);
});

createAE(cseUri);

function createAE(targetUri){
	console.log("\n▶▶▶▶▶");

	var representation = {
		"m2m:ae":{
			"rn":config.aeName,			
			"api":config.appId,
			"rr":"true",
			"poa":["http://"+config.aeIp+":"+config.aePort+"/"]
		}
	};

	console.log("POST "+targetUri);
	console.log(representation);

	var options = {
		uri: targetUri,
		method: "POST",
		headers: {
			"X-M2M-Origin": config.aeId,
			"X-M2M-RI": "123456",
			"Content-Type": "application/json;ty=2"
		},
		json: representation
	};

	request(options, function (error, response, body) {
		console.log("◀◀◀◀◀");
		if(error){
			console.log(error);
		}else{
			console.log(response.statusCode);
			console.log(body);

			createSubscription(cseUri+config.targetCnt);

			for (var i=0;i<config.visualRecognitionClassifierIds.length; i++){
				createContainer(cseUri+"/"+config.aeName,config.visualRecognitionClassifierIds[i]);
			}
		}
	});
}

function createContainer(targetUri,name){
	console.log("\n▶▶▶▶▶");

	var representation = {
		"m2m:cnt":{
			"rn":name,
			"mni":config.cntMni
		}
	};

	console.log("POST "+ targetUri);
	console.log(representation);

	var options = {
		uri: targetUri,
		method: "POST",
		headers: {
			"X-M2M-Origin": config.aeId,
			"X-M2M-RI": "123456",
			"Content-Type": "application/json;ty=3"
		},
		json: representation
	};

	request(options, function (error, response, body) {
		console.log("◀◀◀◀◀");
		if(error){
			console.log(error);
		}else{
			console.log(response.statusCode);
			console.log(body);
		}
	});
}

function createSubscription(targetUri){
	console.log("\n▶▶▶▶▶");

	var representation = {
		"m2m:sub": {
			"rn": config.subName,
			"nu": ["/"+config.cseName+"/"+config.aeId],
			"nct": 2,
			"enc": {
				"net": [3]
			}
		}
	};

	console.log("POST "+targetUri);
	console.log(representation);

	var options = {
		uri: targetUri,
		method: "POST",
		headers: {
			"X-M2M-Origin": config.aeId,
			"X-M2M-RI": "123456",
			"Content-Type": "application/json;ty=23"
		},
		json: representation
	};

	request(options, function (error, response, body) {
		console.log("◀◀◀◀◀");
		if(error){
			console.log(error);
		}else{
			console.log(response.statusCode);
			console.log(body);
		}
	});
}

function visualRecognitionClassify(classifierId, con){
	console.log("\n▶▶▶▶▶");
	var uri;
	if(classifierId=="classify"||classifierId=="detect_faces"){
		uri=config.visualRecognitionUri+"/"+classifierId+"?version="+config.visualRecognitionVersion;
	}else{
		uri=config.visualRecognitionUri+"/classify?version="+config.visualRecognitionVersion;
	}
	console.log("POST "+uri);

	var options = {
		uri: uri,
		method: "POST",
		headers: {
			"Authorization": "basic "+Buffer.from(config.visualRecognitionUsername+":"+config.visualRecognitionPassword).toString('base64')
		},
		formData : {
		     	"classifier_ids":classifierId,
				"image" : fs.createReadStream("out")
				
		},
	};

	request(options, function (error, response, body) {
		console.log("◀◀◀◀◀");
		if(error){
			console.log(error);
			createContenInstance(error)
		}else{
			console.log(response.statusCode);
			console.log(body);
			createContenInstance(cseUri+"/"+config.aeName+"/"+classifierId, con,body)
		}
	});
}

function createContenInstance(targetUri,conString,output){
	console.log("\n▶▶▶▶▶");
	con = JSON.parse(conString);
	var representation = {
		"m2m:cin":{
				"con": "{\"cameraid\":\""+con.cameraid+"\",\"imagetimestamp\":\""+con.timestamp+"\", \"base64image\":\""+con.base64image+"\", \"output\":"+output+"}"
			}
		};
		
	console.log("POST "+targetUri);
	console.log(representation);

	var options = {
		uri: targetUri,
		method: "POST",
		headers: {
			"X-M2M-Origin": config.aeId,
			"X-M2M-RI": "123456",
			"Content-Type": "application/json;ty=4"
		},
		json: representation
	};

	request(options, function (error, response, body) {
		console.log("◀◀◀◀◀");
		if(error){
			console.log(error);
		}else{
			console.log(response.statusCode);
			//console.log(body);
		}
	});
}