天天看點

python圖形程式設計代碼大全_可以用 Python 程式設計語言做哪些神奇好玩的事情?

先看一看上面這個是幹嘛的!!!!!不知道往下看!

————————

鑒于問題是程式設計語言可以做哪些神器好玩的事,我先把Python可以應用于哪些領域和使用了哪些架構技術整理出來,然後再給大家收集可以用于的神器好玩的事,也希望大家留言給我,我補充給大家。

本文分為兩部分:

第一部分:可以用 Python 程式設計語言做哪些神奇好玩的事情?

你想更深入了解學習Python知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系内容:

第二部分: Python 程式設計有哪些神奇簡單的架構?

更新于2017.08.03-09:22

—————第一部分:可以用 Python 程式設計語言做哪些神奇好玩的事情?———————

1.介紹一個異常簡單的使用Python語言和開源庫OpenCV的人臉識别方法,供此開啟人臉識别之旅。

讓我們再對Abba圖檔進行一次測試。 $ python face_detect.py abba.png haar級聯_frontalface_default.xml

這個工作正常,其他圖檔檢測結果如何?

那個…不是人臉。讓我們再試一次。我修改了參數設定,發現将scaleFactor設定成1.2可以将識别錯識的人臉過濾掉。

發生了什麼?好吧,第一張相片使用了一個高相素相機在較近的距離進行拍攝。第二張相片貌似是使用的手機在較遠距離進行的拍攝。這就是參數scaleFactor需要修改的原因。就像我說過的,你需要根據不同測試案例對算法進行不同的參數設定進而避免誤識别的發生。

需要注意的是,由于采用了基于機械學習的算法,檢測結果永遠無法達到100%精确。大多數案例中你都能得到較好的結果,但偶爾算法也會檢測到錯誤的對象,就像檢測到錯誤的人臉一樣。

OpenCV是計算機視覺領域最受歡迎的庫。OpenCV最早是使用C/C++語言進行編寫的,現已支援Python語言捆綁使用。

OpenCV使用機械學習算法對圖像中的人臉進行搜尋。由于有着與人臉一樣複雜的原因,不存在一項簡便的測試可以告知人們是否能夠識别出人臉。相反,算法需要對成千上萬細小的模式和特征進行比對。面部識别算法被分解成成千上萬很小的、易了解的任務,每一個任務較易實作。這些任務被稱為分類器。

像人臉一樣,你可能有6,000個基于更多的分類器在進行人臉檢測過程中,每一個分類器都需要進行比對(當然要在一定的誤差範圍内)。但這其中就有問題了。在人臉識别過程中,算法從圖檔的左上角開始向右下角按小塊逐漸進行比對,對每一個小塊的識别過程中,算法都會持續的問:“這是人臉麼?這是人臉麼?這是人臉麼?”由于在每個小塊有着6000甚至更多的比對項需要進行比對,你可能會有無數的計算要執行,這些計算将引發你的電腦發生當機。

2.機器自己學唱歌一首

現在我們可以開始了解這樣一個系統是如何工作了。一種音頻指紋識别系統做到兩點:1.通過指紋标記學習一首新歌

2.通過在資料庫中搜尋已經學習過的歌曲來識别一首未知歌曲

為此,我們将用到以上的所有知識和MySQL資料庫功能。我們的資料庫将包含兩個表:1.指紋記錄

2.歌曲記錄

音頻指紋記錄表

音頻指紋記錄表有如下字段:

首先,注意到我們不僅有一個hash和song_id 字段,還有一個offset 字段。這對應于哈希來源的譜圖上的時間偏移量。這會在後面我們在通過比對哈希值來過濾時用到。隻有哈希值與真實資訊一緻才是我們真正要識别出的(更多看下面音頻指紋比對)。

其次,我們有很好的理由把hash 設定成INDEX。因為所有的查詢都将需要做比對操作,是以這裡我們需要一個真正的快速檢索。

然後,UNIQUE隻是確定我們沒有重複。無需浪費空間或者因為重複的音頻影響比對查詢速度。

如果你在絞盡腦汁地想我為什麼把 hash 設定成 binary(10),原因是,哈希值通常太長,設定少點有得于減少存儲。下面是每首歌的音頻指紋數圖:

