[圖片訓(xùn)練]處理圖片腳本

最近在玩AI繪圖,進(jìn)行Lora模型或者其他訓(xùn)練時(shí)需要對(duì)圖片進(jìn)行預(yù)處理,當(dāng)然stable diffusion web ui本身就有預(yù)處理腳本了,lora訓(xùn)練庫(kù)里也有相關(guān)腳本.

但我這里還是寫了一個(gè)分享一下

import os
import argparse
from PIL import Image,ImageFilter
import imghdr
from rembg import remove


imgType_list = {'jpg','bmp','png','jpeg','rgb','tif',"webp"}
global outputpath
global autopath
def save(img,file):
    """
    save img
    :param img:
    :param file:
    :return:
    """
    if os.path.isfile(outputpath):
        if autopath:
            img.save(file)
        else:
            img.save(outputpath)
    else:
        if autopath:
            img.save(file)
        else:
            img.save(os.path.join(outputpath,os.path.basename(file)))

def resizeimg(files,size):
    """
    resize img to size
    :param file:
    :return:
    """
    print("圖片進(jìn)行Resize")
    if os.path.isfile(files):
        img = Image.open(files)
        img = img.resize(size)
        save(img,files)
    else:
        for root, dirs, file in os.walk(files):
            for f in file:
                if imghdr.what(os.path.join(root, f)) in imgType_list:
                    img = Image.open(os.path.join(root, f))
                    img = img.resize(size)
                    save(img, os.path.join(root, f))
            for dir in dirs:
                resizeimg(os.path.join(root,dir),size)
def renameimg(files):
    """
    rename img index
    :param file:
    :return:
    """
    print("圖片進(jìn)行Rename")
    if os.path.isfile(files):
        img = Image.open(files)
        if autopath:
            img.save(os.path.join(os.path.dirname(files),"0.jpg"))
        else:
            img.save(os.path.join(outputpath, "0.jpg"))
    else:
        for root,dirs, files in os.walk(files):
            for i,f in enumerate(files):
                if imghdr.what(os.path.join(root, f)) in imgType_list:
                    img = Image.open(os.path.join(root, f))
                    if autopath:
                        img.save(os.path.join(root,str(i)+".jpg"))
                    else:
                        img.save(os.path.join(outputpath,str(i)+".jpg"))
            for dir in dirs:
                renameimg(os.path.join(root,dir))

def removeimgbg(files):
    """
    remove img background
    :param file:
    :return:
    """
    print("圖片進(jìn)行去除背景")
    if os.path.isfile(files):
        img = Image.open(files)
        if files.split('.')[-1] == "jpg":
            img = img.convert('RGB')
            img = img.filter(ImageFilter.BLUR)
        output = remove(img)
        if autopath:
            output.save(os.path.join(os.path.dirname(files),os.path.basename(files).split('.')[0]+".png"))
        else:
            output.save(os.path.join(os.path.dirname(outputpath),os.path.basename(outputpath).split('.')[0]+".png"))
    else:
        for file in os.listdir(files):
            img = Image.open(os.path.join(files,file))
            output = remove(img)
            if autopath:
                output.save(os.path.join(files, os.path.basename(file).split('.')[0]+".png"))
            else:
                output.save(os.path.join(outputpath, os.path.basename(file).split('.')[0]+".png"))

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', '--input', help='input file path,allow file and dir',required=True) # get input path
    parser.add_argument('-o', '--output', help='output file path') # get output path
    parser.add_argument('-s', '--size', help='output size',nargs=2,type=int)  # get output size
    parser.add_argument('-r', '--removebg', help='remove background',type=bool) # remove background
    parser.add_argument('-e', '--rename', help='rename file',type=bool) # rename file (index)
    parser.add_argument('-a', '--autopath', help='outputpath same as the img path',type=bool) # rename file (index)
    

    args = parser.parse_args()
    file = args.input
    autopath = args.autopath
    if os.path.isfile(file):
        outputpath = args.output if args.output else file
    elif os.path.isdir(file):
        outputpath = args.output if args.output else file
        if not os.path.exists(outputpath):
            os.makedirs(outputpath)
    else:
        print("input file or dir is not exist")
        exit()
        
    size = args.size
    removebg = args.removebg
    rename = args.rename


    if os.path.exists(file):
        """
        if input is a file or dir 
        """
        if size:
            resizeimg(file,size=size)
        if removebg:
            removeimgbg(file)
        if rename:
            renameimg(file)
    else:
        print("input file or dir is not exist")

