發表文章

Building C++ OpenTLD source code

圖片
本文使用 https://github.com/arthurv/OpenTLD 為基礎。用到的軟體版本如下: Windows 10 Git 2.16.2   CMake 3.12.0 Visual Studio Community 2017 安裝好上述軟體後,開啟 git bash,使用底下指令下載 OpenCV 3.4.1 的 source code: git clone -b 3.4.1 https://github.com/opencv/opencv git clone -b 3.4.1 https://github.com/opencv/opencv_contrib 接著使用CMake產生編譯 OpenCV 3.4.1 的 Visual Studio Community 的專案檔案,此部分可參考 OpenCV 3.2.0 的擴充 Contrib 函式庫如何編譯 與 使用 (Visual Studio) ,確認可以編譯並執行OpenCV3.4.1的範例。之後就可以用這個版本的OpenCV3.4.1來編譯 C++ OpenTLD。因為用Visual Studio Community 2017與OpenCV3.4.1來編譯,需要對原本的程式碼做一些修改,可至 https://github.com/pinglunliao/OpenTLD 下載。使用CMake來產生Visual Studio的專案: OpenCV_DIR要選擇 OpenCV3.4.1,此 資料夾是由前述Visual Studio Community 2017建置(build)出來的 install 資料夾內容 : 接著開啟 TLD 專案: 將OpenTLD\src\ 資料夾下的 PatchGenerator.cpp 加到 tld project裡: 此時就可以建置(build)出執行檔了。在OpenTLD\bin\Debug\ 資料夾下會看到 run_tld.exe 檔案: 可在命令提示字元(cmd)來執行此程式,指令如下: run_tld.exe -p ..\..\parameters.yml -s ..\..\datasets\01_david\david.mpg david...

Matplotlib 中文顯示

圖片
筆者是參考此篇文章:「 解決Python 3 Matplotlib與Seaborn視覺化套件中文顯示問題 」,筆者只記錄和該文章不同的地方。因為筆者在Anaconda 內建了好幾個virtual environment(虛擬環境),於是照著文章內容來設定時,皆無法正確顯示中文字。仔細想一想後,發現筆者需要依照下面兩個步驟來設定才能正常顯示中文字: 1. 修改virtual enviroment 環境的 matplotlibrc 設定檔 筆者是用Windows系統,路徑如下: C:\Users\您的使用者名稱\envs\虛擬環境名稱\Lib\site-packages\matplotlib\mpl-data 筆者用Notepad++開起來修改內容: 2. 刪除.matplotlib快取資料夾 成功。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

使用OpenSource打造一個聊天機器人 Part 1:Word2Vec

圖片
最近筆者在尋找NLP的套件時,發現這個 https://github.com/zake7749/Chatbot 的專案,於是將它給git clone下來 筆者是使用VS Code加上python 3.6的版本,所需要的套件有 gensim https://github.com/RaRe-Technologies/gensim fuzzywuzzy https://github.com/seatgeek/fuzzywuzzy BeautifulSoup https://pypi.python.org/pypi/beautifulsoup4 jieba 结巴中文分词 https://github.com/fxsjy/jieba 依照專案的說明,需要先建立訓練好的中文詞向量,此部分筆者參考此篇文章「 以 gensim 訓練中文詞向量 」 取得語料(corpus) 筆者所使用的資料集是 維基百科2018/03/01的文章備份資料 ,而 維基百科的中文資料集在此 。再來git clone 此專案 https://github.com/zake7749/word2vec-tutorial ,使用此專案的程式 py wiki_to_txt.py zhwiki-20180301-pages-articles.xml.bz2 這需要一點時間將文章從xml檔案抽出來。 接著使用 OpenCC ( Windows系統請至此下載 )將所有文章轉成繁體字。 opencc -i wiki_texts.txt -o wiki_zh_tw.txt -c s2tw.json 斷詞並去除停用詞(Stop word) py segment.py 訓練出word2vector的model py train.py 訓練時間在Lenovo ThinkPad T440 Core i7-4500U跑了約五十分鐘。 (註:因為在gensim出現了MemoryError所以筆者將Word2Vector的min_count設為10,也就是忽略出現次數少於10的詞。) 而訓練好的詞向量能做什麼呢?請先看下圖 詞向量的用意是將一個詞轉換成空間上的一個點,以二維空間為例,【雨】、【多雲】、【下雨】、【下雪】這幾個詞的座標...

Python 猜數字遊戲