最前面的是Justin Timberlake 的"Mirrors" ,音頻指紋數超過240K,其次Robin Thicke 的"Blurred Lines" 也有180k。底部是acapella演藝的”Cups”, 是一首樂器很少,僅有人聲和和聲的歌曲。 做個對比,聽聽 "Mirrors"。你會發現明顯的樂器聲組成的“噪音牆”并且填充的頻譜數從高到低分類,即頻譜豐富與否與峰的頻率高低是一緻的。這個資料集裡每首歌平均超過100k個音頻指紋數。

有這麼多的指紋,我們需要從哈希值水準上減少不必要的硬碟存儲。對于指紋哈希,我們将開始使用SHA-1哈希,然後減少一半大小(隻有前20個字元)。這使我們每個哈希值減少了一半的位元組數:

下一步,我們将采取十六進制編碼,并将其轉換為二進制,再次大幅削減空間:

現在好多了。我們把hash字段從320 bits降到了80 bits,減少了75%。

我在系統中第一次嘗試時,我把hash字段設定成了char(40)-這導緻了單單音頻指紋表就占據超過了1GB的空間。設定成binary(10)後,我們把表的大小降低到隻需377M就成存儲520萬個音頻指紋。

我們确實丢失了一些資訊——從統計學的角度來說我們的哈希值現在碰撞的更頻繁。我們降低了哈希相當多的“資訊熵”。然而,重要的是要記住,我們的熵(或資訊)也包括offset字段,這有4個位元組。這使得我們每個音頻指紋的總資訊熵為:

就說,我們已經節省了自己75%的空間,但仍然有一個巨大無比的指紋空間要處理。要保證每個字段的理想分布是很困難的,但是我們已經有足夠的資訊熵進行接下來的工作了。

3.使用python基于Tensorflow設計手寫數字識别算法,并程式設計實作GUI界面,建構手寫數字識别系統。本文實作的系統其實是基于卷積神經網絡的手寫數字識别系統。該系統能快速實作手寫數字識别,成功識别率高。缺點:隻能正确識别單個數字,圖像預處理還不夠,沒有進行圖像分割,讀者也可以自行添加,進行完善。

寫了一些輔助函數,可以檢視部分識别錯誤的圖檔,

還可以檢視混淆矩陣,

系統中還添加了一點圖像預處理的操作,比如灰階化,圖像資訊的歸一化等,更貼近實際應用。 系統可進行快速識别,如下圖

4.python 畫圖--簡單開始及折線圖

相關參考資料:

一、環境準備

linux ubuntu 下需安裝下面三個包: Numpy, Scipy,Matplotlib

分别輸入下面的代碼進行安裝:

pip install numpy

pip install scipy

sudo apt-get install python-matplotlib

測試是否安裝成功

python

>>> import pylab

如果沒有報錯則安裝成功

二、開始畫圖

1. 畫最簡單的直線圖

代碼如下:

import numpy as np

import matplotlib.pyplot as plt

x=[0,1]

y=[0,1]

plt.figure()

plt.plot(x,y)

plt.savefig("easyplot.jpg")

結果如下:

代碼解釋:

#x軸,y軸

x=[0,1]

y=[0,1]

#建立繪圖對象

plt.figure()

#在目前繪圖對象進行繪圖(兩個參數是x,y軸的資料)

plt.plot(x,y)

#儲存圖象

plt.savefig("easyplot.jpg")

2. 給圖加上标簽與标題

上面的圖沒有相應的X,Y軸标簽說明與标題

在上述代碼基礎上,可以加上這些内容

代碼如下:

import numpy as np

import matplotlib.pyplot as plt

x=[0,1]

y=[0,1]

plt.figure()

plt.plot(x,y)

plt.xlabel("time(s)")

plt.ylabel("value(m)")

plt.title("A simple plot")

結果如下:

代碼解釋:plt.xlabel("time(s)") #X軸标簽

plt.ylabel("value(m)") #Y軸标簽

plt.title("A simple plot") #标題

3. 畫sinx曲線

代碼如下:

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

#設定x,y軸的數值(y=sinx)

x = np.linspace(0, 10, 1000)

y = np.sin(x)

#建立繪圖對象,figsize參數可以指定繪圖對象的寬度和高度,機關為英寸,一英寸=80px

plt.figure(figsize=(8,4))

#在目前繪圖對象中畫圖(x軸,y軸,給所繪制的曲線的名字,畫線顔色,畫線寬度)

plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)

#X軸的文字

