From 6bec10d583af909a783dee3756cf9152f9a4a68b Mon Sep 17 00:00:00 2001 From: ZurMaD <pablo.diazv@pucp.edu.pe> Date: Fri, 26 Mar 2021 18:05:59 -0500 Subject: [PATCH] Beta v0.2 release --- README.md | 7 ++++--- docs/banner.png | Bin 5344 -> 30157 bytes main.py | 47 ++++++++++++++++++++++++++--------------------- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index c97a563..becfa7e 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,12 @@ <a href="#"> <img src="docs/banner.png"> </a> - <h3 align="center">AiCleaner<br> - Audio denoising real-time powered by artificial intelligence (Alpha)</h3> + <h3 align="center">VoiceCleaner<br> + Audio denoising real-time powered by artificial intelligence (Beta)</h3> </p> ->Name of the project may change on future. +>Name of the project may change on future. +>Old-name: aicleaner <hr style="height:2px;border-width:0;color:gray;background-color:gray"> <!-- TABLE OF CONTENTS --> diff --git a/docs/banner.png b/docs/banner.png index b0d8ad4a10d1b58c2d363beae4ba9ca0128e6e33..e674ad553f14daa94f421c2e6576695c963d3eeb 100644 GIT binary patch literal 30157 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 CmyC!2 literal 5344 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 KbqjQ^g#8a#^q->u diff --git a/main.py b/main.py index 2c367b8..424bca5 100644 --- a/main.py +++ b/main.py @@ -37,7 +37,7 @@ sample_rate_output = 8000 # default 8000 due restrictions, can't be more by 2021-03-02 record_seconds = 1.2 # default 1.1 due some restrictions INITIAL_DELAY_SECONDS = 0.5 # initial delay in seconds to create threads -DELAY_IDLE=0.01 # seconds to sleep until check again the queue +DELAY_IDLE = 0.01 # seconds to sleep until check again the queue console.print("[GLOBAL CONFIGS] Finish loading variables and constants.", style="bold green") @@ -61,7 +61,7 @@ def hello(): |Mantainer: Pablo Diaz (github.com/zurmad) | |Github: https://github.com/DZDL/aicleaner | |License: MIT | -|Version: Alpha v0.1 [2020-03-13] | +|Version: Alpha v0.2 [2020-03-26] | |Operative System detected: {} |Branch: MultiProcessing - 4 main Process (Server, Record, Process, Play) | |---------------------------------------------------------------------------------------------|""".format(sys.platform), style="bold yellow") @@ -159,7 +159,8 @@ def record_only_Process(queue_data_recorded, numframes = int(sample_rate_input*record_seconds) default_mic = sc.default_microphone() - recorder = default_mic.recorder(sample_rate_input, channels=channels, blocksize=256) + recorder = default_mic.recorder( + sample_rate_input, channels=channels, blocksize=256) with recorder as r: while True: @@ -200,7 +201,7 @@ def process_only_Process(queue_data_recorded, # release the first queued but get the value mydata = queue_data_recorded.get() console.print('{} PROCESS: {}'.format(process_name, - str(number)),style="bold green") + str(number)), style="bold green") # With data as numpy array mydata_predicted = executeprediction(aimodel='speechenhancement', @@ -212,7 +213,7 @@ def process_only_Process(queue_data_recorded, queue_data_to_play_index.put(number) queue_data_to_play.put(mydata_predicted) else: - time.sleep(DELAY_IDLE) # to don't stress cpu + time.sleep(DELAY_IDLE) # to don't stress cpu def play_only_Process(queue_data_to_play, @@ -230,7 +231,8 @@ def play_only_Process(queue_data_to_play, time.sleep(INITIAL_DELAY_SECONDS*2) default_speaker = sc.default_speaker() - default_speaker_player = default_speaker.player(sample_rate_output, channels=channels, blocksize=256) + default_speaker_player = default_speaker.player( + sample_rate_output, channels=channels, blocksize=256) with default_speaker_player as p: while True: @@ -245,7 +247,7 @@ def play_only_Process(queue_data_to_play, p.play(mydata_predicted/numpy.max(mydata_predicted)) else: - time.sleep(DELAY_IDLE) # to don't stress cpu + time.sleep(DELAY_IDLE) # to don't stress cpu def power_on_tensorflow_serving_Process(): @@ -258,22 +260,22 @@ def power_on_tensorflow_serving_Process(): api_port = 8501 model_name = 'model_unet' model_base_path = os.path.dirname(os.path.abspath('main.py')) - model_relative_path=model_base_path+'/aimodels/speechenhancement/serving/' + model_relative_path = model_base_path+'/aimodels/speechenhancement/serving/' command = 'tensorflow_model_server --rest_api_port={} --model_name={} --model_base_path="{}"'.format(api_port, - model_name, - model_relative_path) + model_name, + model_relative_path) process_name = current_process().name console.print('{} TENSORFLOW SERVER TURNING ON...'.format(process_name), - style="bold green") + style="bold green") # Turn on print(command) os.popen(command) console.print('{} TENSORFLOW SERVER READY.'.format(process_name), - style="bold green") + style="bold green") """ @@ -297,7 +299,8 @@ def power_on_tensorflow_serving_Process(): time.sleep(INITIAL_DELAY_SECONDS) # drivers slow start needed # Turn on server of tensorflow serving - P0_SERVER_PROCESS=Process(target=power_on_tensorflow_serving_Process,name='[P0][SERVER]') + P0_SERVER_PROCESS = Process(target=power_on_tensorflow_serving_Process, + name='[P0][SERVER]') P0_SERVER_PROCESS.start() P0_SERVER_PROCESS.join() @@ -305,18 +308,20 @@ def power_on_tensorflow_serving_Process(): # Record voice continously P1_RECORDER_PROCESS = Process(target=record_only_Process, - args=((queue_data_recorded),(queue_data_recorded_index)), - name='[P1][RECORDER]') + args=((queue_data_recorded), + (queue_data_recorded_index)), + name='[P1][RECORDER]') # Process as queued - P2_PROCESSMODEL_PROCESS = Process(target=process_only_Process, - args=((queue_data_recorded), - (queue_data_recorded_index), + P2_PROCESSMODEL_PROCESS = Process(target=process_only_Process, + args=((queue_data_recorded), + (queue_data_recorded_index), (queue_data_to_play), (queue_data_to_play_index)), - name='[P2][DIGESTOR]') + name='[P2][DIGESTOR]') # Play as finished processed - P3_PLAYER_PROCESS = Process(target=play_only_Process, - args=((queue_data_to_play),(queue_data_to_play_index)), + P3_PLAYER_PROCESS = Process(target=play_only_Process, + args=((queue_data_to_play), + (queue_data_to_play_index)), name='[P3][PLAYER]') # Charge and join threads