-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
155 lines (102 loc) · 3.48 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
if (! process.env.NODE_ENV) process.env.NODE_ENV = 'production';
var AuthClient = require('crp-auth-client');
var TaskClient = require('crp-task-client');
var TaskProducerClient = require('crp-task-producer-client');
var fs = require('fs');
var plucker = require('png-plucker');
var spawn = require('child_process').spawn;
//Authentication using your CrowdProcess login information
AuthClient.login('email', 'password', function(err, credential) {
if (err) throw err;
//Options for creating task and dataunit stream
var options = {
bid: 1,
program: fs.readFileSync('./lib/program.js', 'utf8'), //Reads source code for Run(data) function from file
credential: credential
};
createTask(options);
});
function createTask(options) {
var taskClient = TaskClient({
credential: options.credential
});
//Create CrowdProcess task
taskClient.tasks.create({
bid: options.bid,
program: options.program
}, afterTaskCreated);
function afterTaskCreated(err, task) {
if (err) throw err;
//Create dataunit stream to send dataunits directly to CrowdProcess
var stream = TaskProducerClient({
credential: options.credential,
taskId: task._id
});
console.log("TaskID: ", task._id);
//Catch faults or errors emited by CrowdProcess
stream.on('error', error);
stream.on('fault', error);
//Counter for sent and received dataunits
var sent = 0;
var received = 0;
var counter = 0;
var ffmpeg = spawn('ffmpeg', ['-i', 'video.mov', '-y', '-f', 'image2pipe', '-']);
var obj = {};
obj.input = {};
obj.input.argv = [];
obj.input.files = [];
plucker(ffmpeg.stdout, function (error, image) {
counter++;
var name = 'video.' + counter + '.jpg';
var content = JSON.stringify(image);
obj.input.argv.push({arg:name, pos:obj.input.argv.length});
obj.input.files.push({name:name, content:content});
if(obj.input.argv.length === 5) {
stream.write(obj);
//fs.writeFileSync("data.json",JSON.stringify(obj))
sent++;
obj.input.argv = [];
obj.input.files = [];
}
});
if(obj.input.argv.length > 0) stream.write(obj);
// fs.readdir("./img/", function (err, files) {
// if (err) throw err;
// var obj = {};
// obj.input = {};
// obj.input.argv = [];
// obj.input.files = [];
// for(var i = 0; i < files.length; i++) {
// var name = files[i];
// if(name.indexOf(".jpg") < 0) continue;
// var content = fs.readFileSync("./img/" + name, 'binary');
// content = LZString.compressToBase64(content);
// obj.input.argv.push({arg:name, pos:obj.input.argv.length});
// obj.input.files.push({name:name, content:content, decompress:true});
// if(obj.input.argv.length === 5 || i === (files.length - 1)) {
// stream.write(obj);
// sent++;
// obj.input.argv = [];
// obj.input.files = [];
// }
// }
// });
//Receive results from CrowdProcess
stream.on('result', function(data) {
received++;
for(name in data.output.files) {
fs.writeFileSync("./result/" + name, data.output.files[name], 'binary');
}
});
//Result stream from CrowdProcess ended
stream.once('end', function() {
//Did not receive all dataunits
if (sent != received) console.error('Only received %d of the %d dataunits sent.', received, sent);
});
}
}
function error(err) {
if (typeof err != 'string')
err = err.message;
console.error(err);
}