plt.xlabel("Time(s)")

#Y軸的文字

plt.ylabel("Volt")

#圖表的标題

plt.title("PyPlot First Example")

#Y軸的範圍

plt.ylim(-1.2,1.2)

#顯示圖示

plt.legend()

#顯示圖

plt.show()

#儲存圖

plt.savefig("sinx.jpg")

結果如下:

4. 畫折線圖

代碼如下:

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

#X軸,Y軸資料

x = [0,1,2,3,4,5,6]

y = [0.3,0.4,2,5,3,4.5,4]

plt.figure(figsize=(8,4)) #建立繪圖對象

plt.plot(x,y,"b--",linewidth=1) #在目前繪圖對象繪圖(X軸,Y軸,藍色虛線,線寬度)

plt.xlabel("Time(s)") #X軸标簽

plt.ylabel("Volt") #Y軸标簽

plt.title("Line plot") #圖示題

plt.show() #顯示圖

plt.savefig("line.jpg") #儲存圖

結果如下:

————————————

現在Python成為了熾手可熱的一門語言,在如何快速入門的同時,如何進行高效的開發是一門語言非常重要的優勢。我們收集馬哥Python了超過2000名學員的意見和建議,對Python常用的架構進行了梳理,這些架構包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。

Python目前主流的應用包括:Web開發、圖形界面開發、系統網絡運維、網絡程式設計、科學數字計算、3D遊戲開發,而我們特别針對這6個方向進行了架構和庫的整理。

一、Python的幾大主流Web開發架構

1.Django: Python Web應用開發架構

Django 應該是最出名的Python架構,GAE甚至Erlang都有架構受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理背景:隻需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理背景。

2.Bottle: 微型Python Web架構

Bottle是一個簡單高效的遵循WSGI的微型python Web架構。說微型,是因為它隻有一個檔案,除Python标準庫外,它不依賴于任何第三方子產品。

3.Flask:也是一個Web應用架構

不同于Django它是輕量級Web應用架構。基于Werkzeug WSGI工具箱和Jinja2 模闆引擎。Flask也被稱為“microframework”,因為它使用簡單的核心,用extension增加其他功能。Flask沒有預設使用的資料庫、窗體驗證工具。 但是Flask是可以擴增的,你可以使用可以用Flask-extension增加前邊沒有的一些功能。

4.Tornado:異步非阻塞IO的Python Web架構

Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發架構。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。Tornado 和現在的主流 Web 伺服器架構和大多數Python架構有着明顯的差別:它是非阻塞式伺服器,而且速度相當快。也是比較常被使用的Python開源架構之一。

Web2py:全棧式Web架構

Web2py是一個為Python語言提供的全功能Web應用架構,旨在靈活快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,相容Google App Engine。

webpy: 輕量級的Python Web架構

webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,隻提供一個架構所必須的東西,不依賴大量的第三方子產品,它沒有URL路由、沒有模闆也沒有資料庫的通路。

二、Python的爬蟲架構

Scrapy:Python的爬蟲架構

Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,并且使用起來非常的友善。

三、圖形界面開發架構

PyQt

PyQt能夠實作高人氣Qt庫,是以如果大家熟知如何利用其它語言進行Qt開發,那麼上手PyQt也不會出現什麼障礙。其能夠讓Python應用具備跨平台外觀風格與使用感受,同時繼承Qt社群所帶來的龐大知識支援與工具選項。

PyQt同時提供商用與GPL許可(這一點與Qt項目本身有所不同),感興趣的朋友也可點選此處了解與PyQt許可相關的常見問題(英文原文)。

Tkinter

如果要為Python選出一款能夠稱得上“标準”的GUI工具包,那麼答案應該是Tkinter。Tkinter是一款以Tcl/Tk為基礎的打包工具,而後者則屬于誕生自上世紀九十年代初的高人氣圖形界面與語言組合。Tkinter的最大優勢在于擁有豐富的資源,其中包括文本與代碼示例以及龐大的使用者社群。通過示例,我們能夠輕松上手這套圖形界面實作方案。

Tkinter遵循Python許可,同時基于Tcl/Tk的BSD許可。

WxPython

WxPython 将針對C++的wxWidgets跨平台GUI庫帶給了Python。WxPython是一套較為現代的方案,其外觀的原生程度高于Tkinter,這主要歸功于其更傾向于針對不同系統平台建立控件成果。其易于上手,同時擁有快速發展的開發者社群。不過大家需要自行将wxPython與應用相綁定,因為其無法通過Python自動進行安裝。

