
Pythonã䜿ã£ãŠå°å£°ãèªã¿äžãã«å¹ãæ¿ããŠã¿ã (pyannote.audio x whisper x VOICEVOX x OpenCV x SpeechRecognition x wave x FFMPEG)
ããã«ã¡ã¯Rcatã§ãã
ä»åã¯ãã¡ãã®èšäºã§ç޹ä»ããŠããäœåã®è§£èª¬çãšãªããŸãã
å
·äœçã«ã¯ãå°å£°ã§åé²ããåç»ãå
šèªåã§èªã¿äžãã®å®æ³ã«å€æããŠããŸãããŒã«ã§ãã
ãããPythonããããªã©ã€ãã©ãªããã£ãŠãçµã¿åããæ¬¡ç¬¬ã§äœã§ãã§ããŠããŸããŸããã
ããã§ã¯äžèº«ã«ã€ããŠèŠãŠãããŸãããã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
https://note.com/rcat999/n/nb6a601a36ef5
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ãã
ä»çµã¿
ãŸããæ¬äœã«ã¯ã©ã®ãããªèŠçŽ ãå«ãŸããŠããã®ã説æããŠãããŸããæ°ã«ãªããšããã ãèŠãŠããã ãã®ãOKã
å
·äœçãªåŠçæé ãšããŠã¯æ¬¡ã®ããã«ãªããŸãã
å šäœã®åŠçæé
åŸãã«ã«ãã³æžãã§æžããŠããã®ã¯äœ¿ãã©ã€ãã©ãªããœãããŠã§ã¢ã§ãã
åç»ããé³å£°ããã¿ãã(FFMPEG)
å¹ãæ¿ãã«å¿ èŠãªå°å£°é³å£°ããŒã¿ãå ¥æé³å£°ã®ååŠç(FFMPEG)
æåèµ·ããã®ç²ŸåºŠãäžããããã«ãã€ãºé€å»ãè¡ããŸãã
æç¡ã§ã¯ããªãå·®ããããŸãã
ãã¡ãã§ã©ã®çšåºŠå·®ãããã®ã玹ä»ããŠããŸããåèã«ããŠãã ããã
https://note.com/rcat999/n/n83bdd0d151ffé³å£°ã話è åé¢(pyannote.audio)
äžèšäžèšã®çºé³åºéãå ¥æãã©ã®åèªãäœç§éã§è©±ãã°ããããšããæ å ±ãé³å£°ããŒã¿åå²(wave)
é³å£°ããŒã¿ãçºé³åºéããšã«åè§£ãæåèµ·ãã(whisper or speech_recognition)
åå²ããé³å£°ããŒã¿ã䜿ã£ãŠåºéããšã«æåèµ·ãããè¡ããŸãã
èªåã®ããœã³ã³ã§èµ·ããå Žåã¯whisperã
ãªã³ã©ã€ã³ã§èµ·ããå Žåã¯speech_recognitionãLLMã«ããæ ¡æ£(Dify & Gemini)
èªã¿äžããœããã¯èŸæžãå ¥ããŠããã°èªåçã«ãã®ããã«èªãã§ãããŸãããæã§å ¥ããŠããã®ããªãã仿ãããªãã§ãããã
ããã¯ããã¹ãçæAIã®åã䜿ããŸããããé³å£°èªã¿äžã(VOICEVOX)
æåèµ·ããããæååãVOICEVOXã§èªã¿äžããŸããé床調æŽ
ãã£ã©ã«ãã£ãŠçºé³é床ãéãã®ã§ãçºé³åºéã«åãŸãããã«é床ã調æŽããªããçæããŸãã
ããããããšã§å°å£°ãšã®æŽåæ§ããšããŸãã
é£çµ(wave)
èªã¿äžãã§åºæ¥äžãã£ããã¡ã€ã«ã1ã€ã®ãã¡ã€ã«ã«é£çµããŸãã
å ·äœçã«ã¯ç©ºã®wavãã¡ã€ã«ãçæããçºé³åºéã«å¿ããŠäžæžãããŠãããŸããããŒãž(FFMPEG)
å ã®åç»ããŒã¿ã«å床ã¢ã¿ããããã°å¹ãæ¿ãå®äºãããããã®è¿œå (OpenCV & Pillow)
ãã£ããæåèµ·ãããããŠããã®ã§ãOpenCVã䜿ã£ãŠåç»ã«ãããããæžã蟌ã¿ãŸããæ¥æ¬èªã¯é察å¿ãªã®ã§ããã®éšåã¯Pillowã䜿ãããšã§è£ããŸãã
䜿ãã©ã€ãã©ãªããœãããŠã§ã¢ã®ç޹ä»
ãœãããŠã§ã¢
FFMPEG
åç»ãé³å£°ãã¡ã€ã«ã®åŠçãè¡ããããŒã«ã§ãã
ä»åã¯åç»ããé³å£°ãåãé¢ãããããã€ãºç¶æ³ãè¡ã£ããããã¡ã€ã«ã®ãã©ãŒããã倿ãè¡ã£ããããã®ã«äœ¿ã£ãŠããŸããVOICEVOX
ããã¹ãèªã¿äžããœããã§ãã
1ã€ã®ãœããã®äžã«30ãã£ã©ä»¥äžãå«ãŸããŠãããå€åœ©ãªå£°ã§èªã¿äžããè¡ããŸãã
宿 ãWebãµãŒããŒãªã®ã§ãPythonããAPIãå©ãã«è¡ããã®ãéåžžã«ããããããæè¿ã®ã¢ããããŒããããããããªãããçæé床ãã ãã¶æ©ããªã£ãå°è±¡ã
å ¬åŒ : https://voicevox.hiroshiba.jp/
ã©ã€ãã©ãª
pyannote.audio
話è åé¢ãè¡ãã©ã€ãã©ãªã§ãã
話è åé¢ã¯ãæåèµ·ãããªã©ãè¡ããã«å ¥åãããé³å£°ãã¡ã€ã«ã§èª°ããã€åã£ãã®ããšããæ å ±ãåæããææ³ã®ããšã®ããã§ããwhisper
OpenAI補ã®é³å£°èªèAIã§ãã
ãã¡ãã«å®æ³ã®é³å£°ãå ¥åããŠããã¹ãã«å€æããŸãã匷åãªGPUãå¿ èŠã§ããSpeechRecognition
ãã¡ããé³å£°èªèã®ã©ã€ãã©ãªã§ãã
æ§ã ãªãµãŒãã¹ã«å¯Ÿå¿ããŠããããã§ããããšããããç°¡åãããªGoogleã䜿ã£ãŠããŸãããªã³ã©ã€ã³ã§å€æã§ããã®ã§ãæ§èœã®äœãããœã³ã³ã§ãæåèµ·ãããã§ããã®ãç¹åŸŽã§ããwave
wavãµãŠã³ããã¡ã€ã«ãèªã¿èŸŒãã ããæžã蟌ãã ãããã®ã«äœ¿ãæšæºã©ã€ãã©ãªã§ãã
ä»åã¯è©±è åé¢ã§åŸãæ å ±ãå ã«åºéããšã«ãã©ãã©ã«ããã®ãšãæåŸã«1ã€ã®ãã¡ã€ã«ã«ããŒãžããããã«äœ¿ããŸããOpenCV
èšãããšç¥ããåç»ç·šéã©ã€ãã©ãªã§ãã
ãã¡ãã䜿ã£ãŠåç»ã®äžãããã¬ãŒã ãèªã¿åããããããã®æžã蟌ã¿ãªã©ãè¡ããŸããPillow
ãã¡ããèšãããšç¥ããç»åç·šéã©ã€ãã©ãªã§ãã
ç»åã«æ¥æ¬èªã®ããã¹ããåã蟌ãããã«ä»åã¯äœ¿ããŸãã
å šäœã®ãœãŒã¹ã³ãŒãã«ã€ããŠ
ãããã«1000è¡ä»¥äžã®ãœãŒã¹ã³ãŒãå
šãŠã解説ã¯ããŸããã
ããã§ã¯ãã€ã³ããšãªãç®æã ãã®è§£èª¬ãè¡ããŸãã
ãœãŒã¹ã³ãŒãå šäœã¯ãã¡ãã®èšäºã§é åžãè¡ã£ãŠããŸãã®ã§ã颿°ãã¯ã©ã¹å士ã®é¢ä¿æ§ãªã©ã詳现ã«ç¥ããã人ã¯é åžãåããŠãã ããã
ã¹ããã1 åç»ããé³å£°ãåé¢ãã
æ¬äœã®å§ãŸãã¯é³å£°ããŒã¿ã®å
¥æã§ãã
ãŸãã¯äžçªæã£åãæ©ã"宿³ããªããé²ç»ãè¡ã"ãšããææ³ã§åé²ãããå°å£°å
¥ãåç»ãåŠçããåæãšããŸãã
ãã®ããããŸãã¯åç»ããé³å£°ãåãé¢ãå¿
èŠããããŸãã
ãœãŒã¹ã³ãŒã
ãã¡ããåç»ãåãé¢ãããã®ãœãŒã¹ã³ãŒãã§ãã
ã¡ãã£ãšã¡ã¢æžãçšã®ã³ã¡ã³ããå«ãŸããŠããã®ã§ããã¡ãã¯èŠãªãã£ãããšã«ããŠãã ããã

