2023年9月1日 星期五
2023年8月1日 星期二
LabelImg 的安裝與使用
LabelImg Tool: Annotations are saved as XML files in PASCAL VOC format, the format used by ImageNet. Besides, it also supports YOLO and CreateML formats.
下載 LabelImg ,
git clone https://github.com/HumanSignal/labelImg.git
若沒有Python Qt, 則須安裝好QT5
pip install pyqt5_tools
接著再執行label Image 的工具
#For QT5 use this command,
pyrcc5 -o libs/resources.py resources.qrcpython labelImg.py
對某一個物件在所有圖片都標注完之後(記得存檔), 再回頭來標注另一個物件會比較快, 因為每框選一個物件,都要從下拉選擇選擇label 反而比較花時間!一個圖檔可能會有多個物件, 這些框選的資訊都記錄在對應的.txt 中。1.jpg -------> 1.txt2.jpg -------> 2.txt3.jpg -------> 3.txt .... ....
在yolo 模型, 其.txt 檔的內容, 每一列代表一個框框的資訊, 但以normalized的資訊來表示. 框框的物件座標資訊(x,y,w,h)都是相對於原始圖片的長宽,所以這些座標資訊都是介於0~1的數字class_id x y w hclass_id x y w h....#轉成0~1def convert(size, box): dw = 1./(size[0]) #圖片的寛 dh = 1./(size[1]) #圖片的高 x = (box[0] + box[1])/2.0 - 1 y = (box[2] + box[3])/2.0 - 1 w = box[1] - box[0] h = box[3] - box[2] x = x*dw w = w*dw y = y*dh h = h*dh return (x,y,w,h)
#yolo偵測到的物件其座標資訊須再乘回比例才可以得到原始圖片的座標資訊=========LabelImg 快速鍵,可以加快你標記的速度
Ctrl + u Load all of the images from a directory
從目錄加載所有圖像Ctrl + r Change the default annotation target dir
更改默認註釋目標目錄Ctrl + s Save 儲存 Ctrl + d Copy the current label and rect box
複製當前標籤和框Ctrl + Shift + d Delete the current image
刪除當前圖像Space Flag the current image as verified
將當前圖像標記為已驗證w Create a rect box
創建一個框d Next image 下一張圖片 a Previous image 上一張圖片 del Delete the selected rect box
刪除選中的矩形框Ctrl++ Zoom in 放大 Ctrl– Zoom out 縮小 ↑ → ↓ ← Keyboard arrows to move selected rect box "Flag the current image as verified" ,會出現綠色背景, 讓你可以快速事後檢查有沒有可能有遺漏的標記。若有綠色背景, 表示你已驗證過這張圖片已經檢查過了.
2023年7月31日 星期一
Raspberry 的預設帳號Pi 不存在了
基於安全性考量,Raspberry Pi 2022年開始的預載的OS image ,不再含有預設的pi 帳號了
在 SD 卡的boot 分割區 (SD 卡插在 Windows 上可以看到檔案系統), 建立一個名為userconf或userconf.txt的文件.
userconf.txt 的內容, 其中pi: <encrypted password>
此處以raspberry 作為密碼的編碼, 可以用其他Linux 機器產生 encrypted password
echo 'raspberry' | openssl passwd -6 -stdin
如此又可以回到帳號 pi 預設密碼為 raspberry 所習慣的環境了~
userconf.txt 的內容如下
2023年1月14日 星期六
[Python] 動態繪製不同尺寸的ASCII-table
作業描述: 能動態繪製不同尺寸的ASCII-table
Task Decription:
1. Generate a random list of size 50.It contains random values from 1 to 50.2. Dynamically draw a ASCII table according to the dimensions of table
2023年1月12日 星期四
用Teachable Machine 建立模型
用Teachable Machine 建立模型
到Teachable Machine 網站 (https://teachablemachine.withgoogle.com/)
1. 建立類別名稱, 並上傳此類別的圖片
2022年12月31日 星期六
佈署AI模型於Web 上
目標: 用瀏覽器上傳圖案到Web後端進行預測, 並將模型預測結果回傳至瀏覽器。
#teachable machine #Flask #Keras
#Install required packages
pip install flask==2.1.1
pip install Pillow==9.1.0
pip install tensorflow==2.3.1
pip install keras==2.4.3
專案目錄結構如下, 其中model 資料匣 要放置AI 模型檔及Label 文字檔。凡應用是上傳圖片,由模型預測分類結果的, 都可以套用本專案程式架構。在不想改程式碼, 就直接模型檔名改成keras_model.h5 ,類別的文字檔改成 labels.txt。
執行主程式 main.py 後, 會載入模型同時啓動Web Server (Flask)
2022年12月1日 星期四
[Python] Python的變數僅僅只是一個tag
在python 世界裡, 宣告的變數僅僅只是一個tag。而tag 可以到處貼, 所以當你問 tag 的資料型態時 , 那就是在問tag 當下所貼的位置的物件資料型態為何 ?
a=3 , 則 type(a)==> int
b=3.14 , 則 type(b)==> float
c="hello" , 則 type(c)==> str
3, 3.14, "hello" 這都是物件, 佔有空間 ,而a, b, c 就是tag name, 只是一個名字用來存取物件而已。
python 的變數完全不同於C/C++ 變數的概念。C/C++ 變數是佔有空間的, 空間存放著資料, 而空間有多大就決定了資料的數值範圍。
int a=64; (佔4個bytes)
char ch='A'; (佔1個bytes)
Python 有Garbage collection 的機制, 故物件10沒有任何tag參考, Python 會自己回收。
Python 中的List , 它是一個container ,即它是具有一個空間。 如 a=[3,3,1] , a[0] 這個tag 指向物件3, a[1] 這個tag 也指向物件3, 而 a[2] 這個tag 指向物件1
你可能會問一個問題, Python 的變數用這樣搞有什麼好處?
用個例子說明好了, a=[1,2,3]
若要複製一份給c, 執行 c=a.copy() 就會將a的container 表格複製給c, 因為只是複製了container a 表格, 和資料物件多大沒有關係, 所以可以很快,也不用將相同的資料物件在記憶體中放兩份。若是C/C++ 則a, c 是各別的空間, 因此即使是相同的資料,在記憶體中也得各自存放一份,會比較佔空間,而且在複製資料時也得一個個byte 複製過去 ( memcpy),速度上也比較慢。
相關文章:
訂閱:
文章
(
Atom
)