/lite.ai.web

website of lite.ai.toolkit

Primary LanguagePython

๐ŸŽจ AI ๅ›พๅƒๅค„็†ๅนณๅฐ

ไธ€ไธชๅŸบไบŽ Vue.js + FastAPI ็š„็ŽฐไปฃๅŒ– AI ๅ›พๅƒๅค„็† Web ๅบ”็”จ

Vue.js FastAPI Python TypeScript

๐Ÿš€ ้กน็›ฎๆฆ‚่ฟฐ

่ฟ™ๆ˜ฏไธ€ไธช้›†ๆˆไบ†ๅคš็ง AI ่ƒฝๅŠ›็š„ๅ›พๅƒๅค„็†ๅนณๅฐ๏ผŒๆไพ›ไบ†ไปŽๅŸบ็ก€ๅ›พๅƒๆ“ไฝœๅˆฐ้ซ˜็บง AI ้ฃŽๆ ผ่ฝฌๆข็š„ๅ…จๆ–นไฝ่งฃๅ†ณๆ–นๆกˆใ€‚้€š่ฟ‡็ŽฐไปฃๅŒ–็š„ๅ‰ๅŽ็ซฏๅˆ†็ฆปๆžถๆž„๏ผŒไธบ็”จๆˆทๆไพ›ๆต็•…็š„ๅ›พๅƒๅค„็†ไฝ“้ชŒใ€‚

โœจ ๆ ธๅฟƒ็‰นๆ€ง

  • ๐ŸŽฏ ๅคšๆ ทๅŒ– AI ๅค„็†ๅ™จ๏ผšๆ”ฏๆŒLite.ai.ToolkitไธŠๅคง้ƒจๅˆ†็ฎ—ๆณ•ใ€ๅฎซๅดŽ้ช้ฃŽๆ ผ่ฝฌๆข็ญ‰ๅคš็งๅ›พๅƒๅค„็†็ฎ—ๆณ•,ไปฅๅŠไธ€ไบ› ComfyUI ็š„ๆœ‰่ถฃ็š„ๅทฅไฝœๆต
  • ๐Ÿ”Œ ๅฏๆ‰ฉๅฑ•ๆžถๆž„๏ผšๆ’ไปถๅŒ–็š„ๅค„็†ๅ™จ่ฎพ่ฎก๏ผŒ่ฝปๆพ้›†ๆˆ็ฌฌไธ‰ๆ–น AI API
  • โšก ๅผ‚ๆญฅๅค„็†๏ผšๅŸบไบŽ FastAPI ็š„้ซ˜ๆ€ง่ƒฝๅผ‚ๆญฅๅ›พๅƒๅค„็†
  • ๐ŸŽจ ็ŽฐไปฃๅŒ– UI๏ผšไฝฟ็”จ Vue 3 + Composition API ๆž„ๅปบ็š„ๅ“ๅบ”ๅผ็•Œ้ข
  • ๐Ÿ“ก RESTful API๏ผšๆ ‡ๅ‡†ๅŒ–็š„ API ่ฎพ่ฎก๏ผŒๆ”ฏๆŒ่‡ชๅŠจๆ–‡ๆกฃ็”Ÿๆˆ
  • ๐Ÿ›ก๏ธ ็ฑปๅž‹ๅฎ‰ๅ…จ๏ผšๅ‰็ซฏ TypeScript + ๅŽ็ซฏ Pydantic ๅŒ้‡็ฑปๅž‹ไฟ้šœ

๐Ÿ—๏ธ ๆŠ€ๆœฏๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    HTTP/WebSocket    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Vue.js ๅ‰็ซฏ    โ”‚ โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’ โ”‚  FastAPI ๅŽ็ซฏ   โ”‚
โ”‚                 โ”‚                      โ”‚                 โ”‚
โ”‚ โ€ข Composition APIโ”‚                      โ”‚ โ€ข ๅผ‚ๆญฅๅค„็†       โ”‚
โ”‚ โ€ข TypeScript    โ”‚                      โ”‚ โ€ข Pydantic ้ชŒ่ฏ  โ”‚
โ”‚ โ€ข Vite ๆž„ๅปบ     โ”‚                      โ”‚ โ€ข SQLAlchemy ORMโ”‚
โ”‚ โ€ข Pinia ็Šถๆ€็ฎก็† โ”‚                      โ”‚ โ€ข AI ๅค„็†ๅ™จๆ’ไปถ  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                                   โ”‚
                                                   โ–ผ
                                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                         โ”‚   AI ๅค„็†ๅฑ‚     โ”‚
                                         โ”‚                 โ”‚
                                         โ”‚ โ€ข OpenCV        โ”‚
                                         โ”‚ โ€ข PIL/Pillow    โ”‚
                                         โ”‚ โ€ข ๅค–้ƒจ AI API   โ”‚
                                         โ”‚ โ€ข ่‡ชๅฎšไน‰็ฎ—ๆณ•     โ”‚
                                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ ้กน็›ฎ็ป“ๆž„