ãšã¯ããããã£ãŠãããšã¯åçŽã§620è¡ç®ãã5è¡ã§æžãã§ããŸãã
ãŸãã¯subprocessã©ã€ãã©ãªã䜿ã£ãŠå€éšã®ããã°ã©ã ãèµ·åããããšããŠããŸããèµ·åããå
容ã¯ffmpegã§ãã
æ®éã®ã³ãã³ãã©ã€ã³ã«ãããšãããªæã
'ffmpeg -i å
¥åããŒã¿ -q:a 1 -map a -f wav - -map 0:v ãããªã®åºåå
'ãã®å
容ã¯å
¥åãããåç»ãé³å£°ãšç¡é³åç»ã«åé¢ãããšããæå³ã§ãã
ãŸããç¹åŸŽãšããŠé³å£°ã®åºåå
ã¯æšæºåºåã«ããŠããŸãã
ããããããšã§ããã¡ãã¡ãã¡ã€ã«ãä»ãããšãªãããã€ãIOã§ããŒã¿ãæ±ãããšãã§ããŸãã
ã¡ãªã¿ã«ãã®æ¹æ³ã ãšããŒã¿ã8ãã€ãã ãããããªããšã«ãªãã®ã§ãããã ãã¯æ³šæã詳ããã¯ãã¡ãã
ã¹ããã2 ååŠç
ãœãŒã¹ã³ãŒã
次ã«ååŠçã®ãã€ãºé€å»ã®å·¥çšã§ãã
åå·¥çšããŒã¿ãã€ãIOãæž¡ããŠãã€ãºãé€å»ããŸãã

