發表文章

目前顯示的是有「python」標籤的文章

熱影像物件偵測 (Object Detection on Thermal Image)- 2 使用TensorRT C++ Win10 - 測試onnx model

圖片
上篇 文章 我們得到了onnx格式的model,先做個測試確認這個model是可以使用的,需要在onnx framework下執行這個model,這邊使用到python onnx runtime。 一、下載onnx runtime 可以在 https://www.onnxruntime.ai/ 下載你需要的版本。 我下載的是GPU版,在python環境下輸入: pip install onnxruntime-gpu 二、寫執行程式 1.import import cv2> import numpy as np import onnxruntime as ort import onnxruntime.backend 2.讀入 onnx model modelName = 'weights/export.onnx' sess = ort.InferenceSession(modelName) 3.顯示讀入model的相關資訊 print("device", ort.get_device()) print("in count", len(sess.get_inputs())) print("out count", len(sess.get_outputs())) input_name = sess.get_inputs()[0].name print("input name", input_name) input_shape = sess.get_inputs()[0].shape print("input shape", input_shape) input_type = sess.get_inputs()[0].type print("input type", input_type) output_name0 = sess.get_outputs()[0].name print("output0 name", output_name0) output_shape0 = sess.get_outputs()[0].shape pr...

熱影像物件偵測 (Object Detection on Thermal Image) - 1 使用TensorRT C++ Win10 - 測試model及匯出onnx model

圖片
最近疫情的關係熱影像攝影機的應用瞬間發展很快,所以想說有能不能以熱影像畫面為基礎,作物件辨識。在網路上尋找到 這篇文章 ,使用yolov3-spp模型架構訓練,model細節及介紹請看原文,這裡主要是要說明我怎麼將他的model轉換成tensorRT可以執行的部分。想研究如果用c++執行這個model能不能更快一些。 一、clone github 1.clone  github專案 下來 2.Download pre-trained weights 我下載下來的 pre-trained weights 長這樣,根本不知道要使用哪個才對,如果有人嘗試其他的可以留言跟我說喔。 二、測試程式可以執行 專案根目錄裡有個detect.py,這是我們開始的主程式,我嘗試出以下組合是可以使用的。 類別名稱檔:data/coco.data model_config:cfg/yolov3-spp.cfg model:weights/yolov3-spp.weights 如果在data資料夾裡沒有找到 coco.data、coco.names檔案的話請解壓縮labels.zip 帶入所需的參數執行: --data <類別名稱檔> --cfg <model_config> --weights <model> --source <要辨識的圖片資料夾或影片檔> python detect.py --data data/coco.data --cfg cfg/yolov3-spp.cfg --weights weights/weights/yolov3-spp.weights --source data/samples 這是他deteset裡面的一張圖的便是結果: 三、執行速度 我使用的系統環境是: CPU:i7-10700 GPU:GTX1660 SUPER CUDA:10.2 python:3.6.8 pytorch:1.8.1 onnx:1.8.0 每一張處理時間是:0.02秒左右 四、model匯出成onnx格式 1.切換匯出onnx model模式 在mod...

python override筆記 其他特殊流程

這邊紀錄python繼承的其他特殊流程 父類別呼叫子類別的函數 In: class Demo: def __demoprint(self): print('__demoprint') def demoprint_(self): print('demoprint_') def demo(self): print('demo') self.__demoprint() self.demoprint_() class Demo1(Demo): def __init__(self): super().__init__() def __demoprint(self): print('__demo2print') def demoprint_(self): print('demo2print_') def demo1(self): print('demo1') super().demo() d=Demo1() d.demo1() Out: demo1 demo __demoprint demo2print_ 再去call父類別function In: class Demo: def DemoF1(self): print("DemoF1") def DemoF2(self): self.DemoF1() print("DemoF2") class Demo2(Demo): def DemoF1(self): print("Demo1F1") super().DemoF1() def Demo2F1(self): print('Demo2F1') super().DemoF2() d = Demo2() d.Demo2F1...

opencv官方標註工具cvat的安裝

