A Python tool for automatically detecting and cropping portrait photos with transparent backgrounds. Available both as a command-line tool and a web interface.
| Input | Output | 
|---|---|
Original image with full background and surrounding context ![]()  | 
Automatically cropped image focused on the face and upper body, with transparent background ![]()  | 
- Automatic face detection and portrait cropping
 - Clean, transparent background
 - Optional circular mask for profile-style photos
 - Batch processing for multiple images
 - Supports common image formats (JPG, PNG, WEBP)
 - Preserves original image quality
 - Web interface for easy use
 
For technical details about the implementation, please see TECHNICAL.md.
# Clone the repository
git clone https://github.com/yourusername/FaceCrop.git
cd FaceCrop
# Create and activate a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows, use `venv\Scripts\activate`
# Install dependencies
pip install -r requirements.txtStart the web interface:
streamlit run web_app.pyThe web interface provides:
- Drag-and-drop file upload for multiple images
 - Interactive controls for circular mask and strict mode
 - Preview of original and processed images
 - Individual download buttons for each image
 - Batch download option for all processed images
 
Process a single image:
python face_crop.py image.jpgProcess a directory of images:
python face_crop.py input_directory --output output_directoryAdd circular mask:
python face_crop.py image.jpg --circularUse strict mode (only MediaPipe detection):
python face_crop.py image.jpg --strictYou can combine options:
python face_crop.py input_directory --output output_directory --circular --strictThe tool supports two detection modes:
- 
Normal Mode (default):
- Uses multiple detection methods for maximum coverage
 - May occasionally detect non-human faces
 - Best for processing images where you want to catch all possible faces
 
 - 
Strict Mode (
--strict):- Uses only MediaPipe's face detection
 - More accurate for human faces
 - Prevents false positives (e.g., won't detect cat faces)
 - Recommended when processing photos where accuracy is crucial
 
 
input: Input image file or directory--output: Output directory (required for directory input)--circular: Add circular mask (optional)--strict: Use strict mode (optional)
- Format: PNG with transparency
 - Name: 
[original_name]_cropped.png - Aspect ratio: Square (1:1)
 
To set up the development environment:
# Create and activate a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows, use `venv\Scripts\activate`
# Install dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt
pip install -r requirements-test.txt
# Install pre-commit hooks
pre-commit installThe project uses pre-commit hooks to ensure code quality:
- Black: Formats Python code automatically on commit
 - Additional hooks can be configured in 
.pre-commit-config.yaml 
To manually run the pre-commit hooks on all files:
pre-commit run --all-files自動檢測並裁切人像照片的 Python 工具,支援透明背景輸出。可使用命令列工具或網頁介面。
- 自動檢測人臉並裁切人像
 - 乾淨的透明背景
 - 可選擇性添加圓形遮罩製作個人頭像
 - 支援批次處理多張圖片
 - 支援常見圖片格式(JPG、PNG、WEBP)
 - 保持原始圖片品質
 - 網頁介面提供易用操作
 
技術實作細節請參考 TECHNICAL.md。
# 複製專案
git clone https://github.com/yourusername/FaceCrop.git
cd FaceCrop
# 建立虛擬環境並啟動
python -m venv venv
source venv/bin/activate  # 在 Windows 上請使用 `venv\Scripts\activate`
# 安裝相依套件
pip install -r requirements.txt啟動網頁介面:
streamlit run web_app.py網頁介面提供:
- 拖放檔案上傳多張圖片
 - 圓形遮罩和嚴格模式的互動控制
 - 原始和處理圖片的預覽
 - 個別下載按鈕
 - 批次下載選項
 
處理單張圖片:
python face_crop.py 圖片.jpg處理整個資料夾:
python face_crop.py 輸入資料夾 --output 輸出資料夾添加圓形遮罩:
python face_crop.py 圖片.jpg --circular使用嚴格模式(僅使用 MediaPipe 偵測):
python face_crop.py 圖片.jpg --strict您可以結合選項:
python face_crop.py 輸入資料夾 --output 輸出資料夾 --circular --strict工具支援兩種偵測模式:
- 
正常模式(預設):
- 使用多種偵測方法以達到最大覆蓋範圍
 - 可能偶爾偵測到非人臉
 - 適合處理圖片時想要捕捉所有可能的人臉
 
 - 
嚴格模式 (
--strict):- 僅使用 MediaPipe 的人臉偵測
 - 對人臉更準確
 - 防止偵測到非人臉(例如,不會偵測到貓臉)
 - 建議在處理照片時需要準確度時使用
 
 
input:輸入圖片或資料夾--output:輸出資料夾(處理資料夾時必須指定)--circular:添加圓形遮罩(選用)--strict:使用嚴格模式(選用)
- 格式:具透明度的 PNG
 - 檔名:
[原始檔名]_cropped.png - 比例:正方形 (1:1)
 