ãšã¯ããããã£ãŠãããšã¯ååãšåãã§FFMPEGã䜿ã£ãŠãã€ãºé€å»ããããŠããŸãã
ãã€ãºé€å»ã®ã³ãã³ããçš®é¡ãšå¹æã¯ä»¥äžã®èšäºãã確èªãã ããã
ãã¡ãã§ã®ç¹åŸŽã¯ãã¡ã€ã«ã®å
¥åãæšæºå
¥åã«ããŠããŸã£ããšãããšããã§ãã
æåã®ã¹ãããã§ã¯ãŸã åç»ã®ãã¡ã€ã«ã ã£ãã®ã§ãã¡ã€ã«ãèªã¿èŸŒãã§ããŸããããæ¢ã«ãã€ãIOã«åã蟌ãã§ããã®ã§ããããæšæºå
¥åããŠèµ·åããŠããŸãããã¡ããåºåããã€ãIOã§ãã
ããŒã¿ã®ãšã©ãŒèšæ£
次ã«ä»åã®ããã«æšæºåºåã䜿ã£ãå Žåã®ã¿ã«èµ·ããåé¡ç¹ãèšæ£ããŸãã
å
·äœçã«ã¯ããŒã¿ã®äžã§ãã¡ã€ã«ãµã€ãºãæžã蟌ãŸããé åã«å¯ŸããŠ0xFFãæžã蟌ãŸãããšããçŸè±¡ã§ãããã®ãŸãŸã§ãåçã§ããã®ã§å€§äžå€«ããªãšæã£ããã§ãããwaveã©ã€ãã©ãªã䜿ã£ã远å ã®åŠçãè¡ãããšããããšã©ãŒã«ãªã£ãŠããŸããŸããã
詳ããã¯ãã¡ãã®èšäºã§ç޹ä»ããŠããŸãã
ã¹ããã3 話è åæãè¡ã
é³å£°ããŒã¿ã®åŠçãå®äºããããæ¬¡ã¯åã£ãŠããåºéã®æ€åºã§ãã
ãã®ãŸãŸã®ãã¡ã€ã«ãæåèµ·ããããããšãã§ããŸããããããèªã¿äžããã ãã§ã¯åç»ãšã®ã¿ã€ãã³ã°ããããŠããŸããŸããã
ãã®ãããçºèšããšã«åºåã£ãŠäœç§ããã©ããããåã£ãã®ãïŒãšããæ
å ±ãäºåã«å
¥æããŸãã
whisperã©ã€ãã©ãªã¯æåèµ·ãããšåæã«ããã®èŸºãã®æ
å ±ãåºåããŸããã1ç§åäœã§ããè¿ããªãå Žåãããã®ã§ãåæã¯å¥éè¡ãããšãšããŸããã
ãŸããäºå®ã§ããã話è åé¢ã€ãŸãã誰ããšããæ å ±ã䜿ãã°è€æ°ã®ãã£ã©ã¯ã¿ãŒã§ã®èªã¿äžããå¯èœã«ãªããšãèããŠããŸãã
ãœãŒã¹ã³ãŒã
ãŸãã¯ååéšã§ãã
ãã®èŸºã¯å
¬åŒã®ãšããã«æžããŠãããœãŒã¹ã³ãŒããšã»ãŒã»ãŒäžç·ã§ãã
ãã€ãIOã䜿ã£ãŠããŒã¿ãæž¡ãããã£ãã®ã§ãäºåã«èªã¿èŸŒã¿ãªã©ãåãŸããŠããŸãã

äžçªäžã®Hookã¯é²æã衚瀺ããã®ã«äœ¿ããŸããçããã°ããã§ãããé·ããã°ãã€çµãããããããªãã®ã§ãã£ãæ¹ããããšæããŸãã
ãŸãããã®ã©ã€ãã©ãªã§ãããäºåã«äœäººã話ããŠããã®ããšããæ
å ±ãäžããããšãã§ããŸãã
ãã®å ŽåãåŠçãå§åçã«é«éã«ãªãã®ã§ãã§ããã°æå®ããæ¹ãããã§ããç¹ã«ä»åã®å®æ³ãªããŠ1人ã§åã£ãŠãã ããªã®ã§1ãšå
¥ããã ãã§ããã§ãã
次ã«åŸåéšã§ãã
ãã¡ãã¯åæçµæãåãåã£ãŠæŽçããæ®µéã§ãã

