發表文章

目前顯示的是 2017的文章

[ PySerial ] 檢查 Serial設備

因為工作需求,需要使用 USB傳輸 Serial data。 之前都是用 Arduino IDE檢查 Port的位置,一直感覺手段不是很漂亮。 最近在 StackOverflow上看到有人分享一段代碼,能夠自動尋找電腦上 Serial的設備。 由於簡單給力,所以我就原封不動的 PO了。 Successfully tested on Windows 8.1 x64, Windows 10 x64, Mac OS X 10.9.x / 10.10.x / 10.11.x and Ubuntu 14.04 / 14.10 / 15.04 / 15.10 with both Python 2 and Python 3. import sys import glob import serial def serial_ports(): """ Lists serial port names :raises EnvironmentError: On unsupported or unknown platforms :returns: A list of the serial ports available on the system """ if sys.platform.startswith('win'): ports = ['COM%s' % (i + 1) for i in range(256)] elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): # this excludes your current terminal "/dev/tty" ports = glob.glob('/dev/tty[A-Za-z]*') elif sys.platform.startswith('darwin'): po

[ Scikit-image ] 利用 SSIM篩選相似度過高的圖像

圖片
之前有提到過利用 Hamming distance對兩張照片進行相似度的比對, " 利用PhotoHash篩選相似度過高的圖像 "。 最近發現另一個相似度的方法,這個方法叫做 SSIM(Structural Similarity Index),有興趣的可以 維基 一下。 好在 Scikit-image 裡已經提供它的算法,參數的部份可以參考 這裡 。 from skimage.measure import compare_ssim import numpy as np import cv2 import os import glob def filter(member): img_list = glob.glob('./{0}/*.png'.format(member)) img_list.sort(key=lambda num: int(num.split('/')[-1].split('.')[0])) for img in img_list: img_path = img next_img = cv2.imread(img_path,0) if 'img_target' in locals(): s = compare_ssim(img_target, next_img) if s >= 0.8: if not os.path.isdir("./{0}/similar".format(member)): os.system("mkdir ./{0}/similar".format(member)) print("make dir ./{0}/similar".format(member)) os.system("mv {0} ./{1}/similar".format(img_path, member))

[ Tor ] 讓 Chrome透過 Tor連上網際網路

圖片
最近 WBSC在 YouTube上直播 U18的比賽,有效地消磨宅宅我 多餘的生命 空閒的時間,但只要是台灣的比賽通通限制 IP。 像我這種在外討生活,只靠網路過日子的宅宅,原則上是不會妥協的。 原本只打算用 VPN作跳板的,但免費的 VPN實在有夠不穩的。 打開 Tor Browser,浪費了我十分鐘多的生命在等待連線,仍然沒有連上。 只好拿出之前寫壞爬蟲安裝的 Tor。有興趣的話可以參考 " 使用 Tor更新 IP位置 ",裡面也稍微簡述了一下如何安裝 Tor。 首先打開 Chrome安裝 Proxy Helper 。 安裝完成後,右上角會出現一個像水晶球的 icon。 右鍵點擊 Proxy Helper,進入選項後,在 SOCKET PROXY的部分輸入 Tor預設的 Port " 127.0.0.1:9050 "。 接著打開 Terminal執行 Tor。 $ tor 左鍵點擊 Proxy Helper,選擇 SOCKET PROXY,Chrome就可以透過 TOR連上網際網路了。 想要直接連上網際網路時,就選擇 SYSTEM。 相較 Tor Browser連上網際網路的速度比較快,也比較節省記憶體。(個人感覺) 覺得連線速度不滿意或是 Google覺得異常時,可以開啟另一個 Terminal輸入下列指令更換 IP。 $ killall -HUP tor

[ OpenCV ] 利用 Opencv訓練 Haar級聯數據

