Category Archives: Python

[ 翻譯 ] 2018.10.12-根據TensorFlow團隊,TensorFlow將於2020年1月起,停止支援Python 2

原文作者

TensorFlow團隊

圖片

截圖自https://python3statement.org/

網站,特此致謝!

翻譯宗諭審閱鈺莨
說明

感謝TensorFlow團隊的授權翻譯,特此致謝!

 

以下公告由Martin代表TensorFlow團隊發佈:

 

程式語言Python的開發者們,將於2020年1月1日停止支援Python 2.7(詳見此文)。

 

因此,TensorFlow專案也將停止支援Python 2,當Python 2的上游支援終止於2020年。在2020年1月1日後,團隊針對TensorFlow所有原始碼的改變,將不再需要相容於Python 2。總之,TensorFlow可能自2020年起,不再適用於Python 2。

 

這樣的改變將可簡化我們的程式碼,並且可使用Python 3.x標準函式中的新功能。

 

備註:如果您想購買AI人工智慧相關產品,歡迎洽詢機器人王國商城,謝謝。

 

相關文章

[Python教學] Facebook圖形API測試工具,取得粉絲頁按讚數

作者/攝影 曾吉弘
時間  2小時
成本
難度 * * * *
材料表
  • 個人電腦
  • Facebook帳號

本文要介紹如何使用Facebook的圖形API測試工具(Graph API explorer) 取得粉絲頁的相關資料,最常見的應用就是讚數。如果喜歡的話,還可以結合Arduino作出有趣的互動裝置,例如以下:

(註:本影片僅為示意,並非使用Python來取得資料)

 

Facebook開發者平台與圖形API測試工具頁面

請到Facebook開發者網站(請用您原本的Facebook帳號登入即可),在網頁最下面找到 圖形API測試工具(Graph API explorer)。您可以在此查詢您個人的所有資料,查詢結果會以 json 格式回傳,下圖是阿吉老師的Facebook Id 與使用者姓名的查詢結果:

(圖形API語法詳細文件請點我)

請點選畫面右上角的下拉式選單,找到您所要查找的粉絲專頁(您得是該專頁的管理員才行),例如本範例的CAVE教育團隊。下圖查詢了四個項目:id、name、fan_count(讚數)與link。您當然可以查詢其他欄位,只要有輸入資料都可以查得到。

以往的做法是比較寬鬆的,不需要AccessToken,且只需要把粉絲頁超連結www改為graph即可,但現在已經都需要從圖形API測試工具取得才行,這也暗示了您需得是該粉絲頁的管理員才可查找。並且AccessToken會在兩小時之內過期。網路上介紹如何取得永久有效的AccessToken,但不在本篇討論範圍之內。

Python程式碼

 

最後請看一下本範例的Python程式碼,

阿吉碎碎念:Facebook相關的API改動非常快,例如2.6之前,fan_count 原本是叫做 likes。其他雲服務也會常常改,但真的Facebook最愛改就是了,可能和創辦人個性有關吧~

 

本範例的關鍵URL由以下四個項目組成:

  1. facebook api 網址:https://graph.facebook.com/v2.10/
  2. 粉絲頁id:148248725246010 (CAVEr教育團隊)
  3. 要查找的欄位:?fields=id,name,fan_count,link&access_token=
  4. Access token:請由Facebook API圖形API測試工具

 

當然,其他程式語言如C#、Node.js 甚至App Inventor等都可以做到本範例的效果,您可以在取得資料之後直接使用瀏覽器來測試,只要看到以下畫面就是ok的:

 

https://graph.facebook.com/v2.10/148248725246010?fields=id,name,fan_count,link&access_token=XXX

 

FB API 2.10

 

#22是您要查詢的Facebook帳號或粉絲專頁ID。#23則是Access Token

#04是自訂的函式來處理Facebook API回傳的JSON格式結果。

#24~26 則是依序顯示出我們所要查詢的欄位,執行畫面如下圖:

import urllib2
import json

