Реплики швейцарских часов-VacheronConstantin1比1男款長夾


Нажмите здесь, чтобы просмотреть каталог товаров высокого качества и приобрести их: https://russia.ru2004.com

  本文作者是Lukas Biewald—CrowdFlower的創始人VacheronConstantin1比1男款長夾,Lukas曾被《Inc.》雜誌評選為30歲以下傑出企業家。CrowdFlower成立於2009年,是一個按需勞動力的大數據平台,幫助企業收集培訓數據並進行人機交互機器學習。

  Lukas Biewald畢業於斯坦福大學,獲得數學學士學位和計算機科學碩士學位。Lukas曾任職Yahoo日本搜索團隊主管,之後作為高級數據科學家就職於Powerset,該公司於2008年被微軟收購。

  深度學習和廉價硬件的探索

Реплики швейцарских часов

  早期航空器,1818(來源VacheronConstantin1比1男款長夾:維基百科&美國國會數據庫)

  在製造了一個圖像識別機器人後,顯然下一步是製作一個可飛行的版本。於是我決定打造一款能夠進行麵部識別並響應語音命令的自動化無人機。

  ▍選擇一款預製無人機

  對無人機進行編程,最難的部分是如何開始,我是從組裝無人機零件開始的。但是幾乎和之前所有DIY項目一樣,自己組裝無人機花了我很多的錢。而且坦白的說,我手工打造的無人機一直沒有穩定飛行過。可以肯定的是,直接購買預製版本才是更加簡單經濟的選擇。

  大多數無人機製造商都聲稱提供API接口,但對於業餘愛好者來說並沒有什麽明顯的優勢。市麵上帶似乎可用的API接口的無人機,大多售價都超過1000美元,這是一個很高的進入門檻。

  經過一些調查以後,我發現了Parrot AR Drone 2.0(見下圖)。我認為對於業餘愛好者來說,這是一款理想的機器。它的價格不高,還可以進行編程。你可以選擇花200美元買一台新機器,但由於很多人買了無人機又從來不使用它們,因此購買一台二手機器也是個不錯的選擇。在eBay上二手無人機的售價大約是130美元甚至更低。

  △我收藏的各類無人機,Parrot AR Drone無人機掛在最左邊

  Parrot AR無人機飛行的穩定性沒有更貴的新款 Parrot Bebop 2.0 好(售價大約550美元),但是Parrot AR提供一個好用的node.js客戶端庫叫做node-ar-drone,很適合在上麵進行開發。

  另外一個優勢:Parrot AR無人機很結實。在測試自動化程序的過程中,無論它被撞牆上、家具上、室內植物上和客人身上,他仍然能夠良好的飛行。

  相比給地麵機器人編程,給無人機編程最糟的地方是電池續航時間短。一塊電池需要充電幾個小時,才能飛行大約10分鍾的時間。因此我建議多買兩塊備用電池,測試的時候可以循環使用。

  ▍給我的無人機編程

  由於Java天生的驅動能力,因此是非常理想的無人機編程語言。相信我,無人機飛行中會遇到很多異步事件。我雖然沒有在Node上花費很多時間,但這個語言讓我印象深刻。我最近一次認真的為機器人編程使用的是C語言。用C語言處理線程和各種異常是十分痛苦的,因此最好少用。我希望有人為其它無人機平台建立Java開發包,因為這個語言讓我們處理不確定性的開發事件,變得簡單有趣。

  架構

  我決定在筆記本電腦上運行邏輯,在雲端進行機器學習。比起直接在樹莓派硬件上運行神經網絡,這種架構的延遲更低。我認為這種架構對目前的業餘無人機開發項目來說是可行的。

  微軟、穀歌、IBM和亞馬遜都有快速、廉價的雲端機器學習API。最終,我選擇了微軟認知服務API(Cognitive Service API)。因為這是唯一一個提供定製麵部識別功能的API。

  △無人機的架構

  入門

  默認情況下,Parrot AR Drone2.0帶有可供客戶端連接的無線網絡。這個功能對編程者來說非常麻煩。每次你希望嚐試什麽的時候,需要先斷開你的網絡然後連上無人機的網絡。幸運的是,有一個名叫ardrone-wpa2的項目非常有用。它可以通過腳本讓無人機加入你自己的WiFi網絡。

  遠程登錄到無人機是件十分有趣的事。Parrot運行在一個剝離版本的Linux上。你最近一次使用遠程登錄功能是什麽時候VacheronConstantin1比1男款長夾?連接了什麽東西?以下是打開終端並直接登錄無人機的示例。

  % /connect "The Optics Lab" -p "particleorwave" -a 192.168.0.1 -d 192.168.7.43

  % telnet 192.168.7.43

  用命令行模式飛行

  安裝node庫以後,創建一個node.js REPL(Read-Evaluate-Print-Loop)並用它引導無人機:

  var arDrone = require('ar-drone');

  var client = arDrone.createClient({ip: '192.168.7.43'});

  client.createRepl();

  drone> takeoff()

  true

  drone> client.animate(‘yawDance, 1.0)

  如果你一直跟著做到這步,那麽現在你的無人機肯定已經摔過至少幾次了。我上千次重新粘貼了安全殼,直到它徹底損壞,不得不買一個新的。我猶豫要不要提這個,實際上Parrot AR在不安裝安全殼的情況下飛得更好。但無人機在沒有安全殼的情況下更加危險,因為當無人機撞上什麽東西時,螺旋槳可能會折斷,而且會在家具上留下痕跡。

  通過網頁控製飛行

  為無人機構建基於web的操作界麵並不困難,而且結果令人滿意(見下圖)。使用Express.js框架可以輕鬆的構建一個漂亮的web服務器。

  var express = require('express');

  app.get('/', function (req, res) {

  res.sendFile(path.join(__dirname + '/index.html'));

  });

  app.get('/land', function(req, res) {

  client.land();

  });

  app.get('/takeoff', function(req, res) {

  client.takeoff();

  });

  app.listen(3000, function () {

  });

  我設置了一個按鈕來實現AJAX請求。

  <html>

  < language='java'>

  function call(name) {

  var xhr = new ();

  xhr.open('GET', name, true);

  xhr.send();

  }

  </>

  <body>

  <a onclick="call('takeoff');">Takeoff</a>

  <a onclick="call('land');">Land</a>

  </body>

  </html>

  從無人機上獲得視頻流

  我發現使用無人機攝像頭發送反饋的最佳方法是打開一個連接,並將我的網絡服務器中的PNG連續發送到我的網站。我的網絡服務器使用AR無人機庫從無人機攝像頭中連續拉取PNG圖片。

  var pngStream = client.getPngStream();

  pngStream

  .on('error', console.log)

  .on('data', function(pngBuffer) {

  sendPng(pngBuffer);

  }

  function sendPng(buffer) {

  res.write('--daboundary\nContent-Type: image/png\nContent-length: ' + buff

  er.length + '\n\n');

  res.write(buffer);

Реплики швейцарских часов

  });

  在無人機圖像上運行人臉識別

  Azure的麵部API功能強大且易用。它可以識別你上傳的朋友照片,也可以猜測年齡和性別,我發現這兩個功能的準確率高得令人驚訝。延遲時間約為200毫秒,費用是1.5美元/1,000次。對我開發的這個程序來說,這是完全合理的。下麵是關於如何發送一個圖像並進行麵部識別的代碼。

  var oxford = require('project-oxford'),

  oxc = new oxford.Client(CLIENT_KEY);

  loadFaces = function() {

  chris_url = "https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAALyAAAAJGMyNmIzNWM0LTA5MTYtNDU4Mi05YjExLTgyMzVlMTZjYjEwYw.jpg";

  lukas_url = "https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/3/000/058/147/34969d0.jpg";

  oxc.face.faceList.create('myFaces');

  oxc.face.faceList.addFace('myFaces', {url => chris_url, name=> 'Chris'});

  oxc.face.faceList.addFace('myFaces', {url => lukas_url, name=> 'Lukas'});

  }

  oxc.face.detect({

  path: 'camera.png',

  analyzesAge: true,

  analyzesGender: true

  }).then(function (response) {

  if (response.length > 0) {

  drawFaces(response, filename)

  }

  });

  我使用ImageMagick庫來注釋PNG圖片中的麵孔。在這點上有很多可以擴展的方向,如使用情感API確定麵部的情緒等。

  運行語音識別控製無人機

  語音識別部分最棘手的不是語音識別本身,而是以微軟的Speech API要求的格式將音頻流從網頁傳輸到本地服務器,最終代碼的大部分是為了實現這個功能。一旦你能夠通過單通道采集到正確頻率的音頻,這個API就可以很好的工作,而且非常容易使用。它的價格是4美元/1000次請求,這對於業務愛好者的應用來說,基本上算是免費的。

  RecordRTC有一個很好的庫,這是客戶端網絡音頻錄製的好起點。在客戶端上,我們可以添加代碼來保存音頻文件:

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

  var form = new formidable.IncomingForm();

  // specify that we want to allow the user to upload multiple files in a single request

  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));

  });

  // log any errors that occur

  form.on('error', function(err) {

  console.log('An error has occured: \n' + err);

  });

  // once all the files have been uploaded, send a response to the client

  form.on('end', function() {

  res.end('success');

  });

  // parse the incoming request containing the form data

  form.parse(req)

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

  console.log(text);

  controlDrone(text);

  });

  });

  我使用FFmpeg程序減少音頻采樣點,並將其合並為一個通道,上傳到微軟:

  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);

  });

  自主搜索路徑

  我用ardrone-autonomy庫為我的無人機繪製自動尋徑地圖。在無人機無數次墜落在客廳的家具和植物上後,我妻子好心的建議我把我的項目搬到車庫裏去。那裏沒有太多可破壞的東西了,但也沒有太多的空間(見下圖)。

  △在我的“實驗室”裏試飛無人機

  如果我能獲得更大的實驗空間,我會繼續研究智能搜索算法。但現在我隻需要讓我的無人機能夠起飛、旋轉,去尋找我的朋友和敵人:

  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() // Sets the current state as the reference

  .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()

  把所有的東西放在一起

  看看這個視頻,我帶著我的無人機起飛去尋找我的朋友克裏斯:

  小結

  一旦建立好一切,你可以通過API控製無人機視頻源,無人機編程就變得非常有趣。伴隨著新的圖像識別技術,給我們提供了各種應用的可能,無論從觀察地麵植物到在牆壁上作畫。Parrot無人機不是為在室內小空間飛行設計的,一個價格更高的無人機能讓整個應用變成現實。最終,無人機會變得更加穩定,現實世界中將出現大量類似的應用。

  微軟的認知服務雲API易於使用而且價格便宜。首先,我擔心無人機的異常廣角攝像頭會影響麵部識別,而無人機螺旋槳的噪音會幹擾語音識別。但總體來說,表現要好於預期。延遲問題也不像我所擔心的那樣。使用雲計算處理實時圖像流看起來似乎是個奇怪的架構,但它可能是許多應用的未來之路。

  編譯:媛媛

  招聘 誌願者

  希望你有穩定輸出的時間,英文能力佳,從業者優先。

  加入「AI從業者社群」請備注個人信息

  添加小雞微信 liulailiuwang

Реплики брендовых портмоне Копии брендовых портмоне Реплики сумки Копии брендовых сумки