[實作][學習][Python程式開發][Jupyter Notebook] 使用Python寫一個程式。將png圖檔中的png info提取出來、整理成Stable Diffusion Webui的"Prompts from file or textbox"可以吃的格式。
在完成了Microsoft Learn平台的"適用於初學者的 Python"系列課程後,就有辦法開發自己想要的程式了嗎?
這點確實需要打問號。
對獻慶來說,完全不行。雖然有想要開發的程式,但腦子就是沒轉動。
需要再想辦法前進。
想清楚開發項目
先搞清楚自己想要的程式需要如何執行,再來考慮要看那些學習資料。
獻慶最近在使用Stable Diffusion Webui的程式。需要製作一個把png圖檔中的文字資料擷取出來,重新包裝成Stable Diffusion Webui能吃的格式,餵給Stable Diffusion Webui的"。
這個程式要能把png圖"吃"進去,"吐出"txt檔。
png圖 --> *.txt檔案
簡易流程如下:
1. 判斷png檔有沒有exif資料,"有"才要往下做
2. 讀取資料夾中的每張png檔的png info (exif資料)
3. 抓出prompt及negtive prompt資料
4. 如果資料中有 \n 有 --> 消除\n
5. 整理成"Prompts from file or text box"的格式
6. 輸出*.txt檔案
7. 批次處理
想辦法
接下來就是要想辦法拼圖了,把每個步驟,分批解決,湊出答案。
分批解決是個好方式。當所有的程式區塊要在大腦內一次完成的時候,大部分的狀況,就是大腦會當機。伴隨而來的就是"焦慮感"! 這樣的狀況搞久了,人就會生病,變得不健康了。
總之就是要,拆分問題,一個一個解決。
針對流程4
4.如果資料中有 \n 有 --> 消除\n
學Python的過程中,就看到有用的程式片段,直接抄錄下來。
txt = "The best thing is\n free in life"print("\n" in txt)a = "Hello, \nWorld!"print(a.replace("\n", ""))
針對流程3跟5
3. 抓出prompt及negtive prompt資料
5. 整理成"Prompts from file or text box"的格式
這兩個流程,都涉及string的操作。不會寫的原因,可能是程式基本功力不足。那就使用w3schools.com學習Python的string操作。
REF: w3schools.com學習Python的string操作
https://www.w3schools.com/python/python_strings.asp
針對流程6
6. 輸出*.txt檔案
找到相關資料,啃掉。
REF: [Day 03] 檔案讀取/寫入
REF: python 研究-with as 用法
針對流程7
7. 批次處理
找到相關資料,啃掉。
REF: Python 列出目錄中所有檔案教學:os.listdir 與 os.walk
REF: 不間斷 Python 挑戰 Day 27 - 檔案、資料夾與路徑
REF: TRAVERSING DIRECTORIES RECURSIVELY
面對失敗
在處理流程2時,有多次失敗狀況出現。流程2. 讀取資料夾中的每張png檔的png info (exif資料)
失敗1
透過PIP安裝好ExifRead函式庫 (測試OK)
$pip install exifread
直接在CLI命令列執行EXIF.py,即可對單一照片檔案image1.jpg,來抓出此張照片相關資料數據
$ EXIF.py image1.jpg
(測試OK,但都說沒有EXIF資料)
REF: python Exifread, PIL練習 抽出圖片元數據
失敗2
繼續嘗試
成功1
使用 exiftool
1、下载exe
https://exiftool.org
2、pip install pyexiftool
3、编写脚本代码
OK,可成功讀取
REF: 用python读取stable diffusion生成的png图片的参数信息
成功2
使用from PIL import Image
OK,可成功讀取
由於此方式不須下載exe,只需要匯入module即可。因此選用此方法。
REF: 简单版方法二,python读取stable diffusion生成png图片的参数提示词
其他雜項
例外處理
處理問題過程中,也看了些相關資料。
REF: [Python初學起步走-Day15] - 例外處理
使用function()還是module?
考慮程式裡面該使用function()還是module,哪種會比較適合目前的程式架構。
REF: [Day05] 函數和模組的使用
REF: In Python, what happens when you import inside of a function? [duplicate]
REF: 6. 模組 (Module)
REF: Python 的 Import 陷阱
REF: Python 初學第十三講—模組
使用JupyterLab測試Python程式
安裝好JupyterLab後,就可以在上面打上Python程式,進行測試。
把分批解決完的方案,一個一個拼接起來後。
過程中,發現自己連Jupyter Notebook的操作都卡。再去尋找Jupyter Notebook的基礎教學,重新學習一下。搞定。
經過測試後,發現已經達成自己想要的功能。OK!
成果
程式碼以*.ipynb的格式,放在GitHub上。方便有需要的朋友,自行取用。
專案名稱: PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui。網址: https://github.com/HsienChing/PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui |
REF: PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
https://github.com/HsienChing/PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
[學習][Microsoft Learn] 適用於初學者的 Python
https://dream-and-creation.blogspot.com/2024/02/microsoft-learn-python.html
https://github.com/HsienChing/PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
感想
上課學習算是相對輕鬆。實作則是需要更多資訊,才能解決。學習強度更高,也更有成就感。
當然,解決實際問題,則是可以讓人有"學以致用"的回饋感。
其實,不管是上完什麼課程、獲得什麼證照、拿到什麼學位,我們都是得回歸生活,把所學拿來應用在生活中,解決現實的問題,這樣也能對自己或對社會更有貢獻。
相關Po文
[Stable diffusion webui] xformers 安裝
https://dream-and-creation.blogspot.com/2024/02/microsoft-learn-python.html
相關連結
PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
https://github.com/HsienChing/PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
https://github.com/HsienChing/PngInfo_To_Txt_ForMultiplePng_StableDiffusionWebui
w3schools.com學習Python的string操作
https://www.w3schools.com/python/python_strings.asp
https://www.w3schools.com/python/python_strings.asp
[Day 03] 檔案讀取/寫入
python 研究-with as 用法
Python 列出目錄中所有檔案教學:os.listdir 與 os.walk
不間斷 Python 挑戰 Day 27 - 檔案、資料夾與路徑
TRAVERSING DIRECTORIES RECURSIVELY
python Exifread, PIL練習 抽出圖片元數據
Python 取得圖片Exif資訊
用python读取stable diffusion生成的png图片的参数信息
简单版方法二,python读取stable diffusion生成png图片的参数提示词
[Python初學起步走-Day15] - 例外處理
[Day05] 函數和模組的使用
In Python, what happens when you import inside of a function? [duplicate]
6. 模組 (Module)
Python 的 Import 陷阱
Python 初學第十三講—模組
Microsoft Learn平台官網:
"適用於初學者的 Python"系列課程
Jupyter官網:
社群媒體討論平台
如果對該主題有興趣,想要討論,也可以採用以下的社群媒體平台。歡迎討論。
[Python程式開發] 使用Python寫一個程式。將png圖檔中的png info提取出來、整理成Stable Diffusion Webui的"Prompts from file or textbox"可以吃的格式。
— HsienChing (@HsienChing_) February 9, 2024
在完成了Microsoft Learn平台的"適用於初學者的 Python"系列課程後,就有辦法開發自己想要的程式了嗎?
更多請看:https://t.co/zQC3XHbukj
GOOD! ^_^
回覆刪除