def get_page_data(page_id,access_token):
    api_endpoint = "https://graph.facebook.com/v2.10/"
    fb_graph_url = api_endpoint+page_id+"?fields=id,name,fan_count,link&access_token="+access_token
    try:
        api_request = urllib2.Request(fb_graph_url)
        api_response = urllib2.urlopen(api_request)
        
        try:
            return json.loads(api_response.read())
        except (ValueError, KeyError, TypeError):
            return "JSON error"

    except IOError, e:
        if hasattr(e, 'code'):
            return e.code
        elif hasattr(e, 'reason'):
            return e.reason

page_id = "148248725246010" # username or id
token = "XXXXX"  # Access Token
page_data = get_page_data(page_id,token)

print "Page Name:"+ page_data['name']
print "Likes:"+ str(page_data['fan_count'])
print "Link:"+ page_data['link']

 

相關文章:

[Intel Edison X MCS X MeArm] MCS Gamepad 元件應用,智慧型手機操控機械手臂

本篇文章將介紹綜合性的應用,透過智慧型手機上的MediaTek Cloud Sandbox (聯發科的免費雲端資料平台,簡稱MCS)app,經由WiFi傳送訊息到我們的控制器Intel Edison,並控制我們的機械手臂MeArm

事前準備:

  1. Intel Edison 要先準備好linux的系統,本範例使用的是ubilinux,並且完成最基本的GPIO設定
  2. 本範例會需要用到python requests函式庫來跟MCS溝通,所以也請先安裝
  3. 在MCS上新增一個Prototype及test device,記下device id , device key
  4. MCS的Prototype加入本範例需要用的gamepad元件,並將ID命名為gamepad,如圖:

 

Screen Shot 2016-01-02 at 11.54.44 PM

 

 

硬體部分:準備好MeArm機械手臂,連接好我們的控制器Intel Edison,如圖:

 

 

IMG_0951

 

 

程式部分:

import mraa
import time
import requests

device_id = "輸入device_id"
device_key = "輸入device_key"

data_channel = "gamepad"
url = "http://api.mediatek.com/mcs/v2/devices/" + device_id 
url += "/datachannels/" + data_channel + "/datapoints.csv"

def game_pad():
    r = requests.get(url, headers = {"deviceKey" : device_key})
    data = r.content.split(',')[2:]
    print data
    #time.sleep(0.01)
    return (data[0][0], data[0][-1])


pin = [3, 5, 6, 9]
servo = []
servo_degree = [90, 90, 90, 180]
for p in pin:
    servo.append(mraa.Pwm(p))
    
for s in servo:
    s.period_us(20000) #50Hz
    s.enable(False)

max_duty = 2300.0 #us
min_duty = 500.0

def servo_rotate(servo_number, degree): #servo_number (0, 1, 2, 3) = (3, 5, 6, 9)
    duty_cycle = ((max_duty - min_duty) * degree / 180.0 + min_duty) / 20000.0
    servo[servo_number].enable(True)
    servo[servo_number].write(duty_cycle)
    print "duty_cycle = ", duty_cycle, "\n"

dt = 0.01

for s in servo:
    s.enable(False)

unit_degree = 30
while True:
    command = game_pad()
    if command[1] == "1":
        if command[0] == "l":
            print "left"
            if servo_degree[0] > unit_degree:
                servo_degree[0] -= unit_degree
                servo_rotate(0, servo_degree[0])
        elif command[0] == "r":
            print "right"
            if servo_degree[0] < 180 - unit_degree:
                servo_degree[0] += unit_degree
                servo_rotate(0, servo_degree[0])
        elif command[0] == "d":
            print "down"
            if servo_degree[2] < 180 - unit_degree: 
                servo_degree[2] += unit_degree servo_rotate(2, servo_degree[2]) 
        elif command[0] == "u": 
            print "up" 
            if servo_degree[2] > unit_degree:
                servo_degree[2] -= unit_degree
                servo_rotate(2, servo_degree[2])
        elif command[0] == "A":
            print "A"
            servo_rotate(3, 0)
        elif command[0] == "B":
            print "B"
            servo_rotate(3, 180)

最後就是影片展示啦!

 

 

ArduinoYun使用Temboo上傳照片至Dropbox

ArduinoYun的相關範例在網路上越來越多人分享,想必大家常常遇到按照步驟與Temboo連線,但是Dropbox卻沒有任何回應。