my-app/
โ”œโ”€โ”€ ๐Ÿ“ frontend/                 # Vue.js ๅ‰็ซฏๅบ”็”จ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ src/
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ components/       # ๅฏๅค็”จ็ป„ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ views/           # ้กต้ข่ง†ๅ›พ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ stores/          # Pinia ็Šถๆ€็ฎก็†
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ types/           # TypeScript ็ฑปๅž‹ๅฎšไน‰
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ utils/           # ๅทฅๅ…ทๅ‡ฝๆ•ฐ
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“„ main.ts          # ๅบ”็”จๅ…ฅๅฃ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ package.json
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ vite.config.ts
โ”œโ”€โ”€ ๐Ÿ“ backend/                  # FastAPI ๅŽ็ซฏๅบ”็”จ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ app/
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ main.py          # FastAPI ไธปๅบ”็”จ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ models/          # ๆ•ฐๆฎๆจกๅž‹
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ routers/         # API ่ทฏ็”ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ services/        # ไธšๅŠก้€ป่พ‘ๅฑ‚
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ utils/           # ๅทฅๅ…ทๆจกๅ—
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ .env                 # ็Žฏๅขƒ้…็ฝฎ
โ”œโ”€โ”€ ๐Ÿ“„ .gitignore
โ””โ”€โ”€ ๐Ÿ“„ README.md

๐Ÿ› ๏ธ AI ๅค„็†ๅ™จๆžถๆž„

ๅค„็†ๅ™จๆŽฅๅฃ่ฎพ่ฎก

class ImageProcessor(ABC):
    @abstractmethod
    def process(self, image: Image.Image, parameters: Dict[str, Any] = None) -> Image.Image:
        """ๅค„็†ๅ›พๅƒ็š„ๆ ธๅฟƒๆ–นๆณ•"""
        pass
    
    @abstractmethod
    def get_name(self) -> str:
        """่Žทๅ–ๅค„็†ๅ™จๅ็งฐ"""
        pass
    
    @abstractmethod
    def get_description(self) -> str:
        """่Žทๅ–ๅค„็†ๅ™จๆ่ฟฐ"""
        pass

ๅ†…็ฝฎๅค„็†ๅ™จ

  • ๐ŸŽจ GrayscaleProcessor: ้ซ˜่ดจ้‡็ฐๅบฆ่ฝฌๆข
  • ๐ŸŒธ GhibliStyleProcessor: ๅฎซๅดŽ้ชๅŠจ็”ป้ฃŽๆ ผ่ฝฌๆข
  • ๐Ÿ”ง CustomProcessor: ่‡ชๅฎšไน‰ๅ‚ๆ•ฐๅŒ–ๅค„็†

ๅค–้ƒจ AI ้›†ๆˆ็คบไพ‹

class AIUpscaleProcessor(ImageProcessor):
    """AI ๅ›พๅƒ่ถ…ๅˆ†่พจ็އๅค„็†ๅ™จ"""
    
    async def process(self, image: Image.Image, parameters: Dict[str, Any] = None) -> Image.Image:
        # ่ฐƒ็”จ็ฌฌไธ‰ๆ–น AI API
        upscaled_image = await self.call_ai_api(image, parameters)
        return upscaled_image

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

็Žฏๅขƒ่ฆๆฑ‚

  • Node.js: >= 16.0
  • Python: >= 3.9
  • npm/yarn: ๅŒ…็ฎก็†ๅ™จ

1. ๅ…‹้š†้กน็›ฎ

git clone <repository-url>
cd my-app

2. ๅฏๅŠจๅŽ็ซฏๆœๅŠก

cd backend

# ๅˆ›ๅปบ่™šๆ‹Ÿ็Žฏๅขƒ
python -m venv venv
source venv/bin/activate  # macOS/Linux
# ๆˆ– venv\Scripts\activate  # Windows

# ๅฎ‰่ฃ…ไพ่ต–
pip install -r requirements.txt

# ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

3. ๅฏๅŠจๅ‰็ซฏๅบ”็”จ

cd frontend

# ๅฎ‰่ฃ…ไพ่ต–
npm install

# ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
npm run dev

4. ่ฎฟ้—ฎๅบ”็”จ

๐Ÿ“– API ไฝฟ็”จๆŒ‡ๅ—

ๅ›พๅƒๅค„็†็ซฏ็‚น

POST /api/process
Content-Type: multipart/form-data

file: <image-file>
processing_type: "ghibli_style"
parameters: {"intensity": 0.8}

่Žทๅ–ๅฏ็”จๅค„็†ๅ™จ

GET /api/processors

ๅ“ๅบ”็คบไพ‹๏ผš

