diff --git a/app/src/main/cpp/yolov8ncnn.cpp b/app/src/main/cpp/yolov8ncnn.cpp index a441009..7e1174f 100644 --- a/app/src/main/cpp/yolov8ncnn.cpp +++ b/app/src/main/cpp/yolov8ncnn.cpp @@ -56,6 +56,57 @@ return 0; } +static int draw_fps(cv::Mat &rgb) { + // resolve moving average + double avg_fps = 0.f; + { + static double t0 = 0.f; + static double fps_history[10] = {0.f}; + + double t1 = ncnn::get_current_time(); + if (t0 == 0.f) { + t0 = t1; + return 0; + } + + double fps = 1000.f / (t1 - t0); + t0 = t1; + + for (int i = 9; i >= 1; i--) { + fps_history[i] = fps_history[i - 1]; + } + fps_history[0] = fps; + + if (fps_history[9] == 0.f) { + return 0; + } + + for (double i: fps_history) { + avg_fps += i; + } + avg_fps /= 10.f; + } + + char text[32]; + sprintf(text, "FPS=%.2f", avg_fps); + + int baseLine = 0; + cv::Size label_size = cv::getTextSize(text, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine); + + int y = 0; + int x = rgb.cols - label_size.width; + + cv::rectangle(rgb, + cv::Rect(cv::Point(x, y), + cv::Size(label_size.width, label_size.height + baseLine)), + cv::Scalar(255, 255, 255), -1); + + cv::putText(rgb, text, cv::Point(x, y + label_size.height), + cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0)); + + return 0; +} + static Yolo *yolo_ptr = nullptr; static ncnn::Mutex lock; static JavaVM *jvm_ptr = nullptr; @@ -87,6 +138,9 @@ draw_unsupported(rgb); } } + + //实时显示画面FPS值 +// draw_fps(rgb); } static MyNdkCamera *camera_ptr = nullptr;