recognize.h 2.93 KB
#ifndef RECOGNIZE_H
#define RECOGNIZE_H


#include "jthread.h"
#include <iostream>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <list>
#include <fstream>
#include <stdio.h>
#include <sstream>
#include <algorithm>
#include <vector> 
#include <iterator>
#include <sys/stat.h>
#include <lavidlib/io/FileIO.h>
#include "logging.h"
#include "recognizeListener.h"
#include "recognizeException.h"

#include "wavcut.h"
#include "recognizer.h"

#define FREQUENCY_PATTERN 22050
#define INPUT_PATTERN 1 /* 1 = Raw file, 2 = Mic */
#define BLOCS_PATTERN 10
#define SIZE_BUFFER 256
#define CONFIDENCE_RATE 0.10

#define RECOGNIZER_MODE 1 // 0 = Julius, 1 = Google
#define PATH_JCONFIG "vlibras_user/vlibras-core/recognize/src/julius.jconf"
#define PATH_WCONFIG "vlibras_user/vlibras-core/recognize/src/wavcut.jconf"
#define PATH_AUDIO_ORIGIN "/audio/origin/audio_origin.wav"
#define PATH_AUDIO_PARTS "/audio/parts/"
#define FILENAME_RECOGNIZED_OUT "/audio/recognized.out"
#define FILENAME_AUDIOLIST "/audio/audiolist"
#define FILENAME_FILTEROUT "/audio/filter"
#define FILENAME_CONFIDENCEOUT "/audio/confidence"

#define FIND_CONFIDENCE "\"cmscore1:\""
#define FIND_SENTENCE "\"sentence1:\""

#define FILENAME_AUDIOPART "audio00"
#define AUDIO_SILENT "<input rejected by short input>"

#define PROGRAM "ffmpeg" // ffmpeg
#define PTS_PATTERN 1000

using namespace jthread;
using namespace std;
using namespace util;

class Recognize: public Thread {

public:	

	Recognize(char* _pathVideo,  char* id);	
	Recognize(char* _pathVideo,  char* id, char* rate);
	Recognize(char* _pathVideo, int _inputType,  char* id);
	~Recognize();

	/* 
	 * Inicializa o processo de reconhecimento do áudio, considerando que
	 * todos os parâmetros foram configurados.
	 */
	void initialize();
	/* 
	 * Define a frenquencia do audio a ser analisada pelo Julius.
	 * Necessário configurar o arquivo de configuração (.jconf).
	 */
	void setFrequency(int freq);
	/* 
	 * Define o tamanho em segundos de cada parte retirada do audio original.
	 */
	void setSizeAudioBlocs(int sec);
	void setPathAudioContents(char* path);

	void addListener(RecognizeListener* listener);

	bool isFinished();

    void Run();
	int count_lines;

private:
	
	char* path_contents;
	char* pathVideo;
	string id;
	float confidenceRate;
	bool finish;
	vector<float> scores;
	vector<int64_t> pts;

	
	/** inputType: 1 = RawFile, 2 = Mic */
	int inputType, frequency, sizeBlocs;

	list<RecognizeListener*> *listeners;
	
	char* extractAudioFromVideo();
	int getTimeMediaSec();
	
	/* @Deprecated */
	void breakVideoParts(int timeTotal);

	void executeJuliusEngine();
	void filterOutputJulius();
	void generateConfidence();
	void notifyListeners(char* text, int64_t pts);
	void notifyEndExtraction(int sentences_size);
	
	void cleanFiles();
	void createDir();
	bool getConfidence();
	
	int64_t calcula_pts(double msec);
	int64_t convert_pts(string pts);

	void executeGoogleEngine();
	Jconf* load_config();

};

#endif // RECOGNIZE_H