部署一個開源的證件照系統

以下數據來自官方網站,記錄下來,方便自己

項目簡介

🚀 謝謝你對我們的工作感興趣。您可能還想查看我們在圖像領域的其他成果,歡迎來信:zeyi.lin@swanhub.co.

HivisionIDPhoto 旨在開發一種實用、系統性的證件照智能制作算法。

它利用一套完善的AI模型工作流程,實現對多種用戶拍照場景的識別、摳圖與證件照生成。

HivisionIDPhoto 可以做到:

  1. 輕量級摳圖(純離線,僅需?CPU?即可快速推理)
  2. 根據不同尺寸規格生成不同的標準證件照、六寸排版照
  3. 支持 純離線 或 端云 推理
  4. 美顏
  5. 智能換正裝(waiting)

?編輯


如果 HivisionIDPhoto 對你有幫助,請 star 這個 repo 或推薦給你的朋友,解決證件照應急制作問題!

🏠 社區

我們分享了一些由社區構建的HivisionIDPhotos的有趣應用和擴展:

HivisionIDPhotos-ComfyUIHivisionIDPhotos-wechat-weapp
?編輯?編輯
ComfyUI證件照處理工作流證件照微信小程序(JAVA后端+原生前端)
HivisionIDPhotos-UniappHivisionIDPhotos-web
?編輯?編輯
證件照微信小程序(uniapp)證件照應用網頁版
  • HivisionIDPhotos-cpp: HivisionIDphotos C++版本,由?zjkhahah?構建
  • ai-idphoto:?HivisionIDPhotos-wechat-weapp?的uniapp多端兼容版,由?wmlcjj?貢獻
  • HivisionIDPhotos-uniapp-WeChat-gpto1: 由gpt-o1輔助完成開發的證件照微信小程序,由?jkm199?貢獻
  • HivisionIDPhotos-windows-GUI:Windows客戶端應用,由?zhaoyun0071?構建
  • HivisionIDPhotos-NAS: 群暉NAS部署中文教程,由?ONG-Leo?貢獻

🔧 準備工作

環境安裝與依賴:

  • Python >= 3.7(項目主要測試在 python 3.10)
  • OS: Linux, Windows, MacOS

1. 克隆項目

git clone https://github.com/Zeyi-Lin/HivisionIDPhotos.git
cd  HivisionIDPhotos

2. 安裝依賴環境

建議 conda 創建一個 python3.10 虛擬環境后,執行以下命令

pip install -r requirements.txt
pip install -r requirements-app.txt

3. 下載人像摳圖模型權重文件

方式一:腳本下載

python scripts/download_model.py --models all
# 如需指定下載某個模型
# python scripts/download_model.py --models modnet_photographic_portrait_matting

方式二:直接下載

模型均存到項目的hivision/creator/weights目錄下:

人像摳圖模型介紹下載
MODNetMODNet官方權重下載(24.7MB)
hivision_modnet對純色換底適配性更好的摳圖模型下載(24.7MB)
rmbg-1.4BRIA AI?開源的摳圖模型下載(176.2MB)后重命名為rmbg-1.4.onnx
birefnet-v1-liteZhengPeng7?開源的摳圖模型,擁有最好的分割精度下載(224MB)后重命名為birefnet-v1-lite.onnx

如果下載網速不順利:前往SwanHub下載。

4. 人臉檢測模型配置(可選)

拓展人臉檢測模型介紹使用文檔
MTCNN離線人臉檢測模型,高性能CPU推理(毫秒級),為默認模型,檢測精度較低Clone此項目后直接使用
RetinaFace離線人臉檢測模型,CPU推理速度中等(秒級),精度較高下載后放到hivision/creator/retinaface/weights目錄下
Face++曠視推出的在線人臉檢測API,檢測精度較高,官方文檔使用文檔

5. 性能參考

測試環境為Mac M1 Max 64GB,非GPU加速,測試圖片分辨率為 512x715(1) 與 764×1146(2)。

模型組合內存占用推理時長(1)推理時長(2)
MODNet + mtcnn410MB0.207s0.246s
MODNet + retinaface405MB0.571s0.971s
birefnet-v1-lite + retinaface6.20GB7.063s7.128s

6. GPU推理加速(可選)

在當前版本,可被英偉達GPU加速的模型為birefnet-v1-lite,并請確保你有16GB左右的顯存。

如需使用英偉達GPU加速推理,在確保你已經安裝CUDA與cuDNN后,根據onnxruntime-gpu文檔找到對應的onnxruntime-gpu版本安裝,以及根據pytorch官網找到對應的torch版本安裝。

# 假如你的電腦安裝的是CUDA 12.x, cuDNN 8
# 安裝torch是可選的,如果你始終配置不好cuDNN,那么試試安裝torch
pip install onnxruntime-gpu==1.18.0
pip install torch --index-url https://download.pytorch.org/whl/cu121