圖片
之前發過用Eclipse 開發 Android 二到九位數的 ?A?B猜數字遊戲 ,當時的程式碼更新為 Android Studio 版本,弄出如下圖的功能: 而本篇要用 Python + Tkinter 來實作,UI的Layout設計方式如下: Label1 SpinBox1 Label2 Entry1 Button1 Label3 Button2 程式實際執行畫面如下: 程式碼: 此版本為數字可重複,那要如何改成數字不重複的版本呢? 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

Pygame RPG 遊戲設計:視窗相關

本篇文章說明Pygame處理視窗程式相關的API用法,直接以程式碼的註解說明。 import pygame import os import sys # 設定視窗位置 xPos = 100 yPos = 50 os.environ[ 'SDL_VIDEO_WINDOW_POS' ] = "%d,%d" % (xPos, yPos) pygame.init() # 設定視窗大小 screen_width = 480 screen_height = 480 screen = pygame.display.set_mode((screen_width, screen_height)) # 設定視窗標題 pygame.display.set_caption( 'YunlinSONG PyGame Screen' ) # 設定背景顏色 bgColor = ( 255 , 0 , 0 ) screen.fill(bgColor) # 設定Icon screenIcon = pygame.image.load( 'tree.ico' ) pygame.display.set_icon(screenIcon) # 更新 Screen pygame.display.flip() # 等待接收到關閉視窗的事件訊息 while True : for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() 在Pygame中,可以對視窗Screen做的事情都在pygame.display裡 https://www.pygame.org/docs/ref/display.html 。上述的程式碼裡,可看到要改變式窗的位置時,是設定SDL_VIDEO_WINDOW_POS系統變數,也就是Pygame有些功能沒有提供API。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  b...

使用Python解線性代數(Linear Algebra)的問題

圖片
這裡會使用到 NumPy 套件,請讀者先行安裝。首先來看看怎麼使用NumPy定義一個矩陣: # Matrix A A = np.array( [ [ 1 , 2 , 4 ], [ 5 , 3 , 6 ], [ 8 , 9 , 7 ] ]) # Matrix B B = np.array( [ [ 7 , 8 , 9 ], [ 6 , 5 , 4 ], [ 3 , 1 , 1 ] ]) 上面的程式碼含有兩個矩陣A與B,接著我們可以使用Python的運算子:+, -, *, / ,來對矩陣的元素做加減乘除運算。 # Matrix operations print ( "A + B" ) print (A + B) print ( "A - B" ) print (A - B) print ( "A * B" ) print (A * B) print ( "A / B" ) print (A / B) 好,那我們先來解個線性方程式(下圖取自 Wiki ): # Matrix A A = np.array( [ [ 3 , 2 , - 1 ], [ 2 , - 2 , 4 ], [- 1 , 0.5 , - 1 ] ]) # Matrix B B = np.array( [ 1 , - 2 , 0 ] ) print ( "Solution:" ) print (np.linalg.solve(A, B)) 上面的程式碼中的 np.linalg.solve(A, B)  就可以幫我們解出這個線性方程式的解,是不是很方便呢?除了solve這個方便的function之外, NumPy 還提供了很多常用的線性代數函數: dot:內積。 trace: 計算對角線元素的和。 det:計算行列式的值。 eig:求出eigenvalue與eigenvector。 inv:求出逆矩陣 qr:QR分解 svd:SVD分解 solve:解線性方程式。 那這些線性代數的方法可以用在什麼地方呢?以現...

Google Sheets 的簡易資料探勘法

圖片
資料探勘的方式主要是以統計作為基礎,例如變異數、平均數等,衍生而來的如迴歸分析、分類等。底下示範Google Sheet中的 常用統計數值 與 迴歸分析 。 常用統計數值 這邊使用Google試算表(Google Sheets)來算出中位數(median)、平均數(mean)、眾數(mode)、標準差(Standard Deviation)、變異數(Variance)。首先使用RandBetween函數產生50筆0~100之間的亂數。 RANDBETWEEN(low, high) low  - The low end of the random range. high  - The high end of the random range. 在Google試算表中,這五種數值都有公式可以使用: 回歸分析(regression analysis) 首先以隨機產生出來的天氣溫度來示範單變數,下圖是選擇十次多項式回歸的結果: 讀者可以試試其他回歸類型,如線性(Linear)等。接著來要使用UCI的資料集: Concrete Slump Test Data Set 來示範多變數回歸。此資料集的前十筆如下:  使用十次多項式回歸的結果: 使用Google Sheet可以不用寫程式耶!但是多變數的分析好像....... 此文的 Google Sheet範例在此 。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.