Forráskód Böngészése

Add test for sherpa-ncnn-ffmpeg (#119)

Fangjun Kuang 2 éve
szülő
commit
1a6bca6c13

+ 16 - 0
.github/scripts/run-test.sh

@@ -92,6 +92,22 @@ for wave in ${waves[@]}; do
   done
 done
 
+# Decode a URL
+if [ $EXE == "sherpa-ncnn-ffmpeg" ]; then
+  time $EXE \
+    $repo/tokens.txt \
+    $repo/encoder_jit_trace-pnnx.ncnn.param \
+    $repo/encoder_jit_trace-pnnx.ncnn.bin \
+    $repo/decoder_jit_trace-pnnx.ncnn.param \
+    $repo/decoder_jit_trace-pnnx.ncnn.bin \
+    $repo/joiner_jit_trace-pnnx.ncnn.param \
+    $repo/joiner_jit_trace-pnnx.ncnn.bin \
+    https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-04/resolve/main/test_wavs/1089-134686-0001.wav \
+    4 \
+    $m
+fi
+
+
 rm -rf $repo
 
 log "------------------------------------------------------------"

+ 30 - 0
.github/workflows/linux.yaml

@@ -9,6 +9,7 @@ on:
       - '.github/scripts/run-test.sh'
       - 'CMakeLists.txt'
       - 'cmake/**'
+      - 'ffmpeg-examples/**'
       - 'sherpa-ncnn/csrc/*'
   pull_request:
     branches:
@@ -18,6 +19,8 @@ on:
       - '.github/scripts/run-test.sh'
       - 'CMakeLists.txt'
       - 'cmake/**'
+      - 'ffmpeg-examples/**'
+      - 'sherpa-ncnn/csrc/*'
       - 'sherpa-ncnn/csrc/*'
 
 concurrency:
@@ -40,6 +43,23 @@ jobs:
         with:
           fetch-depth: 0
 
+      - name: Install ffmpeg
+        shell: bash
+        run: |
+          sudo apt-get install -y software-properties-common
+          sudo add-apt-repository ppa:savoury1/ffmpeg4
+          sudo add-apt-repository ppa:savoury1/ffmpeg5
+
+          sudo apt-get install -y libavdevice-dev libavutil-dev ffmpeg
+          pkg-config --modversion libavutil
+          ffmpeg -version
+
+      - name: Show ffmpeg version
+        shell: bash
+        run: |
+          pkg-config --modversion libavutil
+          ffmpeg -version
+
       - name: Configure CMake
         shell: bash
         run: |
@@ -64,12 +84,22 @@ jobs:
           ls -lh bin/decode-file-c-api
           file bin/decode-file-c-api
 
+          cd ../ffmpeg-examples
+          make
+
       - name: Upload binary sherpa-ncnn and sherpa-ncnn-microphone
         uses: actions/upload-artifact@v2
         with:
           name: sherpa-ncnn-pre-built-binaries-os-${{ matrix.os }}
           path: ./build/bin
 
+      - name: Test sherpa-ncnn-ffmpeg
+        run: |
+          export PATH=$PWD/ffmpeg-examples:$PATH
+          export EXE=sherpa-ncnn-ffmpeg
+
+          .github/scripts/run-test.sh
+
       - name: Test sherpa-ncnn
         run: |
           export PATH=$PWD/build/bin:$PATH

+ 1 - 0
.gitignore

@@ -99,3 +99,4 @@ fastlane/test_output
 
 iOSInjectionProject/
 .DS_Store
+sherpa-ncnn-ffmpeg

+ 2 - 2
ffmpeg-examples/Makefile

@@ -25,7 +25,7 @@ LIBAVUTIL_MICRO := $(shell echo "$(LIBAVUTIL_VERSION)" | awk -F. '{print $$3}')
 #Check if libavutil version is 57.28.100 or above
 FFMPEG_51_AND_ABOVE = $(shell echo "$(LIBAVUTIL_MAJOR) $(LIBAVUTIL_MINOR) $(LIBAVUTIL_MICRO)" | awk '{if ($$1 > 57 || ($$1 == 57 && $$2 > 28) || ($$1 == 57 && $$2 == 28 && $$3 >= 100)) print "TRUE"; else print "FALSE"}')
 ifeq ($(FFMPEG_51_AND_ABOVE), FALSE)
-	$(error FFmpeg version should be n5.1 or above!)
+$(error FFmpeg version should be n5.1 or above!)
 endif
 
 EXAMPLES=sherpa-ncnn-ffmpeg
@@ -46,7 +46,7 @@ $(EXAMPLES): $(OBJS)
 
 clean:
 	$(RM) $(EXAMPLES) $(OBJS)
-    
+
 build_info:
 	@echo "libavutil version: $(LIBAVUTIL_VERSION)"
 	@echo "Supported examples: $(EXAMPLES)"

+ 34 - 0
ffmpeg-examples/README.md

@@ -0,0 +1,34 @@
+# Fixes for errors
+
+To fix the following error:
+```
+Package libavdevice was not found in the pkg-config search path.
+```
+please run
+
+```
+sudo apt-get install libavdevice-dev
+```
+
+To fix the following error
+```
+Makefile:28: *** FFmpeg version should be n5.1 or above!.  Stop.
+```
+please run
+```
+sudo apt-get install software-properties-common
+sudo add-apt-repository ppa:savoury1/ffmpeg4
+sudo add-apt-repository ppa:savoury1/ffmpeg5
+sudo apt-get update
+sudo apt-get install ffmpeg --reinstall
+sudo apt-get install libavutil-dev --reinstall
+```
+
+To fix the following error:
+```
+ModuleNotFoundError: No module named 'apt_pkg'
+```
+please run:
+```
+sudo apt-get install python-apt
+```

+ 49 - 0
ffmpeg-examples/run.sh

@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+set -ex
+
+if [ ! -d ./sherpa-ncnn-conv-emformer-transducer-2022-12-06 ]; then
+  echo "Please download the pre-trained model for testing."
+  echo "You can refer to"
+  echo ""
+  echo "https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/conv-emformer-transducer-models.html#csukuangfj-sherpa-ncnn-conv-emformer-transducer-2022-12-06-chinese-english"
+  echo "for help"
+  exit 1
+fi
+
+if [ ! -f ../build/lib/libsherpa-ncnn-core.a ]; then
+  echo "Please build sherpa-ncnn first. You can use"
+  echo ""
+  echo "  cd /path/to/sherpa-ncnn"
+  echo "  mkdir build"
+  echo "  cd build"
+  echo "  cmake .."
+  echo "  make -j4"
+  exit 1
+fi
+
+if [ ! -f ./sherpa-ncnn-ffmpeg ]; then
+  make
+fi
+
+../ffmpeg-examples/sherpa-ncnn-ffmpeg \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/tokens.txt \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.param \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.bin \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.param \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.bin \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.param \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.bin \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/test_wavs/0.wav
+
+
+../ffmpeg-examples/sherpa-ncnn-ffmpeg \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/tokens.txt \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.param \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.bin \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.param \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.bin \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.param \
+  ./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.bin \
+  https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-06/resolve/main/test_wavs/0.wav
+

+ 6 - 6
ffmpeg-examples/sherpa-ncnn-ffmpeg.c

@@ -48,7 +48,7 @@
 
 /**
  * @file audio decoding and filtering usage example
- * @example decode_filter_audio.c
+ * @example sherpa-ncnn-ffmpeg.c
  *
  * Demux, decode and filter audio input file, generate a raw audio
  * file to be played with ffplay.
@@ -266,7 +266,7 @@ int main(int argc, char **argv)
     const char *kUsage =
         "\n"
         "Usage:\n"
-        "  ./bin/decode-file-c-api \\\n"
+        "  ./sherpa-ncnn-ffmpeg \\\n"
         "    /path/to/tokens.txt \\\n"
         "    /path/to/encoder.ncnn.param \\\n"
         "    /path/to/encoder.ncnn.bin \\\n"
@@ -300,16 +300,16 @@ int main(int argc, char **argv)
     model_config.decoder_bin = argv[5];
     model_config.joiner_param = argv[6];
     model_config.joiner_bin = argv[7];
-  
+
     if (argc >= 10 && atoi(argv[9]) > 0) {
         num_threads = atoi(argv[9]);
     }
     model_config.num_threads = num_threads;
     model_config.use_vulkan_compute = 0;
-  
+
     SherpaNcnnDecoderConfig decoder_config;
     decoder_config.decoding_method = "greedy_search";
-  
+
     if (argc == 11) {
         decoder_config.decoding_method = argv[10];
     }
@@ -318,7 +318,7 @@ int main(int argc, char **argv)
     decoder_config.rule1_min_trailing_silence = 2.4;
     decoder_config.rule2_min_trailing_silence = 1.2;
     decoder_config.rule3_min_utterance_length = 300;
-  
+
     SherpaNcnnRecognizer *recognizer =
         CreateRecognizer(&model_config, &decoder_config);