《博主簡介》
小伙伴們好,我是阿旭。專注于人工智能、AIGC、python、計算機視覺相關分享研究。
?更多學習資源,可關注公-仲-hao:【阿旭算法與機器學習】,共同學習交流~
👍感謝小伙伴們點贊、關注!
《------往期經典推薦------》
一、AI應用軟件開發實戰專欄【鏈接】
項目名稱 | 項目名稱 |
---|---|
1.【人臉識別與管理系統開發】 | 2.【車牌識別與自動收費管理系統開發】 |
3.【手勢識別系統開發】 | 4.【人臉面部活體檢測系統開發】 |
5.【圖片風格快速遷移軟件開發】 | 6.【人臉表表情識別系統】 |
7.【YOLOv8多目標識別與自動標注軟件開發】 | 8.【基于YOLOv8深度學習的行人跌倒檢測系統】 |
9.【基于YOLOv8深度學習的PCB板缺陷檢測系統】 | 10.【基于YOLOv8深度學習的生活垃圾分類目標檢測系統】 |
11.【基于YOLOv8深度學習的安全帽目標檢測系統】 | 12.【基于YOLOv8深度學習的120種犬類檢測與識別系統】 |
13.【基于YOLOv8深度學習的路面坑洞檢測系統】 | 14.【基于YOLOv8深度學習的火焰煙霧檢測系統】 |
15.【基于YOLOv8深度學習的鋼材表面缺陷檢測系統】 | 16.【基于YOLOv8深度學習的艦船目標分類檢測系統】 |
17.【基于YOLOv8深度學習的西紅柿成熟度檢測系統】 | 18.【基于YOLOv8深度學習的血細胞檢測與計數系統】 |
19.【基于YOLOv8深度學習的吸煙/抽煙行為檢測系統】 | 20.【基于YOLOv8深度學習的水稻害蟲檢測與識別系統】 |
21.【基于YOLOv8深度學習的高精度車輛行人檢測與計數系統】 | 22.【基于YOLOv8深度學習的路面標志線檢測與識別系統】 |
23.【基于YOLOv8深度學習的智能小麥害蟲檢測識別系統】 | 24.【基于YOLOv8深度學習的智能玉米害蟲檢測識別系統】 |
25.【基于YOLOv8深度學習的200種鳥類智能檢測與識別系統】 | 26.【基于YOLOv8深度學習的45種交通標志智能檢測與識別系統】 |
27.【基于YOLOv8深度學習的人臉面部表情識別系統】 | 28.【基于YOLOv8深度學習的蘋果葉片病害智能診斷系統】 |
29.【基于YOLOv8深度學習的智能肺炎診斷系統】 | 30.【基于YOLOv8深度學習的葡萄簇目標檢測系統】 |
31.【基于YOLOv8深度學習的100種中草藥智能識別系統】 | 32.【基于YOLOv8深度學習的102種花卉智能識別系統】 |
33.【基于YOLOv8深度學習的100種蝴蝶智能識別系統】 | 34.【基于YOLOv8深度學習的水稻葉片病害智能診斷系統】 |
35.【基于YOLOv8與ByteTrack的車輛行人多目標檢測與追蹤系統】 | 36.【基于YOLOv8深度學習的智能草莓病害檢測與分割系統】 |
37.【基于YOLOv8深度學習的復雜場景下船舶目標檢測系統】 | 38.【基于YOLOv8深度學習的農作物幼苗與雜草檢測系統】 |
39.【基于YOLOv8深度學習的智能道路裂縫檢測與分析系統】 | 40.【基于YOLOv8深度學習的葡萄病害智能診斷與防治系統】 |
41.【基于YOLOv8深度學習的遙感地理空間物體檢測系統】 | 42.【基于YOLOv8深度學習的無人機視角地面物體檢測系統】 |
43.【基于YOLOv8深度學習的木薯病害智能診斷與防治系統】 | 44.【基于YOLOv8深度學習的野外火焰煙霧檢測系統】 |
45.【基于YOLOv8深度學習的腦腫瘤智能檢測系統】 | 46.【基于YOLOv8深度學習的玉米葉片病害智能診斷與防治系統】 |
47.【基于YOLOv8深度學習的橙子病害智能診斷與防治系統】 | 48.【車輛檢測追蹤與流量計數系統】 |
49.【行人檢測追蹤與雙向流量計數系統】 | 50.【基于YOLOv8深度學習的反光衣檢測與預警系統】 |
51.【危險區域人員闖入檢測與報警系統】 | 52.【高密度人臉智能檢測與統計系統】 |
二、機器學習實戰專欄【鏈接】,已更新31期,歡迎關注,持續更新中~~
三、深度學習【Pytorch】專欄【鏈接】
四、【Stable Diffusion繪畫系列】專欄【鏈接】
五、YOLOv8改進專欄【鏈接】,持續更新中~~
六、YOLO性能對比專欄【鏈接】,持續更新中~
《------正文------》
背景
當前AI摳圖技術已經非常成熟,并且有效果非常好的開源模型。 日常中可以用于物品摳圖、替換證件照背景等場景,但是網上許多的證件照替換背景竟然還需要收費。今天就給大家分享一個自己制作的可以一鍵啟動的【一鍵摳圖與制作證件照的系統】,感興趣的小伙伴可以自行下載體驗,感謝大家的點贊關注。
效果如下:
項目實現思路
本項目主要是基于RMBG
進行實現的,使用onnx模型進行目標摳出,然后對背景進行處理替換顏色。核心代碼如下:
定義相關函數
首先我們定義一個摳圖函數rmbg
和替換背景顏色函數add_background_to_image
如下所示:
摳圖函數rmbg
代碼:
def rmbg(input_image_path, background_color, out_size_w, out_size_h, size_opt):if size_opt == "保持原圖大小":shape = cv2.imread(input_image_path).shapeout_size = (int(shape[0]),int(shape[1]))else:out_size = (int(out_size_w), int(out_size_h))print('input_image_path:',input_image_path)name = os.path.basename(input_image_path)path = os.path.dirname(input_image_path)filename, ext = os.path.splitext(name)ext = '.png'new_filename = filename + "_rmgb" + ext # 修改文件名out_path = path + new_filename # 摳圖new_filename = filename + "_bg" + extoutput_image_path = path + new_filename # 證件照net = BriaRMBG_ONNX(f"rmbg/onnx/model.onnx")# prepare inputmodel_input_size = [1024,1024]orig_im = io.imread(input_image_path)orig_im_size = orig_im.shape[0:2]image = preprocess_image(orig_im, model_input_size)image = np.transpose(image, (0, 3, 1, 2)) # ONNX通常需要CHW格式# inferenceresult = net(image)# post processresult_image = postprocess_image(result[0][0], orig_im_size)# save resultpil_im = Image.fromarray(result_image)no_bg_image = Image.new("RGBA", pil_im.size, (0,0,0,0))orig_image = Image.open(input_image_path)no_bg_image.paste(orig_image, mask=pil_im)no_bg_image.save(out_path, "PNG")print(background_color, out_size)add_background_to_image(out_path, output_image_path, background_color, out_size)return out_path, output_image_path
替換背景顏色函數代碼如下:
def add_background_to_image(input_image_path, output_image_path, background_color, out_size=None):"""給透明背景的PNG人像圖像添加任意顏色的背景。:param input_image_path: 輸入圖像的路徑:param output_image_path: 輸出圖像的路徑:param background_color: 背景顏色 (R, G, B):param size: 輸出圖像的大小 (width, height) 默認與輸入圖像相同"""# 打開輸入圖像image = Image.open(input_image_path)# 如果圖像不是PNG格式,先轉換為PNGif image.format != 'PNG':image = image.convert('RGBA')if out_size is None:out_size = image.sizeout_image = Image.new('RGB', image.size, background_color)out_image.paste(image, (0,0), image)out_image.resize(out_size)# 保存新的圖像out_image.save(output_image_path)
調用函數進行摳圖
import cv2
import matplotlib.pyplot as plt# 輸入圖片的路徑
input_img = 'test1.jpg'# 證件照的背景顏色
# color = "#FFFFFF" # 白色(用于護照、簽證、身份證等)
color = "#438EDB" # 藍色(用于畢業證、工作證等)
# color = "#FF0000" # 紅色(用于一些特殊的證件照)# 證件照的大小
width = 295
height = 413 # 一寸(295像素 x 413像素)# 是否保持原圖大小
# size_opt = "不保持原圖大小"
size_opt = "保持原圖大小" # 如果選了這個會保持輸入圖片的大小,忽略上面的 證件照的大小 參數# color, width, height 這三個參數不影響摳圖,只會影響證件照的結果
out_path, output_image_path = rmbg(input_img, color, width, height, size_opt)print('摳圖后的圖片: ', out_path)
print('證件照: ', output_image_path)
原始圖片:
摳圖后的圖片:
替換背景顏色后的圖片:
一鍵啟動使用說明
下載項目文件后,直接雙擊運行一鍵啟動.exe
文件。
之后會在瀏覽器自動打開,如下網頁:
使用步驟:
1.在背景顏色區域自行選擇需要使用的背景顏色;
2.在證件尺寸大小區域選擇需要的證件尺寸大小;
3.上傳需要進行摳圖的圖片,然后點擊提交
按鈕。
即可獲取所摳出的圖像,與替換背景后的圖像,結果如下所示:
點擊每張圖片結果的右上角的下載按鈕,即可下載生成后的圖片。
該項目不僅可以輕松摳出人物圖像,也可以實現其他物品的摳圖,效果如下,小伙伴們可以自行體驗。
關注文末名片G-Z-H:【阿旭算法與機器學習】,發送【開源】即可免費獲取
好了,這篇文章就介紹到這里,喜歡的小伙伴感謝給點個贊和關注,更多精彩內容持續更新~~
關于本篇文章大家有任何建議或意見,歡迎在評論區留言交流!