我的主力編程語言現(xiàn)在是Python蜘渣,平時也會使用Python寫一些小腳本做文件處理(更簡單一些的操作會直接用Shell命令)绞呈。基本不會接觸到GUI界面的編寫。但是呢隙姿,對于我而言命令行是可行的方案醋虏,但是如果要把代碼交給沒有編程基礎(chǔ)的人藏澳,并且沒有相關(guān)的開發(fā)環(huán)境時计寇。就需要GUI和打包技術(shù)了。最近就遇到一個情況需要開發(fā)一個類似圖片直方圖均衡的功能給和課題組合作的醫(yī)生使用匙姜,工作的電腦是離線的畅厢,醫(yī)生沒有編程基礎(chǔ)。
要求條件:
使用Python氮昧,快捷開發(fā)框杜;
GUI;
獨立的EXE可執(zhí)行文件袖肥。
技術(shù)棧:
Numpy咪辱,用于對像素數(shù)組進(jìn)行映射;
Pillow椎组,圖像庫油狂,底層調(diào)用numpy;
TkinterDND2使用Python內(nèi)置的Tkinter的改進(jìn)版寸癌,支持基礎(chǔ)的code based UI和文件拖拽功能专筷。使用conda安裝。
我的開發(fā)環(huán)境是OS X蒸苇,幸好之前一個老師分配的Windows虛擬機還能用磷蛹。Python環(huán)境3.7.3。
第一版
支持選取圖片文件夾溪烤,遞歸查找其中的jpg文件并處理味咳。
文件夾選取功能
圖片處理函數(shù)
簡單的對圖片像素映射到0-255的范圍庇勃。能夠使得標(biāo)本圖片更容易標(biāo)注。
恢復(fù)函數(shù)
相當(dāng)于圖片處理函數(shù)的逆操作槽驶,在圖片處理的時候保存了每一張圖片的處理參數(shù)匪凉。
性能分析:
因為一個標(biāo)本采集的圖片有接近2000張,測試時預(yù)估大約需要8分鐘才能完成一個標(biāo)本的圖片優(yōu)化捺檬。而費
使用cProfile進(jìn)行性能分析,61張圖片要18秒多贸铜。平均一秒3張圖片堡纬。主要的時間消耗是在轉(zhuǎn)換成numpy矩陣、保存圖片和圖片處理函數(shù)蒿秦】靖洌基本是不能夠再優(yōu)化的。那么就要從數(shù)據(jù)量方面考慮棍鳖,是否每一張圖片都需要優(yōu)化并標(biāo)注炮叶?其實不是的,每一個標(biāo)本只需要選取最多10張進(jìn)行標(biāo)注渡处,那么由醫(yī)生選取并且拖放到指定界面會更快捷镜悉。
第二版
第二版添加了拖放功能并且把文件夾選取的功能去掉了∫教保可以拖放多個文件侣肄,并且會篩選處理其中的jpg文件。
PS: 連標(biāo)題都懶得改醇份。稼锅。
pyinstaller打包
使用pip 安裝pyinstaller打包,pyinstaller是系統(tǒng)依賴的僚纷,在什么系統(tǒng)打包矩距,在什么系統(tǒng)使用〔澜撸坑很多锥债。
總結(jié)
使用pyinstaller遇到幾個bug。six侵状,warm
打包太大了赞弥。有500MB。代碼量180行趣兄。
加了Frame之后文件夾輸入框就不更新了绽左。可能的原因是pack和grid在frame和widge之間混用艇潭∑纯或者混用Tkinter和TkinterDnD2戏蔑。因為文件夾選取的方案被替換掉了。所以這個bug不再存在鲁纠。
conda環(huán)境安裝耗時較久总棵。
還是java香。