圖片
一開始我在網路上都是找到 LabelImg 這個軟體的教學居多,某天看到有人用 cvat,感覺功能更強大就來研究研究。 cvat 是 opencv github 上的標註工具,可支援多人線上作業,多種標記方式,匯出多種檔案格式。 多種標記方式: ● 矩形 ● 多邊形 ● 標記點 輸入的檔案格式: ● 圖片 ● 影片 匯出 格式 : ● CVAT XML v1.1 for images ● CVAT XML v1.1 for a video ● Pascal VOC ● YOLO ● MS COCO Object Detection ● PNG class mask + instance mask as in Pascal VOC ● TFrecord ● MOT ● LabelMe 加速標記方式: ● 在影片上能用track的方式快速標記連續多張圖 ● 可用cvat提供的模型或上傳openvino的模型,做自動標記 安裝步驟  官方安裝步驟 我是用windows10的環境,首先要安裝一些基本的東西: ● Docker for Windows ● Git for Windows ● Google Chrome 安裝完成後,在開始功能表裡面找git bash應用程式並執行,進入到你要放下載cvat程式的位置 git clone https://github.com/opencv/cvat cd cvat Build docker images 使用預設值 docker-compose build Run docker containers. docker-compose up -d 創建一個superuser winpty docker exec -it cvat bash -ic 'python3 ~/manage.py createsuperuser' 在Google Chrome網址列輸入localhost:8080 停止 docker containers docker-compose down 以上是能在本機上使用,接下來要說明的是如何在區域網路上使用 在區域網路上使用 在cvat資料夾裡建立 docker-compose.ov...

Tensorflow object detection api 訓練過程記錄