首先可以來Activity的LOG來看Temboo是否有資料上傳的紀錄,紀錄內容有上傳資料的時間,還有上傳的裝置,如果用的是Yun的Linux系統,裝置會顯示PythonSDK,如果沒有任何上傳紀錄,代表你並沒有成功連線到Temboo網站,趕快看看Yun是不是有上網成功喔。

01

有沒有遇過Temboo傳過這樣的錯誤呢?也不知道為什麼?

01_2

這樣的問題除了在Dropbox之外也很容易發生,Temboo提供的一個功能是特別需要注意的,那就是oAuth服務,oAuth所做的是允許認證這項功能

1、允許用戶讓第三方應用存取該用戶在某一網站上儲存的私密的資源

2、無需將使用者名稱和密碼提供給第三方應用

這在ArduinoYun中非常重要,因為Yun很容易社群網站(比如google、FB、Dropbox)被當成機器人,即使你有這個網站的帳號與密碼也無法登入,只要使用oAuth通過這個網站的認證就能使用

02

要使用oAuth,在Temboo上一共有兩個功能要做(1)InitializeOAuth (2)FinalizeOAuth

我們以Dropbox為例,首先在Dropbox開發者網站創建APP,拿到這個Dropbox APP的appkey、appsecret

03

接著將這兩筆資料輸入到Temboo網站的Dropbox . OAuth . InitializeOAuth之中,你將會得到AuthorizationURL、callbackID、OAuthTokenSecret共三筆資料

04

接著將AuthorizationURL的連結打開,Dropbox的APP會詢問你是否願意讓這個Temboo網站存取,按允許即可

05

接著我們到Temboo網站的Dropbox . OAuth . FinalizeOAuth之中,接著輸入Dropbox的AppKey、AppSecret。還有在InitializeOAuth之中得到的callbackID、OAuthTokenSecret也要輸入進去。

06

最後我們會得到AccessToken、AccessTokenSecret共兩筆資料。這兩筆資料可以幫助我們在使用Temboo的Dropbox服務上暢行無阻,以ArduinoYun上傳照片到Dropbox為例,原本我們必須照著Dropbox . FilesAndMetadata . UploadFile的內容輸入資料才可以上傳照片,你也可以靠使用AccessToken、AccessTokenSecret這兩筆資料通過認證

下面是上傳照片到Dorpbox時,Temboo所準備的python程式碼,下面要輸入的yourAccessToken、yourTokenSecret就是剛剛得到的兩筆資料了,至於yourAppKey、yourAppSecret則是Dropbox開發者網站的的appkey、appsecret。

07

如果還有新收穫再來跟大家分享,下次再見囉

 

 

[python] JSON 與 Facebook 取讚,可以直接執行在 Arduino Yun 的 Linux 中喔!

各個版本的 Facebook 取讚都玩過了,想不到用 python 居然只要… 不到10行啊…

螢幕截圖使用 Coding Ground (大推的線上程式編譯網站,超多程式可以玩),本份 code 可以直接執行在 Arduino Yun 的 Linux 中喔!

歡迎回顧一下我們 Arduino Yun 的相關文章 與 App Inventor 的 Web 元件教學1234

import urllib2
import json

req = urllib2.Request('http://graph.facebook.com/CAVEEducation')
response = urllib2.urlopen(req)             
html = response.read()                      

data = json.loads(str(html))
print('# of CAVEDU FB fanpage likes:',data['likes'])
python to retrieve FB fanpage # of likes

python on EV3 機器人-使用超音波感測器偵測與障礙物之間的距離

這次分享的內容,是由Python開啟EV3的超音波偵測,為了確定有確實的開啟超音波感測器,

我們設定讓EV3的兩組馬達前進十秒鐘,在這10秒內,如果超音波偵測前方15公分內有障礙物,

則立即停止馬達的旋轉。

3_2_python

以python on EV3 機器人-使用python控制EV3馬達為基礎,改編的超音波感測器程式碼,改編內容如下

3_10_python

(1)在輸入ev3.lego的模組中,新增UltrasonicSensor的功能

(2)新增python內建的time模組

(3)宣告超音波模組接入的孔為 一號孔

(4)在while迴圈設定10秒後跳出

(5)印出超音波感測器量測的距離

(6)如果量測距離校於150mm馬達停止,大於的話馬達繼續前進