ãã®å
ã§äœ¿ãããã«ãäžæŠèŸæžã«ããŒã¿ããŸãšãçŽããŠããŸãã
åŸãããæ
å ±ã¯ã誰ã話ããã®ãïŒãã€ãã話ããã®ãïŒãã€ãŸã§è©±ããã®ããäœç§è©±ããã®ãã§ãã
ãŸãã誰ãã«é¢ããŠã¯ãªããæååã§åºãŠããã®ã§ãæ£èŠè¡šçŸã䜿ã£ãŠæ°åã ãã«çŽããŠããŸãã
åŸã¯ããããããªãã®ã§ããããªãã0.1ç§ã®åºéããã¹ã£ãå€å®ã«ãªã£ãŠããæãªã©ãããããã¡ããæåèµ·ãããã§ããªããã°èªã¿äžããã§ããªãã®ã§ããããã£ãåºéã¯ãªãã£ãããšã«ããŠããŸãã
ã¹ããã4 é³å£°ãåºéã«å¿ããŠåãã
åæãæžãã ãšããã§ã次ã¯åæãšæåèµ·ããã®æŽåæ§ãåãããã«äºåã«ããŒã¿ãåå²ããŸãã
åå²åŸã¯ä»¥äžã®ãããªæãã«ãªããŸãã

ãœãŒã¹ã³ãŒã
ä»åã®åŠçã«çŽæ¥é¢ä¿ã®ãªãéšåã¯å¡ãã€ã¶ããŠãããŸããããŒã«ã®å šäœã®åäœã«ã¯å¿ èŠãªéšåã§ãã®ã§ãæ°ã«ãªãæ¹ã¯ããŠã³ããŒãããŠã¿ãŠãã ããã

é³å£°ã®åŠçãå§ãŸãã®ã¯539è¡ç®ããã§ãã
ããã§éããŠããã®ã¯å€§å
ã®å°å£°ã ãã®é³å£°ãã¡ã€ã«ã§ãã
ãã®æ¬¡ã«Forã«ãŒãã§åºåã£ãŠããŸãããã«ãŒãã«ãããŠããã®ã¯åååŸãåºéã®æ
å ±ã§ãã
ãã®äžã§åºéãããã¬ãŒã ãèšç®ããäœãã¬ãŒã ç®ããäœãã¬ãŒã ãŸã§ãæããšã£ãŠä¿åãããšãã£ãåŠçãç¹°ãè¿ããŠããŸããã¡ãªã¿ã«äžã§ãã£ãããŒã¿ã®ãšã©ãŒèšæ£ãããŠããªãå Žåãããã§ãšã©ãŒã«ãªããŸãã
ã¹ããã5 é³å£°èªèã§æåèµ·ãããè¡ã
ããŠãåå¥ã®é³å£°ããŒã¿ãåºæ¥äžãã£ããšããã§ãããããæåãèµ·ãããŸãã
æåèµ·ãããããã¡ã€ã³ã®é¢æ°ããã¡ãã§ããä»åãé¢ä¿ãªãç®æã¯ããããããããã«äŒããŠãããŸãã
ä»åã¯2ã€ã®ã©ã€ãã©ãªãéžæã§ããããã«ããŠããã®ã§ããŸãã¯åå²ããå§ãŸããŸãã
ãœãŒã¹ã³ãŒãã¡ã€ã³

ãœãŒã¹ã³ãŒãwhisperã®å Žå
èªåã®ããœã³ã³ã§æåèµ·ãããè¡ãwhisperã®å Žåã¯ä»¥äžã®ããã«ãªã£ãŠããŸããæ£çŽã³ã¡ã³ããããªãã§ããã
äž»ã«ã¡ã¢æžããGPUã®äœ¿çšã管çããããã«ã¯ã©ã¹ã«ããŠããŸããããšã¯ã€ã³ã¹ã¿ã³ã¹ã§ã¢ãã«ãèªã¿èŸŒã¿ã£ã±ãªãã«ã§ããã®ã§ãåŸã®äœæ¥ããããããšããã®ããããŸãã

ãŸãã€ã³ã¹ã¿ã³ã¹æã«AIãèªã¿èŸŒãã§ããŸãã
ãã®æã«ã¢ãã«ã®å€§ãããæå®ããããšãã§ããã®ã§ã粟床ãšèªåã®ããœã³ã³ã®æ§èœãšçžè«ããŠæ±ºããŠãã ãããã¢ãã«ã®çš®é¡ãå¿
èŠãªæ§èœã¯ã³ã¡ã³ãã«æžããŠãããŸãã
ãããŠããã¹ãã®çæã§ãã
ããã§ã¯wavãã¡ã€ã«ã®ãã¹ãæž¡ããšæåãšããŠè¿ããããªé¢æ°ã«ããŠããŸããã¡ãªã¿ã«ããããã³ã¡ã³ããæžããŠãããŸããããããwhisperãè¿ããŠããæ»ãå€ã«ãªããŸãã
ã¡ã€ã³ã®é¢æ°ã§"text"ãšããããŒãæãåºããŠããã®ã¯ããããçç±ããããŸãã
ãœãŒã¹ã³ãŒãspeech_recognitionã®å Žå
ãªã³ã©ã€ã³ã§æåèµ·ãããããå Žåã®ãœãŒã¹ã§ãã
ãã¡ãã調ã¹ãã°ããåºãŠãããããªãœãŒã¹ã®ãŸãŸã§ããéããšããã°ãã€ãIOã䜿ã£ãŠãããšããã§ããããïŒ