圖片
一、安裝 安裝時間有點久了,細節有些已經忘記,以下紀錄主要步驟 1.Python 環境     Python 我是使用anaconda安裝python3.6     Tensorflow 1.14 pip install tensorflow=1.14 2.下載 Tensorflow object detection api     網址(https://github.com/tensorflow/models) ,這是tensorflow 官方文件,我解壓縮放在 C:\tensorflow\     這裡主要使用到的目錄是C:\tensorflow\models\research\object_detection     編譯protoc、測試安裝... (這部分細節忘了) 3.添加環境變數     C:\tensorflow\bin     C:\tensorflow\models\research\     C:\tensorflow\models\research\slim 二、建立dataset 1.Dataset 標記工具使用 labelImg ,輸出xml檔保存 開啟自動儲存 會儲存一個.xml檔 2.因為tensorflow 需要 tfrecord格式,所以要做數據轉換     建立train資料夾,放進訓練的圖片跟對應的xml檔     建立test資料夾,放進測試的圖片跟對應的xml檔     將多個xml檔轉換成tfrecord檔 # -*- coding: utf-8 -*- # xml_to_tfrecord.py import os import io import glob import pandas as pd import tensorflow as tf import xml.etree.ElementTree as ET from PIL import Image from object_detection.utils import d...

jupyter server 單用戶及多用戶環境架設 安裝環境在windowns+anaconda

遠端 jupyter 使用anaconda 單一個用戶 server 端 開啟anaconda Prompt * 選擇環境,這邊環境名稱是'py36' (base) C:/Users/{username}>activate py36 產生default config file (py36) C:/Users/{username}>jupyter notebook --generate-config 設定密碼 方法一:使用shell (py36) C:/Users/{username}>jupyter notebook password 輸入密碼,此方法會產生json file 方法二:在python執行 from notebook.auth import password password() 將output複製起來 編輯 config file 開啟 C:/Users/{username}/.jupyter/jupyter_notebook_config.py * 刪除以下開頭的註解並編輯 c.NotebookApp.ip = '0.0.0.0' # '0.0.0.0'可自動更隨IP c.NotebookApp.port = 8888 # 不要和其他人重複 c.NotebookApp.open_browser = False # 不改的話會在dandanman桌面開啟瀏覽器 c.NotebookApp.password = '' # 若設定密碼是使用方法二,將複製的在這 c.NotebookApp.password_required = True c.NotebookApp.notebook_dir = 'C:/jupyter' # 預設開啟路徑 c.NotebookApp.default_url = '/lab' # 預設開啟jupyterlab 執行jupyter notebook (py36) C:/Users/{username}>jupyter notebook...

python opencv 基本讀取、轉換、顯示、儲存等

檔案位置關系 filename = 'yourfilename.jpg'  #與程式碼相同位置的檔案 filename = './file/yourfilename.jpg' #程式碼資料夾裡的資料夾中的檔案 filename = '../yourfilename.jpg' #程式碼上一層資料夾的檔案 讀取image 及 顯示 import cv2 filename = 'yourfilename.jpg'     #與程式碼相同位置的檔案 image = cv2.imread(filename)    #讀取照片 cv2.imshow("window title", image)  #顯示照片 儲存照片 import cv2 filename = 'yourfilename.jpg'      #與程式碼相同位置的檔案 image = cv2.imread(filename)    #讀取照片 cv2.imwrite("filename.jpg", image)  #儲存照片,試過的檔案格式 .jpg .png 照片尺寸大小取得 image = cv2.imread(filename)    #讀取照片 hight = image.shape[1] width = image.shape[0] 色彩空間轉換 這邊要注意rgb色彩空間在opencv裡排列方式是bgr image = cv2.imread(filename) yuv = cv2.cvtColor(image,cv2.COLOR_BGR2YUV) #RGB to YUV hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) #RGB to HSV gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #RGB to gray gray = cv2.cvtColor(image,cv2.COLOR_GRAY2BGR) #gray to rgb 照片三層色分離 import cv2 filename = 'yo...

python 匯出成exe 主要功能介紹

python 匯出成exe 安裝 pyinstaller python2.x:sudo pip install pyinstaller python3.x:sudo pip3 install pyinstaller 操作 基本:pyinstaller demo.py 他會在terminal目前目錄下建立兩個資料夾build 和 dist 建立執行檔在 dist 資料夾 其他細部功能看參考資料 參考自: http://zmh00.blogspot.tw/2016/01/python-codeexe.html http://zwindr.blogspot.tw/2016/01/python-pyinstaller.html

raspberry pi 3 上安裝 python的pyalsaaudio 來控制音量

圖片
目前我安裝pyalsaaudio的目的,是要用程式的方式控制rpi3上音量的大小 但在安裝過程中遇到一些瓶頸,因為我用的是python3,在這裡紀錄遇到的情形,及是如何解決的。 安裝 一開始輸入 sudo pip3 install pyalsaaudio 出現以下錯誤 pi@raspberrypi:~ $ sudo pip3 install pyalsaaudio Downloading/unpacking pyalsaaudio   Downloading pyalsaaudio-0.8.4.tar.gz (315kB): 315kB downloaded   Running setup.py (path:/tmp/pip-build-150927bh/pyalsaaudio/setup.py) egg_info for package pyalsaaudio         warning: no files found matching '*.json' under directory 'doc' Installing collected packages: pyalsaaudio   Running setup.py install for pyalsaaudio     building 'alsaaudio' extension     arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c alsaaudio.c -o build/temp.linux-armv7l-3.4/alsaaudio.o     alsaaudio.c:28:28: fatal error: alsa/asoundlib.h: 沒有此一檔案或目錄      #inc...

python pyautogui 簡介

pyautogui 是 python的一個模組,他能控制鍵盤和滑鼠的操作,能利用它做自動化操作,像是用在軟體測試、重複性動作等。 pyautogui 暫停幾秒鐘 >>>pyautogui.PAUSE = 1.5 fail-safe (預設false) 當滑鼠一道螢幕左上角時,觸發 pyautogui 的failsafeexception 異常 >>>pyautogui.FAILSAFE = True 螢幕上的座標軸 (0,0) →→→→(1920,0)    ↓    ↓    ↓    ↓ (0,1080) 取得螢幕解析度 >>>import pyautogui >>>pyautogui.size() (1920, 1080) >>>width, height = pyautogui.size() 滑鼠部分 moveTo(width, height, duration) example移動到(300, 400)位置 pyautogui.moveTo(300, 400)                 #立即到 pyautogui.moveTo(300, 400, duration = 1.5) #花1.5秒移到 moeRel(width, height, duration) 移到相對座標,以當前滑鼠座標為基準點 pyautogui.moveRel(0, 100, duration=0.25) pyautogui.moveRel(-100, 0, duration=0.25) position() 獲得滑鼠當前的座標位置 >>>pyautogui.position() (300, 400) click(width, height, button) 滑鼠點擊 button = 'left', 'middle', 'right'。 pyautogui.click()       ...

raspberry pi 3 安裝python pyautogui

圖片
主要安裝步驟 linux 需安裝其他的東西 sudo apt-get install python-tk sudo apt-get install python3-dev sudo apt-get install scrot sudo pip3 install python3-xlib 最後安裝 sudo pip3 install pyautogui 新版的應該是已安裝好以下: python-tk python3-dev scrot 錯誤一 如果直接安裝pyautogui會出現以下的錯誤 表示缺少xlib 只要安裝 python3-xlib完,再安裝pyautogui就可以了 錯誤二 如果像我其他都安裝好了,但是pyautogui還是安裝不成功,出現以下錯誤 那就把 sudo pip3 install pyautogui 改成 sudo xvfb-run pip3 install pyautogui 上網查 xvfb-run 應該是模擬安裝的意思 pi@raspberrypi:~ $ sudo pip3 install pyautogui Downloading/unpacking pyautogui Downloading PyAutoGUI-0.9.36.tar.gz (46kB): 46kB downloaded Running setup.py (path:/tmp/pip-build-0mnn6hrh/pyautogui/setup.py) egg_info for package pyautogui Traceback (most recent call last): File "/usr/local/lib/python3.4/dist-packages/Xlib/xauth.py", line 43, in __init__ raw = open(filename, 'rb').read() FileNotFoundError: [Errno 2] No such file or directory: '/root/.Xauthority' During handling ...

python nn 聲音辨識 -2 建立nn

建立神經網路 網路上查聲音用這個function,跟這個loss算法(網站沒記下來) output_layer = add_layer(intput, input_tensors = input_len, output_tensors = output_len, n_layer = 1, activation_function = tf.nn.softmax) loss = tf.reduce_mean(-tf.reduce_sum(y_feeds * tf.log(output_layer), reduction_indices=[1])) 訓練與預測的函數很像 #訓練 要餵入 x , y sess.run(train, feed_dict = {x_feeds: x_data, y_feeds: y_data}) #放入loss 就能輸出現在loss值 loss_ = sess.run(loss, feed_dict={x_feeds: x_data, y_feeds: y_data}) #預測 只要餵入 x result = sess.run(output_layer, feed_dict = {x_feeds: [x_test]}) 完整程式碼: import tensorflow as tf import numpy as np import wav_fft as wavf import os # 定義一個添加層的函數 def add_layer(inputs, input_tensors, output_tensors, n_layer, activation_function = None): layer_name = 'layer%s' % n_layer print(layer_name) with tf.name_scope('Layer'): with tf.name_scope('Weights'): W = tf.Variable(tf.random_normal([input_tensors, output_tensors]), dtype=tf.float32 ,name = 'W') ...

python nn 聲音辨識 -1 傅立葉轉換

圖片
辨識環境聲音判斷出這是甚麼聲音 主要想法是用頻域赫茲分布做判斷 首先先錄三種聲音的聲音檔,我每一種聲音重複錄製九個sample,所以有27個wav檔 讀取wav檔案,作正規劃處理,在做傅立葉轉換 一開始由於自己做的fft_domyself() function跟其他聲音處理軟體做出來的不一樣,數值非常小,之後找到有內建的spectrogram() function,使用也是數值很小,最後才想到要20log(),但由於內建的覺得不適合自由調整,所以還是修改自己的function。 import matplotlib.pyplot as plt from scipy.fftpack import fft from scipy.io import wavfile # get the api import numpy as np from scipy import signal import math import pyaudio import wave import time #buf=[] #讀入單一檔案測試 def init(): fs, data = wavfile.read('0106.wav') # load the data b=[(ele/2**16.) for ele in data] # this is 16-bit track, b is now normalized on [-1,1) c = fft(b) # calculate fourier transform (complex numbers list) d = len(c)/2 # you only need half of the fft list (real signal symmetry) plt.subplot(211) plt.plot(b,'b') plt.title('time line') plt.subplot(212) plt.plot(abs(c[:(d-1)]),'r') plt.title('fft') plt.show() return fs, b #取樣率 dat...

python 爬蟲程式 -2 加入interface視窗介面

圖片
加入pythin的interface視窗介面 這裡要使用tkinter函式庫 import tkinter as tk # button 被按下觸發的事件 def clickon(): outputtext['text'] = inputtext.get() + '\n' + inputtext.get() #將文字方塊的文字填入outputtext的text裡面 win=tk.Tk() win.title("My First Tk GUI") # window title name label = tk.Label(win, text="Hello World!") #建立標籤物件 label.grid(row=0, column=0) # layout inputtext = tk.Entry(win) #建立填入文字方塊 inputtext.grid(row=0, column=1, columnspan=20) button = tk.Button(win)#, text="OK" #建立 button button['text'] = 'ok' button['command'] = clickon #button event事件 button.grid(row=1, column=1) outputtext = tk.Label(win, text = "output information") outputtext.grid(row = 2, column = 1) win.mainloop() GUI test 建立的物件的屬性有兩種寫法 #第一種 button = tk.Button(win)#, text="OK" #建立 button button['tex...

python 爬蟲程式 -1

圖片
做一個抓取 104人力銀行 新鮮人找工作版 所有工作及公司資料的程式 首先要抓搜尋結果頁面的資訊 import requests from bs4 import BeautifulSoup as bs search_url = "https://www.104.com.tw/area/freshman/search?keyword=%E6%A9%9F%E5%99%A8%E4%BA%BA&area=6001001000,6001002000&jobcategory=2007000000&industry=&page=1&sortField=APPEAR_DATE&sortMode=DESC" head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 'Accept-Language':'zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4'} res = requests.get(search_url, headers = head) print(res.encoding) res.encoding = 'utf8' soup = bs(res.text) Out[1]:ISO-8859-1 用request傳回網頁內容 res.encoding可得知網頁編碼方式,一開始我根據網站上寫utf-8編碼,跟python設定編碼一致,想說沒問題,之後才找到如何知道是用甚麼編碼的方法,print出來才知道被python判斷成ISO-8859-1,那就自行設定成utf-8 BeautifulSoup 是一個能解構及分析的一套很好用的工具,將res轉成文字"res.text",丟給 BeautifulSoup 抓取一個工作資料 用select擷取出我們要的資訊在哪個區域 job_box = soup.select(...