SyntaxError:JSON输入意外结束:使用Node和Javascript的OpenALPR



var data声明中使用try/catch语句时,即使有,程序也会输出"No License Plate Found"。如果删除try/catch声明,当框架中没有牌照时,程序会完美打印,但当有牌照时,我会得到SyntaxError。Node.js和OpenALPR已安装。照片也被成功拍摄。需要OpenALPR专家。

const PiCamera = require('pi-camera');

function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
setInterval(function() {
var path = './' + getRandomInt(500) + '.jpg';
const myCamera = new PiCamera({
mode: 'photo',
output: path,
width: 1920,
height: 1080,
nopreview: false,
});

myCamera.snap()
.then((result) => {
var exec = require('child_process').exec;
var cmd = 'alpr -c eu -n 1 --json ' + path;
exec(cmd, function(error, stdout, stderr) {
console.log(stdout);
try {
var data = JSON.parse(stdout.trim())
} catch (e) {
console.error('Failed to Parse JSON!', e)
}
if (data && data.results &&  data.results.length > 0) {
console.log(data.results[0].plate);
} else {
console.log("nnnNo license plate found.nn");
}
});
console.log(result);
})
.catch((error) => {
console.log(error);
});
}, 2e3);

错误以及在没有尝试/捕获的情况下发生的位置:

undefined:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at /home/pi/Project/project.js:28:33
at ChildProcess.exithandler (child_process.js:301:5)
at ChildProcess.emit (events.js:189:13)
at maybeClose (internal/child_process.js:970:16)
at Socket.stream.socket.on (internal/child_process.js:389:11)
at Socket.emit (events.js:189:13)
at Pipe._handle.close (net.js:600:12)

var data声明前console.log(stdout);的输出:

{"version":2,"data_type":"alpr_results","epoch_time":1588355061888,"img_width":1920,"img_height":1080,"processing_time_ms":1447.340698,"regions_of_interest":[],"results":[]}
  1. 数据已经解析。由于您正在尝试解析,因此出现错误再次。

  2. .trim((是一个字符串操作。您正在处理的是一个json对象。那就是也无效。不过JSON.stringfy(stdout(.trim((是有效的。

最新更新