倧ããªç¹åŸŽãšããŠã¯ãèªèã«ãããåã«æåŸã«1ç§éç¡é³åºéã远å ãããšããåŠçãããŠããŸãã
ããã¯speech_recognitionã©ã€ãã©ãªã®ãããªã®ãrecognize_googleã¡ãŸããç¹æã®åäœãªã®ãã¯åãããŸãããããªããæåŸã®æ¹ã¯èªèã§ããªããšãã仿§ããããŸãã
ãã®ãããåã£ãŠããé³å£°åºéããã¿ãªã«åºåã£ããã¡ã€ã«ãå
¥åãããšãåœç¶æåŸã®æ°æåãæåèµ·ãããããªããªããŸãã
ããã§ã¯å°ãã®ã§ãç¡é³åºéã1ç§é远å ããŠããæãããšããããšãããŠããŸãã
ãŸããããŒã¿ãè¿ãæã®åœ¢åŒããŠã£ã¹ããŒã®æ¹ã«åãããŠããŸãã
ãŸãããã¹ãããèªãŸãªãã®ã§ããã¹ãã®ããŒãæã£ãèŸæžã«ããã ããªãã§ããã
ã¹ããã6 æ ¡æ£
æªå®è£
ã¹ããã7 èªã¿äžã
æåèµ·ãããæžãã ããããããèªã¿äžãã§ãã
ãœãŒã¹ã³ãŒãã¡ã€ã³
ãã¡ããé³å£°åæãè¡ãããã®ã¡ã€ã³é¢æ°ã§ãããã®åãã¹ããã3ããã¡ããé¢ä¿ã®ãªãèšè¿°ã¯äžæŠäŒããŠãããŸãã

ãŸããæåã«ãã£ã©ã¯ã¿ãŒãããã¹ãã¹ããŒããèšç®ããŸãããã£ã©ã¯ã¿ãŒã«ãã£ãŠããã¹ãé床ã¯ããªãéãããã§ãã
ãã®æ
å ±ãå
ã«ãæåæ°ããèªã¿äžãã«ãããæéãäºæ³ããçºé³åºéå
ã«åãŸãé床åçãèšå®ããŸãã
ãããŠèªã¿äžãçšããŒã¿ã®äœæã§ãã
å
ã«èŸæžã§èªã¿äžãçšã®ããŒã¿ãäœæããŸãããã®äžã«ã¯èªã¿äžããããã¹ããã©ã®ãã£ã©ã¯ã¿ãŒã䜿ãããã¹ããŒãåçåã³é³å£°é·ãã®ã¿ãŒã²ããã®æ
å ±ãå«ãŸããŸãã
æåŸã«èªã¿äžã颿°ãå®è¡ããŠãèªã¿äžãã®é³å£°ããŒã¿ãäœæããŸãã

ã¡ãªã¿ã«ãã€ã¹ããã¯ã¹ã¯ã¢ãžã¥ãŒã«èªäœãåããŠããã®ã§ãå¥ã§ã€ã³ããŒãããŠããŸãã
ãœãŒã¹ã³ãŒãVOICEVOX
ã¡ã€ã³é¢æ°ããåŒã³åºããŠããèªã¿äžã颿°ã¯æ¬¡ã®éãã§ãã
ãã®é¢æ°ã¯ãŸãšããŠçæããããšãåæãšããŠããã®ã§ãèŸæžåœ¢åŒã§èªã¿äžãããŒã¿ãå
¥åããŠããå¿
èŠããããŸãã
äžã®æ¹ã«ã³ã¡ã³ãã§æžããŠãããŸããããã®åœ¢åŒã§å
¥åããããã«ã¡ã€ã³é¢æ°ã§ã¯ããŒã¿ãäœã£ãŠããŸããã

ã¡ãªã¿ã«ãããã§ã¯ãŸãšãã§çæããéœåäžãé³å£°ãã¡ã€ã«ãä¿åããã®ãã¹ãè¿ããããªããæ¹ãããŠããŸãã
reportãšãã倿°ããããŸããããããVOICEVOXãçæããé³å£°ãã¡ã€ã«ãªã©ã®æ
å ±ãå«ãã ããŒã¿ã«ãªããŸãã
ã¡ãªã¿ã«ã¬ããŒãã®äžèº«ã¯ãããªæãã§ãã
ã©ãã«ä¿åããããé³å£°ã®é·ããå
容ãã¿ãŒã²ããããã®å·®åãå«ãŸããŠããŸãã

