本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【j2开奖】用深度学习打造由语音控制、能人脸识别的无人机(3)

时间:2016-11-24 13:41来源:118论坛 作者:本港台直播 点击:
我用了ImageMagick库来对我收集的PNG图片做打标签,效果相当好。对于这个部分其实可以有很多的扩展可能。比如用一个情感API来识别人脸所表现出来的情感

  我用了ImageMagick库来对我收集的PNG图片做打标签,效果相当好。对于这个部分其实可以有很多的扩展可能。比如用一个情感API来识别人脸所表现出来的情感。

  用语音来控制无人机

  进行语音识别部分开发的难点并不是识别本身,而是如何把语音流从运行在我本地服务器上的网页里转换成微软Speech API可以使用格式。下面的代码就是实现这个功能的。一旦你能把语音保存成单声道和以正确的采样频率采样后,这个语音识别API就能很方便地识别语音内容。这个API的花费是1000次请求4美元。对于业余应用来说,基本相当于是免费了。

  RecordRTC是一个很好的库,可以用来作为以网页为客户端的语音采集的新手入门的工具。在客户端,我就加入了保存语音文件的代码。

  app.post(‘/audio’, function(req, res) {

  var form = new formidable.IncomingForm();

  // 设定允许客户在一个请求里上传多个文件

  form.multiples = true;

  form.uploadDir = path.join(__dirname, ‘/uploads’);

  form.on(‘file’, function(field, file) {

  filename = “audio.wav”

  fs.rename(file.path, path.join(form.uploadDir, filename));

  });

  // 记录发生的错误日志

  form.on(‘error’, function(err) {

  console.log(‘An error has occured: n’ + err);

  });

  // 一旦所有文件上传完成,才给客户端发相应

  form.on(‘end’, function() {

  res.end(‘success’);

  });

  // 解析出请求里包含的表单数据

  form.parse(req)

  speech.parseWav(‘uploads/audio.wav’, function(text) {

  console.log(text);

  controlDrone(text);

  });

  });

  我使用FFmpeg工具来降低音频的采样率,并把多声道合并成单声道,以供微软API使用。

  exports.parseWav = function(wavPath, callback) {

  var cmd = ‘ffmpeg -i ‘ + wavPath + ‘ -ar 8000 -ac 1 -y tmp.wav’;

  exec(cmd, function(error, stdout, stderr) {

  console.log(stderr); // command output is in stdout

  });

  postToOxford(callback);

  });

  尽管我开发的功能就是这些,但是还是可以继续扩展。比如用微软的文字变语音的API来让无人机说话!

  开发自主搜索路径

  我使用ardrone-autonomy库来为无人机开发自主搜索路径。在此过程中,我无数次地把无人机弄得撞到了客厅的家具和植物上。最后,我妻子很“客气”地建议我去车库里继续我的项目,因为那里没多少可以撞的东西。但是车库的地方有点小,使得操控空间有限。

  

报码:【j2开奖】用深度学习打造由语音控制、能人脸识别的无人机

  图3:在我的“实验室”里试飞无人机。图片由Lukas Biewald授权使用

  在我能有一个更大的实验空间后,我会尝试更智能的搜索算法。不过,现在我还是只会让无人机做起飞和旋转的动作,以此来搜索发现人,并识别是敌还是友。

  var autonomy = require(‘ardrone-autonomy’);

  var mission = autonomy.createMission({ip: ‘10.0.1.3’, frameRate: 1, imageSize: ‘640:320’});

  console.log(“Here we go!”)

  mission.takeoff()

  .zero() // 把当前状态作为参考基准

  .altitude(1)

  .taskSync(console.log(“Checkpoint 1”))

  .go({x: 0, y: 0, z: 1, yaw: 90})

  .taskSync(console.log(“Checkpoint 2”))

  .hover(1000)

  .go({x: 0, y: 0, z: 1, yaw: 180})

  .taskSync(console.log(“Checkpoint 3”))

  .hover(1000)

  .go({x: 0, y: 0, z: 1, yaw: 270})

  .taskSync(console.log(“Checkpoint 4”));

  .hover(1000)

  .go({x: 0, y: 0, z: 1, yaw: 0

  .land()

  最终效果

  看下面的视频。我让无人机起飞并去找我的朋友Chris:

  

  结论

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容