完成安裝后,調用birefnet-v1-lite模型即可利用GPU加速推理。

TIPS: CUDA 支持向下兼容。比如你的 CUDA 版本為 12.6,torch?官方目前支持的最高版本為 12.4(<12.6),torch仍可以正常使用CUDA。

?? 運行 Gradio Demo

python app.py

運行程序將生成一個本地 Web 頁面,在頁面中可完成證件照的操作與交互。

?編輯

🚀 Python 推理

核心參數:

  • -i: 輸入圖像路徑
  • -o: 保存圖像路徑
  • -t: 推理類型,有idphoto、human_matting、add_background、generate_layout_photos可選
  • --matting_model: 人像摳圖模型權重選擇
  • --face_detect_model: 人臉檢測模型選擇

更多參數可通過python inference.py --help查看

1. 證件照制作

輸入 1 張照片,獲得 1 張標準證件照和 1 張高清證件照的 4 通道透明 png

python inference.py -i demo/images/test0.jpg -o ./idphoto.png --height 413 --width 295

2. 人像摳圖

輸入 1 張照片,獲得 1張 4 通道透明 png

python inference.py -t human_matting -i demo/images/test0.jpg -o ./idphoto_matting.png --matting_model hivision_modnet

3. 透明圖增加底色

輸入 1 張 4 通道透明 png,獲得 1 張增加了底色的 3通道圖像

python inference.py -t add_background -i ./idphoto.png -o ./idphoto_ab.jpg  -c 4f83ce -k 30 -r 1

4. 得到六寸排版照

輸入 1 張 3 通道照片,獲得 1 張六寸排版照

python inference.py -t generate_layout_photos -i ./idphoto_ab.jpg -o ./idphoto_layout.jpg  --height 413 --width 295 -k 200

5. 證件照裁剪

輸入 1 張 4 通道照片(摳圖好的圖像),獲得 1 張標準證件照和 1 張高清證件照的 4 通道透明 png

python inference.py -t idphoto_crop -i ./idphoto_matting.png -o ./idphoto_crop.png --height 413 --width 295

?? 部署 API 服務

啟動后端

python deploy_api.py

請求 API 服務

詳細請求方式請參考?API 文檔,包含以下請求示例:

  • cURL
  • Python

🐳 Docker 部署

1. 拉取或構建鏡像

以下方式三選一

方式一:拉取最新鏡像:

docker pull linzeyi/hivision_idphotos

方式二:Dockrfile 直接構建鏡像:

在確保將至少一個摳圖模型權重文件放到hivision/creator/weights下后,在項目根目錄執行:

docker build -t linzeyi/hivision_idphotos .

方式三:Docker compose 構建:

在確保將至少一個摳圖模型權重文件放到hivision/creator/weights下后,在項目根目錄下執行:

docker compose build

2. 運行服務

啟動 Gradio Demo 服務

運行下面的命令,在你的本地訪問?http://127.0.0.1:7860?即可使用。

docker run -d -p 7860:7860 linzeyi/hivision_idphotos

啟動 API 后端服務

docker run -d -p 8080:8080 linzeyi/hivision_idphotos python3 deploy_api.py

兩個服務同時啟動

docker compose up -d

環境變量

本項目提供了一些額外的配置項,使用環境變量進行設置:

環境變量類型描述示例
FACE_PLUS_API_KEY可選這是你在 Face++ 控制臺申請的 API 密鑰7-fZStDJ····
FACE_PLUS_API_SECRET可選Face++ API密鑰對應的SecretVTee824E····
RUN_MODE可選運行模式,可選值為beast(野獸模式)。野獸模式下人臉檢測和摳圖模型將不釋放內存,從而獲得更快的二次推理速度。建議內存16GB以上嘗試。beast
DEFAULT_LANG可選Gradio Demo啟動時的默認語言en

docker使用環境變量示例:

docker run  -d -p 7860:7860 \-e FACE_PLUS_API_KEY=7-fZStDJ···· \-e FACE_PLUS_API_SECRET=VTee824E···· \-e RUN_MODE=beast \-e DEFAULT_LANG=en \linzeyi/hivision_idphotos  

FAQ

1. 如何修改預設尺寸和顏色?

  • 尺寸:修改size_list_CN.csv后再次運行?app.py?即可,其中第一列為尺寸名,第二列為高度,第三列為寬度。
  • 顏色:修改color_list_CN.csv后再次運行?app.py?即可,其中第一列為顏色名,第二列為Hex值。

2. 如何修改水印字體?

  1. 將字體文件放到hivision/plugin/font文件夾下
  2. 修改hivision/plugin/watermark.pyfont_file參數值為字體文件名

