-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathindex.js
104 lines (85 loc) · 2.73 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
run();
async function run() {
log('establishing connection to gpio...');
let five = await readyBoard();
let led = new five.Led('GPIO26');
let button = new five.Button('GPIO20');
log('connecting to iot hub...');
let hubClient = await connectToIoTHub();
led.stop().off();
log('READY');
button.on('press', async () => {
led.blink(500);
log('taking a picture...');
await takePicture('picture.png');
log(`analyzing image...`);
let analyzeResult = await analyzeImage('picture.png');
await deleteImage('picture.png');
log('sending message to iot hub...');
await sendMessage(hubClient, JSON.stringify(analyzeResult.tags));
// log(JSON.stringify(analyzeResult, null, 2));
log(`Looks like ${analyzeResult.description.captions[0].text}.`)
// log(`Sent ${JSON.stringify(analyzeResult.tags)} to your IoT Hub`);
led.stop().off();
log('READY');
})
}
function readyBoard() {
return new Promise((resolve, reject) => {
let five = require('johnny-five');
let raspi = require('raspi-io');
let board = new five.Board({ io: new raspi() });
board.on('ready', () => {
resolve(five);
});
});
}
function connectToIoTHub() {
return new Promise((resolve, reject) => {
let deviceAmqp = require('azure-iot-device-amqp');
let client = deviceAmqp.clientFromConnectionString(process.env.DEVICE_CONN_STRING);
client.open(err => {
if (err) reject(err);
resolve(client);
});
})
}
function takePicture() {
return new Promise((resolve, reject) => {
let Camera = require('camerapi');
let cam = new Camera();
cam.baseFolder('.');
cam.takePicture('picture.png', (file, error) => {
if (error) reject(error);
resolve(file);
});
});
}
function analyzeImage(image) {
let oxford = require('project-oxford');
let cogClient = new oxford.Client(process.env.COGNITIVE_SERVICES_KEY);
return cogClient.vision.analyzeImage({ path: image, Tags: true, Description: true });
}
function deleteImage(image) {
return new Promise((resolve, reject) => {
let fs = require('fs');
fs.unlink(image, (err) => {
if (err) reject(err);
resolve();
});
});
}
function sendMessage(client, content) {
return new Promise((resolve, reject) => {
let device = require('azure-iot-device');
let message = new device.Message(content);
client.sendEvent(message, (err, res) => {
if (err) reject(err);
resolve(res);
});
});
}
function log(msg) {
console.log('');
console.log(msg);
}