檔案撰寫完畢後,首先將撰寫好的檔案傳送至EV3之中,以下是使用Cyberduck的SFTP模式傳送檔案,使用者帳號為:root,密碼為r00tme,密碼的0是數字零

3_3_python

 3_5_python

傳送完檔案後,使用putty連線到EV3並執行檔案,使用者帳號為:root,密碼為r00tme,密碼的0是數字零

3_7_python

執行結果如下:

3_8_python

有人或許會問,傳送檔案不能用putty傳送嗎?其實是可以的,不過小編在這推薦cyberduck另外做檔案傳輸,

因為使用putty傳送檔案需要指定檔案的名稱、傳送檔案和被傳送檔案的路徑才能完成。

相較之下,cyberduck只需要把想傳送的檔案拖曳到想放置的地方即可,十分方便。

喜歡都用指令控制的朋友也可以用puuty的SCP方法傳送檔案,或是直接在EV3的環境撰寫python檔案喔

python on EV3 機器人-使用python控制EV3馬達

這次分享的是由ev3主機的python檔案,讓EV3的A、B兩個馬達持續轉動,

2_4_python

想用python控制EV3馬達,需要(1)先安裝dev-ev3的環境(python on EV3 機器人 – 整理好的 img 檔送給您!),

建議(2)先體驗dev-ev3環境下控制馬達(Python EV3 速記 – 控制馬達轉速與方向)

與(3)基本的python語法(python on EV3 機器人-基礎python撰寫)

這是這次分享的的程式碼,程式的內容由python on EV3 機器人-基礎python撰寫所改編,

不一樣的是這次加入python-ev3模組的內容,我們可以使用這個模組裡的語法。

執行此程式後,輸入”A”可以讓馬達A轉動,輸入”B”可以讓馬達B轉動,輸入”stop”可以讓所有馬達停止轉動,

2_1_python

以下皆為使用python-ev3模組的內容:

(1)將模組ev3.lego輸入至檔案中

(2)由LargeMottor決定控制哪一個馬達(A、B、C、D)

(3)使用reset重新設置馬達,重複宣告使用馬達時,需要重新將數值設置

(4)開啟regulation_mode模式(on、off),開啟會使你的馬達輸出比較穩定,比較不受剩餘電池電量的影響

(5)使用run_forever讓馬達持續運轉(-900~900)

(6)使用stop讓馬達停止

你可以在dev-ev3的環境下編寫python的檔案,也可以在你的電腦編寫好檔案之後再把檔案傳送到ev3,

小編我是在電腦寫好主要程式後再傳送,推薦這款好用的軟體cyberduck,支援Windows與Mac系統

2_3_python

選擇SFTP傳輸協定後,輸入EV3主機的ip並輸入帳號與密碼,你的電腦就可以與EV3進行檔案傳輸了

馬上來體看看吧~

python on EV3 機器人-基礎python撰寫

本篇暫時不會連線EV3,想學習python,卻沒有學習過的人,

可以參考這篇文章進行練習,體驗一下python的功能。

還沒有安裝python的人,可以到官方網站進行下載,本篇以windows系統python2.7進行分享。

安裝程式完畢後,進入[開始]列表的[python27]點選[IDLE(python GUI)],進入python介面。

1_1

這是python直接執行命令的地方,開一個新的文字檔案,進行比較長的文字編寫

對python不熟的人可以練習這三段程式碼體驗python,之後將會以這三個範例為基礎,改為控制EV3的馬達

1、體驗輸入文字,電腦會輸出文字並重複十次

1_3

接著F5執行這段檔案,執行結果如下:

1_4

2、對輸入的文字進行判斷,輸入yes時,會進行特定的回答

1_5

按下F5,執行後:

1_6

3、讓電腦可以對複數的回答進行回應,無窮迴圈while中,輸入”end”可以跳出迴圈

1_7

按下F5,執行後:

1_8

python on EV3 機器人 – 整理好的 img 檔送給您!

本篇要介紹如何燒錄給樂高EV3 機器人開機用的SD卡,內含的作業系統是 Debian,並已經掛好版本相當新的 Python2 與 Python 3。本文是按照 ev3dev 網站來操作,歡迎您與我們一起來玩玩看喔!

