[實作][學習][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] 檔案讀取/寫入


針對流程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

使用_getexif()

沒有看到exif資料

REF: Python 取得圖片Exif資訊


繼續嘗試

成功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,哪種會比較適合目前的程式架構。



使用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


感想

上課學習算是相對輕鬆。實作則是需要更多資訊,才能解決。學習強度更高,也更有成就感。

當然,解決實際問題,則是可以讓人有"學以致用"的回饋感。

其實,不管是上完什麼課程、獲得什麼證照、拿到什麼學位,我們都是得回歸生活,把所學拿來應用在生活中,解決現實的問題,這樣也能對自己或對社會更有貢獻。


相關Po文


[學習][Microsoft Learn] 適用於初學者的 Python
https://dream-and-creation.blogspot.com/2024/02/microsoft-learn-python.html


相關連結




w3schools.com學習Python的string操作
https://www.w3schools.com/python/python_strings.asp


Python 列出目錄中所有檔案教學:os.listdir 與 os.walk

不間斷 Python 挑戰 Day 27 - 檔案、資料夾與路徑

TRAVERSING DIRECTORIES RECURSIVELY

python Exifread, PIL練習 抽出圖片元數據


用python读取stable diffusion生成的png图片的参数信息

简单版方法二,python读取stable diffusion生成png图片的参数提示词

[Python初學起步走-Day15] - 例外處理




Microsoft Learn平台官網:


Jupyter官網:


社群媒體討論平台

如果對該主題有興趣,想要討論,也可以採用以下的社群媒體平台。歡迎討論。



留言

張貼留言

這個網誌中的熱門文章

什麼是電池的CCA(Cold Cranking Amperes)? 如何量測CCA?

[數據處理] Excel 日期時間 換算成 秒

[Arduino] 使用示波器來看Arduino的UART, Inverted Software serial及RS-232訊號並對其進行解碼