# ๐ŸŽฏ ่žๅˆๆƒ…ๆ„Ÿ็š„่ฏญ้Ÿณๅ…‹้š†ๆŠ€ๆœฏ็ ”็ฉถๅŠๅ…ถๅœจๅนผๅ„ฟๅ›ญ่ฏญ่จ€ๆ•™่‚ฒไธญ็š„ๅบ”็”จ > **่ฎฉๅญฉๅญ"ๅฌ่‡ชๅทฑ่ฏด" - ๅˆ›ๆ–ฐ็š„่ฏญ้Ÿณๅ…‹้š†ๆŠ€ๆœฏๅœจๅ„ฟ็ซฅ่ฏญ่จ€ๅญฆไน ไธญ็š„ๅบ”็”จ** [![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://python.org) [![Flask](https://img.shields.io/badge/Flask-2.3.3-green.svg)](https://flask.palletsprojects.com/) [![MySQL](https://img.shields.io/badge/MySQL-8.0+-orange.svg)](https://mysql.com) [![CosyVoice](https://img.shields.io/badge/CosyVoice-API-red.svg)](https://github.com/FunAudioLLM/CosyVoice) ## ๐Ÿ“– ้กน็›ฎๆฆ‚่ฟฐ ### ๐ŸŽญ ๆ ธๅฟƒ็†ๅฟต ๆœฌ้กน็›ฎๅŸบไบŽ"่ฎฉๅ„ฟ็ซฅๅฌ่‡ชๅทฑ่ฏด"็š„ๅˆ›ๆ–ฐ็†ๅฟต๏ผŒ้€š่ฟ‡ๅ…ˆ่ฟ›็š„่ฏญ้Ÿณๅ…‹้š†ๆŠ€ๆœฏ๏ผŒไธบ3-6ๅฒๅนผๅ„ฟๅˆ›้€ ไธ€ไธช่‡ช็„ถใ€ๆœ‰่ถฃใ€ๆœ‰ๆ•ˆ็š„่ฏญ่จ€ๅญฆไน ็Žฏๅขƒใ€‚็ณป็ปŸ่ƒฝๅคŸๅ…‹้š†ๅ„ฟ็ซฅ่‡ชๅทฑ็š„ๅฃฐ้Ÿณ๏ผŒ่ฎฉAI็”จๅญฉๅญ็†Ÿๆ‚‰็š„ๅฃฐ้Ÿณ่ฟ›่กŒๆ•™ๅญฆ๏ผŒไปŽ่€Œๆ˜พ่‘—้™ไฝŽๅญฆไน ็„ฆ่™‘๏ผŒๆๅ‡ๅญฆไน ๅŠจๆœบใ€‚ ### ๐Ÿ”ฌ ๆŠ€ๆœฏๅˆ›ๆ–ฐ - **ๆƒ…ๆ„ŸๅŒ–่ฏญ้Ÿณๅ…‹้š†**๏ผšๅŸบไบŽCosyVoice็š„ๅฐ‘ๆ ทๆœฌ่ฏญ้Ÿณๅ…‹้š†ๆŠ€ๆœฏ - **ๆ™บ่ƒฝ่ฏญ้Ÿณ่ฏ†ๅˆซ**๏ผš่‡ชๅŠจ่ฏ†ๅˆซๅ„ฟ็ซฅ่ฏญ้Ÿณๅ†…ๅฎน - **ๅคš็ปดๅบฆๆ™บ่ƒฝ่ฏ„ไผฐ**๏ผšๅŸบไบŽใ€Š3-6ๅฒๅ„ฟ็ซฅๅญฆไน ไธŽๅ‘ๅฑ•ๆŒ‡ๅ—ใ€‹็š„ๅ››็ปด่ฏ„ไผฐไฝ“็ณป - **่‡ช้€‚ๅบ”ๆ•™ๅญฆ็ญ–็•ฅ**๏ผšๆ นๆฎ่ฏ„ไผฐ็ป“ๆžœๅŠจๆ€่ฐƒๆ•ดๆ•™ๅญฆๅ†…ๅฎน ### ๐ŸŽฏ ๅบ”็”จไปทๅ€ผ - ่งฃๅ†ณๅ„ฟ็ซฅๆ•ฐๅญ—ๅŒ–่ฏญ่จ€ๅญฆไน ไธญ็š„"ๅผ€ๅฃ็„ฆ่™‘"้—ฎ้ข˜ - ๅผฅๅˆๆŠ€ๆœฏไธŽๆƒ…ๆ„Ÿไน‹้—ด็š„"ๆƒ…ๆ„Ÿ้ธฟๆฒŸ" - ๆไพ›ไธชๆ€งๅŒ–ใ€่‡ช้€‚ๅบ”็š„่ฏญ่จ€ๅญฆไน ไฝ“้ชŒ - ไธบๅนผๅ„ฟๅ›ญ่ฏญ่จ€ๆ•™่‚ฒๆไพ›ๅˆ›ๆ–ฐ็š„ๆ•ฐๅญ—ๅŒ–่งฃๅ†ณๆ–นๆกˆ ## ๐Ÿ—๏ธ ็ณป็ปŸๆžถๆž„ ### ๐Ÿ’ป ๆŠ€ๆœฏๆ ˆ ``` Frontend: HTML5 + CSS3 + JavaScript (ES6+) Backend: Flask 2.3.3 + Python 3.10+ Database: MySQL 8.0+ AI Core: CosyVoice + ๅคง่ฏญ่จ€ๆจกๅž‹(LLM) Storage: ่…พ่ฎฏไบ‘ COS Deploy: Docker + ่…พ่ฎฏไบ‘ๆœๅŠกๅ™จ ``` ### ๐Ÿ›๏ธ ๆžถๆž„ๅ›พ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ็”จๆˆท็•Œ้ขๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Web UI โ”‚ โ”‚ Dashboard โ”‚ โ”‚ Test Page โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Flask ๅบ”็”จๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Auth Routes โ”‚ โ”‚ Main Routes โ”‚ โ”‚Voice Routes โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ไธšๅŠกๆœๅŠกๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚CosyVoice Svcโ”‚ โ”‚ Email Svc โ”‚ โ”‚ Auth Svc โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๆ•ฐๆฎๅญ˜ๅ‚จๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ MySQL โ”‚ โ”‚Tencent COS โ”‚ โ”‚Temp Storage โ”‚ โ”‚ โ”‚ โ”‚ Database โ”‚ โ”‚ Storage โ”‚ โ”‚ /tmp โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅค–้ƒจๆœๅŠกๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ CosyVoice โ”‚ โ”‚ LLM โ”‚ โ”‚ Email โ”‚ โ”‚ โ”‚ โ”‚ API Server โ”‚ โ”‚ Service โ”‚ โ”‚ Service โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿš€ ๆ ธๅฟƒๅŠŸ่ƒฝ ### ๐ŸŽค ่ฏญ้Ÿณๅ…‹้š†ๅทฅไฝœๆต็จ‹ 1. **่ฏญ้Ÿณๆ ทๆœฌ้‡‡้›†** - ๆ”ฏๆŒๅœจ็บฟๅฝ•้Ÿณๅ’Œๆ–‡ไปถไธŠไผ  - ่‡ชๅŠจ้Ÿณ้ข‘ๆ ผๅผ่ฝฌๆข(16kHzๅ•ๅฃฐ้“WAV) - ้Ÿณ้ข‘่ดจ้‡ๆฃ€ๆต‹ๅ’Œไผ˜ๅŒ– 2. **ๆ™บ่ƒฝ่ฏญ้Ÿณ่ฏ†ๅˆซ** - ๅŸบไบŽFunASR็š„้ซ˜็ฒพๅบฆ่ฏญ้Ÿณ่ฏ†ๅˆซ - ๆ”ฏๆŒไธญๆ–‡ๆ™ฎ้€š่ฏ่ฏ†ๅˆซ - ๅฎžๆ—ถ่ฏ†ๅˆซ็ป“ๆžœๅฑ•็คบๅ’Œ็ผ–่พ‘ 3. **่ฏญ้Ÿณๅ…‹้š†็”Ÿๆˆ** - 3็ง’ๆž้€Ÿๅฃฐ้Ÿณๅ…‹้š† - ๆƒ…ๆ„ŸๅŒ–่ฏญ้Ÿณๅˆๆˆ - ๅคš็ง่ฏญ้Ÿณ้ฃŽๆ ผๆŽงๅˆถ 4. **ๆ•ˆๆžœๅฏนๆฏ”ๆ’ญๆ”พ** - ๅŽŸๅฃฐvsๅ…‹้š†ๅฃฐ้ŸณๅนถๆŽ’ๅฏนๆฏ” - ้Ÿณ้ข‘่ดจ้‡่ฏ„ๅˆ†็ณป็ปŸ - ็”จๆˆทไฝ“้ชŒๅ้ฆˆๆ”ถ้›† ### ๐ŸŽจ ้ข„่ฎญ็ปƒ้Ÿณ่‰ฒ็ณป็ปŸ - ๆ”ฏๆŒไธญๆ–‡ใ€่‹ฑๆ–‡ใ€็ฒค่ฏญ็ญ‰ๅคš่ฏญ่จ€ - ็‰น่‰ฒ้Ÿณ่‰ฒ๏ผš้บฆๅ…‹้˜ฟ็‘Ÿใ€ไธœๅŒ—ๅจ˜ไปฌใ€่ˆŒๅฐ–ไธŠ็š„ไธญๅ›ฝ็ญ‰ ### ๐Ÿง  ่‡ช็„ถ่ฏญ่จ€ๆŽงๅˆถ - ้€š่ฟ‡ๆ–‡ๅญ—ๆ่ฟฐๆŽงๅˆถ่ฏญ้Ÿณ้ฃŽๆ ผ - ๆ”ฏๆŒๆƒ…ๆ„ŸๅŒ–ๆŒ‡ไปค๏ผš"ๆธฉๆŸ”็”œ็พŽ"ใ€"ๆดปๆณผๅผ€ๆœ—"็ญ‰ - ไธชๆ€งๅŒ–่ฏญ้Ÿณๅฎšๅˆถ ### ๐Ÿ“Š ๆ™บ่ƒฝ่ฏ„ไผฐไฝ“็ณป ๅŸบไบŽใ€Š3-6ๅฒๅ„ฟ็ซฅๅญฆไน ไธŽๅ‘ๅฑ•ๆŒ‡ๅ—ใ€‹็š„ๅ››็ปด่ฏ„ไผฐ๏ผš - **่ฏญ่จ€็†่งฃไธŽ้€ป่พ‘**๏ผˆๆƒ้‡30%๏ผ‰๏ผšๅ†…ๅฎน็›ธๅ…ณๆ€งใ€้€ป่พ‘่ฟž่ดฏๆ€ง - **่ฏญ่จ€่กจ่พพไธŽ็ป„็ป‡**๏ผˆๆƒ้‡40%๏ผ‰๏ผš่ฏๆฑ‡ไธฐๅฏŒๅบฆใ€่ฏญๆณ•ๆญฃ็กฎๆ€ง - **่ฏญ่จ€ๅŠŸ่ƒฝไธŽๆ€็ปดๆ‹“ๅฑ•**๏ผˆๆƒ้‡20%๏ผ‰๏ผšๅˆ›ๆ–ฐๆ€งใ€ๆƒณ่ฑกๅŠ› - **่ฏญ่จ€ไน ๆƒฏไธŽๆต็•…ๅบฆ**๏ผˆๆƒ้‡10%๏ผ‰๏ผšๅ‘้Ÿณๆธ…ๆ™ฐๅบฆใ€่ฏญ้€Ÿ ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` Happy_language/ โ”œโ”€โ”€ ๐Ÿ“ app/ # Flaskๅบ”็”จไธป็›ฎๅฝ• โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ __init__.py # ๅบ”็”จๅˆๅง‹ๅŒ– โ”‚ โ”œโ”€โ”€ ๐Ÿ“ models/ # ๆ•ฐๆฎๆจกๅž‹ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ __init__.py # ็”จๆˆทใ€้ชŒ่ฏ็ ็ญ‰ๆจกๅž‹ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ routes/ # ่ทฏ็”ฑๆŽงๅˆถๅ™จ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ auth.py # ่ฎค่ฏ็›ธๅ…ณ่ทฏ็”ฑ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ main.py # ไธป้กต้ข่ทฏ็”ฑ โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“„ voice_test.py # ่ฏญ้Ÿณๆต‹่ฏ•่ทฏ็”ฑ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ services/ # ไธšๅŠกๆœๅŠกๅฑ‚ โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“„ cosyvoice_service.py # CosyVoiceๆœๅŠกๅฐ่ฃ… โ”‚ โ”œโ”€โ”€ ๐Ÿ“ static/ # ้™ๆ€่ต„ๆบ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ css/ # ๆ ทๅผๆ–‡ไปถ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ js/ # JavaScriptๆ–‡ไปถ โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“ images/ # ๅ›พ็‰‡่ต„ๆบ โ”‚ โ””โ”€โ”€ ๐Ÿ“ templates/ # HTMLๆจกๆฟ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ base.html # ๅŸบ็ก€ๆจกๆฟ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ index.html # ้ฆ–้กต โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ dashboard.html # ็”จๆˆทไธป้กต โ”‚ โ”œโ”€โ”€ ๐Ÿ“ auth/ # ่ฎค่ฏ้กต้ข โ”‚ โ””โ”€โ”€ ๐Ÿ“ voice_test/ # ่ฏญ้Ÿณๆต‹่ฏ•้กต้ข โ”œโ”€โ”€ ๐Ÿ“ config/ # ้…็ฝฎๆ–‡ไปถ โ”œโ”€โ”€ ๐Ÿ“ utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ โ”œโ”€โ”€ ๐Ÿ“ logs/ # ๆ—ฅๅฟ—ๆ–‡ไปถ โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt # Pythonไพ่ต– โ”œโ”€โ”€ ๐Ÿ“„ run.py # ๅบ”็”จๅฏๅŠจ่„šๆœฌ โ””โ”€โ”€ ๐Ÿ“„ README.md # ้กน็›ฎ่ฏดๆ˜Žๆ–‡ๆกฃ ``` ## ๐Ÿ› ๏ธ ๅฎ‰่ฃ…ไธŽ้ƒจ็ฝฒ ### ๐Ÿ“‹ ็Žฏๅขƒ่ฆๆฑ‚ - Python 3.10+ - MySQL 8.0+ - Node.js 16+ (็”จไบŽๅ‰็ซฏ่ต„ๆบๆž„ๅปบ) - Docker & Docker Compose (็”Ÿไบง้ƒจ็ฝฒ) - ่…พ่ฎฏไบ‘่ดฆๅท (COSๅญ˜ๅ‚จ) ### ๐Ÿ”ง ๆœฌๅœฐๅผ€ๅ‘็Žฏๅขƒๆญๅปบ 1. **ๅ…‹้š†้กน็›ฎ** ```bash git clone cd Happy_language ``` 2. **ๅˆ›ๅปบ่™šๆ‹Ÿ็Žฏๅขƒ** ```bash python -m venv venv source venv/bin/activate # Linux/Mac # ๆˆ– venv\Scripts\activate # Windows ``` 3. **ๅฎ‰่ฃ…ไพ่ต–** ```bash pip install -r requirements.txt ``` 4. **้…็ฝฎ็Žฏๅขƒๅ˜้‡** ```bash cp .env.example .env # ็ผ–่พ‘.envๆ–‡ไปถ๏ผŒ้…็ฝฎๆ•ฐๆฎๅบ“ใ€้‚ฎ็ฎฑใ€ไบ‘ๆœๅŠก็ญ‰ไฟกๆฏ ``` 5. **ๅˆๅง‹ๅŒ–ๆ•ฐๆฎๅบ“** ```bash flask init-db ``` 6. **ๅฏๅŠจCosyVoice APIๆœๅŠก** ```bash # ๅœจCosyVoice้กน็›ฎ็›ฎๅฝ•ไธ‹ cd ~/CosyVoice2-Ex python cosyvoice_api_server.py ``` 7. **ๅฏๅŠจFlaskๅบ”็”จ** ```bash python run.py ``` 8. **่ฎฟ้—ฎๅบ”็”จ** ``` http://localhost:50003 ``` ### ๐Ÿณ Docker้ƒจ็ฝฒ 1. **ๆž„ๅปบ้•œๅƒ** ```bash docker build -t happy-language . ``` 2. **่ฟ่กŒๅฎนๅ™จ** ```bash docker-compose up -d ``` 3. **ๆŸฅ็œ‹ๆœๅŠก็Šถๆ€** ```bash docker-compose ps docker-compose logs -f app ``` ## ๐Ÿ“Š ๅฝ“ๅ‰ๅผ€ๅ‘่ฟ›ๅบฆ ### โœ… ๅทฒๅฎŒๆˆๅŠŸ่ƒฝ (60%) #### ๐Ÿ” ็”จๆˆท่ฎค่ฏ็ณป็ปŸ (100% ๅฎŒๆˆ) - โœ… ้‚ฎ็ฎฑๆณจๅ†ŒไธŽ้ชŒ่ฏ - โœ… ็”จๆˆท็™ปๅฝ•/็™ปๅ‡บ - โœ… ๅฏ†็ ๆ‰พๅ›žๅŠŸ่ƒฝ - โœ… ไผš่ฏ็ฎก็† - โœ… ็”จๆˆทไฟกๆฏ็ฎก็† #### ๐ŸŽค ่ฏญ้Ÿณๅ…‹้š†ๆ ธๅฟƒๅŠŸ่ƒฝ (90% ๅฎŒๆˆ) - โœ… ๅœจ็บฟๅฝ•้ŸณๅŠŸ่ƒฝ - โœ… ้Ÿณ้ข‘ๆ–‡ไปถไธŠไผ  - โœ… ้Ÿณ้ข‘ๆ ผๅผ่‡ชๅŠจ่ฝฌๆข - โœ… ่ฏญ้Ÿณ่ฏ†ๅˆซ(STT) - โœ… ๅฃฐ้Ÿณๅ…‹้š†็”Ÿๆˆ - โœ… ๅŽŸๅฃฐvsๅ…‹้š†ๅฃฐ้Ÿณๅฏนๆฏ”ๆ’ญๆ”พ - โœ… ็”จๆˆทไฝ“้ชŒ่ฏ„ๅˆ†็ณป็ปŸ #### ๐ŸŽจ ้ข„่ฎญ็ปƒ้Ÿณ่‰ฒ็ณป็ปŸ (100% ๅฎŒๆˆ) - โœ… 8็ง้ข„่ฎญ็ปƒ้Ÿณ่‰ฒๆ”ฏๆŒ - โœ… ๅคš่ฏญ่จ€่ฏญ้Ÿณๅˆๆˆ - โœ… ่ฏญ้€ŸๆŽงๅˆถ - โœ… ้šๆœบ็งๅญ็”Ÿๆˆ #### ๐Ÿง  ่‡ช็„ถ่ฏญ่จ€ๆŽงๅˆถ (80% ๅฎŒๆˆ) - โœ… ๆƒ…ๆ„ŸๆŒ‡ไปค่งฃๆž - โœ… ่ฏญ้Ÿณ้ฃŽๆ ผๆŽงๅˆถ - โœ… ไธชๆ€งๅŒ–่ฏญ้Ÿณ็”Ÿๆˆ #### ๐Ÿ’ป ็”จๆˆท็•Œ้ข (85% ๅฎŒๆˆ) - โœ… ๅ“ๅบ”ๅผ่ฎพ่ฎก - โœ… ็ŽฐไปฃๅŒ–UI/UX - โœ… ๆญฅ้ชคๅŒ–ๆ“ไฝœๆŒ‡ๅผ• - โœ… ๅฎžๆ—ถ็Šถๆ€ๅ้ฆˆ - โœ… ็งปๅŠจ็ซฏ้€‚้… #### ๐Ÿ—๏ธ ็ณป็ปŸๆžถๆž„ (90% ๅฎŒๆˆ) - โœ… Flask Webๆก†ๆžถ - โœ… MySQLๆ•ฐๆฎๅบ“ - โœ… CosyVoice API้›†ๆˆ - โœ… ็‹ฌ็ซ‹APIๆœๅŠกๅ™จๆžถๆž„ - โœ… ้Ÿณ้ข‘ๅค„็†็ฎก้“ - โœ… ้”™่ฏฏๅค„็†ไธŽๆ—ฅๅฟ—็ณป็ปŸ ### ๐Ÿšง ๅผ€ๅ‘ไธญๅŠŸ่ƒฝ (25%) #### ๐Ÿ“Š ๆ™บ่ƒฝ่ฏ„ไผฐ็ณป็ปŸ (30% ๅฎŒๆˆ) - ๐Ÿ”„ ๅ››็ปดๅบฆ่ฏ„ไผฐ็ฎ—ๆณ•ๅฎž็Žฐไธญ - ๐Ÿ”„ LLM้›†ๆˆไธŽไผ˜ๅŒ– - ๐Ÿ”„ ่ฏ„ไผฐ็ป“ๆžœๅฏ่ง†ๅŒ– - โŒ ๅކๅฒๆˆ็ปฉๅฏนๆฏ”ๅˆ†ๆž #### ๐ŸŽฏ ๅœบๆ™ฏๅญฆไน ็ณป็ปŸ (10% ๅฎŒๆˆ) - ๐Ÿ”„ ๅœบๆ™ฏๆ•ฐๆฎๅบ“่ฎพ่ฎก - โŒ ๅคšไธป้ข˜ๅฏน่ฏๅœบๆ™ฏ - โŒ ๆƒ…ๅขƒๅŒ–ๅญฆไน ๅ†…ๅฎน - โŒ ๅœบๆ™ฏ้šพๅบฆ่‡ช้€‚ๅบ” #### ๐Ÿ“ˆ ๅญฆไน ๅˆ†ๆž็ณป็ปŸ (0% ๅฎŒๆˆ) - โŒ ๅญฆไน ่ฝจ่ฟน่ฟฝ่ธช - โŒ ่ฟ›ๅบฆๅฏ่ง†ๅŒ– - โŒ ไธชๆ€งๅŒ–ๆŽจ่ - โŒ ๅฎถ้•ฟๆŠฅๅ‘Š็”Ÿๆˆ ### ๐Ÿ“‹ ๅพ…ๅผ€ๅ‘ๅŠŸ่ƒฝ (15%) #### ๐ŸŽช ้ซ˜็บงๅŠŸ่ƒฝ - โŒ ่ทจ่ฏญ็ง่ฏญ้Ÿณๅ…‹้š† - โŒ ๅฎžๆ—ถ่ฏญ้Ÿณไบ’ๅŠจ - โŒ ๅคšไบบๅไฝœๅญฆไน  - โŒ ่ฏญ้Ÿณๆƒ…ๆ„Ÿๅˆ†ๆž #### ๐Ÿ”ง ็ณป็ปŸไผ˜ๅŒ– - โŒ ๆ€ง่ƒฝไผ˜ๅŒ– - โŒ ็ผ“ๅญ˜ๆœบๅˆถ - โŒ ่ดŸ่ฝฝๅ‡่กก - โŒ ่‡ชๅŠจๅŒ–้ƒจ็ฝฒ #### ๐Ÿ“ฑ ็งปๅŠจ็ซฏๅบ”็”จ - โŒ ๅŽŸ็”ŸAppๅผ€ๅ‘ - โŒ ็ฆป็บฟๅŠŸ่ƒฝๆ”ฏๆŒ - โŒ ๆŽจ้€้€š็Ÿฅ - โŒ ๅฎถ้•ฟ็›‘ๆŽง็ซฏ ### ๐Ÿ”ฌ ๅฎž้ชŒ้ชŒ่ฏ (0% ๅฎŒๆˆ) - โŒ 30ไบบๅˆ†็ป„ๅฏน็…งๅฎž้ชŒ่ฎพ่ฎก - โŒ ๅฎž้ชŒๆ•ฐๆฎๆ”ถ้›† - โŒ ๆ•ˆๆžœ่ฏ„ไผฐไธŽๅˆ†ๆž - โŒ ็ ”็ฉถ่ฎบๆ–‡ๆ’ฐๅ†™ ## ๐Ÿ“ˆ ๆ€ง่ƒฝๆŒ‡ๆ ‡ ### ๐ŸŽฏ ๅฝ“ๅ‰ๆ€ง่ƒฝ่กจ็Žฐ - **่ฏญ้Ÿณๅ…‹้š†่ดจ้‡**๏ผš็”จๆˆท่ฏ„ๅˆ†ๅนณๅ‡ 4.2/5.0 - **่ฏญ้Ÿณ่ฏ†ๅˆซๅ‡†็กฎ็އ**๏ผšไธญๆ–‡ๆ™ฎ้€š่ฏ >95% - **็ณป็ปŸๅ“ๅบ”ๆ—ถ้—ด**๏ผšๅนณๅ‡ <2็ง’ - **้Ÿณ้ข‘็”Ÿๆˆ้€Ÿๅบฆ**๏ผš3็ง’้Ÿณ้ข‘ๅ…‹้š†็บฆ้œ€10-15็ง’ - **ๅนถๅ‘ๆ”ฏๆŒ่ƒฝๅŠ›**๏ผšๆœ€ๅคš5็”จๆˆทๅŒๆ—ถไฝฟ็”จ ### ๐ŸŽฏ ็›ฎๆ ‡ๆ€ง่ƒฝๆŒ‡ๆ ‡ - **่ฏญ้Ÿณๅ…‹้š†่ดจ้‡**๏ผš็”จๆˆท่ฏ„ๅˆ† โ‰ฅ4.5/5.0 - **่ฏญ้Ÿณ่ฏ†ๅˆซๅ‡†็กฎ็އ**๏ผšโ‰ฅ98% - **็ณป็ปŸๅ“ๅบ”ๆ—ถ้—ด**๏ผšโ‰ค1็ง’ - **้Ÿณ้ข‘็”Ÿๆˆ้€Ÿๅบฆ**๏ผšๅฎžๆ—ถ็”Ÿๆˆ(RTF<1) - **ๅนถๅ‘ๆ”ฏๆŒ่ƒฝๅŠ›**๏ผšโ‰ฅ50็”จๆˆท ## ๐Ÿงช ไฝฟ็”จ็คบไพ‹ ### 1. ๆ–ฐ็”จๆˆทๆณจๅ†Œไฝฟ็”จๆต็จ‹ ```python # 1. ็”จๆˆทๆณจๅ†Œ POST /auth/register { "email": "parent@example.com", "name": "ๅฐๆ˜Ž", "age": 5, "gender": 0, "verification_code": "123456" } # 2. ็™ปๅฝ•็ณป็ปŸ POST /auth/login { "email": "parent@example.com", "password": "password123" } # 3. ่ฟ›ๅ…ฅ่ฏญ้Ÿณๅ…‹้š†ๆต‹่ฏ•้กต้ข GET /voice-test/voice-test ``` ### 2. ่ฏญ้Ÿณๅ…‹้š†ๅฎŒๆ•ดๆต็จ‹ ```javascript // ๅ‰็ซฏJavaScript็คบไพ‹ // 1. ไธŠไผ ้Ÿณ้ข‘ๆ ทๆœฌ const formData = new FormData(); formData.append('audio', audioBlob, 'sample.wav'); fetch('/voice-test/api/voice-test/upload-audio', { method: 'POST', body: formData }); // 2. ่ฟ›่กŒ่ฏญ้Ÿณๅ…‹้š† fetch('/voice-test/api/voice-test/generate/clone', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ text: 'ไฝ ๅฅฝ๏ผŒๆˆ‘ๆ˜ฏAIๅ…‹้š†็š„ๅฃฐ้Ÿณ', reference_audio_path: '/tmp/voice_clone_sample.wav', reference_text: 'ๅŽŸๅง‹ๅฝ•้Ÿณๅ†…ๅฎน', seed: 42 }) }); ``` ## ๐Ÿค ่ดก็ŒฎๆŒ‡ๅ— ### ๐Ÿ› BugๆŠฅๅ‘Š - ไฝฟ็”จIssueๆจกๆฟๆไบค่ฏฆ็ป†็š„bugๆŠฅๅ‘Š - ๅŒ…ๅซๅค็Žฐๆญฅ้ชคใ€้ข„ๆœŸ่กŒไธบใ€ๅฎž้™…่กŒไธบ - ๆไพ›็ณป็ปŸ็Žฏๅขƒไฟกๆฏ ### ๐Ÿ’ก ๅŠŸ่ƒฝๅปบ่ฎฎ - ๆ่ฟฐๅŠŸ่ƒฝ้œ€ๆฑ‚ๅ’Œไฝฟ็”จๅœบๆ™ฏ - ่ฏดๆ˜Žๅฏน็Žฐๆœ‰ๅŠŸ่ƒฝ็š„ๅฝฑๅ“ - ๆไพ›่ฎพ่ฎกๆ€่ทฏๅ’Œๅฎž็Žฐๅปบ่ฎฎ ### ๐Ÿ”ง ไปฃ็ ่ดก็Œฎ 1. Fork้กน็›ฎไป“ๅบ“ 2. ๅˆ›ๅปบๅŠŸ่ƒฝๅˆ†ๆ”ฏ (`git checkout -b feature/amazing-feature`) 3. ๆไบคๆ›ดๆ”น (`git commit -m 'Add amazing feature'`) 4. ๆŽจ้€ๅˆ†ๆ”ฏ (`git push origin feature/amazing-feature`) 5. ๅˆ›ๅปบPull Request ## ๐Ÿ“ž ่”็ณปไธŽๆ”ฏๆŒ ### ๐Ÿ‘จโ€๐Ÿ’ป ้กน็›ฎๅ›ข้˜Ÿ - **็ ”็ฉถ็”Ÿ**๏ผš[ๆกƒ้‡‘ๅจ˜] - **ๆŒ‡ๅฏผ่€ๅธˆ**๏ผš[ๅง“ๅ] - **็ ”็ฉถๆœบๆž„**๏ผš[ๆœบๆž„ๅ็งฐ] ### ๐Ÿ“ง ่”็ณปๆ–นๅผ - **้‚ฎ็ฎฑ**๏ผšproject@example.com - **ๆŠ€ๆœฏๆ”ฏๆŒ**๏ผšsupport@example.com ### ๐Ÿ“š ๅญฆๆœฏๅผ•็”จ ๅฆ‚ๆžœๆœฌ้กน็›ฎๅฏนๆ‚จ็š„็ ”็ฉถๆœ‰ๅธฎๅŠฉ๏ผŒ่ฏท่€ƒ่™‘ๅผ•็”จ๏ผš ```bibtex @mastersthesis{emotional_voice_cloning_2025, title={่žๅˆๆƒ…ๆ„Ÿ็š„่ฏญ้Ÿณๅ…‹้š†ๆŠ€ๆœฏ็ ”็ฉถๅŠๅ…ถๅœจๅนผๅ„ฟๅ›ญ่ฏญ่จ€ๆ•™่‚ฒไธญ็š„ๅบ”็”จ}, author={[ๆกƒ้‡‘ๅจ˜]}, year={2025}, school={[ๅŽไธญๅธˆ่Œƒๅคงๅญฆ]}, type={็ก•ๅฃซๅญฆไฝ่ฎบๆ–‡} } ``` ## ๐Ÿ“„ ่ฎธๅฏ่ฏ ๆœฌ้กน็›ฎๅŸบไบŽ [MIT License](LICENSE) ๅผ€ๆบๅ่ฎฎใ€‚ ---
**๐ŸŒŸ ่ฎฉๆฏไธชๅญฉๅญ้ƒฝ่ƒฝ"ๅฌ่ง"่‡ชๅทฑ็š„ๅฃฐ้Ÿณ๏ผŒ็ˆฑไธŠ่ฏญ่จ€ๅญฆไน  ๐ŸŒŸ** *ยฉ 2025 ่žๅˆๆƒ…ๆ„Ÿ็š„่ฏญ้Ÿณๅ…‹้š†ๆŠ€ๆœฏ็ ”็ฉถ้กน็›ฎ. All rights reserved.*