funasr-runtime-deploy-offline-cpu-en.sh 60 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739
  1. #!/usr/bin/env bash
  2. scriptVersion="0.0.2"
  3. scriptDate="20231030"
  4. # Set color
  5. RED="\033[31;1m"
  6. GREEN="\033[32;1m"
  7. YELLOW="\033[33;1m"
  8. BLUE="\033[34;1m"
  9. CYAN="\033[36;1m"
  10. PLAIN="\033[0m"
  11. # Info messages
  12. DONE="${GREEN}[DONE]${PLAIN}"
  13. ERROR="${RED}[ERROR]${PLAIN}"
  14. WARNING="${YELLOW}[WARNING]${PLAIN}"
  15. # Font Format
  16. BOLD="\033[1m"
  17. UNDERLINE="\033[4m"
  18. # Current folder
  19. CUR_DIR=`pwd`
  20. SUDO_CMD="sudo"
  21. DEFAULT_DOCKER_OFFLINE_CPU_EN_LISTS_OSS="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/docker_lists/docker_offline_cpu_en_lists"
  22. DEFAULT_DOCKER_OFFLINE_CPU_EN_LISTS_GIT="https://raw.githubusercontent.com/alibaba-damo-academy/FunASR/main/runtime/docs/docker_offline_cpu_en_lists"
  23. DEFAULT_DOCKER_IMAGE_LISTS=$DEFAULT_DOCKER_OFFLINE_CPU_EN_LISTS_OSS
  24. DEFAULT_FUNASR_DOCKER_URL="registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr"
  25. DEFAULT_FUNASR_RUNTIME_RESOURCES="funasr-runtime-resources"
  26. DEFAULT_FUNASR_LOCAL_WORKSPACE=${CUR_DIR}/${DEFAULT_FUNASR_RUNTIME_RESOURCES}
  27. DEFAULT_FUNASR_CONFIG_DIR=""
  28. DEFAULT_FUNASR_CONFIG_DIR_BAK="/var/funasr"
  29. DEFAULT_FUNASR_CONFIG_FILE="${DEFAULT_FUNASR_CONFIG_DIR}/config"
  30. DEFAULT_FUNASR_SERVER_CONFIG_FILE="${DEFAULT_FUNASR_CONFIG_DIR}/server_config"
  31. DEFAULT_FUNASR_PROGRESS_TXT="${DEFAULT_FUNASR_CONFIG_DIR}/progress.txt"
  32. DEFAULT_FUNASR_SERVER_LOG="${DEFAULT_FUNASR_CONFIG_DIR}/server_console.log"
  33. DEFAULT_FUNASR_WORKSPACE_DIR="/workspace/models"
  34. DEFAULT_DOCKER_PORT="10095"
  35. DEFAULT_PROGRESS_FILENAME="progress.txt"
  36. DEFAULT_SERVER_EXEC_NAME="funasr-wss-server"
  37. DEFAULT_DOCKER_EXEC_DIR="/workspace/FunASR/runtime/websocket/build/bin"
  38. DEFAULT_DOCKER_EXEC_PATH=${DEFAULT_DOCKER_EXEC_DIR}/${DEFAULT_SERVER_EXEC_NAME}
  39. DEFAULT_SAMPLES_NAME="funasr_samples"
  40. DEFAULT_SAMPLES_DIR="samples"
  41. DEFAULT_SAMPLES_URL="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/sample/${DEFAULT_SAMPLES_NAME}.tar.gz"
  42. SAMPLE_CLIENTS=( \
  43. "Python" \
  44. "Linux_Cpp" \
  45. )
  46. DOCKER_IMAGES=()
  47. ASR_MODELS=()
  48. VAD_MODELS=()
  49. PUNC_MODELS=()
  50. # Handles the download progress bar
  51. asr_percent_int=0
  52. vad_percent_int=0
  53. punc_percent_int=0
  54. asr_title="Downloading"
  55. asr_percent="0"
  56. asr_speed="0KB/s"
  57. asr_revision=""
  58. vad_title="Downloading"
  59. vad_percent="0"
  60. vad_speed="0KB/s"
  61. vad_revision=""
  62. punc_title="Downloading"
  63. punc_percent="0"
  64. punc_speed="0KB/s"
  65. punc_revision=""
  66. serverProgress(){
  67. status_flag="STATUS:"
  68. stage=0
  69. wait=0
  70. server_status=""
  71. while true
  72. do
  73. if [ -f "$DEFAULT_FUNASR_PROGRESS_TXT" ]; then
  74. break
  75. else
  76. sleep 1
  77. let wait=wait+1
  78. if [ ${wait} -ge 6 ]; then
  79. break
  80. fi
  81. fi
  82. done
  83. if [ ! -f "$DEFAULT_FUNASR_PROGRESS_TXT" ]; then
  84. echo -e " ${RED}The note of progress does not exist.($DEFAULT_FUNASR_PROGRESS_TXT) ${PLAIN}"
  85. return 98
  86. fi
  87. stage=1
  88. while read line
  89. do
  90. if [ $stage -eq 1 ]; then
  91. result=$(echo $line | grep "STATUS:")
  92. if [ "$result" != "" ]; then
  93. stage=2
  94. server_status=${line#*:}
  95. status=`expr $server_status + 0`
  96. if [ $status -eq 99 ]; then
  97. stage=99
  98. fi
  99. continue
  100. fi
  101. elif [ $stage -eq 2 ]; then
  102. result=$(echo $line | grep "ASR")
  103. if [ "$result" != "" ]; then
  104. stage=3
  105. continue
  106. fi
  107. elif [ $stage -eq 3 ]; then
  108. result=$(echo $line | grep "VAD")
  109. if [ "$result" != "" ]; then
  110. stage=4
  111. continue
  112. fi
  113. result=$(echo $line | grep "title:")
  114. if [ "$result" != "" ]; then
  115. asr_title=${line#*:}
  116. continue
  117. fi
  118. result=$(echo $line | grep "percent:")
  119. if [ "$result" != "" ]; then
  120. asr_percent=${line#*:}
  121. continue
  122. fi
  123. result=$(echo $line | grep "speed:")
  124. if [ "$result" != "" ]; then
  125. asr_speed=${line#*:}
  126. continue
  127. fi
  128. result=$(echo $line | grep "revision:")
  129. if [ "$result" != "" ]; then
  130. asr_revision=${line#*:}
  131. continue
  132. fi
  133. elif [ $stage -eq 4 ]; then
  134. result=$(echo $line | grep "PUNC")
  135. if [ "$result" != "" ]; then
  136. stage=5
  137. continue
  138. fi
  139. result=$(echo $line | grep "title:")
  140. if [ "$result" != "" ]; then
  141. vad_title=${line#*:}
  142. continue
  143. fi
  144. result=$(echo $line | grep "percent:")
  145. if [ "$result" != "" ]; then
  146. vad_percent=${line#*:}
  147. continue
  148. fi
  149. result=$(echo $line | grep "speed:")
  150. if [ "$result" != "" ]; then
  151. vad_speed=${line#*:}
  152. continue
  153. fi
  154. result=$(echo $line | grep "revision:")
  155. if [ "$result" != "" ]; then
  156. vad_revision=${line#*:}
  157. continue
  158. fi
  159. elif [ $stage -eq 5 ]; then
  160. result=$(echo $line | grep "DONE")
  161. if [ "$result" != "" ]; then
  162. # Done and break.
  163. stage=6
  164. break
  165. fi
  166. result=$(echo $line | grep "title:")
  167. if [ "$result" != "" ]; then
  168. punc_title=${line#*:}
  169. continue
  170. fi
  171. result=$(echo $line | grep "percent:")
  172. if [ "$result" != "" ]; then
  173. punc_percent=${line#*:}
  174. continue
  175. fi
  176. result=$(echo $line | grep "speed:")
  177. if [ "$result" != "" ]; then
  178. punc_speed=${line#*:}
  179. continue
  180. fi
  181. result=$(echo $line | grep "revision:")
  182. if [ "$result" != "" ]; then
  183. punc_revision=${line#*:}
  184. continue
  185. fi
  186. elif [ $stage -eq 99 ]; then
  187. echo -e " ${RED}ERROR: $line${PLAIN}"
  188. fi
  189. done < $DEFAULT_FUNASR_PROGRESS_TXT
  190. if [ $stage -ne 99 ]; then
  191. drawProgress "ASR " $asr_title $asr_percent $asr_speed $asr_revision $asr_percent_int
  192. asr_percent_int=$?
  193. drawProgress "VAD " $vad_title $vad_percent $vad_speed $vad_revision $vad_percent_int
  194. vad_percent_int=$?
  195. drawProgress "PUNC" $punc_title $punc_percent $punc_speed $punc_revision $punc_percent_int
  196. punc_percent_int=$?
  197. fi
  198. return $stage
  199. }
  200. drawProgress(){
  201. model=$1
  202. title=$2
  203. percent_str=$3
  204. speed=$4
  205. revision=$5
  206. latest_percent=$6
  207. progress=0
  208. if [ ! -z "$percent_str" ]; then
  209. progress=`expr $percent_str + 0`
  210. latest_percent=`expr $latest_percent + 0`
  211. if [ $progress -ne 0 ] && [ $progress -lt $latest_percent ]; then
  212. progress=$latest_percent
  213. fi
  214. fi
  215. loading_flag="Loading"
  216. if [ "$title" = "$loading_flag" ]; then
  217. progress=100
  218. fi
  219. i=0
  220. str=""
  221. let max=progress/2
  222. while [ $i -lt $max ]
  223. do
  224. let i++
  225. str+='='
  226. done
  227. let color=36
  228. let index=max*2
  229. if [ -z "$speed" ]; then
  230. printf "\r \e[0;${CYAN}[%s][%-11s][%-50s][%d%%][%s]\e[0m" "$model" "$title" "$str" "$$index" "$revision"
  231. else
  232. printf "\r \e[0;${CYAN}[%s][%-11s][%-50s][%3d%%][%8s][%s]\e[0m" "$model" "$title" "$str" "$index" "$speed" "$revision"
  233. fi
  234. printf "\n"
  235. return $progress
  236. }
  237. menuSelection(){
  238. local menu
  239. menu=($(echo "$@"))
  240. result=1
  241. show_no=1
  242. menu_no=0
  243. len=${#menu[@]}
  244. while true
  245. do
  246. echo -e " ${BOLD}${show_no})${PLAIN} ${menu[menu_no]}"
  247. let show_no++
  248. let menu_no++
  249. if [ $menu_no -ge $len ]; then
  250. break
  251. fi
  252. done
  253. while true
  254. do
  255. echo -e " Enter your choice, default(${CYAN}1${PLAIN}): \c"
  256. read result
  257. if [ -z "$result" ]; then
  258. result=1
  259. fi
  260. expr $result + 0 &>/dev/null
  261. if [ $? -eq 0 ]; then
  262. if [ $result -ge 1 ] && [ $result -le $len ]; then
  263. break
  264. else
  265. echo -e " ${RED}Input error, please input correct number!${PLAIN}"
  266. fi
  267. else
  268. echo -e " ${RED}Input error, please input correct number!${PLAIN}"
  269. fi
  270. done
  271. return $result
  272. }
  273. full_path=""
  274. relativePathToFullPath(){
  275. relativePath=$1
  276. firstChar=${relativePath: 0: 1}
  277. if [[ "$firstChar" == "" ]]; then
  278. full_path=$relativePath
  279. elif [[ "$firstChar" == "/" ]]; then
  280. full_path=$relativePath
  281. fi
  282. tmpPath1=`dirname $relativePath`
  283. tmpFullpath1=`cd $tmpPath1 && pwd`
  284. tmpPath2=`basename $relativePath`
  285. full_path=${tmpFullpath1}/${tmpPath2}
  286. }
  287. initConfiguration(){
  288. if [ -z "$DEFAULT_FUNASR_CONFIG_DIR" ];then
  289. DEFAULT_FUNASR_CONFIG_DIR="$HOME"
  290. if [ -z "$DEFAULT_FUNASR_CONFIG_DIR" ];then
  291. $DEFAULT_FUNASR_CONFIG_DIR=$(echo ~/)
  292. if [ -z "$DEFAULT_FUNASR_CONFIG_DIR" ];then
  293. $DEFAULT_FUNASR_CONFIG_DIR=$DEFAULT_FUNASR_CONFIG_DIR_BAK
  294. fi
  295. fi
  296. DEFAULT_FUNASR_CONFIG_DIR=${DEFAULT_FUNASR_CONFIG_DIR}/.funasr_en
  297. fi
  298. if [ ! -z "$DEFAULT_FUNASR_CONFIG_DIR" ]; then
  299. $SUDO_CMD mkdir -p $DEFAULT_FUNASR_CONFIG_DIR
  300. else
  301. echo -e " ${RED}DEFAULT_FUNASR_CONFIG_DIR is empty!${PLAIN}"
  302. exit 1
  303. fi
  304. if [ ! -d "$DEFAULT_FUNASR_CONFIG_DIR" ]; then
  305. echo -e " ${RED}${DEFAULT_FUNASR_CONFIG_DIR} does not exist!${PLAIN}"
  306. exit 2
  307. fi
  308. DEFAULT_FUNASR_CONFIG_FILE="${DEFAULT_FUNASR_CONFIG_DIR}/config"
  309. DEFAULT_FUNASR_SERVER_CONFIG_FILE="${DEFAULT_FUNASR_CONFIG_DIR}/server_config"
  310. DEFAULT_FUNASR_PROGRESS_TXT="${DEFAULT_FUNASR_CONFIG_DIR}/progress.txt"
  311. DEFAULT_FUNASR_SERVER_LOG="${DEFAULT_FUNASR_CONFIG_DIR}/server_console.log"
  312. if [ ! -f $DEFAULT_FUNASR_CONFIG_FILE ]; then
  313. $SUDO_CMD touch $DEFAULT_FUNASR_CONFIG_FILE
  314. fi
  315. if [ ! -f $DEFAULT_FUNASR_SERVER_CONFIG_FILE ]; then
  316. $SUDO_CMD touch $DEFAULT_FUNASR_SERVER_CONFIG_FILE
  317. fi
  318. }
  319. initParameters(){
  320. # Init workspace in local by new parameters.
  321. PARAMS_FUNASR_SAMPLES_LOCAL_PATH=${PARAMS_FUNASR_LOCAL_WORKSPACE}/${DEFAULT_SAMPLES_NAME}.tar.gz
  322. PARAMS_FUNASR_SAMPLES_LOCAL_DIR=${PARAMS_FUNASR_LOCAL_WORKSPACE}/${DEFAULT_SAMPLES_DIR}
  323. PARAMS_FUNASR_LOCAL_MODELS_DIR="${PARAMS_FUNASR_LOCAL_WORKSPACE}/models"
  324. if [ ! -z "$PARAMS_FUNASR_LOCAL_WORKSPACE" ]; then
  325. mkdir -p $PARAMS_FUNASR_LOCAL_WORKSPACE
  326. fi
  327. if [ ! -z "$PARAMS_FUNASR_LOCAL_MODELS_DIR" ]; then
  328. mkdir -p $PARAMS_FUNASR_LOCAL_MODELS_DIR
  329. fi
  330. }
  331. # Parse the parameters from the docker list file.
  332. docker_info_cur_key=""
  333. docker_info_cur_val=""
  334. findTypeOfDockerInfo(){
  335. line=$1
  336. result=$(echo $line | grep ":")
  337. if [ "$result" != "" ]; then
  338. docker_info_cur_key=$result
  339. docker_info_cur_val=""
  340. else
  341. docker_info_cur_val=$(echo $line)
  342. fi
  343. }
  344. # Get a list of docker images.
  345. readDockerInfoFromUrl(){
  346. while true
  347. do
  348. list_url=$DEFAULT_DOCKER_IMAGE_LISTS
  349. content=$(curl --connect-timeout 10 -m 10 -s $list_url)
  350. if [ ! -z "$content" ]; then
  351. break
  352. else
  353. echo -e " ${RED}Unable to get docker image list due to network issues, try again.${PLAIN}"
  354. # switch sources of docker image lists
  355. if [ "$list_url" = "$DEFAULT_DOCKER_OFFLINE_CPU_EN_LISTS_OSS" ]; then
  356. DEFAULT_DOCKER_IMAGE_LISTS=$DEFAULT_DOCKER_OFFLINE_CPU_EN_LISTS_GIT
  357. else
  358. DEFAULT_DOCKER_IMAGE_LISTS=$DEFAULT_DOCKER_OFFLINE_CPU_EN_LISTS_OSS
  359. fi
  360. fi
  361. done
  362. array=($(echo "$content"))
  363. len=${#array[@]}
  364. for i in ${array[@]}
  365. do
  366. findTypeOfDockerInfo $i
  367. if [ "$docker_info_cur_key" = "DOCKER:" ]; then
  368. if [ ! -z "$docker_info_cur_val" ]; then
  369. docker_name=${DEFAULT_FUNASR_DOCKER_URL}:${docker_info_cur_val}
  370. DOCKER_IMAGES[${#DOCKER_IMAGES[*]}]=$docker_name
  371. fi
  372. elif [ "$docker_info_cur_key" = "DEFAULT_ASR_MODEL:" ]; then
  373. if [ ! -z "$docker_info_cur_val" ]; then
  374. ASR_MODELS[${#ASR_MODELS[*]}]=$docker_info_cur_val
  375. fi
  376. elif [ "$docker_info_cur_key" = "DEFAULT_VAD_MODEL:" ]; then
  377. if [ ! -z "$docker_info_cur_val" ]; then
  378. VAD_MODELS[${#VAD_MODELS[*]}]=$docker_info_cur_val
  379. fi
  380. elif [ "$docker_info_cur_key" = "DEFAULT_PUNC_MODEL:" ]; then
  381. if [ ! -z "$docker_info_cur_val" ]; then
  382. PUNC_MODELS[${#PUNC_MODELS[*]}]=$docker_info_cur_val
  383. fi
  384. fi
  385. done
  386. echo -e " $DONE"
  387. }
  388. # Make sure root user.
  389. rootNess(){
  390. echo -e "${UNDERLINE}${BOLD}[0/6]${PLAIN}"
  391. echo -e " ${YELLOW}Please check root access.${PLAIN}"
  392. echo -e " ${WARNING} MUST RUN AS ${RED}ROOT${PLAIN} USER!"
  393. if [[ $EUID -ne 0 ]]; then
  394. echo -e " ${ERROR} MUST RUN AS ${RED}ROOT${PLAIN} USER!"
  395. fi
  396. check_sudo=$(which sudo | wc -l)
  397. if [ $check_sudo -eq 0 ]; then
  398. SUDO_CMD=""
  399. fi
  400. cd $CUR_DIR
  401. echo
  402. }
  403. # Get a list of docker images and select them.
  404. selectDockerImages(){
  405. echo -e "${UNDERLINE}${BOLD}[1/6]${PLAIN}"
  406. echo -e " ${YELLOW}Getting the list of docker images, please wait a few seconds.${PLAIN}"
  407. readDockerInfoFromUrl
  408. echo
  409. the_latest_docker_image=$PARAMS_DOCKER_IMAGE
  410. echo -e " ${YELLOW}Please choose the Docker image.${PLAIN}"
  411. menuSelection ${DOCKER_IMAGES[*]}
  412. result=$?
  413. index=`expr ${result} - 1`
  414. PARAMS_DOCKER_IMAGE=${DOCKER_IMAGES[${index}]}
  415. echo -e " ${UNDERLINE}You have chosen the Docker image:${PLAIN} ${GREEN}${PARAMS_DOCKER_IMAGE}${PLAIN}"
  416. if [ -z "$the_latest_docker_image" ] && [ -z "$PARAMS_FUNASR_DOCKER_ID" ]; then
  417. result=0
  418. else
  419. # 0: DOCKER is not running
  420. # 60: DOCKER_ID is empty
  421. # 61: DOCKER_IMAGE is empty
  422. # 62: DOCKER is running
  423. # 63: DOCKER_ID and DOCKER_IMAGE are empty
  424. checkDockerIdExist "install"
  425. result=$?
  426. result=`expr ${result} + 0`
  427. if [ $result -eq 60 ]; then
  428. result=0
  429. elif [ $result -eq 61 ]; then
  430. echo
  431. echo -e " ${RED}Please run (${PLAIN}${GREEN}${SUDO_CMD} bash funasr-runtime-deploy-offline-cpu-en.sh install${PLAIN}${RED}) to install Docker first.${PLAIN}"
  432. elif [ $result -eq 62 ]; then
  433. echo
  434. echo -e " ${RED}Docker: ${PARAMS_DOCKER_IMAGE} ${PARAMS_FUNASR_DOCKER_ID} has been launched, please run (${PLAIN}${GREEN}${SUDO_CMD} bash funasr-runtime-deploy-offline-cpu-en.sh remove${PLAIN}${RED}) to remove Docker first ant then install.${PLAIN}"
  435. elif [ $result -eq 63 ]; then
  436. result=0
  437. fi
  438. fi
  439. echo
  440. }
  441. # Get a list of models and select them.
  442. selectModels(){
  443. echo -e "${UNDERLINE}${BOLD}[2/6]${PLAIN}"
  444. echo -e " ${YELLOW}Get a list of selectable models.${PLAIN}"
  445. echo
  446. selectAsrModels
  447. selectVadModels
  448. selectPuncModels
  449. echo
  450. }
  451. selectAsrModels(){
  452. echo -e " ${YELLOW}Please choose the ASR model.${PLAIN}"
  453. menuSelection ${ASR_MODELS[*]}
  454. result=$?
  455. index=`expr ${result} - 1`
  456. PARAMS_ASR_ID=${ASR_MODELS[${index}]}
  457. echo -e " ${UNDERLINE}You have chosen the ASR model:${PLAIN} ${GREEN}${PARAMS_ASR_ID}${PLAIN}"
  458. echo
  459. }
  460. selectVadModels(){
  461. echo -e " ${YELLOW}Please choose the VAD model.${PLAIN}"
  462. menuSelection ${VAD_MODELS[*]}
  463. result=$?
  464. index=`expr ${result} - 1`
  465. PARAMS_VAD_ID=${VAD_MODELS[${index}]}
  466. echo -e " ${UNDERLINE}You have chosen the VAD model:${PLAIN} ${GREEN}${PARAMS_VAD_ID}${PLAIN}"
  467. echo
  468. }
  469. selectPuncModels(){
  470. echo -e " ${YELLOW}Please choose the PUNC model.${PLAIN}"
  471. menuSelection ${PUNC_MODELS[*]}
  472. result=$?
  473. index=`expr ${result} - 1`
  474. PARAMS_PUNC_ID=${PUNC_MODELS[${index}]}
  475. echo -e " ${UNDERLINE}You have chosen the PUNC model:${PLAIN} ${GREEN}${PARAMS_PUNC_ID}${PLAIN}"
  476. echo
  477. }
  478. # Configure FunASR server host port setting.
  479. setupHostPort(){
  480. echo -e "${UNDERLINE}${BOLD}[3/6]${PLAIN}"
  481. params_host_port=`sed '/^PARAMS_HOST_PORT=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  482. if [ -z "$params_host_port" ]; then
  483. PARAMS_HOST_PORT="10095"
  484. else
  485. PARAMS_HOST_PORT=$params_host_port
  486. fi
  487. while true
  488. do
  489. echo -e " ${YELLOW}Please input the opened port in the host used for FunASR server.${PLAIN}"
  490. echo -e " Setting the opened host port [1-65535], default(${CYAN}${PARAMS_HOST_PORT}${PLAIN}): \c"
  491. read PARAMS_HOST_PORT
  492. if [ -z "$PARAMS_HOST_PORT" ]; then
  493. params_host_port=`sed '/^PARAMS_HOST_PORT=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  494. if [ -z "$params_host_port" ]; then
  495. PARAMS_HOST_PORT="10095"
  496. else
  497. PARAMS_HOST_PORT=$params_host_port
  498. fi
  499. fi
  500. expr $PARAMS_HOST_PORT + 0 &>/dev/null
  501. if [ $? -eq 0 ]; then
  502. if [ $PARAMS_HOST_PORT -ge 1 ] && [ $PARAMS_HOST_PORT -le 65535 ]; then
  503. echo -e " ${UNDERLINE}The port of the host is${PLAIN} ${GREEN}${PARAMS_HOST_PORT}${PLAIN}"
  504. echo -e " ${UNDERLINE}The port in Docker for FunASR server is${PLAIN} ${GREEN}${PARAMS_DOCKER_PORT}${PLAIN}"
  505. break
  506. else
  507. echo -e " ${RED}Input error, please input correct number!${PLAIN}"
  508. fi
  509. else
  510. echo -e " ${RED}Input error, please input correct number!${PLAIN}"
  511. fi
  512. done
  513. echo
  514. }
  515. complementParameters(){
  516. # parameters about ASR model
  517. if [ ! -z "$PARAMS_ASR_ID" ]; then
  518. PARAMS_DOCKER_ASR_PATH=${PARAMS_DOWNLOAD_MODEL_DIR}/${PARAMS_ASR_ID}
  519. PARAMS_DOCKER_ASR_DIR=$(dirname "$PARAMS_DOCKER_ASR_PATH")
  520. PARAMS_LOCAL_ASR_PATH=${PARAMS_FUNASR_LOCAL_MODELS_DIR}/${PARAMS_ASR_ID}
  521. PARAMS_LOCAL_ASR_DIR=$(dirname "$PARAMS_LOCAL_ASR_PATH")
  522. fi
  523. # parameters about VAD model
  524. if [ ! -z "$PARAMS_VAD_ID" ]; then
  525. PARAMS_DOCKER_VAD_PATH=${PARAMS_DOWNLOAD_MODEL_DIR}/${PARAMS_VAD_ID}
  526. PARAMS_DOCKER_VAD_DIR=$(dirname "$PARAMS_DOCKER_VAD_PATH")
  527. PARAMS_LOCAL_VAD_PATH=${PARAMS_FUNASR_LOCAL_MODELS_DIR}/${PARAMS_VAD_ID}
  528. PARAMS_LOCAL_VAD_DIR=$(dirname "$PARAMS_LOCAL_VAD_PATH")
  529. fi
  530. # parameters about PUNC model
  531. if [ ! -z "$PARAMS_PUNC_ID" ]; then
  532. PARAMS_DOCKER_PUNC_PATH=${PARAMS_DOWNLOAD_MODEL_DIR}/${PARAMS_PUNC_ID}
  533. PARAMS_DOCKER_PUNC_DIR=$(dirname "${PARAMS_DOCKER_PUNC_PATH}")
  534. PARAMS_LOCAL_PUNC_PATH=${PARAMS_FUNASR_LOCAL_MODELS_DIR}/${PARAMS_PUNC_ID}
  535. PARAMS_LOCAL_PUNC_DIR=$(dirname "${PARAMS_LOCAL_PUNC_PATH}")
  536. fi
  537. # parameters about thread_num
  538. params_decoder_thread_num=`sed '/^PARAMS_DECODER_THREAD_NUM=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  539. if [ -z "$params_decoder_thread_num" ]; then
  540. PARAMS_DECODER_THREAD_NUM=$CPUNUM
  541. else
  542. PARAMS_DECODER_THREAD_NUM=$params_decoder_thread_num
  543. fi
  544. multiple_io=4
  545. PARAMS_DECODER_THREAD_NUM=`expr ${PARAMS_DECODER_THREAD_NUM} + 0`
  546. PARAMS_IO_THREAD_NUM=`expr ${PARAMS_DECODER_THREAD_NUM} / ${multiple_io}`
  547. if [ $PARAMS_IO_THREAD_NUM -eq 0 ]; then
  548. PARAMS_IO_THREAD_NUM=1
  549. fi
  550. }
  551. paramsFromDefault(){
  552. initConfiguration
  553. echo -e " ${YELLOW}Load parameters from${PLAIN} ${GREEN}${DEFAULT_FUNASR_CONFIG_FILE}${PLAIN}"
  554. echo
  555. funasr_local_workspace=`sed '/^PARAMS_FUNASR_LOCAL_WORKSPACE=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  556. if [ ! -z "$funasr_local_workspace" ]; then
  557. PARAMS_FUNASR_LOCAL_WORKSPACE=$funasr_local_workspace
  558. fi
  559. funasr_samples_local_dir=`sed '/^PARAMS_FUNASR_SAMPLES_LOCAL_DIR=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  560. if [ ! -z "$funasr_samples_local_dir" ]; then
  561. PARAMS_FUNASR_SAMPLES_LOCAL_DIR=$funasr_samples_local_dir
  562. fi
  563. funasr_samples_local_path=`sed '/^PARAMS_FUNASR_SAMPLES_LOCAL_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  564. if [ ! -z "$funasr_samples_local_path" ]; then
  565. PARAMS_FUNASR_SAMPLES_LOCAL_PATH=$funasr_samples_local_path
  566. fi
  567. funasr_local_models_dir=`sed '/^PARAMS_FUNASR_LOCAL_MODELS_DIR=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  568. if [ ! -z "$funasr_local_models_dir" ]; then
  569. PARAMS_FUNASR_LOCAL_MODELS_DIR=$funasr_local_models_dir
  570. fi
  571. docker_image=`sed '/^PARAMS_DOCKER_IMAGE=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  572. if [ ! -z "$docker_image" ]; then
  573. PARAMS_DOCKER_IMAGE=$docker_image
  574. fi
  575. download_model_dir=`sed '/^PARAMS_DOWNLOAD_MODEL_DIR=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  576. if [ ! -z "$download_model_dir" ]; then
  577. PARAMS_DOWNLOAD_MODEL_DIR=$download_model_dir
  578. fi
  579. PARAMS_LOCAL_ASR_PATH=`sed '/^PARAMS_LOCAL_ASR_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  580. if [ ! -z "$local_asr_path" ]; then
  581. PARAMS_LOCAL_ASR_PATH=$local_asr_path
  582. fi
  583. docker_asr_path=`sed '/^PARAMS_DOCKER_ASR_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  584. if [ ! -z "$docker_asr_path" ]; then
  585. PARAMS_DOCKER_ASR_PATH=$docker_asr_path
  586. fi
  587. asr_id=`sed '/^PARAMS_ASR_ID=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  588. if [ ! -z "$asr_id" ]; then
  589. PARAMS_ASR_ID=$asr_id
  590. fi
  591. local_vad_path=`sed '/^PARAMS_LOCAL_VAD_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  592. if [ ! -z "$local_vad_path" ]; then
  593. PARAMS_LOCAL_VAD_PATH=$local_vad_path
  594. fi
  595. docker_vad_path=`sed '/^PARAMS_DOCKER_VAD_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  596. if [ ! -z "$docker_vad_path" ]; then
  597. PARAMS_DOCKER_VAD_PATH=$docker_vad_path
  598. fi
  599. vad_id=`sed '/^PARAMS_VAD_ID=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  600. if [ ! -z "$vad_id" ]; then
  601. PARAMS_VAD_ID=$vad_id
  602. fi
  603. local_punc_path=`sed '/^PARAMS_LOCAL_PUNC_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  604. if [ ! -z "$local_punc_path" ]; then
  605. PARAMS_LOCAL_PUNC_PATH=$local_punc_path
  606. fi
  607. docker_punc_path=`sed '/^PARAMS_DOCKER_PUNC_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  608. if [ ! -z "$docker_punc_path" ]; then
  609. PARAMS_DOCKER_PUNC_PATH=$docker_punc_path
  610. fi
  611. punc_id=`sed '/^PARAMS_PUNC_ID=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  612. if [ ! -z "$punc_id" ]; then
  613. PARAMS_PUNC_ID=$punc_id
  614. fi
  615. # docker_exec_path=`sed '/^PARAMS_DOCKER_EXEC_PATH=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  616. if [ ! -z "$docker_exec_path" ]; then
  617. PARAMS_DOCKER_EXEC_PATH=$docker_exec_path
  618. fi
  619. host_port=`sed '/^PARAMS_HOST_PORT=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  620. if [ ! -z "$host_port" ]; then
  621. PARAMS_HOST_PORT=$host_port
  622. fi
  623. docker_port=`sed '/^PARAMS_DOCKER_PORT=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  624. if [ ! -z "$docker_port" ]; then
  625. PARAMS_DOCKER_PORT=$docker_port
  626. fi
  627. decode_thread_num=`sed '/^PARAMS_DECODER_THREAD_NUM=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  628. if [ ! -z "$decode_thread_num" ]; then
  629. PARAMS_DECODER_THREAD_NUM=$decode_thread_num
  630. fi
  631. io_thread_num=`sed '/^PARAMS_IO_THREAD_NUM=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  632. if [ ! -z "$io_thread_num" ]; then
  633. PARAMS_IO_THREAD_NUM=$io_thread_num
  634. fi
  635. ssl_flag=`sed '/^PARAMS_SSL_FLAG=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  636. if [ ! -z "$ssl_flag" ]; then
  637. PARAMS_SSL_FLAG=$ssl_flag
  638. fi
  639. docker_id=`sed '/^PARAMS_FUNASR_DOCKER_ID=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  640. if [ ! -z "$docker_id" ]; then
  641. PARAMS_FUNASR_DOCKER_ID=$docker_id
  642. fi
  643. }
  644. saveParams(){
  645. echo "$i" > $DEFAULT_FUNASR_CONFIG_FILE
  646. echo -e " ${GREEN}Parameters are stored in the file ${DEFAULT_FUNASR_CONFIG_FILE}${PLAIN}"
  647. echo "PARAMS_DOCKER_IMAGE=${PARAMS_DOCKER_IMAGE}" > $DEFAULT_FUNASR_CONFIG_FILE
  648. echo "PARAMS_FUNASR_LOCAL_WORKSPACE=${PARAMS_FUNASR_LOCAL_WORKSPACE}" >> $DEFAULT_FUNASR_CONFIG_FILE
  649. echo "PARAMS_FUNASR_SAMPLES_LOCAL_DIR=${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  650. echo "PARAMS_FUNASR_SAMPLES_LOCAL_PATH=${PARAMS_FUNASR_SAMPLES_LOCAL_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  651. echo "PARAMS_FUNASR_LOCAL_MODELS_DIR=${PARAMS_FUNASR_LOCAL_MODELS_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  652. echo "PARAMS_DOWNLOAD_MODEL_DIR=${PARAMS_DOWNLOAD_MODEL_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  653. echo "PARAMS_DOCKER_EXEC_PATH=${PARAMS_DOCKER_EXEC_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  654. echo "PARAMS_DOCKER_EXEC_DIR=${PARAMS_DOCKER_EXEC_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  655. echo "PARAMS_LOCAL_ASR_PATH=${PARAMS_LOCAL_ASR_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  656. echo "PARAMS_LOCAL_ASR_DIR=${PARAMS_LOCAL_ASR_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  657. echo "PARAMS_DOCKER_ASR_PATH=${PARAMS_DOCKER_ASR_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  658. echo "PARAMS_DOCKER_ASR_DIR=${PARAMS_DOCKER_ASR_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  659. echo "PARAMS_ASR_ID=${PARAMS_ASR_ID}" >> $DEFAULT_FUNASR_CONFIG_FILE
  660. echo "PARAMS_LOCAL_PUNC_PATH=${PARAMS_LOCAL_PUNC_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  661. echo "PARAMS_LOCAL_PUNC_DIR=${PARAMS_LOCAL_PUNC_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  662. echo "PARAMS_DOCKER_PUNC_PATH=${PARAMS_DOCKER_PUNC_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  663. echo "PARAMS_DOCKER_PUNC_DIR=${PARAMS_DOCKER_PUNC_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  664. echo "PARAMS_PUNC_ID=${PARAMS_PUNC_ID}" >> $DEFAULT_FUNASR_CONFIG_FILE
  665. echo "PARAMS_LOCAL_VAD_PATH=${PARAMS_LOCAL_VAD_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  666. echo "PARAMS_LOCAL_VAD_DIR=${PARAMS_LOCAL_VAD_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  667. echo "PARAMS_DOCKER_VAD_PATH=${PARAMS_DOCKER_VAD_PATH}" >> $DEFAULT_FUNASR_CONFIG_FILE
  668. echo "PARAMS_DOCKER_VAD_DIR=${PARAMS_DOCKER_VAD_DIR}" >> $DEFAULT_FUNASR_CONFIG_FILE
  669. echo "PARAMS_VAD_ID=${PARAMS_VAD_ID}" >> $DEFAULT_FUNASR_CONFIG_FILE
  670. echo "PARAMS_HOST_PORT=${PARAMS_HOST_PORT}" >> $DEFAULT_FUNASR_CONFIG_FILE
  671. echo "PARAMS_DOCKER_PORT=${PARAMS_DOCKER_PORT}" >> $DEFAULT_FUNASR_CONFIG_FILE
  672. echo "PARAMS_DECODER_THREAD_NUM=${PARAMS_DECODER_THREAD_NUM}" >> $DEFAULT_FUNASR_CONFIG_FILE
  673. echo "PARAMS_IO_THREAD_NUM=${PARAMS_IO_THREAD_NUM}" >> $DEFAULT_FUNASR_CONFIG_FILE
  674. echo "PARAMS_SSL_FLAG=${PARAMS_SSL_FLAG}" >> $DEFAULT_FUNASR_CONFIG_FILE
  675. echo "PARAMS_FUNASR_DOCKER_ID=${PARAMS_FUNASR_DOCKER_ID}" >> $DEFAULT_FUNASR_CONFIG_FILE
  676. serverConfigGeneration
  677. echo "${daemon_server_config}" > $DEFAULT_FUNASR_SERVER_CONFIG_FILE
  678. }
  679. showAllParams(){
  680. echo -e "${UNDERLINE}${BOLD}[4/6]${PLAIN}"
  681. echo -e " ${YELLOW}Show parameters of FunASR server setting and confirm to run ...${PLAIN}"
  682. echo
  683. only_show_flag=$1
  684. if [ ! -z "$PARAMS_DOCKER_IMAGE" ]; then
  685. echo -e " The current Docker image is : ${GREEN}${PARAMS_DOCKER_IMAGE}${PLAIN}"
  686. fi
  687. if [ ! -z "$PARAMS_FUNASR_LOCAL_WORKSPACE" ]; then
  688. echo -e " The local workspace path is : ${GREEN}${PARAMS_FUNASR_LOCAL_WORKSPACE}${PLAIN}"
  689. fi
  690. if [ ! -z "$PARAMS_DOWNLOAD_MODEL_DIR" ]; then
  691. echo -e " The model will be automatically downloaded in Docker : ${GREEN}${PARAMS_DOWNLOAD_MODEL_DIR}${PLAIN}"
  692. fi
  693. echo
  694. if [ ! -z "$PARAMS_ASR_ID" ]; then
  695. echo -e " The ASR model_id used : ${GREEN}${PARAMS_ASR_ID}${PLAIN}"
  696. fi
  697. if [ ! -z "$PARAMS_LOCAL_ASR_PATH" ]; then
  698. echo -e " The path to the local ASR model directory for the load : ${GREEN}${PARAMS_LOCAL_ASR_PATH}${PLAIN}"
  699. fi
  700. echo -e " The ASR model directory corresponds to the directory in Docker : ${GREEN}${PARAMS_DOCKER_ASR_PATH}${PLAIN}"
  701. if [ ! -z "$PARAMS_VAD_ID" ]; then
  702. echo -e " The VAD model_id used : ${GREEN}${PARAMS_VAD_ID}${PLAIN}"
  703. fi
  704. if [ ! -z "$PARAMS_LOCAL_VAD_PATH" ]; then
  705. echo -e " The path to the local VAD model directory for the load : ${GREEN}${PARAMS_LOCAL_VAD_PATH}${PLAIN}"
  706. fi
  707. echo -e " The VAD model directory corresponds to the directory in Docker : ${GREEN}${PARAMS_DOCKER_VAD_PATH}${PLAIN}"
  708. if [ ! -z "$PARAMS_PUNC_ID" ]; then
  709. echo -e " The PUNC model_id used : ${GREEN}${PARAMS_PUNC_ID}${PLAIN}"
  710. fi
  711. if [ ! -z "$PARAMS_LOCAL_PUNC_PATH" ]; then
  712. echo -e " The path to the local PUNC model directory for the load : ${GREEN}${PARAMS_LOCAL_PUNC_PATH}${PLAIN}"
  713. fi
  714. echo -e " The PUNC model directory corresponds to the directory in Docker: ${GREEN}${PARAMS_DOCKER_PUNC_PATH}${PLAIN}"
  715. echo
  716. echo -e " The path in the docker of the FunASR service executor : ${GREEN}${PARAMS_DOCKER_EXEC_PATH}${PLAIN}"
  717. echo -e " Set the host port used for use by the FunASR service : ${GREEN}${PARAMS_HOST_PORT}${PLAIN}"
  718. echo -e " Set the docker port used by the FunASR service : ${GREEN}${PARAMS_DOCKER_PORT}${PLAIN}"
  719. echo -e " Set the number of threads used for decoding the FunASR service : ${GREEN}${PARAMS_DECODER_THREAD_NUM}${PLAIN}"
  720. echo -e " Set the number of threads used for IO the FunASR service : ${GREEN}${PARAMS_IO_THREAD_NUM}${PLAIN}"
  721. echo
  722. if [ ! -z "$PARAMS_FUNASR_SAMPLES_LOCAL_DIR" ]; then
  723. echo -e " Sample code will be store in local : ${GREEN}${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}${PLAIN}"
  724. fi
  725. if [ ! -z "$PARAMS_SSL_FLAG" ]; then
  726. echo -e " The flag for the use of SSL : ${GREEN}${PARAMS_SSL_FLAG}${PLAIN}"
  727. fi
  728. if [ "$only_show_flag" = "only_show" ] && [ ! -z "$PARAMS_FUNASR_DOCKER_ID" ]; then
  729. echo -e " The docker ID that already exists is : ${GREEN}${PARAMS_FUNASR_DOCKER_ID}${PLAIN}"
  730. fi
  731. echo
  732. if [ "$only_show_flag" = "only_show" ]; then
  733. return 0
  734. fi
  735. while true
  736. do
  737. params_confirm="y"
  738. echo -e " ${YELLOW}Please input [Y/n] to confirm the parameters.${PLAIN}"
  739. echo -e " [y] Verify that these parameters are correct and that the service will run."
  740. echo -e " [n] The parameters set are incorrect, it will be rolled out, please rerun."
  741. echo -e " read confirmation[${CYAN}Y${PLAIN}/n]: \c"
  742. read params_confirm
  743. if [ -z "$params_confirm" ]; then
  744. params_confirm="y"
  745. fi
  746. YES="Y"
  747. yes="y"
  748. NO="N"
  749. no="n"
  750. echo
  751. if [ "$params_confirm" = "$YES" ] || [ "$params_confirm" = "$yes" ]; then
  752. echo -e " ${GREEN}Will run FunASR server later ...${PLAIN}"
  753. break
  754. elif [ "$params_confirm" = "$NO" ] || [ "$params_confirm" = "$no" ]; then
  755. echo -e " ${RED}The parameters set are incorrect, please rerun ...${PLAIN}"
  756. exit 1
  757. else
  758. echo "again ..."
  759. fi
  760. done
  761. saveParams
  762. echo
  763. sleep 1
  764. }
  765. # Install docker
  766. installFunasrDocker(){
  767. echo -e "${UNDERLINE}${BOLD}[5/6]${PLAIN}"
  768. if [ $DOCKERINFOLEN -gt 30 ]; then
  769. echo -e " ${YELLOW}Docker has installed.${PLAIN}"
  770. else
  771. lowercase_osid=$(echo ${OSID} | tr '[A-Z]' '[a-z]')
  772. echo -e " ${YELLOW}Start install docker for ${lowercase_osid} ${PLAIN}"
  773. DOCKER_INSTALL_CMD="curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun"
  774. DOCKER_INSTALL_RUN_CMD=""
  775. case "$lowercase_osid" in
  776. ubuntu)
  777. DOCKER_INSTALL_CMD="curl -fsSL https://test.docker.com -o test-docker.sh"
  778. DOCKER_INSTALL_RUN_CMD="${SUDO_CMD} sh test-docker.sh"
  779. ;;
  780. centos)
  781. DOCKER_INSTALL_CMD="curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun"
  782. ;;
  783. debian)
  784. DOCKER_INSTALL_CMD="curl -fsSL https://get.docker.com -o get-docker.sh"
  785. DOCKER_INSTALL_RUN_CMD="${SUDO_CMD} sh get-docker.sh"
  786. ;;
  787. \"alios\")
  788. DOCKER_INSTALL_CMD="curl -fsSL https://get.docker.com -o get-docker.sh"
  789. DOCKER_INSTALL_RUN_CMD="${SUDO_CMD} sh get-docker.sh"
  790. ;;
  791. \"alinux\")
  792. DOCKER_INSTALL_CMD="${SUDO_CMD} yum -y install dnf"
  793. DOCKER_INSTALL_RUN_CMD="${SUDO_CMD} dnf -y install docker"
  794. ;;
  795. *)
  796. echo -e " ${RED}$lowercase_osid is not supported.${PLAIN}"
  797. ;;
  798. esac
  799. echo -e " Get docker installer: ${GREEN}${DOCKER_INSTALL_CMD}${PLAIN}"
  800. echo -e " Get docker run: ${GREEN}${DOCKER_INSTALL_RUN_CMD}${PLAIN}"
  801. $DOCKER_INSTALL_CMD
  802. if [ ! -z "$DOCKER_INSTALL_RUN_CMD" ]; then
  803. $DOCKER_INSTALL_RUN_CMD
  804. fi
  805. $SUDO_CMD systemctl start docker
  806. DOCKERINFO=$(${SUDO_CMD} docker info | wc -l)
  807. DOCKERINFOLEN=`expr ${DOCKERINFO} + 0`
  808. if [ $DOCKERINFOLEN -gt 30 ]; then
  809. echo -e " ${GREEN}Docker install success, start docker server.${PLAIN}"
  810. $SUDO_CMD systemctl start docker
  811. else
  812. echo -e " ${RED}Docker install failed!${PLAIN}"
  813. exit 1
  814. fi
  815. fi
  816. echo
  817. sleep 1
  818. # Download docker image
  819. echo -e " ${YELLOW}Pull docker image(${PARAMS_DOCKER_IMAGE})...${PLAIN}"
  820. ${SUDO_CMD} docker pull $PARAMS_DOCKER_IMAGE
  821. echo
  822. sleep 1
  823. }
  824. dockerRun(){
  825. echo -e "${UNDERLINE}${BOLD}[6/6]${PLAIN}"
  826. echo -e " ${YELLOW}Construct command and run docker ...${PLAIN}"
  827. start_flag=$1
  828. if [ "$start_flag" = "install" ]; then
  829. run_cmd="${SUDO_CMD} docker run"
  830. port_map=" -p ${PARAMS_HOST_PORT}:${PARAMS_DOCKER_PORT}"
  831. env_params=" --privileged=true"
  832. dir_map_params=" -v ${DEFAULT_FUNASR_CONFIG_DIR}:/workspace/.config -v ${PARAMS_FUNASR_LOCAL_MODELS_DIR}:${PARAMS_DOWNLOAD_MODEL_DIR} -v ${PARAMS_FUNASR_LOCAL_WORKSPACE}:/workspace/resources"
  833. serverConfigGeneration
  834. env_params=" ${env_params} --env DAEMON_SERVER_CONFIG=${daemon_server_config}"
  835. run_cmd="${run_cmd}${port_map}${dir_map_params}${env_params}"
  836. run_cmd="${run_cmd} -it -d ${PARAMS_DOCKER_IMAGE}"
  837. else
  838. # 0: DOCKER is not running
  839. # 60: DOCKER_ID is empty
  840. # 61: DOCKER_IMAGE is empty
  841. # 62: DOCKER is running
  842. checkDockerIdExist $start_flag
  843. result=$?
  844. result=`expr ${result} + 0`
  845. if [ $result -eq 60 ]; then
  846. echo
  847. echo -e " ${RED}Please run (${PLAIN}${GREEN}${SUDO_CMD} bash funasr-runtime-deploy-offline-cpu-en.sh install${PLAIN}${RED}) to install Docker first.${PLAIN}"
  848. return $result
  849. elif [ $result -eq 61 ]; then
  850. echo
  851. echo -e " ${RED}Please run (${PLAIN}${GREEN}${SUDO_CMD} bash funasr-runtime-deploy-offline-cpu-en.sh install${PLAIN}${RED}) to install Docker first.${PLAIN}"
  852. return $result
  853. elif [ $result -eq 62 ]; then
  854. echo
  855. echo -e " ${RED}Docker: ${PARAMS_DOCKER_IMAGE} ${PARAMS_FUNASR_DOCKER_ID} has been launched, please run (${PLAIN}${GREEN}${SUDO_CMD} bash funasr-runtime-deploy-offline-cpu-en.sh stop${PLAIN}${RED}) to stop Docker first.${PLAIN}"
  856. return $result
  857. fi
  858. run_cmd="${SUDO_CMD} docker restart ${PARAMS_FUNASR_DOCKER_ID}"
  859. fi
  860. rm -f ${DEFAULT_FUNASR_PROGRESS_TXT}
  861. rm -f ${DEFAULT_FUNASR_SERVER_LOG}
  862. $run_cmd
  863. echo
  864. echo -e " ${YELLOW}Loading models:${PLAIN}"
  865. getDockerId
  866. saveParams
  867. # # Hide the cursor, start draw progress.
  868. # printf "\e[?25l"
  869. # while true
  870. # do
  871. # serverProgress
  872. # result=$?
  873. # stage=`expr ${result} + 0`
  874. # if [ ${stage} -eq 0 ]; then
  875. # break
  876. # elif [ ${stage} -gt 0 ] && [ ${stage} -lt 6 ]; then
  877. # sleep 0.1
  878. # # clear 3 lines
  879. # printf "\033[3A"
  880. # elif [ ${stage} -eq 6 ]; then
  881. # break
  882. # elif [ ${stage} -eq 98 ]; then
  883. # return 98
  884. # else
  885. # echo -e " ${RED}Starting FunASR server failed.${PLAIN}"
  886. # echo
  887. # # Display the cursor
  888. # printf "\e[?25h"
  889. # return 99
  890. # fi
  891. # done
  892. # # Display the cursor
  893. # printf "\e[?25h"
  894. echo -e " ${GREEN}The service has been started.${PLAIN}"
  895. echo
  896. deploySamples
  897. echo -e " ${BOLD}The sample code is already stored in the ${PLAIN}(${GREEN}${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}${PLAIN}) ."
  898. echo -e " ${BOLD}If you want to see an example of how to use the client, you can run ${PLAIN}${GREEN}${SUDO_CMD} bash funasr-runtime-deploy-offline-cpu-en.sh client${PLAIN} ."
  899. echo
  900. }
  901. daemon_server_config=""
  902. serverConfigGeneration(){
  903. # params about models
  904. if [ ! -z "$PARAMS_ASR_ID" ]; then
  905. asr_params="\"--model-dir\":\"${PARAMS_ASR_ID}\""
  906. else
  907. if [ ! -z "$PARAMS_LOCAL_ASR_PATH" ]; then
  908. dir_map_params="${dir_map_params} -v ${PARAMS_LOCAL_ASR_PATH}:${PARAMS_DOCKER_ASR_PATH}"
  909. fi
  910. asr_params="\"--model-dir\":\"${PARAMS_DOCKER_ASR_PATH}\""
  911. fi
  912. if [ ! -z "$PARAMS_VAD_ID" ]; then
  913. vad_params="\"--vad-dir\":\"${PARAMS_VAD_ID}\""
  914. else
  915. if [ ! -z "$PARAMS_LOCAL_VAD_PATH" ]; then
  916. dir_map_params="${dir_map_params} -v ${PARAMS_LOCAL_VAD_PATH}:${PARAMS_DOCKER_VAD_PATH}"
  917. fi
  918. vad_params="\"--vad-dir\":\"${PARAMS_DOCKER_VAD_PATH}\""
  919. fi
  920. if [ ! -z "$PARAMS_PUNC_ID" ]; then
  921. punc_params="\"--punc-dir\":\"${PARAMS_PUNC_ID}\""
  922. else
  923. if [ ! -z "$PARAMS_LOCAL_PUNC_PATH" ]; then
  924. dir_map_params="${dir_map_params} -v ${PARAMS_LOCAL_VAD_PATH}:${PARAMS_DOCKER_VAD_PATH}"
  925. fi
  926. punc_params="\"--punc-dir\":\"${PARAMS_DOCKER_PUNC_PATH}\""
  927. fi
  928. download_params="\"--download-model-dir\":\"${PARAMS_DOWNLOAD_MODEL_DIR}\""
  929. model_params="${asr_params},${vad_params},${punc_params},${download_params}"
  930. # params about thread_num
  931. decoder_params="\"--decoder-thread-num\":\"${PARAMS_DECODER_THREAD_NUM}\""
  932. io_params="\"--io-thread-num\":\"${PARAMS_IO_THREAD_NUM}\""
  933. thread_params=${decoder_params},${io_params}
  934. # params about port and ssl
  935. port_params="\"--port\":\"${PARAMS_DOCKER_PORT}\""
  936. if [ $PARAMS_SSL_FLAG -eq 0 ]; then
  937. crt_path="\"--certfile\":\"\""
  938. key_path="\"--keyfile\":\"\""
  939. else
  940. crt_path="\"--certfile\":\"/workspace/FunASR/runtime/ssl_key/server.crt\""
  941. key_path="\"--keyfile\":\"/workspace/FunASR/runtime/ssl_key/server.key\""
  942. fi
  943. exec_params="\"exec\":\"${PARAMS_DOCKER_EXEC_PATH}\""
  944. daemon_server_config="{\"server\":[{${exec_params},${model_params},${thread_params},${port_params},${crt_path},${key_path}}]}"
  945. }
  946. installPythonDependencyForPython(){
  947. echo -e "${YELLOW}Install Python dependent environments ...${PLAIN}"
  948. echo -e " Export dependency of Cpp sample."
  949. pre_cmd="export LD_LIBRARY_PATH=${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/cpp/libs:\$LD_LIBRARY_PATH"
  950. $pre_cmd
  951. echo
  952. echo -e " Install requirements of Python sample."
  953. pre_cmd="pip3 install click>=8.0.4"
  954. $pre_cmd
  955. echo
  956. pre_cmd="pip3 install -r ${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/python/requirements_client.txt"
  957. echo -e " Run ${BLUE}${pre_cmd}${PLAIN}"
  958. $pre_cmd
  959. echo
  960. lowercase_osid=$(echo ${OSID} | tr '[A-Z]' '[a-z]')
  961. case "$lowercase_osid" in
  962. ubuntu)
  963. pre_cmd="${SUDO_CMD} apt-get install -y ffmpeg"
  964. ;;
  965. centos)
  966. pre_cmd="${SUDO_CMD} yum install -y ffmpeg"
  967. ;;
  968. debian)
  969. pre_cmd="${SUDO_CMD} apt-get install -y ffmpeg"
  970. ;;
  971. \"alios\")
  972. pre_cmd="${SUDO_CMD} yum install -y ffmpeg"
  973. ;;
  974. \"alinux\")
  975. pre_cmd="${SUDO_CMD} yum install -y ffmpeg"
  976. ;;
  977. *)
  978. echo -e " ${RED}$lowercase_osid is not supported.${PLAIN}"
  979. ;;
  980. esac
  981. echo -e " Run ${BLUE}${pre_cmd}${PLAIN}"
  982. echo
  983. pre_cmd="pip3 install ffmpeg-python"
  984. echo -e " Run ${BLUE}${pre_cmd}${PLAIN}"
  985. $pre_cmd
  986. echo
  987. }
  988. deploySamples(){
  989. if [ ! -d $PARAMS_FUNASR_SAMPLES_LOCAL_DIR ]; then
  990. echo -e "${YELLOW}Downloading samples to${PLAIN} ${CYAN}${PARAMS_FUNASR_LOCAL_WORKSPACE}${PLAIN} ${YELLOW}...${PLAIN}"
  991. download_cmd="curl ${DEFAULT_SAMPLES_URL} -o ${PARAMS_FUNASR_SAMPLES_LOCAL_PATH}"
  992. untar_cmd="tar -zxf ${PARAMS_FUNASR_SAMPLES_LOCAL_PATH} -C ${PARAMS_FUNASR_LOCAL_WORKSPACE}"
  993. if [ ! -f "$PARAMS_FUNASR_SAMPLES_LOCAL_PATH" ]; then
  994. $download_cmd
  995. fi
  996. $untar_cmd
  997. echo
  998. installPythonDependencyForPython
  999. echo
  1000. fi
  1001. }
  1002. getDockerId(){
  1003. id=""
  1004. array=($(${SUDO_CMD} docker ps -a | grep ${PARAMS_DOCKER_IMAGE} | awk '{print $1}'))
  1005. len=${#array[@]}
  1006. if [ $len -ge 1 ]; then
  1007. # get the first id
  1008. id=$array
  1009. if [ ! -z "$id" ]; then
  1010. PARAMS_FUNASR_DOCKER_ID=$id
  1011. fi
  1012. fi
  1013. }
  1014. checkDockerImageExist(){
  1015. result=1
  1016. if [ -z "$PARAMS_DOCKER_IMAGE" ]; then
  1017. return 50
  1018. else
  1019. result=$(${SUDO_CMD} docker ps | grep ${PARAMS_DOCKER_IMAGE} | wc -l)
  1020. fi
  1021. result=`expr ${result} + 0`
  1022. echo "checkDockerImageExist result0: " $result
  1023. if [ $result -ne 0 ]; then
  1024. # found docker
  1025. return 51
  1026. else
  1027. return 0
  1028. fi
  1029. }
  1030. checkDockerIdExist(){
  1031. result=0
  1032. if [ -z "$PARAMS_FUNASR_DOCKER_ID" ]; then
  1033. if [ -z "$PARAMS_DOCKER_IMAGE" ]; then
  1034. return 63
  1035. else
  1036. return 60
  1037. fi
  1038. else
  1039. if [ -z "$PARAMS_DOCKER_IMAGE" ]; then
  1040. return 61
  1041. else
  1042. if [ "$1" = "install" ]; then
  1043. result=$(${SUDO_CMD} docker ps -a | grep ${PARAMS_DOCKER_IMAGE} | grep ${PARAMS_FUNASR_DOCKER_ID} | wc -l)
  1044. else
  1045. result=$(${SUDO_CMD} docker ps | grep ${PARAMS_DOCKER_IMAGE} | grep ${PARAMS_FUNASR_DOCKER_ID} | wc -l)
  1046. fi
  1047. fi
  1048. fi
  1049. result=`expr ${result} + 0`
  1050. if [ $result -eq 1 ]; then
  1051. # found docker
  1052. return 62
  1053. else
  1054. return 0
  1055. fi
  1056. }
  1057. dockerStop(){
  1058. if [ -z "$PARAMS_FUNASR_DOCKER_ID" ]; then
  1059. echo -e " ${RED}DOCKER_ID is empty, cannot stop docker.${PLAIN}"
  1060. else
  1061. echo -e " ${YELLOW}Stop docker(${PLAIN}${GREEN}${PARAMS_DOCKER_IMAGE} ${PARAMS_FUNASR_DOCKER_ID}${PLAIN}${YELLOW}) server ...${PLAIN}"
  1062. ${SUDO_CMD} docker stop ${PARAMS_FUNASR_DOCKER_ID}
  1063. fi
  1064. echo
  1065. }
  1066. dockerRemove(){
  1067. if [ -z "$PARAMS_FUNASR_DOCKER_ID" ]; then
  1068. echo -e " ${RED}DOCKER_ID is empty, cannot remove docker.${PLAIN}"
  1069. else
  1070. echo -e " ${YELLOW}Remove docker(${PLAIN}${GREEN}${PARAMS_DOCKER_IMAGE} ${PARAMS_FUNASR_DOCKER_ID}${PLAIN}${YELLOW}) ...${PLAIN}"
  1071. ${SUDO_CMD} docker rm ${PARAMS_FUNASR_DOCKER_ID}
  1072. fi
  1073. echo
  1074. }
  1075. modelChange(){
  1076. model_type=$1
  1077. model_id=$2
  1078. local_flag=0
  1079. relativePathToFullPath $model_id
  1080. if [ -d "$full_path" ]; then
  1081. local_flag=1
  1082. model_id=$full_path
  1083. else
  1084. local_flag=0
  1085. fi
  1086. full_path=""
  1087. result=$(echo ${model_type} | grep "\-\-asr_model")
  1088. if [ "$result" != "" ]; then
  1089. if [ $local_flag -eq 0 ]; then
  1090. PARAMS_ASR_ID=$model_id
  1091. PARAMS_DOCKER_ASR_PATH=${PARAMS_DOWNLOAD_MODEL_DIR}/${PARAMS_ASR_ID}
  1092. PARAMS_DOCKER_ASR_DIR=$(dirname "${PARAMS_DOCKER_ASR_PATH}")
  1093. PARAMS_LOCAL_ASR_PATH=${PARAMS_FUNASR_LOCAL_MODELS_DIR}/${PARAMS_ASR_ID}
  1094. PARAMS_LOCAL_ASR_DIR=$(dirname "${PARAMS_LOCAL_ASR_PATH}")
  1095. else
  1096. PARAMS_ASR_ID=""
  1097. PARAMS_LOCAL_ASR_PATH=$model_id
  1098. if [ ! -d "$PARAMS_LOCAL_ASR_PATH" ]; then
  1099. echo -e " ${RED}${PARAMS_LOCAL_ASR_PATH} does not exist, please set again.${PLAIN}"
  1100. else
  1101. model_name=$(basename "${PARAMS_LOCAL_ASR_PATH}")
  1102. PARAMS_LOCAL_ASR_DIR=$(dirname "${PARAMS_LOCAL_ASR_PATH}")
  1103. PARAMS_DOCKER_ASR_DIR=$PARAMS_DOWNLOAD_MODEL_DIR
  1104. PARAMS_DOCKER_ASR_PATH=${PARAMS_DOCKER_ASR_DIR}/${model_name}
  1105. fi
  1106. fi
  1107. fi
  1108. result=$(echo ${model_type} | grep "\-\-vad_model")
  1109. if [ "$result" != "" ]; then
  1110. if [ $local_flag -eq 0 ]; then
  1111. PARAMS_VAD_ID=$model_id
  1112. PARAMS_DOCKER_VAD_PATH=${PARAMS_DOWNLOAD_MODEL_DIR}/${PARAMS_VAD_ID}
  1113. PARAMS_DOCKER_VAD_DIR=$(dirname "${PARAMS_DOCKER_VAD_PATH}")
  1114. PARAMS_LOCAL_VAD_PATH=${PARAMS_FUNASR_LOCAL_MODELS_DIR}/${PARAMS_VAD_ID}
  1115. PARAMS_LOCAL_VAD_DIR=$(dirname "${PARAMS_LOCAL_VAD_PATH}")
  1116. else
  1117. PARAMS_VAD_ID=""
  1118. PARAMS_LOCAL_VAD_PATH=$model_id
  1119. if [ ! -d "$PARAMS_LOCAL_VAD_PATH" ]; then
  1120. echo -e " ${RED}${PARAMS_LOCAL_VAD_PATH} does not exist, please set again.${PLAIN}"
  1121. else
  1122. model_name=$(basename "${PARAMS_LOCAL_VAD_PATH}")
  1123. PARAMS_LOCAL_VAD_DIR=$(dirname "${PARAMS_LOCAL_VAD_PATH}")
  1124. PARAMS_DOCKER_VAD_DIR=$PARAMS_DOWNLOAD_MODEL_DIR
  1125. PARAMS_DOCKER_VAD_PATH=${PARAMS_DOCKER_VAD_DIR}/${model_name}
  1126. fi
  1127. fi
  1128. fi
  1129. result=$(echo ${model_type} | grep "\-\-punc_model")
  1130. if [ "$result" != "" ]; then
  1131. if [ $local_flag -eq 0 ]; then
  1132. PARAMS_PUNC_ID=$model_id
  1133. PARAMS_DOCKER_PUNC_PATH=${PARAMS_DOWNLOAD_MODEL_DIR}/${PARAMS_PUNC_ID}
  1134. PARAMS_DOCKER_PUNC_DIR=$(dirname "${PARAMS_DOCKER_PUNC_PATH}")
  1135. PARAMS_LOCAL_PUNC_PATH=${PARAMS_FUNASR_LOCAL_MODELS_DIR}/${PARAMS_PUNC_ID}
  1136. PARAMS_LOCAL_PUNC_DIR=$(dirname "${PARAMS_LOCAL_PUNC_PATH}")
  1137. else
  1138. model_name=$(basename "${PARAMS_LOCAL_PUNC_PATH}")
  1139. PARAMS_LOCAL_PUNC_DIR=$(dirname "${PARAMS_LOCAL_PUNC_PATH}")
  1140. PARAMS_DOCKER_PUNC_DIR=$PARAMS_DOWNLOAD_MODEL_DIR
  1141. PARAMS_DOCKER_PUNC_PATH=${PARAMS_DOCKER_PUNC_DIR}/${model_name}
  1142. fi
  1143. fi
  1144. }
  1145. threadNumChange() {
  1146. type=$1
  1147. val=$2
  1148. if [ -z "$val"]; then
  1149. num=`expr ${val} + 0`
  1150. if [ $num -ge 1 ] && [ $num -le 1024 ]; then
  1151. result=$(echo ${type} | grep "\-\-decode_thread_num")
  1152. if [ "$result" != "" ]; then
  1153. PARAMS_DECODER_THREAD_NUM=$num
  1154. fi
  1155. result=$(echo ${type} | grep "\-\-io_thread_num")
  1156. if [ "$result" != "" ]; then
  1157. PARAMS_IO_THREAD_NUM=$num
  1158. fi
  1159. fi
  1160. fi
  1161. }
  1162. portChange() {
  1163. type=$1
  1164. val=$2
  1165. if [ ! -z "$val" ]; then
  1166. port=`expr ${val} + 0`
  1167. if [ $port -ge 1 ] && [ $port -le 65536 ]; then
  1168. result=$(echo ${type} | grep "host_port")
  1169. if [ "$result" != "" ]; then
  1170. PARAMS_HOST_PORT=$port
  1171. fi
  1172. result=$(echo ${type} | grep "docker_port")
  1173. if [ "$result" != "" ]; then
  1174. PARAMS_DOCKER_PORT=$port
  1175. fi
  1176. fi
  1177. fi
  1178. }
  1179. sampleClientRun(){
  1180. echo -e "${YELLOW}Will download sample tools for the client to show how speech recognition works.${PLAIN}"
  1181. download_cmd="curl ${DEFAULT_SAMPLES_URL} -o ${PARAMS_FUNASR_SAMPLES_LOCAL_PATH}"
  1182. untar_cmd="tar -zxf ${PARAMS_FUNASR_SAMPLES_LOCAL_PATH} -C ${PARAMS_FUNASR_LOCAL_WORKSPACE}"
  1183. if [ ! -f "$PARAMS_FUNASR_SAMPLES_LOCAL_PATH" ]; then
  1184. $download_cmd
  1185. fi
  1186. if [ -f "$PARAMS_FUNASR_SAMPLES_LOCAL_PATH" ]; then
  1187. $untar_cmd
  1188. fi
  1189. if [ -d "$PARAMS_FUNASR_SAMPLES_LOCAL_DIR" ]; then
  1190. echo -e " Please select the client you want to run."
  1191. menuSelection ${SAMPLE_CLIENTS[*]}
  1192. result=$?
  1193. index=`expr ${result} - 1`
  1194. lang=${SAMPLE_CLIENTS[${index}]}
  1195. echo
  1196. server_ip="127.0.0.1"
  1197. echo -e " Please enter the IP of server, default(${CYAN}${server_ip}${PLAIN}): \c"
  1198. read server_ip
  1199. if [ -z "$server_ip" ]; then
  1200. server_ip="127.0.0.1"
  1201. fi
  1202. host_port=`sed '/^PARAMS_HOST_PORT=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  1203. if [ -z "$host_port" ]; then
  1204. host_port="10095"
  1205. fi
  1206. echo -e " Please enter the port of server, default(${CYAN}${host_port}${PLAIN}): \c"
  1207. read host_port
  1208. if [ -z "$host_port" ]; then
  1209. host_port=`sed '/^PARAMS_HOST_PORT=/!d;s/.*=//' ${DEFAULT_FUNASR_CONFIG_FILE}`
  1210. if [ -z "$host_port" ]; then
  1211. host_port="10095"
  1212. fi
  1213. fi
  1214. wav_path="${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/audio/asr_example.wav"
  1215. echo -e " Please enter the audio path, default(${CYAN}${wav_path}${PLAIN}): \c"
  1216. read WAV_PATH
  1217. if [ -z "$wav_path" ]; then
  1218. wav_path="${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/audio/asr_example.wav"
  1219. fi
  1220. echo
  1221. pre_cmd=”“
  1222. case "$lang" in
  1223. Linux_Cpp)
  1224. client_exec="${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/cpp/funasr-wss-client"
  1225. run_cmd="${client_exec} --server-ip ${server_ip} --port ${host_port} --wav-path ${wav_path}"
  1226. ;;
  1227. Python)
  1228. client_exec="${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/python/funasr_wss_client.py"
  1229. run_cmd="python3 ${client_exec} --host ${server_ip} --port ${host_port} --mode offline --audio_in ${wav_path} --send_without_sleep --output_dir ${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/python"
  1230. pre_cmd="pip3 install click>=8.0.4"
  1231. echo -e " Run ${BLUE}${pre_cmd}${PLAIN}"
  1232. $pre_cmd
  1233. echo
  1234. pre_cmd="pip3 install -r ${PARAMS_FUNASR_SAMPLES_LOCAL_DIR}/python/requirements_client.txt"
  1235. echo -e " Run ${BLUE}${pre_cmd}${PLAIN}"
  1236. $pre_cmd
  1237. echo
  1238. ;;
  1239. *)
  1240. echo "${lang} is not supported."
  1241. ;;
  1242. esac
  1243. echo -e " Run ${BLUE}${run_cmd}${PLAIN}"
  1244. $run_cmd
  1245. echo
  1246. echo -e " If failed, you can try (${GREEN}${run_cmd}${PLAIN}) in your Shell."
  1247. echo
  1248. fi
  1249. }
  1250. paramsConfigure(){
  1251. initConfiguration
  1252. initParameters
  1253. selectDockerImages
  1254. selectModels
  1255. result=$?
  1256. result=`expr ${result} + 0`
  1257. if [ $result -ne 0 ]; then
  1258. return $result
  1259. fi
  1260. setupHostPort
  1261. complementParameters
  1262. return 0
  1263. }
  1264. # Display Help info
  1265. displayHelp(){
  1266. echo -e "${UNDERLINE}Usage${PLAIN}:"
  1267. echo -e " $0 [OPTIONAL FLAGS]"
  1268. echo
  1269. echo -e "funasr-runtime-deploy-offline-cpu-en.sh - a Bash script to install&run FunASR docker."
  1270. echo
  1271. echo -e "${UNDERLINE}Options${PLAIN}:"
  1272. echo -e " ${BOLD}-i, install, --install${PLAIN} Install and run FunASR docker."
  1273. echo -e " install [--workspace] <workspace in local>"
  1274. echo -e " install [--ssl] <0: close SSL; 1: open SSL, default:1>"
  1275. echo -e " ${BOLD}-s, start , --start${PLAIN} Run FunASR docker with configuration that has already been set."
  1276. echo -e " ${BOLD}-p, stop , --stop${PLAIN} Stop FunASR docker."
  1277. echo -e " ${BOLD}-m, remove , --remove${PLAIN} Remove FunASR docker installed."
  1278. echo -e " ${BOLD}-r, restart, --restart${PLAIN} Restart FunASR docker."
  1279. echo -e " ${BOLD}-u, update , --update${PLAIN} Update parameters that has already been set."
  1280. echo -e " update [--workspace] <workspace in local>"
  1281. echo -e " update [--asr_model | --vad_model | --punc_model] <model_id or local model path>"
  1282. echo -e " update [--host_port | --docker_port] <port number>"
  1283. echo -e " update [--decode_thread_num | io_thread_num] <the number of threads>"
  1284. echo -e " update [--ssl] <0: close SSL; 1: open SSL, default:1>"
  1285. echo -e " ${BOLD}-c, client , --client${PLAIN} Get a client example to show how to initiate speech recognition."
  1286. echo -e " ${BOLD}-o, show , --show${PLAIN} Displays all parameters that have been set."
  1287. echo -e " ${BOLD}-v, version, --version${PLAIN} Display current script version."
  1288. echo -e " ${BOLD}-h, help , --help${PLAIN} Display this help."
  1289. echo
  1290. echo -e " Version : ${scriptVersion} "
  1291. echo -e " Modify Date: ${scriptDate}"
  1292. }
  1293. parseInput(){
  1294. local menu
  1295. menu=($(echo "$@"))
  1296. len=${#menu[@]}
  1297. stage=""
  1298. if [ $len -ge 2 ]; then
  1299. for val in ${menu[@]}
  1300. do
  1301. result=$(echo $val | grep "\-\-")
  1302. if [ "$result" != "" ]; then
  1303. stage=$result
  1304. else
  1305. if [ "$stage" = "--workspace" ]; then
  1306. relativePathToFullPath $val
  1307. PARAMS_FUNASR_LOCAL_WORKSPACE=$full_path
  1308. full_path=""
  1309. if [ ! -z "$PARAMS_FUNASR_LOCAL_WORKSPACE" ]; then
  1310. mkdir -p $PARAMS_FUNASR_LOCAL_WORKSPACE
  1311. fi
  1312. elif [ "$stage" = "--ssl" ]; then
  1313. PARAMS_SSL_FLAG=`expr ${val} + 0`
  1314. fi
  1315. fi
  1316. done
  1317. fi
  1318. }
  1319. # OS
  1320. OSID=$(grep ^ID= /etc/os-release | cut -d= -f2)
  1321. OSVER=$(lsb_release -cs)
  1322. OSNUM=$(grep -oE "[0-9.]+" /etc/issue)
  1323. CPUNUM=$(cat /proc/cpuinfo | grep "processor"|wc -l)
  1324. DOCKERINFO=$(${SUDO_CMD} docker info | wc -l)
  1325. DOCKERINFOLEN=`expr ${DOCKERINFO} + 0`
  1326. # PARAMS
  1327. # The workspace for FunASR in local
  1328. PARAMS_FUNASR_LOCAL_WORKSPACE=$DEFAULT_FUNASR_LOCAL_WORKSPACE
  1329. # The dir stored sample code in local
  1330. PARAMS_FUNASR_SAMPLES_LOCAL_DIR=${PARAMS_FUNASR_LOCAL_WORKSPACE}/${DEFAULT_SAMPLES_DIR}
  1331. # The path of sample code in local
  1332. PARAMS_FUNASR_SAMPLES_LOCAL_PATH=${PARAMS_FUNASR_LOCAL_WORKSPACE}/${DEFAULT_SAMPLES_NAME}.tar.gz
  1333. # The dir stored models in local
  1334. PARAMS_FUNASR_LOCAL_MODELS_DIR="${PARAMS_FUNASR_LOCAL_WORKSPACE}/models"
  1335. # The id of started docker
  1336. PARAMS_FUNASR_DOCKER_ID=""
  1337. # The server excutor in local
  1338. PARAMS_DOCKER_EXEC_PATH=$DEFAULT_DOCKER_EXEC_PATH
  1339. # The dir stored server excutor in docker
  1340. PARAMS_DOCKER_EXEC_DIR=$DEFAULT_DOCKER_EXEC_DIR
  1341. # The dir for downloading model in docker
  1342. PARAMS_DOWNLOAD_MODEL_DIR=$DEFAULT_FUNASR_WORKSPACE_DIR
  1343. # The Docker image name
  1344. PARAMS_DOCKER_IMAGE=""
  1345. # The dir stored punc model in local
  1346. PARAMS_LOCAL_PUNC_DIR=""
  1347. # The path of punc model in local
  1348. PARAMS_LOCAL_PUNC_PATH=""
  1349. # The dir stored punc model in docker
  1350. PARAMS_DOCKER_PUNC_DIR=""
  1351. # The path of punc model in docker
  1352. PARAMS_DOCKER_PUNC_PATH=""
  1353. # The punc model ID in ModelScope
  1354. PARAMS_PUNC_ID="damo/punc_ct-transformer_zh-cn-common-vocab272727-onnx"
  1355. # The dir stored vad model in local
  1356. PARAMS_LOCAL_VAD_DIR=""
  1357. # The path of vad model in local
  1358. PARAMS_LOCAL_VAD_PATH=""
  1359. # The dir stored vad model in docker
  1360. PARAMS_DOCKER_VAD_DIR=""
  1361. # The path of vad model in docker
  1362. PARAMS_DOCKER_VAD_PATH=""
  1363. # The vad model ID in ModelScope
  1364. PARAMS_VAD_ID="damo/speech_fsmn_vad_zh-cn-16k-common-onnx"
  1365. # The dir stored asr model in local
  1366. PARAMS_LOCAL_ASR_DIR=""
  1367. # The path of asr model in local
  1368. PARAMS_LOCAL_ASR_PATH=""
  1369. # The dir stored asr model in docker
  1370. PARAMS_DOCKER_ASR_DIR=""
  1371. # The path of asr model in docker
  1372. PARAMS_DOCKER_ASR_PATH=""
  1373. # The asr model ID in ModelScope
  1374. PARAMS_ASR_ID="damo/speech_paraformer-large_asr_nat-en-16k-common-vocab10020-onnx"
  1375. PARAMS_HOST_PORT="10095"
  1376. PARAMS_DOCKER_PORT="10095"
  1377. PARAMS_DECODER_THREAD_NUM="32"
  1378. PARAMS_IO_THREAD_NUM="8"
  1379. PARAMS_SSL_FLAG=1
  1380. echo -e "#############################################################"
  1381. echo -e "# ${RED}OS${PLAIN}: ${OSID} ${OSNUM} ${OSVER}"
  1382. echo -e "# ${RED}Kernel${PLAIN}: $(uname -m) Linux $(uname -r)"
  1383. echo -e "# ${RED}CPU${PLAIN}: $(grep 'model name' /proc/cpuinfo | uniq | awk -F : '{print $2}' | sed 's/^[ \t]*//g' | sed 's/ \+/ /g') "
  1384. echo -e "# ${RED}CPU NUM${PLAIN}: ${CPUNUM}"
  1385. echo -e "# ${RED}RAM${PLAIN}: $(cat /proc/meminfo | grep 'MemTotal' | awk -F : '{print $2}' | sed 's/^[ \t]*//g') "
  1386. echo -e "#"
  1387. echo -e "# ${RED}Version${PLAIN}: ${scriptVersion} "
  1388. echo -e "# ${RED}Modify Date${PLAIN}: ${scriptDate}"
  1389. echo -e "#############################################################"
  1390. echo
  1391. # Initialization step
  1392. case "$1" in
  1393. install|-i|--install)
  1394. rootNess
  1395. paramsFromDefault
  1396. parseInput $@
  1397. paramsConfigure
  1398. result=$?
  1399. result=`expr ${result} + 0`
  1400. if [ $result -eq 0 ]; then
  1401. showAllParams "install"
  1402. installFunasrDocker
  1403. dockerRun "install"
  1404. result=$?
  1405. try_count=1
  1406. while true
  1407. do
  1408. stage=`expr ${result} + 0`
  1409. if [ $try_count -ge 10 ]; then
  1410. break
  1411. else
  1412. # 98: cannot find progress from Docker
  1413. if [ $stage -eq 98 ]; then
  1414. dockerStop
  1415. dockerRun "start"
  1416. result=$?
  1417. let try_count=try_count+1
  1418. else
  1419. break
  1420. fi
  1421. fi
  1422. done
  1423. fi
  1424. ;;
  1425. start|-s|--start)
  1426. rootNess
  1427. paramsFromDefault
  1428. showAllParams "only_show"
  1429. dockerRun "start"
  1430. result=$?
  1431. try_count=1
  1432. while true
  1433. do
  1434. stage=`expr ${result} + 0`
  1435. if [ $try_count -ge 10 ]; then
  1436. break
  1437. else
  1438. # 98: cannot find progress from Docker
  1439. if [ $stage -eq 98 ]; then
  1440. dockerStop
  1441. dockerRun "start"
  1442. result=$?
  1443. let try_count=try_count+1
  1444. else
  1445. break
  1446. fi
  1447. fi
  1448. done
  1449. ;;
  1450. restart|-r|--restart)
  1451. rootNess
  1452. paramsFromDefault
  1453. showAllParams "only_show"
  1454. dockerStop
  1455. dockerRun "start"
  1456. result=$?
  1457. try_count=1
  1458. while true
  1459. do
  1460. stage=`expr ${result} + 0`
  1461. if [ $try_count -ge 10 ]; then
  1462. break
  1463. else
  1464. # 98: cannot find progress from Docker
  1465. if [ $stage -eq 98 ]; then
  1466. dockerStop
  1467. dockerRun "start"
  1468. result=$?
  1469. let try_count=try_count+1
  1470. else
  1471. break
  1472. fi
  1473. fi
  1474. done
  1475. ;;
  1476. stop|-p|--stop)
  1477. rootNess
  1478. paramsFromDefault
  1479. dockerStop
  1480. ;;
  1481. remove|-m|--remove)
  1482. rootNess
  1483. paramsFromDefault
  1484. dockerStop
  1485. dockerRemove
  1486. rm -f ${DEFAULT_FUNASR_CONFIG_FILE}
  1487. rm -f ${DEFAULT_FUNASR_SERVER_CONFIG_FILE}
  1488. ;;
  1489. update|-u|--update)
  1490. rootNess
  1491. paramsFromDefault
  1492. if [ $# -eq 3 ]; then
  1493. type=$2
  1494. val=$3
  1495. if [ "$type" = "--asr_model" ] || [ "$type" = "--vad_model" ] || [ "$type" = "--punc_model" ]; then
  1496. modelChange $type $val
  1497. elif [ "$type" = "--decode_thread_num" ] || [ "$type" = "--io_thread_num" ]; then
  1498. threadNumChange $type $val
  1499. elif [ "$type" = "--host_port" ] || [ "$type" = "--docker_port" ]; then
  1500. portChange $type $val
  1501. elif [ "$type" = "--workspace" ]; then
  1502. relativePathToFullPath $val
  1503. PARAMS_FUNASR_LOCAL_WORKSPACE=$full_path
  1504. if [ ! -z "$PARAMS_FUNASR_LOCAL_WORKSPACE" ]; then
  1505. mkdir -p $PARAMS_FUNASR_LOCAL_WORKSPACE
  1506. fi
  1507. elif [ "$type" = "--ssl" ]; then
  1508. switch=`expr ${val} + 0`
  1509. if [ $switch -eq 0 ]; then
  1510. PARAMS_SSL_FLAG=0
  1511. else
  1512. PARAMS_SSL_FLAG=1
  1513. fi
  1514. else
  1515. displayHelp
  1516. fi
  1517. else
  1518. displayHelp
  1519. fi
  1520. initParameters
  1521. complementParameters
  1522. showAllParams "install"
  1523. dockerStop
  1524. dockerRun "start"
  1525. result=$?
  1526. try_count=1
  1527. while true
  1528. do
  1529. stage=`expr ${result} + 0`
  1530. if [ $try_count -ge 10 ]; then
  1531. break
  1532. else
  1533. # 98: cannot find progress from Docker
  1534. # 60: DOCKER_ID is empty
  1535. if [ $stage -eq 98 ] || [ $stage -eq 60 ]; then
  1536. dockerStop
  1537. dockerRun "start"
  1538. result=$?
  1539. let try_count=try_count+1
  1540. else
  1541. break
  1542. fi
  1543. fi
  1544. done
  1545. ;;
  1546. client|-c|--client)
  1547. rootNess
  1548. paramsFromDefault
  1549. parseInput $@
  1550. sampleClientRun
  1551. ;;
  1552. show|-o|--show)
  1553. rootNess
  1554. paramsFromDefault
  1555. showAllParams "only_show"
  1556. ;;
  1557. *)
  1558. displayHelp
  1559. exit 0
  1560. ;;
  1561. esac