Skip to content

charlestamz/vqaSDK_examples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VQASDK 事例程序

支持视频质量检测的SDK

目标操作系统:

Centos 7.4 或rlel 7.4

依赖:

Opencv 3.4.6 
ffmpeg 
boost-devel 
zlib-devel 
bzip2-devel 
sqlite 
sqlite-devel 
openssl-devel 
freetype
libpng-devel 
libjpeg-devel

特性:

支持c++/c接口调用

c接口说明

 //
 // Created by Charles Tamz on 10/17/2017.
 //
 
 #pragma once
 
 #include "vqasdk_export.h"
 #ifdef __cplusplus
 extern "C" {
 #endif
 struct VQAThreshold {
   int brightness{50};    //  亮度异常,类型ID=101
   int contrast{50};      //  对比度异常,类型ID=102
   int color_cast{50};    //  颜色异常(偏色),类型ID=103
   int no_signal{50};     //  信号丢失(黑屏、蓝屏、LOGO屏),类型ID=104
   int freeze{50};        //  视频冻结,类型ID=105
   int blur{50};          //  图像模糊(清晰度异常),类型ID=106
   int noise{50};         //  图像噪声,类型ID=107
   int bars{50};          //  图像条纹,类型ID=108
   int scene_change{50};  //  场景改变,类型ID=109
   int occlusion{50};     //  画面遮挡,类型ID=110
   int ptz_exception{50}; //  PTZ异常,类型ID=111
   int shaking{50};       //  视频抖动,类型ID=112
 };
 
 struct VQAResult {
   int brightness{0};    //  亮度异常,类型ID=101
   int contrast{0};      //  对比度异常,类型ID=102
   int color_cast{0};    //  颜色异常(偏色),类型ID=103
   int no_signal{0};     //  信号丢失(黑屏、蓝屏、LOGO屏),类型ID=104
   int freeze{0};        //  视频冻结,类型ID=105
   int blur{0};          //  图像模糊(清晰度异常),类型ID=106
   int noise{0};         //  图像噪声,类型ID=107
   int bars{0};          //  图像条纹,类型ID=108
   int scene_change{0};  //  场景改变,类型ID=109
   int occlusion{0};     //  画面遮挡,类型ID=110
   int ptz_exception{0}; //  PTZ异常,类型ID=111
   int shaking{0};       //  视频抖动,类型ID=112
 };
 
 /**
  * set the SDK's params
  * 设置sdk默认参数
  * @param width
  * @param height
  * @param profile_path
  */
 void VQASDK_EXPORT initSDKParams(int width, int height, const char *profile_path);
 /**
  * 对一帧进行数据诊断
  *
  * @param yuvdata
  * @param width
  * @param height
  */
 void VQASDK_EXPORT vqaFrame(const char *yuvdata, VQAResult *result, VQAThreshold *threshold, int width, int height);
 /**
  * 对连续帧进行检测
  * @param yuvdata yuv图像序列
  * @param reference_yuvdata 参考帧
  * @param width 宽度
  * @param height 高度
  * @param frame_count 需要检测的帧数
  * @show
  * @return
  */
 float VQASDK_EXPORT vqa(const char *yuvdata,
                         const char *reference_yuvdata,
                         VQAResult *result,
                         VQAThreshold *threshold,
                         int width,
                         int height,
                         int frame_count, bool show);
 
 #ifdef __cplusplus
 }
 #endif
   

SDK使用流程

  1. 引入头文件 pyvqa.h
  2. 初始化SDK参数
	//sdk_cfg_path为默认初始化参数路径,可以为空,为空时选择使用默认参数
  initSDKParams(width, height, sdk_cfg_path);
  1. 阈值定义 VQAThreshold 为阈值,初始化默认设置为50,数值越小越敏感,误报越多,数值越大越迟钝,误报越少。具体在实际环境中使用时,建议全部使用默认参数50,当发现某一类误报多或检测比较迟钝时,再具体调低阈值。
  2. 检测结果 SDK采用的是多帧混合的模式提供检测准确度,检测结果为多帧的联合结果。检测结果为VQAResult显示的结果,但某具体检测值大于设定阈值时,所以该项检测结果为确定结果。 比如传入VQAThreshold结构体shaking设置为50,当VQAResult返回的shaking值大于50时,说明检测结果抖动。

c接口调用示例:test_vqa_c.cpp>

//
// Created by kanbig on 19-5-8.
//

//
#include <stdio.h>
#include <malloc.h>
#include "vqasdk_export.h"
#include "pyvqa.h"

int main() {
  char *sdk_cfg_path = "/home/kanbig/vqaSDK";
  char *yuv_data_path = "/home/charlie/Videos/video_quality/bus_cif.yuv";
  int width = 352;
  int height = 288;
  const int framesize = width * height * 3 / 2;   //一副图所含的像素个数
  initSDKParams(width, height, sdk_cfg_path);
  FILE *fileIn = fopen(yuv_data_path, "rb+");

  if (fileIn == NULL) {
    printf("the file is error\n");
    return -1;
  }
  fseek(fileIn, 0L, SEEK_END);
  long ps = ftell(fileIn);

  unsigned frame_count = ps / framesize; //帧大小
  printf("file size: %d   frame count: %d \n", ps, frame_count); //输出帧数
  int vqa_frames_count = 10;
  char pYuvBuf[framesize * vqa_frames_count]; //一帧数据大小
  //存储到图像
  rewind(fileIn);
  for (int i = 0; i < frame_count; ++i) {
    struct VQAResult result;
    struct VQAThreshold threshold;
    fread(pYuvBuf, framesize * vqa_frames_count * sizeof(char), 1, fileIn);
    vqa(pYuvBuf, pYuvBuf, &result, &threshold, width, height, vqa_frames_count, 1);
    printf(" result :  "
           "亮度异常,类型ID=101: %d  \n  "
           "对比度异常,类型ID=102: %d  \n "
           "颜色异常(偏色),类型ID=103: %d  \n "
           "信号丢失(黑屏、蓝屏、LOGO屏),类型ID=104: %d  \n "
           "视频冻结,类型ID=105: %d  \n "
           "图像模糊(清晰度异常),类型ID=106: %d  \n "
           "图像噪声,类型ID=107: %d  \n "
           "图像条纹,类型ID=108: %d  \n "
           "场景改变,类型ID=109: %d  \n "
           "画面遮挡,类型ID=110: %d  \n "
           "PTZ异常,类型ID=111: %d  \n "
           "视频抖动,类型ID=112 ): %d  \n ",
           result.brightness,
           result.contrast,
           result.color_cast,
           result.no_signal,
           result.freeze,
           result.blur,
           result.noise,
           result.bars,
           result.scene_change,
           result.occlusion,
           result.ptz_exception,
           result.shaking);
    printf("第 %d 帧\n", i);
    i += vqa_frames_count;
  }

  fclose(fileIn);

  return 0;
}

About

视频质量检测sdk 示例

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published