Immich + cn-clip + RapidOCR + InsightFace
~~الخطة المستقبلية كانت نقل المشروع إلى ente-io/ente، لأنني بحاجة إلى s3 لتخزين الصور~~
لكن ente ما زال يفتقر للميزات الكافية
تم التغيير لاستخدام juicedata/juicefs لتركيب s3
مقدمة المشروع
هذا المشروع هو حل لتعزيز قدرات الذكاء الاصطناعي في نظام إدارة الصور Immich. تم توسيع وظائف Immich الأصلية من خلال المكونات التالية:
- inference-gateway: خدمة بوابة مكتوبة بلغة Go، مسؤولة عن توجيه ذكي لطلبات تعلم الآلة من Immich
- mt-photos-ai: خدمة ذكاء اصطناعي مبنية على Python وFastAPI، تدمج RapidOCR ونموذج cn-clip
- توسيع وظائف Immich، بما يشمل البحث بالتعرف على النصوص (OCR) ومعالجة بيانات الذكاء الاصطناعي لوسائط مفردة، مع دمج ترتيب هجيني للنصوص الكاملة OCR ومتجهات CLIP
- إضافة محلل الكلمات الصينية zhparser إلى PostgreSQL
الميزات الرئيسية
1. التعرف الضوئي على الحروف (OCR) والبحث
- استخدام RapidOCR للتعرف على النصوص داخل الصور
- دعم التعرف على نصوص مختلطة صينية/إنجليزية
- تحقيق وظيفة البحث بناءً على محتوى النصوص داخل الصور
2. معالجة متجهات الصور CLIP
- استخدام نموذج cn-clip لتحقيق مطابقة أدق بين الصور والنصوص باللغة الصينية
- دعم البحث الدلالي، مما يزيد من دقة النتائج
3. إعادة معالجة بيانات الذكاء الاصطناعي للوسائط الفردية
- دعم إعادة توليد بيانات OCR لصورة/فيديو مفرد
- دعم إعادة توليد متجهات CLIP لصورة/فيديو مفرد
- توفير إمكانية التحديث اليدوي عند النتائج غير الدقيقة
بنية النظام
┌─────────────┐ ┌──────────────────┐ ┌───────────────┐
│ │ │ │ │ │
│ Immich │─────▶│ inference-gateway│─────▶│ Immich ML │
│ Server │ │ (Go网关) │ │ Server │
│ │ │ │ │ │
└─────────────┘ └──────────────────┘ └───────────────┘
│
│ OCR/CLIP请求
▼
┌──────────────────┐
│ │
│ mt-photos-ai │
│ (Python服务) │
│ │
└──────────────────┘
شرح المكونات
inference-gateway
خدمة بوابة مكتوبة بلغة Go، المسؤوليات الرئيسية:
- استلام طلبات تعلم الآلة من Immich
- إعادة توجيه طلبات OCR و CLIP إلى خدمة mt-photos-ai حسب نوع الطلب
- إعادة توجيه طلبات تعلم الآلة الأخرى (مثل التعرف على الوجوه) إلى خدمة تعلم الآلة الأصلية في Immich
- معالجة المصادقة وتحويل صيغ البيانات
mt-photos-ai
خدمة ذكاء اصطناعي مكتوبة بلغة Python و FastAPI، تقدم:
- واجهة برمجة تطبيقات للتعرف الضوئي على الحروف (OCR) (تعتمد على RapidOCR)
- واجهة برمجة تطبيقات لمعالجة متجهات CLIP (تعتمد على cn-clip)
- دعم تسريع المعالجة عبر GPU
تعليمات النشر
متطلبات البيئة
- Docker و Docker Compose
- وحدة معالجة رسومات NVIDIA (اختياري، لكن يُوصى بها لتسريع المعالجة)
- مساحة تخزين كافية
تعليمات التكوين
- تكوين inference-gateway
IMMICH_API=http://localhost:3003 # Immich API地址
MT_PHOTOS_API=http://localhost:8060 # mt-photos-ai服务地址
MT_PHOTOS_API_KEY=mt_photos_ai_extra # API密钥
PORT=8080 # 网关监听端口
- إعداد mt-photos-ai
CLIP_MODEL=ViT-B-16 # CLIP模型名称
CLIP_DOWNLOAD_ROOT=./models/clip # 模型下载路径
DEVICE=cuda # 或 cpu,推理设备
HTTP_PORT=8060 # 服务监听端口
خطوات النشر
- استنساخ المستودع:
git clone https://github.com/你的用户名/immich-all-in-one.git
cd immich-all-in-one
- بدء الخدمة:
docker-compose up -d
تعليمات الاستخدام
- تهيئة Immich لاستخدام خدمة تعلم آلي مخصصة
MACHINE_LEARNING_URL=http://inference-gateway:8080
- استخدام البحث OCR
- استخدم البادئة
ocr:في شريط بحث Immich لإجراء بحث OCR - على سبيل المثال:
ocr:فاتورةسيبحث عن الصور التي تحتوي على كلمة "فاتورة" في النص - إعادة معالجة بيانات الذكاء الاصطناعي لوسيط فردي
- في صفحة تفاصيل الصورة، انقر على خيارات القائمة
- اختر "إعادة إنشاء بيانات OCR" أو "إعادة إنشاء متجهات CLIP"
- سيقوم النظام بإعادة معالجة بيانات الذكاء الاصطناعي لتلك الصورة
دليل التطوير
inference-gateway (Go)
الترجمة والتشغيل:
cd inference-gateway
go build
./inference-gateway
mt-photos-ai (بايثون)
إعداد بيئة التطوير:
cd mt-photos-ai
pip install -r requirements.txt
python -m app.main
الترخيص
هذا المشروع مفتوح المصدر بموجب ترخيص MIT.
الشكر والتقدير
- Immich - حل نسخ احتياطي للصور والفيديوهات مفتوح المصدر وقابل للاستضافة الذاتية
- RapidOCR - مكتبة OCR عبر الأنظمة مبنية على PaddleOCR
- cn-clip - نموذج تمهيدي للتعلم المقارن متعدد الوسائط باللغة الصينية