Ubuntu+AndriodPad 配置FindYourCangy項(xiàng)目

步驟


安裝系統(tǒng)

  1. 下載ubuntu-16.04.4-server-amd64.iso

  2. 根據(jù)教程制作安裝U盤,選擇Ubuntu Sever Installer

    image.png

  3. 進(jìn)入BIOS,配置UEFI Boot mode的引導(dǎo)為U盤優(yōu)先

  4. 插入安裝U盤残揉,重啟電腦毡琉,根據(jù)教程安裝Ubuntu Server

    • 選擇安裝盤的時(shí)候區(qū)分清楚U盤和主機(jī)硬盤
    • 選擇軟件包的時(shí)候及老,勾選standard system utilitiesOpenSSH server
  5. 拔掉U盤身冬,重啟電腦進(jìn)入系統(tǒng)玄括,如果顯示"/dev/sda2: clean, 55880048/77066240 files, 22630945 blocks"鸦泳,參考教程

基本環(huán)境配置


  1. 安裝系統(tǒng)包
sudo apt-get update && sudo apt-get upgrade -y && sudo reboot
sudo apt-get install ubuntu-desktop
sudo apt-get install -y vim git build-essential
sudo apt-get install python-dev
sudo apt-get install nginx
sudo apt-get install curl
  1. 確認(rèn)Python版本是2.7