圖片
本篇純為筆記,先寫下來擔心自己忘了,同時希望也能幫助到一些朋友。 可能有很多地方有錯,歡迎糾正。 開始前請先確認自己安裝了 Opencv,作者是在 Python2環境下使用 opencv-2.4.9,但我在 Python2環境中用 opencv-3.1.0也可以正常訓練。 接著 clone訓練用的代碼 git clone https://github.com/mrnugget/opencv-haar-classifier-training 資料夾結構如下 . opencv-haar-classifier-training ├── LICENSE ├── README.md ├── bin │   └── createsamples.pl ├── classifier ├── negative_images ├── positive_images ├── samples ├── tools │   └── mergevec.py └── trained_classifiers └── banana_classifier.xml 把正樣本放到 positive_images資料夾中,負樣本放到 negative_images資料夾中。 正樣本的圖像要將要 detect的目標物剪裁成只有目標物的大小。 圖像的比例沒有硬性要求,但不要差太多。     工作上的圖片不方便放到這,所以就直接放上 Tutorial裡的照片。 而負樣本就我所知,什麼照片都可以,就是不要放圖中有目標物的照片。(聽說負樣本越多越好) 接著輸入以下指令,將 positive_images和 negative_images裡的一些資訊打包成 txt檔。 find ./positive_images -iname "*.jpg" > positives.txt find ./negative_images -iname "*.jpg" > negatives.txt 接著輸入下列指令,將正樣本打包成 *.vec的文件,文件將會儲存在 samples資料夾中。 perl bin/createsamples.pl positives.txt negatives.txt samples 1500\ "ope

[ Dlib ] 利用 Dlib訓練 Object Detector

圖片
本篇純為筆記,先寫下來擔心自己忘了,同時希望也能幫助到一些朋友。 可能有很多地方有錯,歡迎糾正。 上一篇 "利用 Dlib訓練 Shape Predictor",能夠訓練一個 Predictor去預測物體特徵,而 Object Detector則是從圖像中尋找物體。 其實這篇應該寫在前面才對,順序不小心搞混了。 開始之前需要先確認有安裝 Dlib和 scikit-image,scikit-image可以透過 pip安裝,imglab就有點麻煩了,可以參考 官方文檔 imglab的部分 。 python_examples中會有一個 train_object_detector.py 的文件,一樣可以直接執行。同樣使用 Dlib提供練習用的訓練數據。 python3 train_object_detector.py ../examples/faces/ faces資料夾中,除了照片外,同時也有 training.xml和 testing.xml,這兩個檔案是訓練的重要數據。內容和 training_with_face_landmarks.xml及 testing_with_face_landmarks.xml,有些不同,可以打開來看一下差異。 訓練完一樣會秀出幾張訓練的圖片和預測的結果。 訓練結束後會顯示一些訓練時使用的參數。 Training complete. Trained with C: 5 Training with epsilon: 0.01 Trained using 4 threads. Trained with sliding window 80 pixels wide by 80 pixels tall. Trained on both left and right flipped versions of images. Hit enter to continue Training accuracy: precision: 1, recall: 1, average precision: 1 接下來一樣需要準備數據。 因為需求想說拿來試試辨識一些手勢,所以找了 Idiap Research Institute提供的 Hand Posture and Gesture Datasets ,先拿 A的

[ Dlib ] 利用 Dlib訓練 Shape Predictor

圖片
本篇純為筆記,尚未有實際應用,只是先寫下來擔心自己忘了,同時希望也能幫助到一些朋友。 可能有很多地方有錯,歡迎糾正。 Dlib的安裝檔中有個 python_examples的資料夾,如果沒有可以到 Dlib的 GitHub 中下載。 開始之前需要先確認有安裝 Dlib和 scikit-image,scikit-image可以透過 pip安裝,imglab就有點麻煩了,可以參考 官方文檔 imglab的部分 。 python_examples中會有一個 train_shape_predictor.py 的文件,直接執行 train_shape_predictor.py就行了,但要附上要訓練的資料。直接使用 Dlib提供練習用的訓練數據,路徑是上一層 examples資料夾中的 faces,其輸入格式如下 python3 train_shape_predictor.py ../examples/faces/ faces資料夾中,除了照片外,同時也有 training_with_face_landmarks.xml和 testing_with_face_landmarks.xml,這兩個檔案是訓練用的重要數據。 執行 train_shape_predictor.py時只要將訓練的資料導向這個資料夾就行了,最後就會秀出幾張測試用的照片測試剛訓練出來的模型。同時也會生成出 predictor.dat和 image_metadata_stylesheet.xsl文件,predictor.dat文件就是拿來捕捉特徵用的模型,另一個我還不知道是做什麼用的 :P 在秀出圖片前會顯示 Training accuracy和 Testing accuracy。 左圖是作為訓練用的照片,右圖則是做為測試用的照片,可以看出對 landmarks捕捉還不夠成熟,但還算有點樣子。 接下來最麻煩的就是準備訓練用的數據。 Dlib有提供一個 tool叫 imglab可以幫助製作訓練用的數據。安裝的方式跟安裝 Dlib很類似。 cd dlib/tools/imglab mkdir build cd build cmake .. cmake --build . --config Release 安裝成功後,可以到 dlib/tools/imglab/build中找到 i