ãœãŒã¹ã³ãŒã VOICEVOX èªã¿äžããªã¯ãšã¹ãé¢é£
次ã«å
·äœçã«ã©ããã£ãŠçæãããŠããã®ããšãããšãããèŠãŠãããŸãããã
çæã«äœ¿ã£ãŠããã®ã¯æ¬¡ã®é¢æ°ã§ãã
VOICEVOXã䜿ã£ãèªã¿äžãã«ã¯2ã€ã®ã¹ãããããããŸãã
1ã€ç®ãããã¹ãã®åæãšé³å£°åæçšã®ããŒã¿äœæã§ãããã®èŸºã¯å
¬åŒã®APIãªãã¡ã¬ã³ã¹ã確èªããŠããã ããæ¹ããããããããŸãããããŸããæåã«èªã¿äžããããã¹ããåæããŠãèªã¿äžãçšã®ç¬Šå·ã«å€æããŸãã
å ·äœçã«ã¯æå®ãããURLã«èªã¿äžãããããã¹ãããã¹ãã§éãã°å¿ èŠãªæ å ±ãè¿ã£ãŠããä»çµã¿ã§ãã

ããããããªããšæãã®ã§ãå®éã®å¿çãèŠãŠã¿ãŸãããã
ãã®ã¢ãžã¥ãŒã«ã¯æåã§ãå®è¡ã§ããã®ã§ãå®è¡ãããšä»¥äžã®ãããªçµæãåŸãããŸã(printè¡ã®ã³ã¡ã³ããè§£é€ããå Žå)ã
import voicevox as V
v = V.VOICEVOX()
v.CreateWave("ãããããã",Cid=8,Play=True)
{
"accent_phrases": [
{
"accent": 1,
"is_interrogative": false,
"moras": [
{
"consonant": "n",
"consonant_length": 0.046383969485759735,
"pitch": 5.892535209655762,
"text": "ã",
"vowel": "e",
"vowel_length": 0.0923309400677681
},
{
"consonant": "k",
"consonant_length": 0.05872572213411331,
"pitch": 5.988620758056641,
"text": "ã³",
"vowel": "o",
"vowel_length": 0.08133900910615921
}
],
"pause_mora": null
},
{
"accent": 3,
"is_interrogative": false,
"moras": [
{
"consonant": "k",
"consonant_length": 0.052951984107494354,
"pitch": 5.742798328399658,
"text": "ã«",
"vowel": "a",
"vowel_length": 0.07227755337953568
},
{
"consonant": "w",
"consonant_length": 0.04524584859609604,
"pitch": 5.88362979888916,
"vowel": "a",
"vowel_length": 0.06538953632116318
},
{
"consonant": null,
"consonant_length": null,
"text": "ã€",
"vowel": "i",
"vowel_length": 0.15184266865253448
},
{
"consonant": null,
"consonant_length": null,
"pitch": 5.94594669342041,
"text": "ã€",
"vowel": "i",
"vowel_length": 0.11915982514619827
}
],
"pause_mora": null
}
],
"intonationScale": 1.0,
"kana": "ã'ã³/ã«ã¯ã€'ã€",
"outputSamplingRate": 24000,
"outputStereo": false,
"pauseLength": null,
"pauseLengthScale": 1.0,
"pitchScale": 0.0,
"postPhonemeLength": 0.1,
"prePhonemeLength": 0.1,
"speedScale": 1.0,
"volumeScale": 1.0
}ãããèŠãéããçºé³ã«å¿
èŠãªçްããªæ
å ±ãå
¥ã£ãŠããããšãåãããŸãã
ãã®æ
å ±ãçæããã®ãã¹ãããã®1ãšãªããŸãã
次ã«ãªãã·ã§ã³ã®å€æŽã§ããäžçªäžã®ãšããã«"speedScale"ã"prePhonemeLength"ãšãã衚èšãããã®ããããã§ããããïŒ
ããã¯ãã®ãŸãŸè©±ãéããåºåãã¡ã€ã«ã®ç¡é³åºéãæå®ãããã®ã§ãã
ããã調æŽããŠãã¡ã€ã«ã®é·ããåãããŸããåœç¶ã§ãããç¡é³åºéã¯ãªãã§ãã
ããã¯èŸæžã®ããŒãçŽæ¥ç·šéããŠè¡ã£ãŠããŸãã
次ã«åŸåã®èªã¿äžãéšåã§ãã
ããã§ã¯ãå
ã»ã©çæããèªã¿äžãæ
å ±ããã¹ãããããšã§ãèªã¿äžããããé³å£°ã®ãã€ããªãåŸãããšãã§ããŸãã
ããããšãšããŠã¯ãããªã«é£ãããªããå
ã»ã©ç·šéããæ
å ±ããªã¯ãšã¹ãããã£ã«ãã£ã€ããŠãã¹ãããã ãã§ãã
ãã ããåãããã¹ãã§ãäœåºŠãçæããå¯èœæ§ãããã®ã§ããªã¯ãšã¹ãã®éšåã ã颿°ãåããŠããŸãã
ãšããã®ããããæåæ°ãã倧äœã®é床ãèšç®ã§ãããšããŠãã©ãããŠãèªã¿äžãå
šäœã®é·ãããããããšã¯ãããŸããæŒ¢åãå€ãã£ãããã²ãããªãããªãã£ãããè±èªãæ··ãã£ãŠãããããã°ããã¯åœããåã§ããã