3. 如何添加社交媒體模板照?

  1. 將模板圖片放到hivision/plugin/template/assets文件夾下。模板圖片是一個4通道的透明png。
  2. hivision/plugin/template/assets/template_config.json文件中添加最新的模板信息,其中width為模板圖寬度(px),height為模板圖高度(px),anchor_points為模板中透明區域的四個角的坐標(px);rotation為透明區域相對于垂直方向的旋轉角度,>0為逆時針,<0為順時針。
  3. demo/processor.py_generate_image_template函數中的TEMPLATE_NAME_LIST變量添加最新的模板名

?編輯

4. 如何修改Gradio Demo的頂部導航欄?

  • 修改demo/assets/title.md

5. 如何添加/修改「打印排版」中的尺寸?

  • 修改demo/locales.py中的print_switch字典,添加/修改新的尺寸名稱和尺寸參數,然后重新運行python app.py

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93058.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux客戶端利用MinIO對服務器數據進行同步

接上篇 Windows客戶端利用MinIO對服務器數據進行同步 本篇為Linux下 操作&#xff0c;先看下我本地的系統版本 所以我這里下載的話&#xff0c;是AMD64 文檔在這 因為我這里只是需要用到客戶端&#xff0c;獲取數據而已&#xff0c;所以我只需要下載個MC工具用來數據獲取就可以…

Docker 中部署 MySQL 5.7 并遠程連接 Navicat 的完整指南

個人名片 &#x1f393;作者簡介&#xff1a;java領域優質創作者 &#x1f310;個人主頁&#xff1a;碼農阿豪 &#x1f4de;工作室&#xff1a;新空間代碼工作室&#xff08;提供各種軟件服務&#xff09; &#x1f48c;個人郵箱&#xff1a;[2435024119qq.com] &#x1f4f1…

自己動手造個球平衡機器人

你是否曾對那些能夠精妙地保持平衡的機器設備感到好奇&#xff1f; 從無人機到獨輪平衡車&#xff0c;背后都蘊藏著復雜的控制系統。 今天&#xff0c;我們來介紹一個充滿挑戰與樂趣的項目——制作一個球平衡機器人。這不僅是一個酷炫的擺件&#xff0c;更是一次深入學習機器…

21.Linux HTTPS服務

Linux : HTTPS服務協議傳輸方式端口安全性HTTP明文傳輸80無加密&#xff0c;可被竊聽HTTPS加密傳輸443HTTP SSL/TLS 數據加密&#xff08;防竊聽&#xff09;身份認證&#xff08;防偽裝&#xff09;完整性校驗&#xff08;防篡改&#xff09;OpenSSL 證書操作核心命令命令選項…

SqlSugar 跨方法 操作臨時表