先讓大家看看成功的畫面,讚啦!在這個 terminal 下面可以玩的事情實在是太多了。要做到以下畫面,您需要兩件事:

1. 下載 img 映像檔並燒錄到 micro SD 卡中,插入EV3的SD卡插槽即可開機(無需更改原本的作業系統)2. 完成 Ethernet over USB,讓這台EV3模擬成一個網路裝置。我們就是這樣透過 SSH 來登入它,它也能利用電腦的網路來上網更新套件等等。本文以 Windows 來示範(說真的在 Linux / MAC 上來處理簡單多了)

009

1. 請下載我們幫您包好的 img 檔,與官方的差別在於我們有幫大家把一些python 套件與官方開發的 EV3 library 整理得更好一點。這個解壓縮完會有 15G,所以您需要16G 的記憶卡喔。使用 Win32DiskImager 燒錄,燒錄完畢插入 EV3 的 micro SD slot 即可開機。開機完成畫面如下:

 

2. 請進入 USB 選單,啟動RNDIS(Remote Network Driver Interface Specification、遠端網路驅動程驅動規格… 好拗口)。接著回到上一層,進入 Networking 選單,啟動 Gadget 選項即可。

    

 

3. 接著請將您的 EV3 接上電腦,並開啟控制台 / 裝置管理員。在此由於 Windows 會自動安裝好 driver ,但這不是我們要的,所以在此要重新做一遍。請在網路介面卡下找到 Remote NDIS based Internet Sharing Device

004

4. 請對它點選右鍵來更新驅動程式,並選擇[從指定位置來安裝]。接著選擇網路介面卡,製造商選擇 Microsoft,並在右側找到 Remote NDIS Compatible Device。這時就會您是否確定要更新 driver,點選確定後即可,在此需要等一下(約1~2分鐘)。

5. 最後一步是把我們聯外的網路分享給 EV3 使用。請回到控制台 / 網路與共用中心,請點選畫面左側的[變更介面卡設定]。您在其中會看到一個 USB Ethernet/RNDIS Gadget,這就是 EV3 啦。

005

6. 請回到控制台/網路與網際網路/網路連線,找到您聯外的網路名稱(下圖為 ROBOTKINGDOM-WIRELESS),對它點右鍵,找到[共用]選項。

006

7. 請勾選其中的選項,這樣就能讓 EV3 藉由這個網路來聯外了。

 

008

 

8. 電腦設定完成了,請回到EV3 主畫面。Networking / Manage connections,會看到一個 Wired 選項,請點選它

在 IPv4 標籤下點選 Change…

選擇 Load Windows Defaults,藉此仔入我們之前辛辛苦苦做好的設定啊 QQ

這時還沒有連線,所以您會看到 State 顯示為離線(offline)。請切到 Conn. 標籤,點選 Connect automatically,這樣 EV3 就會在每次開機時試著去用這組設定去連上網路。

最後點選Connect,一切順利的話就可以在 IPv4 標籤下看到您的 EV3 取得的 IP了!下圖為 192.168.137.3,我們就是透過這個 IP 來登入 EV3。

 

9. 請用 putty 或其他類似功能的連線程式,使用 SSH 連到這個 IP。預設帳密為 root / r00tme <- 兩個 zero 不是O。登登登!登入之後的歡迎畫面如下:

009

 


 

 

 

 

登入之後就來玩看看,首先切換到  /sys/class 裡面看看有什麼,相關的硬體都有:gpio (EV3的按鈕好像是歸類在這,還要確認一下)、leds、tacho-motor 與 i2c 裝置等等。再進入 /tacho-motor 資料夾看看:有一個 motor0 ,這代表一個實體樂高EV3馬達。

請注意您必須真的接上一個馬達才會在 /tacho-motor 資料夾下看到 motor0

013

輸入 cat /sys/class/tacho-motor/motor0/position 即可讀取馬達角度感測器值,下圖讀了兩次:-33 與 239

011

要直接這樣子讓馬達轉起來也是可以的:請先 echo 50 > ~/duty_cycle_sp,代表設定馬達電力為 50%,接著再 echo 1 > ~/run。馬達就會轉動啦!延伸閱讀:Python EV3 速記 – 控制馬達轉速與方向

012