ãšããããã§ããã®äžã®ã«ãŒãã§ã¯èªã¿äžããããŒã¿ã®é·ããååŸããŠãã¿ãŒã²ããã§æå®ãããé·ããšåèŽãããã©ããã確èªããŠããŸãã
ããåããªãå Žåãã©ã®ããããããŠããã®ã確èªããŠé床ã調æŽããåŸãããäžåºŠææŠããŸãã
ã¡ãªã¿ã«ãŽã£ããã¯çµ¶å¯Ÿã«åããªãã®ã§ãããã©ã«ãã§ã¯10%ã®é·ãéããŸã§ã蚱容ãããŠããŸãã
ãŸããããã§ãäŒããªãããšã¯ããã®ã§ãã ããã6åã»ã©èšç®ãçŽããŠãç¡çãªãç¡çãªããšãå€ãã®ã§6åã§æã¡æ¢ãã§ãã詳ããèšç®éšåã«ã€ããŠã¯ããŠã³ããŒãã«ããŠãããŸãã
ãããã®æé ãèžãã§èªã¿äžããè¡ããŸãã

ã¹ããã8 é£çµ
ããŠãèªã¿äžãã®é³å£°ãåºæ¥äžãã£ãããæ¬¡ã¯å šãŠãé£çµããŠ1ã€ã®é³å£°ã«æ»ããŸãã
ãœãŒã¹ã³ãŒãã¡ã€ã³
ãã¡ãããã®ã¡ã€ã³é¢æ°ã§ãããã¡ããé¢ä¿ã®ãªãç®æã¯äŒããŠãããŸãã

ãã¡ãã§ã¯ãŸãå°çšã®ã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹ããŠç©ºã®ãã¡ã€ã«ãäœã£ãŠããŸãã
ãã®åŸãèªã¿äžãããã¡ã€ã«ãã¬ããŒããèªã¿åããªããé æ¬¡æ¿å
¥ããŠãããšããæãã§ããããã§èšãã¬ããŒããšã¯äžçªæåã®è©±è
åæã®ããšã§ãããã®æãäœç§ãã話ãå§ãããšããæ
å ±ãååŸããŸããããïŒããã¯ããã§äœ¿ããã§ãã
ãœãŒã¹ã³ãŒã 空ã®WAVæ¿å ¥ã¯ã©ã¹
äœæããæ¿å
¥çšã®ã¯ã©ã¹ã¯ãã¡ãã§ãã
ã€ã³ã¹ã¿ã³ã¹æã«å
šäœã®é·ããæ±ºããŠç©ºã®ããŒã¿ãäœæããŸãã
ãã®æããã¡ã€ã«ãäžç·ã«æž¡ãå¿
èŠããããŸããããã¯ãã®åŸæ¿å
¥ããããŒã¿ãšãã©ãŒããããåãããããããã®æ
å ±ãååŸããããã§ãã

ã€ã³ã¹ã¿ã³ã¹ãçµãã£ããInsertã䜿ã£ãŠé 次æå®ããç§æ°ã®ãšããã«ãã¡ã€ã«ãå
¥ããããšãã§ããŸãã
å
šãŠã®ãã¬ãŒã ãæ¿å
¥ãçµãããwaveã©ã€ãã©ãªã䜿ã£ãŠä¿åããã°1ã€ã®ãã¡ã€ã«ã«ãŸãšããããšãã§ããŸãã
ãããŸã§ã§å¹ãæ¿ããé³å£°ããŒã¿ã®äœæãçµäºããŸããã
ã¹ããã9 åç»ãšã®åçµå ãããããæ·»ããŠ
ããŠãæåŸã®ã¹ãããã§ãã
æåã®ã¹ãããã§æŸçœ®ããŠããç¡é³ã®åç»ãšå¹ãæ¿ããé³å£°ãããäžåºŠãã£ã€ããŸãã
ãšã¯ããããã®ã¹ãããã¯ç¹ã«é£ããããšã¯ãããŸããããªã«ãFFMPEGããã£ãŠãããã®ã§ããã
ãœãŒã¹ã³ãŒãã¡ã€ã³
ãã¡ããã¡ã€ã³ã®ãœãŒã¹ã³ãŒããšãªããŸããä»åãé¢ä¿ã®ãªããšãããäŒããŠãããŸãã