.net項目中時長會有用到臨時表的操作結果如下所示但是在SqlSugar中可能因為會話問題導致臨時表訪問受限 搜索到的方式var conn (SqlConnection)sugarClient.Ado.Connection;if (conn.State ! System.Data.ConnectionState.Open) {conn.Open();}using (var cmd new SqlCommand…

怎么用飛算javaAI實現視頻逐幀截圖并保存

相信很多朋友都遇到過這樣的需求&#xff1a;想從視頻中截取特定幀作為素材&#xff0c;卻苦于沒有簡單易用的工具&#xff0c;要么操作復雜難以精準定位&#xff0c;要么導出的圖片質量不佳。市面上的視頻處理軟件要么功能冗余&#xff0c;要么需要付費才能使用逐幀截取功能&a…

【2】Transformers快速入門:統計語言模型是啥?

一句話看懂統計語言模型核心任務&#xff1a;教電腦判斷一句話 “像不像人話” &#xff08;比如“我愛吃蘋果”? vs “蘋果吃愛我”?&#xff09;1. 早期&#xff1a;死磕語法規則 → 失敗&#xff01; 科學家思路&#xff08;1970年前&#xff09;&#xff1a; 像語文老師一…

[激光原理與應用-230]:物理學主要分支、研究對象、衍生技術及職業方向解析

物理學作為自然科學的核心學科&#xff0c;其分支體系覆蓋從微觀粒子到宏觀宇宙的廣闊領域&#xff0c;并通過交叉融合衍生出眾多前沿技術。以下從經典與現代物理學分支、交叉學科、技術轉化及職業方向四個維度展開分析&#xff1a;一、經典物理學分支&#xff1a;宏觀世界的基…

北京JAVA基礎面試30天打卡08

RocketMQ、RabbitMQ與Kafka對比及常見問題解決方案 一、概述 消息隊列&#xff08;Message Queue, MQ&#xff09;是企業IT系統內部通信的核心手段&#xff0c;用于提升性能、實現系統解耦和流量削峰。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等功能&#xff0c;是…

【CSS 變量】讓你的 CSS “活”起來:深入理解 CSS 自定義屬性與主題切換

【CSS 變量】讓你的 CSS “活”起來&#xff1a;深入理解 CSS 自定義屬性與主題切換 所屬專欄&#xff1a; 《前端小技巧集合&#xff1a;讓你的代碼更優雅高效》 上一篇&#xff1a; 【CSS 視覺】無需JS&#xff0c;純 CSS 實現酷炫視覺效果&#xff08;clip-path, filter, b…

RAG初步實戰:從 PDF 到問答:我的第一個輕量級 RAG 系統(附詳細項目代碼內容與說明)

RAG初步實戰&#xff1a;從 PDF 到問答&#xff1a;我的第一個輕量級 RAG 系統 項目背景與目標 在大模型逐漸普及的今天&#xff0c;Retrieval-Augmented Generation&#xff08;RAG&#xff0c;檢索增強生成&#xff09;作為連接“知識庫”和“大語言模型”的核心范式&#…

自主泊車算法

看我的git 在 open space 空間下規劃出?條??到停?位的?碰撞軌跡 滿?平滑約束 可跟蹤 考慮動態障礙物約束 在路徑不可?的情況下 具備重規劃能? 重規劃時能夠做到?縫切換 即從原路徑?縫切換到重規劃路徑 ?明顯體感 規劃頻率 10HZ

USB 2.0 學習(2)- 連接

上回說到 usb的信號 k 狀態和 j 狀態&#xff0c;補充一下 usb的一些電氣小知識。 1.USB設備有四根線 電源線VBus、 D、 D-、 地線GND 2.USB主機端的 D 和 D-各有1個15k下拉電阻&#xff0c;這是為了準確檢測 D還是D-線上電平的變化 因為USB總線檢測USB設備是低速還是全速設備…

解鎖 Appium Inspector:移動端 UI 自動化定位的利器

? 在移動端 UI 自動化測試中&#xff0c;元素定位是繞不開的核心環節。無論是 Android 還是 iOS 應用&#xff0c;能否精準、高效地定位到界面元素&#xff0c;直接決定了自動化腳本的穩定性和可維護性。而 Appium Inspector 作為 Appium 生態中專門用于元素定位的工具&#…

機器學習概念1

了解機器學習1、什么是機器學習機器學習是一門通過編程讓計算機從數據中進行學習的科學 通用定義&#xff1a;機器學習是一個研究領域讓計算機無須進行明確編程就具備學習能力 工程化定義&#xff1a;一個計算機程序利用經驗E來學習任務T&#xff0c;性能是P&#xff0c;如果針…

前端html學習筆記5:框架、字符實體與 HTML5 新增標簽

本文為個人學習總結&#xff0c;如有謬誤歡迎指正。前端知識眾多&#xff0c;后續將繼續記錄其他知識點&#xff01; 目錄 前言 一、框架標簽 作用&#xff1a; 語法&#xff1a; 屬性&#xff1a; 二、字符實體 作用&#xff1a; 三、html5新增標簽 語義化 狀態 列…

Day05 店鋪營業狀態設置 Redis

Redis 入門 Redis 簡介 Redis 是一個基于內存的 key-value 結構數據庫。 基于內存存儲&#xff0c;讀寫性能高 適合存儲熱點數據&#xff08;熱點商品&#xff0c;資訊&#xff0c;新聞&#xff09; 企業應用廣泛 redis 中文網&#xff1a;Redis中文網 Redis 下載與安裝 R…

Linux驅動開發probe字符設備的完整創建流程

一、 設備號分配1.靜態分配通過register_chrdev_region預先指定設備號&#xff08;需要確保未被占用&#xff09;2.動態分配通過alloc_chrdev_region由內核自動分配主設備號&#xff0c;一般都是動態分配以避免沖突。3316 xxxx_dev.major 0; 3317 3318 if (xx…

生產環境中Spring Cloud Sleuth與Zipkin分布式鏈路追蹤實戰經驗分享

生產環境中Spring Cloud Sleuth與Zipkin分布式鏈路追蹤實戰經驗分享 在復雜的微服務架構中&#xff0c;服務調用鏈路繁雜&#xff0c;單點故障或性能瓶頸往往難以定位。本文結合真實生產環境案例&#xff0c;分享如何基于Spring Cloud Sleuth與Zipkin構建高可用、低開銷的分布…

基于Python的《紅樓夢》文本分析與機器學習應用

本文將詳細介紹如何使用Python和機器學習技術對《紅樓夢》進行深入的文本分析和處理&#xff0c;包括文本分卷、分詞、停用詞處理、TF-IDF特征提取以及文本可視化等關鍵技術。一、項目概述本項目的目標是對中國古典文學名著《紅樓夢》進行全面的自動化處理和分析&#xff0c;主…