WxPython采用其父項目wxWindows的庫許可,這一許可獲得了OSI準許。

四、Python系統運維常用庫

能夠實作擷取系統運作的程序和系統使用率(記憶體,CPU,磁盤,網絡等),主要用于系統監控,分析和系統資源及程序的管理。

3、dnspython(http://dnspython.org)Python實作的一個DNS工具包。

4、difflib:difflib作為Python的标準子產品,無需安裝,作用是對比文本之間的差異。

5、filecmp:系統自帶,可以實作檔案,目錄,周遊子目錄的差異,對比功能。

6、smtplib:發送電子郵件子產品

7、pycurl(http://pycurl.sourceforge.net)是一個用C語言寫的libcurl Python實作,功能強大,支援的協定有:FTP,HTTP,HTTPS,TELNET等,可以了解為Linux下curl指令功能的Python封裝。

8、XlsxWriter:操作Excel工作表的文字,數字,公式,圖表等。

9、rrdtool:用于跟蹤對象的變化,生成這些變化的走走勢圖

10、scapy(http://www.wecdev.org/projects/scapy/)是一個強大的互動式資料包處理程式,它能夠對資料包進行僞造或解包,包括發送資料包,包嗅探,應答和回報等功能。

11、Clam Antivirus免費開放源代碼防毒軟體,pyClamad,可以讓Python子產品直接使用ClamAV病毒掃描守護程序calmd。

12、pexpect:可以了解成Linux下expect的Python封裝,通過pexpect我們可以實作對ssh,ftp,passwd,telnet等指令行進行自動互動,而無需人工幹涉來達到自動化的目的。

13、paramiko是基于Python實作的SSH2遠端安裝連接配接,支援認證及密鑰方式。可以實作遠端指令執行,檔案傳輸,中間SSH代理等功能。相對于Pexpect,封裝的層次更高,更貼近SSH協定的功能,官網位址:http://paramiko.org(依賴:Crypto,Ecdsa,Python開發包python-devel)

14、fabric是基于Python實作的SSH指令行工具,簡化了SSH的應用程式部署及系統管理任務,它提供了系統基礎的操作元件,可以實作本地或遠端shell指令,包括指令執行,檔案上傳,下載下傳及完整執行日志輸出等功能。Fabric在paramiko的基礎上做了更高一層的封裝,操作起來更加簡單。官網位址:http://www.fabfile.org(依賴setuptools,Crypto,paramiko包支援)

15、CGIHTTPRequestHandler實作對CGI的支援。

16、ansible(http://www.ansibleworks.com/)一種內建IT系統的配置管理,應用部署,執行特定任務的開源平台。基于Python實作,由Paramiko和PyYAML兩個關鍵子產品建構。Ansibl與Saltstack最大的差別是Ansible無需在被控主機上部署任何用戶端,預設直接通過SSH通道進行遠端指令執行或下發功能。

17、YAML:是一種用來表達資料序列的程式設計語言。

18、playbook:一個非常簡單的配置管理和多主機部署系統。

19、saltstack(http://saltstack.com)是一個伺服器基礎架構集中化管理平台,一般可以了解為簡化版的puppet和加強版的func。Saltstack基于Python語言實作,結合輕量級消息隊列ZeroMQ,與Python每三方子產品(Pyzmq,PyCrypto,Pyjinja2,python-msgpack和PyYAML等)建構。

20、func,為解決叢集管理,監控問題需設計開發的系統管理基礎架構。

四、Python科學數字計算的架構

Python中的資料科學計算庫有Numpy、Scipy、pandas、matplotlib

Numpy是一個基礎性的Python庫,為我們提供了常用的數值數組和函數。numpy(Numerical Python extensions)是一個第三方的Python包,用于科學計算。這個庫的前身是1995年就開始開發的一個用于數組運算的庫。經過了長時間的發展,基本上成了絕大部分Python科學計算的基礎包,當然也包括所有提供Python接口的深度學習架構。

Scipy是Python的科學計算庫,對Numpy的功能進行了擴充,同時也有部分功能是重合的。Numpy和Scipy曾經共享過基礎代碼。

pandas是一個流行的開源Python項目,它的名稱取panel data(面闆資料,一個計量經濟學的術語)和Python data analysis(Python資料分析)的意思。matplotlib是一個基于Numpy的繪圖庫。

Matplotlib是Python中最常用的可視化工具之一,可以非常友善地建立海量類型地2D圖表和一些基本的3D圖表。Matplotlib最早是為了可視化癫痫病人的腦皮層電圖相關的信号而研發,因為在函數的設計上參考了MATLAB,是以叫做Matplotlib。Matplotlib首次發表于2007年,在開源和社群的推動下,現在在基于Python的各個科學計算領域都得到了廣泛應用。Matplotlib的原作者John D. Hunter博士是一名神經生物學家,2012年不幸因癌症去世,感謝他建立了這樣一個偉大的庫。

四、Python的3D遊戲開發架構

Pygame是跨平台Python子產品,專為電子遊戲設計。包含圖像、聲音。pygame建立在SDL基礎上,允許實時電子遊戲研發而無需被低級語言(如機器語言和彙編語言)束縛。基于這樣一個設想,所有需要的遊戲功能和理念都(主要是圖像方面)都完全簡化為遊戲邏輯本身,所有的資源結構都可以由進階語言提供,如Python。

ocos2d-python上面很多都用pyglet這個庫的,裡面主要的精靈什麼的也是針對pyglet的封裝,另外還封裝了些音頻庫什麼的。

五、Python的其他流行的開發架構

Diesel:基于Greenlet的事件I/O架構

Diesel提供一個整潔的API來編寫網絡用戶端和伺服器。支援TCP和UDP。

Cubes:輕量級Python OLAP架構

Cubes是一個輕量級Python架構,包含OLAP、多元資料分析和浏覽聚合資料(aggregated data)等工具。

Kartograph.py:創造矢量地圖的輕量級Python架構

Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處于beta階段,你可以在virtualenv環境下來測試。

Pulsar:Python的事件驅動并發架構

Pulsar是一個事件驅動的并發架構,有了pulsar,你可以寫出在不同程序或線程中運作一個或多個活動的異步伺服器。

Falcon:建構雲API和網絡應用後端的高性能Python架構

Falcon是一個建構雲API的高性能Python架構,它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。

Dpark:Python版的Spark

DPark是Spark的Python克隆,是一個Python實作的分布式計算架構,可以非常友善地實作大規模資料處理和疊代計算。DPark由豆瓣實作,目前豆瓣内部的絕大多數資料分析都使用DPark完成,正日趨完善。

Buildbot:基于Python的持續內建測試架構

Buildbot是一個開源架構,可以自動化軟體建構、測試和釋出等過程。每當代碼有改變,伺服器要求不同平台上的用戶端立即進行代碼建構和測試,收集并報告不同平台的建構和測試結果。

Zerorpc:基于ZeroMQ的高性能分布式RPC架構

Zerorpc是一個基于ZeroMQ和MessagePack開發的遠端過程調用協定(RPC)實作。和 Zerorpc 一起使用的 Service API 被稱為 zeroservice。Zerorpc 可以通過程式設計或指令行方式調用。

好了,最後我們再來看看,到底是哪些人學習呢?

目前來學的人群分為以下幾類:

第一類:入行程式設計新手:大學剛畢業或者其他行業轉崗,想從事程式設計開發的工作,目前認為Python比較火,想入行;

第二類:Linux系統運維人員:Linux運維以繁雜著稱,對人員系統掌握知識的能力要求非常高,那麼也就需要一個程式設計語言能解決自動化的問題,Python開發運維工作是首選,Python運維工資的薪資普遍比Linux運維人員的工資高。

第三類:做資料分析或者人工智能:不管是常見的大資料分析或者一般的金融分析、科學分析都比較大程度的應用了資料分析,人工智能的一些常見應用也使用了Python的一些技術。

第四類:在職程式員轉Python開發:平常隻關注div+css這些頁面技術,很多時候其實需要與後端開發人員進行互動的,現在有很多Java程式在轉到Python語言,他們都被Python代碼的優美和開發效率所折服

第五類:其他:一些工程師以前在做很多SEO優化的時候,苦于不會程式設計,一些程式上面的問題,得不到解決,隻能做做簡單的頁面優化。 現在學會Python之後,可以編寫一些查詢收錄,排名,自動生成網絡地圖的程式,解決棘手的SEO問題

如果你有更好的建議,歡迎留言和讨論。