介紹

主要是圖片剪裁,重命名和去除背景.去除背景也是最重要的,使用了rembg這個(gè)包.

官網(wǎng)danielgatis/rembg: Rembg is a tool to remove images background (github.com),可以考慮GPU版本.

同時(shí)測(cè)試時(shí)也發(fā)現(xiàn)如果是.jpg文件去掉背景會(huì)存在一些問題,是什么通道還是啥問題,不過使用格式轉(zhuǎn)換啥的最終也解決了.

包環(huán)境

requirements如下,因?yàn)榄h(huán)境問題,可能有一些用不上的包.

aiohttp==3.8.4
aiosignal==1.3.1
anyio==3.6.2
async-timeout==4.0.2
asyncer==0.0.2
attrs==23.1.0
certifi==2022.12.7
charset-normalizer==3.1.0
click==8.1.3
colorama==0.4.6
coloredlogs==15.0.1
fastapi==0.95.1
filelock==3.12.0
filetype==1.2.0
flatbuffers==23.3.3
frozenlist==1.3.3
h11==0.14.0
humanfriendly==10.0
idna==3.4
ImageHash==4.3.1
imageio==2.27.0
Jinja2==3.1.2
lazy_loader==0.2
llvmlite==0.39.1
MarkupSafe==2.1.2
mpmath==1.3.0
multidict==6.0.4
networkx==3.1
numba==0.56.4
numpy==1.23.5
onnxruntime==1.14.1
opencv-python-headless==4.7.0.72
packaging==23.1
Pillow==9.5.0
platformdirs==3.2.0
pooch==1.7.0
protobuf==4.22.3
pydantic==1.10.7
PyMatting==1.1.8
pyreadline3==3.4.1
python-multipart==0.0.6
rembg==2.0.32
requests==2.28.2
scikit-image==0.20.0
scipy==1.10.1
sniffio==1.3.0
starlette==0.26.1
sympy==1.11.1
tifffile==2023.4.12
torch==2.0.0
tqdm==4.65.0
typing_extensions==4.5.0
urllib3==1.26.15
uvicorn==0.21.1
watchdog==3.0.0
yarl==1.9.1

本文由mdnice多平臺(tái)發(fā)布

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杨耙,一起剝皮案震驚了整個(gè)濱河市鳖昌,隨后出現(xiàn)的幾起案子漱逸,更是在濱河造成了極大的恐慌琳状,老刑警劉巖呐芥,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恭应,居然都是意外死亡敛纲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門像云,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锌雀,“玉大人,你說我怎么就攤上這事苫费√老牵” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵百框,是天一觀的道長(zhǎng)闲礼。 經(jīng)常有香客問我,道長(zhǎng)铐维,這世上最難降的妖魔是什么柬泽? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮嫁蛇,結(jié)果婚禮上锨并,老公的妹妹穿的比我還像新娘。我一直安慰自己睬棚,他們只是感情好第煮,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布解幼。 她就那樣靜靜地躺著,像睡著了一般包警。 火紅的嫁衣襯著肌膚如雪撵摆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天害晦,我揣著相機(jī)與錄音特铝,去河邊找鬼。 笑死壹瘟,一個(gè)胖子當(dāng)著我的面吹牛鲫剿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稻轨,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼灵莲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了澄者?” 一聲冷哼從身側(cè)響起笆呆,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粱挡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俄精,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡询筏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竖慧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫌套。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圾旨,靈堂內(nèi)的尸體忽然破棺而出踱讨,到底是詐尸還是另有隱情,我是刑警寧澤砍的,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布痹筛,位于F島的核電站,受9級(jí)特大地震影響廓鞠,放射性物質(zhì)發(fā)生泄漏帚稠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一床佳、第九天 我趴在偏房一處隱蔽的房頂上張望滋早。 院中可真熱鬧,春花似錦砌们、人聲如沸杆麸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昔头。三九已至拷获,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間减细,已是汗流浹背匆瓜。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留未蝌,地道東北人驮吱。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像萧吠,于是被迫代替她去往敵國(guó)和親左冬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容