# πŸš€ ARM μ•„ν‚€ν…μ²˜ ν¬νŒ… κ°€μ΄λ“œ AutoPercenty3λ₯Ό ARM μ•„ν‚€ν…μ²˜ (Raspberry Pi, ARM μ„œλ²„ λ“±)μ—μ„œ μ‹€ν–‰ν•˜λŠ” 방법 ## πŸ“‹ 지원 ν˜„ν™© | ꡬ뢄 | x86_64 | ARM64 | ARM32 | μƒνƒœ | |------|--------|-------|-------|------| | **κΈ°λ³Έ GUI (PySide6)** | βœ… | βœ… | βœ… | μ™„μ „ 지원 | | **λΈŒλΌμš°μ € μžλ™ν™” (Playwright)** | βœ… | βœ… | ⚠️ | λŒ€λΆ€λΆ„ 지원 | | **이미지 처리 (OpenCV)** | βœ… | βœ… | βœ… | μ™„μ „ 지원 | | **OCR - PaddleOCR (κΈ°λ³Έ)** | βœ… | ⚠️ | ❌ | μ„±λŠ₯ μ €ν•˜ | | **OCR - FastDeploy** | βœ… | βœ… | ⚠️ | ARM μ΅œμ ν™” | | **OCR - ONNX Runtime** | βœ… | βœ… | βœ… | ꢌμž₯ 방식 | ## πŸ”§ μ„€μΉ˜ 방법 ### 1. μ‹œμŠ€ν…œ μ€€λΉ„ (Ubuntu/Debian κΈ°μ€€) ```bash # Python 3.11 μ„€μΉ˜ sudo apt update sudo apt install python3.11 python3.11-venv python3.11-dev # λΉŒλ“œ 도ꡬ μ„€μΉ˜ sudo apt install build-essential pkg-config git # GUI μ˜μ‘΄μ„± (PySide6용) sudo apt install qt6-base-dev libgl1-mesa-glx # λΈŒλΌμš°μ € μ„€μΉ˜ sudo apt install chromium-browser # ARM μ΅œμ ν™” 라이브러리 sudo apt install libblas3 liblapack3 libopenblas-dev ``` ### 2. ν”„λ‘œμ νŠΈ 클둠 및 ν™˜κ²½ μ„€μ • ```bash # ν”„λ‘œμ νŠΈ 클둠 git clone [your-repo] AutoPercenty3_ARM cd AutoPercenty3_ARM # Python κ°€μƒν™˜κ²½ 생성 python3.11 -m venv venv_arm source venv_arm/bin/activate # ARM용 μ˜μ‘΄μ„± μ„€μΉ˜ pip install -r requirements_arm.txt ``` ### 3. μžλ™ λΉŒλ“œ 및 μ‹€ν–‰ ```bash # μ•„ν‚€ν…μ²˜ μžλ™ κ°μ§€ν•˜μ—¬ λΉŒλ“œ python3 build_linux.py # λΉŒλ“œ μ™„λ£Œ ν›„ μ‹€ν–‰ cd dist/AutoPercenty3_Linux_ARM/ ./start.sh ``` ## βš™οΈ OCR λ°±μ—”λ“œ 상세 μ„€μ • ### A. FastDeploy μ‚¬μš© (ꢌμž₯ - ARM μ΅œμ ν™”) ```bash # FastDeploy CPU 버전 μ„€μΉ˜ pip install fastdeploy-cpu==1.0.7 # λͺ¨λΈ κ·ΈλŒ€λ‘œ μ‚¬μš© (μžλ™ 감지) # ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ‹œ ARM κ°μ§€ν•˜μ—¬ μžλ™μœΌλ‘œ FastDeploy μ‚¬μš© ``` ### B. ONNX Runtime μ‚¬μš© (ν˜Έν™˜μ„± 졜고) ```bash # 1. λͺ¨λΈ λ³€ν™˜ (x86 μ‹œμŠ€ν…œμ—μ„œ μˆ˜ν–‰) python tools/convert_paddle_to_onnx.py \ --model_dir src/modules/ \ --output_dir src/modules/onnx_models/ \ --model_type all # 2. ONNX λͺ¨λΈμ„ ARM μ‹œμŠ€ν…œμœΌλ‘œ 볡사 # src/modules/PP_Models/ 디렉토리에 model.onnx νŒŒμΌλ“€ 배치 # 3. μžλ™ μ‹€ν–‰ (ONNX Runtime λ°±μ—”λ“œ μžλ™ 선택) ``` ### C. λ°±μ—”λ“œ μš°μ„ μˆœμœ„ ν”„λ‘œκ·Έλž¨μ΄ ARM을 κ°μ§€ν•˜λ©΄ λ‹€μŒ μˆœμ„œλ‘œ OCR λ°±μ—”λ“œλ₯Ό μ‹œλ„ν•©λ‹ˆλ‹€: 1. **FastDeploy** (졜고 μ„±λŠ₯) β†’ μ„€μΉ˜λœ 경우 μš°μ„  μ‚¬μš© 2. **ONNX Runtime** (졜고 ν˜Έν™˜μ„±) β†’ FastDeploy μ‹€νŒ¨μ‹œ μ‚¬μš© 3. **PaddleOCR** (폴백) β†’ λ‹€λ₯Έ λ°±μ—”λ“œ λͺ¨λ‘ μ‹€νŒ¨μ‹œ μ‚¬μš© ## 🎯 μ„±λŠ₯ μ΅œμ ν™” ### ARM64 (Raspberry Pi 4, Apple M1 λ“±) ```bash # ν™˜κ²½ λ³€μˆ˜ μ΅œμ ν™” (μžλ™ 적용됨) export OMP_NUM_THREADS=4 export OPENBLAS_NUM_THREADS=4 export MKL_NUM_THREADS=4 # λ©”λͺ¨λ¦¬ μ΅œμ ν™” export MALLOC_TRIM_THRESHOLD_=100000 ``` ### ARM32 (라즈베리 파이 3 λ“±) ```bash # λ©”λͺ¨λ¦¬ μ œν•œ ν™˜κ²½ export OMP_NUM_THREADS=2 export OPENBLAS_NUM_THREADS=2 # μŠ€μ™‘ λ©”λͺ¨λ¦¬ ν™œμ„±ν™” ꢌμž₯ sudo swapon /swapfile ``` ## πŸ“Š μ„±λŠ₯ 비ꡐ ### Raspberry Pi 4 (ARM64, 8GB) κΈ°μ€€ | OCR λ°±μ—”λ“œ | μ΄ˆκΈ°ν™” μ‹œκ°„ | μΆ”λ‘  속도 | λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ | |------------|-------------|-----------|---------------| | **FastDeploy** | ~3초 | **0.8초/이미지** | **~800MB** | | **ONNX Runtime** | ~2초 | **1.2초/이미지** | **~600MB** | | **PaddleOCR** | ~8초 | 3.5초/이미지 | ~1.2GB | ## πŸ” 문제 ν•΄κ²° ### Q1: "FastDeploy μ΄ˆκΈ°ν™” μ‹€νŒ¨" 였λ₯˜ ```bash # ν•΄κ²°μ±…: FastDeploy CPU 버전 μž¬μ„€μΉ˜ pip uninstall fastdeploy-gpu fastdeploy pip install fastdeploy-cpu==1.0.7 ``` ### Q2: "ONNX Runtime λͺ¨λΈ λ‘œλ“œ μ‹€νŒ¨" ```bash # ν•΄κ²°μ±…: λͺ¨λΈ λ³€ν™˜ λ‹€μ‹œ μˆ˜ν–‰ python tools/convert_paddle_to_onnx.py \ --model_dir src/modules/ \ --output_dir src/modules/ \ --model_type all ``` ### Q3: λ©”λͺ¨λ¦¬ λΆ€μ‘± 였λ₯˜ ```bash # ν•΄κ²°μ±… 1: μŠ€μ™‘ λ©”λͺ¨λ¦¬ 증가 sudo fallocate -l 2G /swapfile sudo mkswap /swapfile sudo swapon /swapfile # ν•΄κ²°μ±… 2: λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬ μ œν•œ export CHROME_FLAGS="--memory-pressure-off --max_old_space_size=512" ``` ### Q4: λΈŒλΌμš°μ € μ‹€ν–‰ μ‹€νŒ¨ ```bash # ν•΄κ²°μ±…: μ‹œμŠ€ν…œ Chromium μ„€μΉ˜ 확인 sudo apt install chromium-browser # λ˜λŠ” κΆŒν•œ 문제 ν•΄κ²° sudo chmod +x /usr/bin/chromium-browser ``` ## πŸš€ 개발자용 κ³ κΈ‰ μ„€μ • ### μƒˆλ‘œμš΄ OCR λ°±μ—”λ“œ μΆ”κ°€ 1. `src/modules/ocr_backends/` 디렉토리에 μƒˆ λ°±μ—”λ“œ 클래슀 생성 2. PaddleOCRκ³Ό λ™μΌν•œ `ocr(img, det=True, rec=True, cls=True)` μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 3. `src/modules/ocr_module.py`의 `_initialize_arm_ocr()` λ©”μ„œλ“œμ— λ°±μ—”λ“œ μΆ”κ°€ ### μ»€μŠ€ν…€ λͺ¨λΈ μ‚¬μš© ```python # src/modules/ocr_backends/custom_ocr.py class CustomOCR: def ocr(self, img, det=True, rec=True, cls=True): # μ»€μŠ€ν…€ OCR 둜직 κ΅¬ν˜„ results = [] # ... return results # PaddleOCR ν˜•μ‹: [[bbox, (text, confidence)], ...] ``` ## πŸ“ˆ λ‘œλ“œλ§΅ - [ ] **OpenVINO λ°±μ—”λ“œ μΆ”κ°€** (Intel ARM μ΅œμ ν™”) - [ ] **TensorRT λ°±μ—”λ“œ μΆ”κ°€** (NVIDIA Jetson 지원) - [ ] **Core ML λ°±μ—”λ“œ μΆ”κ°€** (Apple Silicon μ΅œμ ν™”) - [ ] **λͺ¨λΈ μ–‘μžν™” 지원** (INT8 μΆ”λ‘ μœΌλ‘œ 속도 ν–₯상) ## 🀝 κΈ°μ—¬ν•˜κΈ° ARM κ΄€λ ¨ κ°œμ„ μ‚¬ν•­μ΄λ‚˜ μƒˆλ‘œμš΄ λ°±μ—”λ“œλ₯Ό μΆ”κ°€ν•˜κ³  μ‹ΆμœΌμ‹œλ©΄: 1. 이슈 등둝 ν›„ λ…Όμ˜ 2. ν¬ν¬ν•˜μ—¬ 개발 3. ν…ŒμŠ€νŠΈ 결과와 ν•¨κ»˜ PR 제좜 --- **πŸ’‘ 팁**: ARM ν™˜κ²½μ—μ„œ 졜적의 μ„±λŠ₯을 μœ„ν•΄μ„œλŠ” **FastDeploy** μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€!