論給漫畫去馬賽克/海苔條,我們有 DeepCreamPy + Hent-AI的軟體可以達成目的。
但是,原本手動放圖片的操作太繁瑣了,Gitlab開發者UBC Seagull便寫了「DoujinCI」,利用Gitlab CI/CD Pipeline整合全部步驟,達成自動化下載圖片 + 圖片去碼管線的操作。
沒錯…網路圖片託管商多半有提供管線(pipeline),能夠在傳遞圖片的時候壓縮成avif減少容量,但是還缺了一個去碼的功能對吧!
DoujinCI名字跟同人誌(doujinshi)雙關。
瞇著眼睛看,黑白漫畫去碼效果還不賴。
彩色漫畫去碼也行喔
你可以在 Gitlab用自己的帳號fork他的專案,建立你自己的CI/CD Pipeline。
不過DoujinCI要本機跑也是可以的,本文Ivon示範在Linux系統完全離線跑DoujinCI的方法,文末附上指令稿。
1. 準備圖片#
DoujinCI僅支援Nhentai和Imgur相簿的網址。作者尚沒有實現離線處理邏輯,一定得下載後處理,後面我會提供離線處理的解法。
nhentai.net只要取得畫廊網址的數字就行。
Imgur相簿不建議,自從2023年他們更新服務條款後,網站AI會自動砍掉R18圖片。
如果你要自己準備圖片,那就把漫畫壓縮檔解壓縮,一個目錄裡面只留圖片。不一定要整本漫畫,單張圖檔也行。
2. 安裝DoujinCI#
cd ~
git clone https://gitlab.com/ubcseagull/doujinci.git
cd doujinci
- 建立Python 3.5環境,安裝main的依賴套件
conda create --prefix ./main python=3.5
conda activate ./main
conda install cffi
pip install --upgrade pip
pip install -r AI/requirements-cpu.txt
# 或者裝GPU版用CUDA算
pip install -r AI/requirements-gpu.txt
- 開第二個終端機,安裝decensor的依賴套件
conda create --prefix ./decensor python=3.6
conda activate ./decensor
pip install --upgrade pip
pip install -r Py/requirements-cpu.txt
# 或者裝GPU版用CUDA算
pip install -r AI/requirements-gpu.txt
- 終端機保持開著。
3. 標記圖片海苔#
回到main的終端機,輸入指令,下載圖片,標記海苔。圖片會輸出到Py/decensor_input
# 畫廊ID
export LINKORID=97972
# 標記mosiac(馬賽克)或bar(海苔條)
export BARORMOSAIC=bar
# 是否去除網點
export STREMOVE=false
python AI/main.py $LINKORID $BARORMOSAIC $STREMOVE
- 如果你想使用離線圖片,不要下載的話,修改
AI/main.py
,將這段程式碼註解掉:
#wipedir(input_images_folder)
#if imgur:
# imgurdownloader.download(input_images_folder, link)
#else:
# ndownloader.download(input_images_folder, id)
將要處理的圖片放到
AI/input_images
目錄執行指令,程式就會直接使用離線圖片,開始標記
export LINKORID=00000
export BARORMOSAIC=bar
export STREMOVE=false
python AI/main.py $LINKORID $BARORMOSAIC $STREMOVE
圖片會輸出到
Py/decensor_input
。這裡可以開修圖軟體,把AI沒標記到的海苔,用同樣顏色的綠線手動補上。例如開GIMP,點選取色器吸取綠色,用油漆桶工具填滿沒偵測到的海苔條,再輸出為png。
4. 開始去碼#
- 回到decensor的終端機,執行指令開始去碼。
# BARORMOSAIC的數值可以為mosiac(馬賽克)或bar(海苔條)
export BARORMOSAIC=bar
python Py/decensor.py
- 去碼圖片位於
Py/decensor_output/
。
5. 個人用的離線處理指令稿#
簡化上述處理步驟的範本,只要將圖片放在~/Downloads
再執行這個bash script就行囉。
#!/bin/bash
export INPUTPATH=~/Downloads
export DOUJINCIPATH=~/doujinci
export LINKORID=00000
export BARORMOSAIC=bar
export STREMOVE=false
echo "開始,清除冗餘檔案"
rm -r $INPUTPATH/output
rm -r $DOUJINCIPATH/AI/input_images/*
rm -r $DOUJINCIPATH/AI/input_stremoved/*
rm -r $DOUJINCIPATH/Py/decensor_input/*
rm -r $DOUJINCIPATH/Py/decensor_input_original/*
rm -r $DOUJINCIPATH/Py/decensor_output/*
cd $DOUJINCIPATH
eval "$(conda shell.bash hook)"
conda activate ./main
echo "複製圖片"
cp -r $INPUTPATH/input/* $DOUJINCIPATH/AI/input_images/
echo "標記海苔"
python AI/main.py $LINKORID $BARORMOSAIC $STREMOVE
conda deactivate
echo "圖片去碼"
conda activate ./decensor
python Py/decensor.py
conda deactivate
echo "輸出圖片"
mkdir $INPUTPATH/output
cp -r $DOUJINCIPATH/Py/decensor_output/* $INPUTPATH/output
echo "清除冗餘檔案,結束"
rm -r $DOUJINCIPATH/AI/input_images/*
rm -r $DOUJINCIPATH/AI/input_stremoved/*
rm -r $DOUJINCIPATH/Py/decensor_input/*
rm -r $DOUJINCIPATH/Py/decensor_input_original/*
rm -r $DOUJINCIPATH/Py/decensor_output/*