def analysis_test(test_id):
    logging.info("test_id: %s" % test_id)

    mongo = db.Mongo()
    wav_test_info = mongo.get_wav_test_info(test_id)

    result = {"status": "finished", "feature": {}}
    audio_key = ''
    file_location = ''
    try:
        file_location = wav_test_info.get('file_location', 'local')
        audio_key = wav_test_info['wav_upload_url']
        file = get_wav_file_bytes_io(audio_key, file_location)
        if file is not None:
            result['feature'] = analysis_features.analysis1(
                file,
                wav_test_info['text'],
                timeout=30,
                rcg_interface='baidu',
                segments=1)
            result['analysis_end_time'] = datetime.datetime.utcnow()
        else:
            logging.error(
                'pre-test: Finally failed to get audio file from %s after retries.'
                % file_location)
    except Exception as e:
        tr = traceback.format_exc(
        ) + "\naudio:" + audio_key + "\nfile_location:" + file_location
        print(tr)
        logging.error('error happened during process task: %s' % e)
        result["status"] = 'error'
    mongo.save_test_result(test_id, result)
    return result["status"]
    def __init__(self):
        config = configparser.ConfigParser()
        config.read('collect_bot.ini')
        config_map = {}
        for key in config.keys():
            config_map[key] = dict(config.items(key))

        if config_map["bot"]["db_type"] == "mongo":
            self.db = db.Mongo()
        else:
            raise Exception("invalid db type.", config_map["bot"]["db_type"])

        if "url" not in config_map["kakao"]:
            raise Exception("invalid config (not exit url)")

        if "key" not in config_map["kakao"]:
            raise Exception("invalid config (not exit key)")

        self.addr_loader = addr_data_loader.AddrDataLoader()
        self.runner = runner.Runner()
        self.progress_bar = {}
        self.kakao_addr_api_url = config_map["kakao"]["url"]
        self.kakao_addr_api_key = config_map["kakao"]["key"]
Пример #3
0
        rating = float(input("Rating?"))
        imdb = int(input("IMDB?"))
        opinion = input("Opinion?")

        film1 = cinema.Film(title, date, rating, imdb, opinion)
        cinema.Film.printFilm(film1)

        ok = input("Upload? (yes/no)")
        if ok == "yes":
            return film1


# Program starts here
# m1 is the server instance
m1 = db.Mongo(askConStr())

menu = 0
while menu != 4:
    print("\n---------------------")
    print("1. New film")
    print("2. See top films")
    print("4. Exit")
    print("---------------------")
    menu = int(input("Choice?"))

    if menu == 1:
        # ask new film
        film1 = askFilm()
        m1.uploadFilm(film1)
    elif menu == 2:
def analysis_main(current_id, q_num):
    _start_time = datetime.datetime.utcnow()
    logging.info("current_id: %s, q_num: %s" % (current_id, q_num))
    feature = {}
    score = 0
    tr = None
    file_location = ''
    audio_key = ''

    mongo = db.Mongo()

    user_answer_info = mongo.get_user_answer_info(current_id, q_num)
    # 要使用传入的 q_num 而不使用 current表中的 current_q_num,因为 current_q_num 只是django维护的临时标记,随时会改变。

    q = mongo.get_problem(user_answer_info['q_id'])

    celery_result = 'no exception or been caught'
    try:
        file_location = user_answer_info.get('file_location', 'local')
        audio_key = user_answer_info['wav_upload_url']
        Q_type = q['q_type']
        file = get_wav_file_bytes_io(audio_key, file_location)
        if file is not None:
            if Q_type == 1:
                # 默认用百度识别
                feature = analysis_features.analysis1(file,
                                                      q['text'],
                                                      timeout=30,
                                                      rcg_interface='baidu')
                score = analysis_scores.score1(feature, rcg_interface='baidu')
                # feature = analysis_features.analysis1(file, q['text'], timeout=30, rcg_interface='xunfei')
                # score = analysis_scores.score1(feature,rcg_interface='xunfei')
            elif Q_type in [2, 5, 6, 7]:
                key_weights = q['weights']['key']
                detail_weights = q['weights']['detail']
                feature = analysis_features.analysis2(file,
                                                      q['wordbase'],
                                                      timeout=30)
                score = analysis_scores.score2(feature['key_hits'],
                                               feature['detail_hits'],
                                               key_weights, detail_weights)
            elif Q_type == 3:
                feature = analysis_features.analysis3(file,
                                                      q['wordbase'],
                                                      timeout=30)
                score = analysis_scores.score3(feature)
            else:
                logging.error('Invalid question type: %s' % Q_type)
            status = 'finished'
            tr = None
        else:
            logging.error(
                'analysis_main: Finally failed to get audio file from %s after retries.'
                % file_location)
            status = 'error'

    except Exception as e:
        tr = traceback.format_exc(
        ) + "\naudio:" + audio_key + "\nfile_location:" + file_location
        print(tr)
        logging.error('error happened during process task: %s' % e)
        status = 'error'
        celery_result = str(e)

    user_answer_info['analysis_start_time'] = _start_time
    logging.info('Score: %s' % score)
    tries = 1
    while tries <= 3:
        try:
            mongo.save_result(current_id,
                              q_num,
                              user_answer_info,
                              feature,
                              score,
                              status=status,
                              stack=tr)
            break
        except Exception as e:
            logging.exception(
                'Exception(tries:%d/3) saving (%s) result to mongodb: %s' %
                (tries, current_id, str(e)))
            tries += 1
    return celery_result
 def __init__(self, config_map):
     self.config_map = config_map
     if self.config_map["bot"]["db_type"] == "mongo":
         self.db = db.Mongo()
     else:
         raise Exception("invalid db type.", self.config_map["bot"]["db_type"])