-
1 # GeCoder
-
2 # 慕課網
Python作為一種應用極為廣泛的語言,幾乎在任何領域都能派上用場。想做Web有Flask/Django/Tornado;想做分散式有Celery;想做手機App有Kivy;想做資料分析有Pandas;想做視覺化有Matplotlib/Seaborn/Plotly/Bokeh;想做機器學習有Tensorflow/PyTorch/MxNet……
誇張一點說,幾乎沒有什麼做不了的東西(筆芯)。小慕今天分享兩個可以用Python做的非常好玩的事情,大家都可以試試看~一、面部識別得益於大量前人的工作,如今利用Python做一些簡單的計算機視覺工作已經變得非常非常簡單了。像人臉識別、面部特徵提取之類的工作,就可以直接拿來用,極少需要自己實現繁瑣的演算法。
DLib就是一個這樣的C++庫,而同時它也提供了Python介面。
想必大家都有過在辦公室遭遇boss探視的經歷,而此時此刻你卻在毫無自知地逛著淘寶/知乎/豆瓣,場面一度十分尷尬……
那我們就來嘗試一下,用Python透過攝像頭探測人臉。如果有人進入了攝像頭範圍,則讓Python提出一個通知,告訴你——趕緊把不相關的東西關掉!
整個程式碼很短,無非幾十行,為了能夠使用,我們還需要安裝一些包和庫。這裡需要用到的包括OpenCV和DLib。由於dlib需要boost-python,因此還需要安裝boost和boost-python。(注意:boost-python預設情況下只編譯python2依賴的庫,如果使用python3,需要加編譯開關;而dlib裡是沒有探測python版本的,所以可能還需要做一些小hack或者是直接改boost-python庫裡的檔名)
至於程式碼,可以簡單地放出來:
import cv2import dlibfrom subprocess import callfrom time import timeFREQ = 5FACE_DETECTOR = dlib.get_frontal_face_detector()# macOS下可以使用AppleScript傳送通知def notify(text, title):cmd = r"display notification "%s" with title "%s""%(text, title)call(["osascript", "-e", cmd])if __name__ == "__main__":# 初始化攝像頭cap = cv2.VideoCapture(0)# 建立繪圖視窗# cv2.namedWindow("face")notify_time = 0while True:# 獲取一幀ret, frame = cap.read()# 不需要太精細的圖片frame = cv2.resize(frame, (320, 240))# 探測人臉,可能有多個faces = FACE_DETECTOR(frame, 1)for face in faces:# 提取人臉部分 畫個方框# fimg = frame[face.top():face.bottom(), face.left():face.right()] # cv2.rectangle(frame, (face.left(), face.top()), (face.right(), face.bottom()), (255, 0, 0), 3) # 不超過FREQ秒一次的發提醒if time() - notify_time > FREQ:notify(u"檢測到人臉", u"注意")notify_time = time()# 畫到窗口裡# cv2.imshow("face", frame)# 按Q退出if cv2.waitKey(500) & 0xff == ord("q"): break# 清理視窗 釋放攝像頭# cv2.destroyAllWindows()cap.release()程式碼的原理很簡單:透過opencv捕獲攝像頭獲取的影象,然後交由dlib的face detector進行檢測。如果檢測到臉部,則透過AppleScript發出系統提醒(notify函式即透過process執行AppleScript發出提醒,如果你使用的是Windows,也可以替換成別的內容,例如Win下使用VBScript發出彈窗提醒)。
當然,既然檢測到人臉,那就不僅僅只是能做簡單提醒了。還可以做的事情包括多張照片的臉部變形合成——比如,找出你和你女朋友的照片來做個夫妻相合成什麼的……
或者,提取所有的標誌性點,給人臉合成出意外的表情或者哈哈鏡效果。
甚至可以藉助其它的深度學習網路進行人臉識別。這算是超級弱化版的臉部識別,比不上FaceID但也挺好玩,不過計算量就不容樂觀了。
順便說一句,什麼人臉識別關掉不該看的東西,對小慕來說不存在的,人家上班刷知乎可是經過老闆點頭的!(驕傲臉叉腰)
二、資料分析來分析下Marvel 今年的最後一部戲:「雷神3:諸神的黃昏」。前一段時間滿天飛的預告片,神秘博士的客串,綠巨人的出演,看得人十分興奮!來張大圖:
大家對於這部電影的評價是怎麼樣的呢?小慕爬取了2w條豆瓣影評,做一個簡單分析。
先來看看豆瓣的短評:
這裡只抓取了前2w條評論,說一個小技巧,喜歡寫爬蟲的小夥伴們注意了:爬取的網頁一定要快取到本地!這可以減少解析網頁時出錯,避免需要重新再爬一遍的「尷尬」!另外這能給伺服器減少負載,人家網站管理員看你的請求還算守規矩,也就不會封你賬號/ip啦!
程式碼大概是這樣的:
下面是快取下來的網頁檔案:
既然有2w多條資料,怎麼能直接寫sql,那會累死的……於是要來封裝一下操作資料庫的邏輯:
來看看效果,除去部分出錯的,還剩下19672條:
具體的資料是長這樣的:
另外,贊同數量排名第一 卷耳 君的影評實在是太有意思了:
第一部:《爸爸,再愛我一次》
第二部:《哥哥,再愛我一次》
第三部:《姐姐,再愛我一次》
ps:托爾終於從錘神變成了雷神
錘子之神這個梗小慕表示能玩一年(手動微笑臉)。
光有資料還不足以說明什麼,深入分析一波:細心的小夥伴一定發現了,雷神明明是11月3號才上映,為啥10月份就有影評了?小慕猜測,這肯定是漫威鐵桿粉跑國外看了,一查發現,果然人家洛杉磯10月10號就上映了:
既然關心到日期,可以來統計一下週一到週日哪天去看電影的人比較多:
整體資料顯示:果然還是週末去看電影的人更多……週一資料高於二、三、四的原因,不知道是不是沒有周末的朋友調休去看的?
PS: 資料庫裡的日期是2017-10-25格式的:怎麼快速讓他顯示成周X呢? 這裡只要寫個小函式就行:
從資料庫裡讀資料和統計的方式在這:(後面的統計方式也都類似,就不每次都把程式碼放出來啦)
總體上看還是推薦的人比較多耶,這應該挺符合大家的預期,畢竟是漫威出品,光忠實粉絲就不計其數。更何況這個片子裡出現了很多超級火爆的場面戲,還有各種超級英雄助陣,這樣的統計結果也就不足為奇了。
至於補充提問中提到的這為什麼適合用Python做,其實說到底就是用Python來抓取和處理各種資料都非常「順手」。
據小慕所知,目前的資料工作中,資料科學家使用最多的工具語言就是Python,排在第二的工具語言是R語言。但這裡有一個有趣的現象,那就是同時使用Python或者R語言的人,推薦別人使用Python的卻遠高於R語言。Why?
答案是:1. Python簡單易學,極其容易上手,語法簡單,處理速度會比R語言要快,而且無需把資料庫切割。
2. 市場前景好,是目前的趨勢,就業也會更容易。
3. 標準庫非常龐大,特別的“功能齊全”,可以處理各種工作,其中就包含抓取和處理資料。
所以,有一種說法是:python語言在工程方便比較實用,R語言則更受學術界歡迎。具體是否贊同這種說法,還要看大家自己的理解咯~其實除了小慕舉例說的這兩種有趣的事情,Python能做的還有很多,在此不一一列舉,如果感覺get到了新姿勢,記得回來點贊啦~
-
3 # 山海皆可平z
可以控制裝置,樹莓派。樹莓派可以做很多事情,比如家庭智慧控制中心。還可以用作一臺NAS儲存伺服器。還有用作一臺普通電腦。
python可以控制樹莓派來做這些事。
-
4 # 暗腦
機器學習,比如手寫字識別,人臉識別,垃圾郵件處理等。 當然還可以畫圖,和matlab類似,不過是工業級的。
也許最初設計 Python 這種語言的人並沒有想到今天Python 會在工業和科研上獲得如此廣泛的使用。著名的自由軟體作者Eric Raymond 在他的文章《如何成為一名駭客》中,將Python 列為駭客應當學習的四種程式語言之一,並建議人們從Python 開始學習程式設計。這的確是一箇中肯的建議,對於那些從來沒有學習過程式設計或者並非計算機專業的程式設計學習者而言,Python 是最好的選擇之一。Python 第一次學習Python,我只用了不到二十分鐘的時間,站在書店裡把一本教初學程式設計的人學習Python 的書翻了一遍。也是從那時起,我開始被這種神奇的語言吸引。 Python 可以用來開發symbian 上的東西。 易用與速度的完美結合Python 是一種用起來很方便的語言,很多初學Java 的人都會被 Java 的CLASSPATH 搞得暈頭轉向,花上半天的時間才搞明白原來是CLASSPATH 搞錯了自己的 Hello World 才沒法執行。用Python 就不會有這種問題,只要裝上就能直接用。 Python 是一種指令碼語言,寫好了就可以直接執行,省去了編譯連結的麻煩,對於需要多動手實踐的初學者而言,也就是少了出錯的機會。
而且Python 還有一種互動的方式,如果是一段簡單的小程式,連編輯器都可以省了,直接敲進去就能執行。Python 是一種清晰的語言,用縮排來表示程式的巢狀關係可謂是一種創舉,把過去軟性的程式設計風格升級為硬性的語法規定。再不需要在不同的風格間選擇、再不需要為不同的風格爭執。與 Perl 不同,Python 中沒有各種隱晦的縮寫,不需要去強記各種奇怪的符號的含義。Python 寫的程式很容易懂,這是不少人的共識。Python 是一種面向物件的語言,但它的面向物件卻不象C++那樣強調概念,而是更注重實用。不是為了體現對概念的完整支援而把語言搞得很複雜,而是用最簡單的方法讓程式設計者能夠享受到面向物件帶來的好處,這正是 Python 能像 Java、C#那樣吸引眾多支持者的原因之一。 Python 是一種功能豐富的語言,它擁有一個強大的基本類庫和數量眾多的第三方擴充套件,使得Python 程式設計師無需去羨慕Java 的JDK。Python 為程式設計師提供了豐富的基本功能使得人們寫程式時用不著一切最底層做起。說到這裡,人們通常會用一種擔心:指令碼語言通常很慢。指令碼語言從執行的速度講的確會慢一些,但 Python 的速度卻比人們想象得快很多。雖然 Python 是一種指令碼語言,但實際上也可以對它進行編譯,就象編譯Java 程式一樣將Python 程式編譯為一種特殊的ByteCode,在程式執行時,執行的是ByteCode,省去了對程式文字的分析解釋,速度自然提升很多。在用Java 程式設計是,人們崇尚一種Pure Java 的方式,除了虛擬機器一切東西都用Java 編寫,無論是基本的資料結構還是圖形介面,而Pure Java 的SWING,卻成為無數Java 應用開發者的噩夢。
Python 崇尚的是實用,它的整體環境是用C 來編寫的,很多基本的功能和擴充套件的模組都是用 C/C++來編寫的,當執行這一部分程式碼時,它的速度就是C 的速度。用Python 編寫的普通桌面程式,其啟動執行速度與用C 寫的程式差別不大。除了這些,透過一些第三方軟體包,用Python 編寫的原始碼還可以以類似JIT 的方式執行,而這可以大大提高Python 程式碼的執行速度,針對不同型別的程式碼,會有2 倍至100 倍不等的速度提升。 Python 是我見到過的語言中,在易用性和速度上結合的最完美的一個,透過喪失一點點經常可以忽略不計的執行速度從而獲得更高的程式設計效率,這就是我選擇Python 的原因。把精力放在要解決的問題上選擇一種合適的語言,才能讓你把有限的精力放到最需要解決的問題上。不同的語言有不同的作用,C 和彙編適合編寫系統軟體,如果用它們來編寫企業應用,恐怕沒幾個人能得心應手。我以前就碰到一個用匯編寫資料庫程式的哥,雖然最基本的功能完成了,但要增加個報表預覽什麼的,他就沒法應付了。聰明的程式設計師是用合適的工具去完成任務,想找一把萬能鑰匙是不太可能的。Python 的自動的垃圾回收機制是高階的程式語言的一種基本特性,用擁有這一功能的語言程式設計,程式設計師們通常不用去關心記憶體洩漏的問題,而當我們用 C/C++寫程式時,這卻是最重要的需要認真考慮卻又很容易出錯的問題之一。資料結構是程式構成的重要部分,連結串列、樹、圖這些在用C 程式設計時需要仔細表達的問題在Python 中簡單了很多。在Python 中,最基本的資料結構就是陣列、序列和雜湊表,用它們想要表達各種常見的資料結構是非常容易的。沒了定義指標、分配記憶體的任務,程式設計變得有趣了。CORBA 是一種高階的軟體體系結構,它是語言無關平臺無關的。C++、Java 等語言都有CORBA 繫結,但與它們相比,Python 的 CORBA 繫結卻容易很多,因為在程式設計師看來,一個 CORBA 的類和 Python 的類用起來以及實現起來並沒有什麼差別。
沒了複雜體系結構的困擾,用 Python 編寫CORBA 程式也變得容易了。好鋼要用在刀刃上,要想用有限的時間完成儘量多的任務,就要把各種無關的問題拋棄,而Python 恰恰提供了這種方法。跨平臺又易擴充套件隨著Linux 的不斷成熟,越來越多的人轉到Linux 平臺上工作,軟體的開發者自然就希望自己編寫的軟體可以在所有平臺下執行。
Java 一次編寫處處執行的口號使它成為跨平臺的開發工具的典範,但其執行速度卻不被人們看好。實際上,幾乎所有的著名指令碼語言都是跨平臺的,Python 也不例外。
-
5 # 耕耘使者
先把辦公自動化搞定,這個工作效率真的可以大大的提高。
比如docxtpl,docx,xlwings+VBA等等。
好玩的前提先把手頭上工作搞定,你比別人快,羨慕的目光不更過癮。
回覆列表
神奇好玩的東西這個標準大家都不一樣滴。可能我覺得好玩的,你卻不一定這麼覺得。個人認為,爬蟲應該比較好玩的啦,當你用少量的程式碼輕鬆獲取到海量的資料的時候,那種成就感,應該是比較好玩的了。另外,Python可以做的東西挺多的。
Python可以寫後臺,web工程。Python語言跟大多數的程式語言一樣,也可以寫後端也可以做web前端,當你用Python只用少量簡潔的程式碼做出來一個很酷炫,很牛逼的網站,這也未嘗不是一件值得好玩的事情。
Python可以寫爬蟲,Python是很簡潔的,雖然java語言也可以寫爬蟲,但是相比之下,Python語言使用的程式碼要少很多。
Python可以做人工智慧,這也是一個幾好玩的開發方向,不信你可以試試。
同時,你還可以用Python開發遊戲,這個總該好玩了吧。