ãã£ãŠããããšã¯ä¿åå
ãã¹ã®äœæãšã³ãã³ãã®å®è¡ã§ãã
FFMPEGã«å¯ŸããŠç¡é³ã®åç»ãšä»åäœã£ãå¹ãæ¿ãé³å£°ãéžæããŸãããŸãããªãã·ã§ã³ã§æ åã«ã¯äžåæãã€ãããªãšãããªãã·ã§ã³ãšäžè¬çãªAACã§é³å£°ãä»ãå ããããã«ãšããèšå®ããããŸãã
æ åã«æãã€ããªãããšã§ãå質ã®å£åãé²ãåŠçã®é«éåãèŠèŸŒããŸãã
ãªããšããã ãã§å¹ãæ¿ãåç»ã宿ããŸããããããã
ãœãŒã¹ã³ãŒã ããããã®å ¥å
å ã»ã©ã®åç»ãäœãåã«ç¡é³ã®åç»ãç·šéããŠãããããå ¥ããå·¥çšãå®ã¯ãããŸãããšããã®ãããã¯ãªãã·ã§ã³ãªã®ã§ãããªãå Žåãããã®ã§ãæé ãšããŠã¯ééã£ãŠããŸããããã¡ããæåŸã®æé ã§ãã
ãŸãã¯ååéšã®ç޹ä»ã§ããåããé¢ä¿ã®ãªãéšåã¯äŒããŠãããŸãã
ããã§ã¯OpenCVã䜿ããŸãã
ç¡é³ã®åç»ãéããå¿
èŠãªããããã£ãååŸããŠãããŸãã
ãŸããåæã«åºåçšã®åç»ãçšæããŸãã

ããããã®èšå®ã§ãã
ããããã¯çžŠæ¹åã®å€§ããã«å¯ŸããããŒã»ã³ããŒãžã§å€§ãããæ±ºããŠããã®ã§ããã®èŸºãèšç®ããŠããŸãã
ãããŠåŸåéšã§ãã
ããã§ã¯åç»ã®ãã¬ãŒã ãèªã¿èŸŒã¿ãªããäžã€äžã€ãããããå»ã¿èŸŒãã§ãããŸãã

ãŸãå¿
èŠãªæ
å ±ã¯ãããããããåºéã«ããã®ãããªãã®ããšãããšããã§ããããã§ã話è
åæã®ããã€ãããã€ãŸã§åã£ãã®ããšããæ
å ±ã䜿ããŸãã
ãã®æ
å ±ãå
ã«ãã¬ãŒã ã¬ãŒãããçŸåšã®ãã¬ãŒã ãããã¹ã£ãŠããåºéã«ããã®ãããªãã®ãã§åå²ãè¡ããŸãã
ããåã£ãŠããåºéã«ããå Žåã¯ãããããå»ã¿èŸŒã¿ãŸãã
ã¡ãªã¿ã«äœèšãªè² è·ããããªãããã«ãå
¥ã£ãæãšæããæãæ€ç¥ããŠããã®æã ãããã¹ããªããžã§ã¯ãã®çæãªã©ãè¡ã£ãŠããŸãã
OpenCVã«ãæåãæžãèŸŒãæ©èœã¯ããã®ã§ãããè±æ°åãã察å¿ããŠããªãã®ã§ãPillowã䜿çšããŠç»åå å·¥ãšããŠæåãå»ãã§ããŸãã
ããã§ãã€ã³ãã«ãªã£ãŠããã®ã"textbbox"ãšããã¡ãœããã§ãã
ãã¡ãã¯ããã¹ããæåããæã«ã©ã®çšåºŠã®é åã«ããã¹ããåºãŠããã®ããèšç®ããã¡ãœããã§ãã
ããã䜿ãããšã§ãç»é¢ã®çãäžäžã«ãããããæžã蟌ãããšãã§ããŸãããŸããåäœã確èªããŠããŸããããé·ãããå Žå1åã ããªãæãè¿ãæ©èœãã€ããŠãŸãã
ã¡ãªã¿ã«ãã®"textbbox"åŸã®ããŒãžã§ã³ãã远å ããããã®ã§ãç§ã®éå»ã®äœåã ãšäŒŒãŠããéãã¡ãœããã䜿ã£ãŠããããšããããŸããææ°ããŒãžã§ã³ã ãšããã¯å»æ¢ãããã®ã§ç«ã¡äžãããªããã§ãããâŠã
AIã«èããŠãããŸã«ãã®å€ãã¡ãœããã®æ¹ã§åçãåºããŠããããšãããã®ã§ãã³ããã§åããªãå Žåã¯ãã®èŸºãåé¡ã«ãªã£ãŠããããšãå€ãã§ãã
å€ãã¡ãœããã¯pillowã®ããŒãžã§ã³9çªå°ãŸã§ååšããŠããŸãã
ãŸãšã
ä»åã¯å
šèªåã§å°å£°ã®å®æ³ãVOICEVOX宿³ã«å€æããããŒã«ã解説ããŸããã
Pythonã¯æ¬åœã«è²ã
ãªã©ã€ãã©ãªãããã®ã§ãã¢ã€ãã£ã¢ãšçµã¿åããæ¬¡ç¬¬ã§äœã§ãã§ããŠããŸããŸããã
ãŸã ããã€ãã€ããããã©ãã€ããããŠããªãæ©èœãããã®ã§ããã£ããã¢ããããŒãããŠãããããªãšæããŸãã
ããã§ã¯ãŸããäŒãããŸãããã