$ python -V
Python 2.7.12
  1. 下載配置GOOGLE SDK
  2. 配置Google密鑰
    1. 登錄Google Cloud Platform
    2. 創(chuàng)建一個(gè)Project
    3. 開放用到的API
      • Google Cloud Storage and Google Cloud Storage JSON API
      • Vision API
      • Speech API
      • Natural Language API
      • Cloud ML API
    4. 創(chuàng)建一個(gè)服務(wù)帳號(hào)密鑰银锻,選擇json格式,并下載到/home/dobot/FindYourCandy
    5. 將密鑰文件的名稱改為credential.json
    6. 在文件~/.bashrc最后一行加入:```
      export GOOGLE_APPLICATION_CREDENTIALS="path_to_your_own_credential_file"
    7. `source ~/.bashrc`
    
  3. 安裝Python包
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo pip install numpy==1.12.0
  1. 安裝OpenCV3.2
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libgtk2.0-dev
mkdir ~/opencv_from_git
cd ~/opencv_from_git
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
git clone https://github.com/opencv/opencv_extra.git
cd ~/opencv_from_git/opencv/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ -D BUILD_DOCS=ON -D WITH_TBB=ON ..
make -j7
sudo make install
  1. 設(shè)置設(shè)備權(quán)限
$ sudo adduser dobot dialout
$ sudo adduser dobot video
$ ls -l /dev/ttyUSB*
crwxrwxrwx 1 root dialout 188, 0 May  6 17:06 /dev/ttyUSB0
$ sudo chmod 777 /dev/ttyUSB0
$  ls -l /dev/video*
crwxrwxrwx+ 1 root video 81, 0 May  6 17:06 /dev/video0
$ sudo chmod 777 /dev/video0

下載FindYourCandy項(xiàng)目并校準(zhǔn)

  1. 下載FindYourCandy項(xiàng)目
cd ~
git clone https://github.com/BrainPad/FindYourCandy.git
  1. 為配合GoogleML的默認(rèn)配置做鹰,項(xiàng)目改為使用Tensorflow 1.0.1击纬。修改~/FindYourCandy/webapp/requirements/base.txt文件內(nèi)容為:

Flask==0.12
uWSGI==2.0.14

pytz==2016.10
google-cloud==0.23.0

numpy==1.12.0
scipy==0.18.1
gensim==0.13.4.1
scikit-learn==0.18.1

h5py==2.6.0
protobuf==3.2.0
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.1-cp27-none-linux_x86_64.whl

  1. 安裝項(xiàng)目依賴
cd ~/FindYourCandy
sudo pip install -r robot-arm/requirements.txt
sudo pip install -r webapp/requirements.txt
  1. 配置環(huán)境變量
export FLASK_ENV='prd'   
export GOOGLE_APPLICATION_CREDENTIALS="path_to_your_own_credential_file"
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages
  1. 下載英文詞向量日語詞向量到~/FindYourCandy/webapp/candysorter/resources/models
  2. 下載inception-V3模型
cd ~/FindYourCandy/webapp/candysorter/resources/models
wget http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz
tar xvzf inception-2015-12-05.tgz
  1. 修改~/FindYourCandy/webapp/candysorter/config.py

# replace "YOUR-OWN-BUCKET-NAME" to your own bucket name
CLOUD_ML_BUCKET = 'gs://{YOUR-OWN-BUCKET-NAME}'
CLOUD_ML_PACKAGE_URIS = ['gs://{YOUR-OWN-BUCKET-NAME}/package/trainer-0.0.0.tar.gz']
CLOUD_ML_PYTHON_MODULE = 'trainer.train'
CLOUD_ML_TRAIN_DIR = 'gs://{YOUR-OWN-BUCKET->NAME}/{job_id}/checkpoints'
CLOUD_ML_LOG_DIR = 'gs://{YOUR-OWN-BUCKET-NAME}/logs/{job_id}'
CLOUD_ML_DATA_DIR = 'gs://{YOUR-OWN-BUCKET-NAME}/{job_id}/features'

  1. 將代碼中TF0.12.1的接口改為TF1.0.1
    #/Users/wubinbin/Developer/FindYourCandy
#FindYourCandy/train/trainer/model.py
        if not for_predict:
            # add loss operation if initializing for training
            one_hot = tf.one_hot(self.label_ids, num_classes, name='target')
            self.loss_op = tf.reduce_mean(
                # JoMar Modify
                # tf.nn.softmax_cross_entropy_with_logits(logits, one_hot)
                tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=one_hot)
                # tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=one_hot)
            )

        self.softmax_op = tf.nn.softmax(logits)
        self.saver = tf.train.Saver()

        if not for_predict:
            # add train operation and summary operation if initializing for training
            # Optimizer
            with tf.variable_scope('optimizer'):
                self.global_step = tf.Variable(0, name='global_step', trainable=False)
            # Summaries
            with tf.variable_scope('summaries'):
                # JoMar Modify
                # tf.scalar_summary('in sample loss', self.loss_op)
                # self.summary_op = tf.merge_all_summaries
                tf.summary.scalar('in sample loss', self.loss_op)
                self.summary_op = tf.summary.merge_all()
#FindYourCandy/train/trainer/train.py
        loss_log = []
        with tf.Session() as sess:
            # JoMar Modify
            # summary_writer = tf.train.SummaryWriter(self.log_dir, graph=sess.graph)
            summary_writer = tf.summary.FileWriter(self.log_dir, graph=sess.graph)
            sess.run(tf.initialize_all_variables())
  1. 代碼優(yōu)化
#FindYourCandy/webapp/candysorter/views/api.py
#防止沒有糖果的時(shí)候出現(xiàn)崩潰    # Find nearest candy
    logger.info('Finding nearest candy.')
    # JoMar Modify
    listTemp = [speech_sim.dot(s) for s in candy_sims]
    if len(listTemp) < 1:
        logger.info('Can not found candy.')
    else:
        nearest_idx = np.argmax(listTemp)
        logger.info('  Nearest candy: idx=%d, url=%s', nearest_idx, candy_urls[nearest_idx])

        # Save pickup point
        logger.info('Saving pickup point.')
        nearest_centroid = candies[nearest_idx].box_centroid
        pickup_point = image_calibrator.get_coordinate(nearest_centroid[0], nearest_centroid[1])
        cache.set('pickup_point', pickup_point)
#FindYourCandy/webapp/candysorter/ext/google/cloud/ml/_http.py
#Google視覺API更新了接口
class Connection(_http.JSONConnection):
    API_BASE_URL = 'https://ml.googleapis.com'
    # JoMar Modify
    # API_VERSION = 'v1beta1'
    API_VERSION = 'v1'
    API_URL_TEMPLATE = '{api_base_url}/{api_version}{path}'


配置安卓設(shè)備

  1. 使用安卓設(shè)備
  2. 使用ChromeV59版本钾麸,并在系統(tǒng)中添加到權(quán)限白名單更振。Tips最新版本不能開麥克風(fēng)權(quán)限
    3.Tips 注意服務(wù)界面網(wǎng)頁會(huì)連接Google Cloud

問題

升級(jí)pip后出現(xiàn)ImportError: cannot import name main

  • 原因:pip10不向下兼容導(dǎo)致
  • 辦法:使用python -m pip代替

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饭尝,隨后出現(xiàn)的幾起案子肯腕,更是在濱河造成了極大的恐慌,老刑警劉巖芋肠,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乎芳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡帖池,警方通過查閱死者的電腦和手機(jī)奈惑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睡汹,“玉大人肴甸,你說我怎么就攤上這事∏舭停” “怎么了原在?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵友扰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我庶柿,道長(zhǎng)村怪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任浮庐,我火速辦了婚禮甚负,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘审残。我一直安慰自己梭域,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布搅轿。 她就那樣靜靜地躺著病涨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪璧坟。 梳的紋絲不亂的頭發(fā)上既穆,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音雀鹃,去河邊找鬼循衰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛褐澎,可吹牛的內(nèi)容都是我干的会钝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼工三,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼迁酸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俭正,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤奸鬓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掸读,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體串远,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年儿惫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澡罚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肾请,死狀恐怖留搔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铛铁,我是刑警寧澤隔显,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布却妨,位于F島的核電站,受9級(jí)特大地震影響括眠,放射性物質(zhì)發(fā)生泄漏彪标。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一掷豺、第九天 我趴在偏房一處隱蔽的房頂上張望捐下。 院中可真熱鬧,春花似錦萌业、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至廓奕,卻和暖如春抱婉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桌粉。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工蒸绩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铃肯。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓患亿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親押逼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子步藕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)挑格,斷路器咙冗,智...
    卡卡羅2017閱讀 134,699評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評(píng)論 25 707
  • 我們?cè)谧詈玫臅r(shí)代,也在最壞的時(shí)代漂彤,當(dāng)今日新月異的互聯(lián)網(wǎng)時(shí)代雾消,發(fā)展極其迅速,快到你無法想象挫望。尤其是立润,在深圳這座創(chuàng)業(yè)城...
    糖糖CandyL閱讀 167評(píng)論 0 0
  • Monica: All right, I'll see you guys later. (raises)Rache...
    Jean_Picard閱讀 2,044評(píng)論 0 2
  • 春天竟然下雪啦 是冬負(fù)了雪 還是雪背叛了冬 雪,你是冬的伴侶 卻跑來做春的情人 人們應(yīng)該贊美你的熱情奔放 還是該指...
    羅傲閱讀 210評(píng)論 0 0