{
  "processors": [
    {
      "name": "grayscale",
      "description": "ๅฐ†ๅ›พๅƒ่ฝฌๆขไธบ็ฐๅบฆ",
      "parameters": []
    },
    {
      "name": "ghibli_style",
      "description": "ๅฎซๅดŽ้ชๅŠจ็”ป้ฃŽๆ ผ่ฝฌๆข",
      "parameters": ["intensity"]
    }
  ]
}

๐Ÿ”ง ๅผ€ๅ‘ๆŒ‡ๅ—

ๆทปๅŠ ๆ–ฐ็š„ AI ๅค„็†ๅ™จ

  1. ๅˆ›ๅปบๅค„็†ๅ™จ็ฑป
# backend/app/services/processors/your_processor.py
class YourAIProcessor(ImageProcessor):
    def process(self, image: Image.Image, parameters: Dict[str, Any] = None) -> Image.Image:
        # ๅฎž็Žฐไฝ ็š„ AI ๅค„็†้€ป่พ‘
        processed_image = your_ai_function(image, **parameters)
        return processed_image
    
    def get_name(self) -> str:
        return "your_ai_processor"
    
    def get_description(self) -> str:
        return "ไฝ ็š„ AI ๅค„็†ๅ™จๆ่ฟฐ"
  1. ๆณจๅ†Œๅค„็†ๅ™จ
# backend/app/services/image_processing.py
def _register_default_processors(self):
    self.register_processor(YourAIProcessor())
  1. ๆ›ดๆ–ฐๅ‰็ซฏ็ฑปๅž‹
// frontend/src/types/processing.ts
export type ProcessingType = 'grayscale' | 'ghibli_style' | 'your_ai_processor'

็Žฏๅขƒ้…็ฝฎ

# backend/.env
DATABASE_URL=sqlite:///./app.db
SECRET_KEY=your-super-secret-key
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=10485760

# AI API ้…็ฝฎ
OPENAI_API_KEY=your-openai-key
STABILITY_AI_KEY=your-stability-key
REPLICATE_API_TOKEN=your-replicate-token

๐ŸŽฏ ๆ€ง่ƒฝไผ˜ๅŒ–

  • ๅ›พๅƒ็ผ“ๅญ˜: Redis ็ผ“ๅญ˜ๅค„็†็ป“ๆžœ
  • ๅผ‚ๆญฅๅค„็†: ๆ”ฏๆŒๆ‰น้‡ๅ›พๅƒๅค„็†
  • ๆตๅผไผ ่พ“: ๅคงๆ–‡ไปถๅˆ†ๅ—ไธŠไผ ไธ‹่ฝฝ
  • CDN ้›†ๆˆ: ้™ๆ€่ต„ๆบๅŠ ้€Ÿ

๐Ÿ”ฎ ๆœชๆฅ่ง„ๅˆ’

  • ๐Ÿค– ้›†ๆˆๆ›ดๅคš AI ๆจกๅž‹ (Stable Diffusion, DALL-E)
  • ๐ŸŽฌ ่ง†้ข‘ๅค„็†ๆ”ฏๆŒ
  • ๐Ÿ‘ฅ ็”จๆˆท็ณป็ปŸๅ’Œๅค„็†ๅކๅฒ
  • ๐Ÿ“Š ๅค„็†็ป“ๆžœๅˆ†ๆžๅ’Œๅฏนๆฏ”
  • ๐ŸŒ ๅคš่ฏญ่จ€ๆ”ฏๆŒ
  • ๐Ÿ“ฑ ็งปๅŠจ็ซฏ้€‚้…

๐Ÿค ่ดก็ŒฎๆŒ‡ๅ—

  1. Fork ้กน็›ฎ
  2. ๅˆ›ๅปบ็‰นๆ€งๅˆ†ๆ”ฏ (git checkout -b feature/AmazingFeature)
  3. ๆไบคๆ›ดๆ”น (git commit -m 'Add some AmazingFeature')
  4. ๆŽจ้€ๅˆฐๅˆ†ๆ”ฏ (git push origin feature/AmazingFeature)
  5. ๅˆ›ๅปบ Pull Request

๐Ÿ“„ ่ฎธๅฏ่ฏ

ๆœฌ้กน็›ฎๅŸบไบŽ MIT ่ฎธๅฏ่ฏๅผ€ๆบ - ๆŸฅ็œ‹ LICENSE ๆ–‡ไปถไบ†่งฃ่ฏฆๆƒ…ใ€‚

๐Ÿ“ž ่”็ณปๆ–นๅผ


โญ ๅฆ‚ๆžœ่ฟ™ไธช้กน็›ฎๅฏนไฝ ๆœ‰ๅธฎๅŠฉ๏ผŒ่ฏท่€ƒ่™‘็ป™ไธช Star๏ผ