ααααααΈ 30 αααα·α
ααα·ααΆαααααααααΈ 1 ααααααΌαα
Nizhny Novgorod ααααΌαααΆαααααΆααααα‘αΎα
αα αααα»αα’αααααααα ααΎαααΉαααααΆααα’αααααΈαααααααααΎαααΆααααααΎαααααΌααα·αααααααααΎα ααααα ααΈαααα»αααΎαααα½αααΆαααααααααααΌαα
αααα»αααΆα 10 ααΆαα αΌααα½ααααα»ααααααα·ααΈ hackathon α ααΆααΆααΏαααα’ααΆααααααα½αααΆααααααααααΈαααααααααααα αααααααααααΆαα hackathon ααΊα’ααΆα "Kremlinsky on Pochain" αααααΆααααααααΌααααα»ααΆααααα Nizhny Novgorod ααααΌαααΆααααα½ααα ααΆααααα»α αααααΆαααΆαα αΌααα½αααΈα’αααααααααΆ! (αααα»αααααΉαα’αααααΆαα ααααααααΆαα·ααΆααααααααΆααααα Intel ααΆαααΈααΆαααα Nizhny Novgorod) α α’αααα αΌααα½αααααΌαααΆααααααααα 26 ααααααΎααααΈαααααααΌα α αΎααα α α»ααααα αααα½αααααααΌααααααα αΆααααααααααΆααααααα½αααα α’αααααααααααααΆα ααααα‘αααα½αααΊααααααΆαααααααααΆααααα ααΎααααΈααααΆααααΆα’αααΈααααααααΆααααααΆαααααααα»αααααΌαααΆαα’αα»αααααααΆααα·αααααΆαα αα·ααα·ααα ααααΆααααα·ααα αααα»ααααααα αΆαα αααα·α α’αΆα αΆααααααα α’αΆα αΆα α’αααΈααααα ααΈαααααα!
ααΎαααΈαααααα Intel ααΆαααααααααααΎαααΆαααααΆ Raspberry PI, Neural Compute Stick 2 α
ααΆαααααΎαααΎαααΆααα·α αα
αααααααααααΆααααα»ααα½αααααΆααααα ααααααΆαα hackathon ααααααα₯ααα·αααααααΊααΆαααααΎαααΎααααα αΆααααααα½αα ααααΆααααα αα½αααΎαααΆααααααα α α·αααααααΆαα½αααΉαα’αααΈααααα·αααΆααααΆααα αααα»αααα·ααα α αΆααααΆααααΈααΆααααααΆαααΆααα·ααΆαααΆ αααααΆααΆαααααΆαααααααΆαααααΆααα
αααααΆααα·ααΆα
- ααΆαααααΉααααΈ ααα’αΆα αααααΎααααα½ααααααααΆααα½ααααα αΌαααααΆαααααΉαααααΎαααΆαααΆααααα‘αα αα·αααΌαααΆα ααααα½ααααααααΎαααΆαααααΉαααααΌαα
- ααΆαααααΆααΆααααααΆααΆααα»αααΎαααΌα α ααα’αα ααααΌαααΆαααΆαααααΆα αααΎαααΆααα½αααΎααααΈααααααααααααΎαααααα ααα‘αααα·αααΆαααααααααααααααααα
α
αΌαα’αα·αααααααα·αα α
αΌαααΎααααααα·ααααααΆααααααααααααΆαααΆααΌαααααΆαα α’αααα’αΆα
ααΆαααααααααΆααααα
α·αααααααα’αα·αα·αααα
α αΆααααα
ααα ααααα·αααΎα’αα·αα·ααααΆααααΆαααα·ααααα
α·αααααΉαααααΆααααααα α αΎαα
αΆααααααΎααααα
αααααααααααααα½ααα α’αααα’αΆα
ααΌαααααααα
α’ααααααααααααααααΆααααΎααααΈαα»ααααα½αα
αααα»αααααΈααα ααΎαααααΌαααααααααΆαααα½αααααΆααααα‘ααααααααα»ααα ααΆααΉαα’αα»ααααΆαα±ααααΎααααα
αααα»ααααα·αα αΆαααΈα’αα·αα·αα αα·ααααααααΆααα·ααΆααααααΆαααα»ααααααΈαα½ααα ααΆααΆααααααΎαααΆαα, ααΎαααΈαααααα, ααΆααΉαα’αΆα
ααααΎαα
ααΆαααΎααααΈαα·ααΆαα’αΆαααααα·αα·ααΆαααααα»ααααα·αα αΆααααα½αα―α, ααΆααααααααα·ααΆααΆααα
αααα»ααααα»α, ααααΆαααα
ααα’!
ααΎααααααΎααααααΌαααΆααααααΆαααααααααααΆαααααααΎαα
- ααα αααΌα ααα§αααααααααα
- ααααα·ααααα·ααΆααααααααΆαα·α
- αααααααΆαα
- ααΆαααααΎααΆαααααααΆαααΆααααα½α
ααΆαααααα ααΎαααααΎαααΎα Raspberry Pi 3 c ααΆα§αααααααααα
αα ααΈαααααΆααΆααΏαααααΆαααααα»αααΆαααααααααΆαααααααααα·αααααααααΆαααα½ααα NCS - ααΆααααΎαααΆαααα’αααα»αααΆαα½αααααΆαααααααα CNN αααααααΆα ααα»ααααααααα·αααΎα’αααααααΌαααΆαααααΎαααΆαααααΌααΆαα½αααΉααααααΆααααααΆαααααα½ααα ααΎααΆ αααααααΉαααΆααΉαααΆαααααα·αααΆαα
ααΆαααΏαααΌα
αα½ααααααααΌαααααΎα α’αααααααΌαααααΈααααΌα αααΌαα ααΈααααΌα αααΌα USB ααααααΆααΉαααααΎαααΆα ααα»ααααααΆααΎααα
αα·αααα’ααΆαα½α RPI ααα ααα»ααααααΌααααΈαααα
ααΈααα αααααααααΆαααΆααααααααα "αα
αα·α" α ααΎααααΈααααα‘αα ααΎααααααα
α
α·αααααααΎααααα Voice Bonnet ααΈα§ααααα
ααΆααα Raspbian ααΈ
arecord -d 5 -r 16000 test.wav
αααα»ααα½ααααααααΆααααααΆααααΆ ααΈααααΌα αααΌαααΆαααΆααααΎαααααΆαα α αΎαα αΆαααααααααααααΆαααΆααααΆαααα’α ααΎααααΈαα½ααα»αααΆ ααΌαα αΌααα ααΆαα alsamixer ααααΎαααΎαα§αααααα αΆαααα αα·αααΆαααααααααααα·ααααααΆαααα αΌαααααααΉα 50-60%α
ααΎααααααααα½ααΆαα½αααΉαα―αααΆα α αΎαα’αααΈαααααααα α’ααααααααΆααα’αΆα
αα·αααΆαααααααααααααα
ααΆααααααααααΌαα»αααΌα ααΆαα
ααααααααααα AIY Voice Kit ααΆα
αααΈααααΆ ααΎαα
αΆαααΆααΆααααΌαα»α RGB αααααΆα’αααΌα Backlight αααα’αΆα
αααααααααααααααααα·ααΈα ααΎαααααααα βGoogle AIY Ledβ α αΎααααααααα―αααΆαα
α ααα»α’αααΈαα·αααααΎαααΌαα»ααααααΎααααΈαααα αΆαα’αΆαααααααααααα½αααααΆαα ααΎαααΆααα 7 ααααΆαα α αΎααααΌαα»αααΆα 8 ααα αααααααααΆααα αΎα!
ααΎαααααΆαααααΌαα»αααΆαααα GPIO αα Voice Bonnet αααα»ααααααΆαααα αΆαααΆα α (αα½αααααααΌαααΆαααα‘αΎααα½α α αΎααα αααα»αα§αααααα ααα αΆαααΈαααααα AIY)
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
α αΌααααααΎαααΆααααααααΆαααα’αΆααααααααΈαα½ααααΉαααΆαααααααααααΌαααααΆαααα»αααααααααΆ RGB Tuple αα·αααααα»ααααααΆαα aiy.leds.Leds αααααΆαααααααααΎαααΉαααααΎαα αα α»ααααααααΆααααα
led_dict = {'neutral': (255, 255, 255), 'happy': (0, 255, 0), 'sad': (0, 255, 255), 'angry': (255, 0, 0), 'fearful': (0, 0, 0), 'disgusted': (255, 0, 255), 'surprised': (255, 255, 0)}
leds = Leds()
α αΎαα α»αααααααααααΆααααΈααΆαααααααααΆαααααΈααΈαα½ααααα’αΆαααααα ααΎαααΉαααααΎαα αα α»ααααααααΆαααααααααΌαα»ααααα’αα»αααααΆαααΆ (αααααααΆααα α»α )α
leds.update(Leds.rgb_on(led_dict.get(classes[prediction])))
αααΌαα»α, αα»α!
ααααΎααΆαααΆαα½αααα‘αα
ααΎαααΉαααααΎ pyaudio ααΎααααΈα αΆααααααααααΈαααΈααΈααααΌα αααΌα αα·α webrtcvad ααΎααααΈααααααα‘ααααααΆα αα·αα αΆααααα‘ααα ααΎαααΈααα ααΎαααΉααααααΎααα½ααα½ααααααΎαααΉααααααα αα·ααα»αααΆααααααααααα‘αααααα’ααααΆαα
α αΆααααΆααααΈ webrtcvad ααΆαααααααααααΎααα αααααααααααααΆααααααααααα - ααΆααααΌαααααααΎααΉα 10/20/30ms α αΎαααΆαααααα»ααααααΆαααααΌαααααΆααααΆαααα½αααααΆααα’αΆαααααα (ααΌα αααααΎαααΉαααααα αααααααα) ααααΌαααΆαα’αα»ααααααΎαααα»ααα·αααααα 48kHz ααΎαααΉα α αΆααααααααΆααααα α 48000 Γ 20ms / 1000 Γ 1 (αααΌααΌ) = 960 ααα Webrtcvad ααΉααααα‘αα True/False αααααΆααααααΆααααΈαα½ααααΆααααα αααααααΌαααΉαααααααΆα α¬α’ααααααΆαααααΆααααααααααα αααα»αααααΆααα
α αΌαααΎαα’αα»αααααααααα·ααααΆααΆααααααα
- ααΎαβααΉαβααααααβαα βαααα»αβαααααΈβαααβααΆαβααΆαβαααβααααα ααΎβαα·αβααΆαβααΆαβαααβαααααβαα αααβααΎαβααΉαβαααααΎαβα ααα½αβααΆαβαααα
- ααααα·αααΎααΆαααΆααααααααΆαααααααΊ>=30 (600 ms) αααααΆααααααΎαααΎαααα ααααααααΈααααααΆαααααααααα; ααααα·αααΎααΆααΊ> 250 αααααΆααααααΎαααααααααΆαα αααα»ααα½α ααααα·αααΎαα·αααααα ααΎααα·α αΆαααΆααΆαααααα αααααααααααΆααΊαα·ααααααααααΆααααΎααααΈαααα αΌαααΆαα αααα»αααααΌααΎααααΈαααααα’ααααααααΆαα’ααααα·ααΆααααααα
- ααααα·αααΎααΆαααΆααααααααΆααααααα αα < 30 α αΎαααα ααααααααΈααααααΆααααααααααααΎαααΈ 300 αααααΎαααΉαααααααααααααα αα½ααααααΆααααΆαααααααααΆαααααΉαααααΌααααααααααα (αααααα’αΆαααααααααααααα½αααΆααααααααΆ)
def to_queue(frames):
d = np.frombuffer(b''.join(frames), dtype=np.int16)
return d
framesQueue = queue.Queue()
def framesThreadBody():
CHUNK = 960
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
p = pyaudio.PyAudio()
vad = webrtcvad.Vad()
vad.set_mode(2)
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
false_counter = 0
audio_frame = []
while process:
data = stream.read(CHUNK)
if not vad.is_speech(data, RATE):
false_counter += 1
if false_counter >= 30:
if len(audio_frame) > 250:
framesQueue.put(to_queue(audio_frame,timestamp_start))
audio_frame = []
false_counter = 0
if vad.is_speech(data, RATE):
false_counter = 0
audio_frame.append(data)
if len(audio_frame) > 300:
framesQueue.put(to_queue(audio_frame,timestamp_start))
audio_frame = []
ααΆαααααααααααααΌαααααΎαααααΌαααααΆαααααα»ααααααΆαααΆαα»ααα αααα»ααααααΆααΆααα ααΌαα αΌααα ααΆαα github, Google ααα»ααααααααΌαα αΆαααΆααΎαααΆαααααααααααΎααααΆαααααααααααααΆαααααΎα αααααΊααΆααααααα½αααααα·ααΆαααΆα αααααα’αααααααΌαααΆααααααααΌααααα ααΎαα·αααααααααα αΌαααααα’ααα α αΎαααΎαααΈαααααα ααααααααα½αααΆαα ααΆααααααααΆααααα»ααααα OpenVINO - IR (Intermediate Representation)α ααΎαααΆαααΆααααααααα αα 5-7 αααααααααΆαααααααααααΆααΈ github α αΎαααααα·αααΎααααΌαααααΆααααΆαααα½αααααΆααα’αΆααααααααααΎαααΆαααααΆααααα ααΆαα½αααΉαααΆαααα½αααααΆααααα‘αα ααΎαααααΌααααα αΆαααΌαααΆαααα - αα½αααααααΎααααΆαααααααααααα»αααααΆαααΆαα
ααΎααααααααΎα ααα»α ααΆααααααα
- α’αΆααααααααΈααα‘αα -
https://github.com/alexmuhr/Voice_Emotion
ααΆααααΎαααΆαααΆααααααΆαααααΆααααααα α’αΌααΈαααΌααααΌαααΆαααΆααα αΌααα αααα»ααααααααααα αααΆααααΆαααα½α αααααΆααααααααΈαα½αααααααΎαααααΎαααΎαMFCC α αΎααααααΆαααααααααΌααα½αααααΆααΆααααα αΌααα CNN - ααΆαααα½αααααΆααααα‘αα -
https://github.com/linhdvu14/vggvox-speaker-identification
αα ααΈααααααα½αα±αα MFCC ααΎαααααΎααΆαααΆαα½α spectrogram αααααΆααααΈ FFT ααΎααααααΌααααααΆαα CNN ααααα αα·αααααααΎαααα½αααΆαααααΆαααα·α αααααααα‘ααα
αααααΆααααΎαααΉααα·ααΆαα’αααΈααΆααααααααααααΌαααα αΆααααααΎαααΈααααΉααααΈα OpenVINO αα½ααααα αΌααααΌαα»αααΆα αααΎα:
- Open Model Zoo αααΌααααααα’αΆα ααααΎ αα·ααα½ααααα αΌααα αααα»αααα·αααααααα’αααα
- Model Optimzer α’ααα»ααααα’αααα’αΆα αααααααααααΌααΈααααααααααααααααααααα (Tensorflow, ONNX ααΆααΎα) αα ααΆααααααααααΆαααααα·αααααα αααααΎαααΉαααααΎααΆααααααααααα
- Inference Engine α’αα»ααααΆαα±ααα’αααααααΎαααΆααααΌααααααα»ααααααα IR αα ααΎ Intel processors, Myriad chips αα·α Neural Compute Stick accelerators
- αααααααααΆαααααα·αααααΆααααα»ααα OpenCV (ααΆαα½αααΉαααΆαααΆαααα Inference Engine)
ααααΌααΈαα½αααααα»ααααααα IR ααααΌαααΆααα·αααααΆαααα―αααΆαααΈαα .xml αα·α .bin α
αααΌαααααααΌαααΆαααααααααα ααΆαααααα IR ααΆαααα Model Optimizer ααΌα ααΆαααααααpython /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model speaker.hdf5.pb --data_type=FP16 --input_shape [1,512,1000,1]
--data_type
α’αα»ααααΆαα±ααα’αααααααΎαααΎααααααααα·αααααααααααααΌααΉαααααΎαααΆαα FP32, FP16, INT8 ααααΌαααΆαααΆααααα ααΆαααααΎαααΎααααααααα·ααααααααα’αααα»αα’αΆα αααααααΌαααΆααααα»αααααΎαααΆαααα’α
--input_shape
αααα αΆαααΈαα·ααΆααααααα·αααααααααα αΌαα αααααααΆααααα»αααΆαααααΆααααααΌαααΆαααααααΆα αΆααααΈααΌα ααΆααΆαααααααΆααα αααα»α C ++ API ααα»ααααααΎααα·αααΆαααΈαααααΆααααΆαααααα α αΎαααααΆαααααα½ααα»αααΆαααααΆαααααΌααααα½ααααα»αα ααααααααΌα
αααααΆαααα ααΎαααααΆααΆααααα»αααααΌαααααΆαααααααααα½α ααΆααααα αααα»ααααααα IR ααΆαααααααΌαα»α DNN αα αααα»α OpenCV α αΎααααααΌααααααα ααΆαimport cv2 as cv emotionsNet = cv.dnn.readNet('emotions_model.bin', 'emotions_model.xml') emotionsNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
αααααΆααα α»αααααααααα»αααααΈαααα’αα»ααααΆαα±ααα’αααααααΌααα·αααΆαααααΆαα Neural Compute Stick ααΆαααααΆααΆααΌαααααΆαααααΌαααΆαα’αα»αααααα ααΎαα½αααααΆα ααα»αααααααα»αααααΈ Raspberry Pi αααααΉααα·αααααΎαααΆααα α’αααααΉαααααΌαααΆαααααα
αααααΆαα αααααα·ααααΆααΆαααΌα ααΆααααααα ααΎααααα ααα’αΌααΈαααΌααααααΎααα ααΆ windows αααααΆαααα αααΆααααΆαααα½α (αααααΆααααΎαααΆααΊ 0.4 s) ααΎαααααααα windows ααΈαα½αααα ααΆ MFCC ααααααααΆααααααΎααααα αΌααα αααα»ααααα‘αΆα ααααααα
emotionsNet.setInput(MFCC_from_window) result = emotionsNet.forward()
αααααΆααβαα ααΎαβααβααααΆααβααααααΆβαααα»αβαααααΆααβαααααβαααα’α½α α αααααααααΆαααααΆαααααα½α ααα»αααααααααΆααααΆα hackathon α’ααααα·αα αΆαααΆα ααααααΎαα’αααΈααααα·αααα ααα»αααααααααα αα»αααααΆααα’αααααΆααααα ααΎαβαα βααΆαβααΆαααΆαβααΆβα αααΎαβαααβααααΌαβααααΎ ααΌα ααααβααΌαβααααβαα βαα»α - ααΎαβααΉαβαααααααΆαβααΆαα½αβααΉαβααΆαβααααΆααβααα‘ααα ααΆα αΆαααΆα ααααα»αααΆααααααΎαααΌαααααΆααα·αααααααααααααα½αα ααα½αααα spectrograms ααααα‘αααααααΆααααα»ααα»αααΉαααααΌαααΆααααααΆαα»αα αααααΆαβαααβααααΆβαα βαααβαα·α βαα½α ααΎαβααΉαβαααααααΆαβαααα αΆβαααβα±ααβα’ααβααΈβαααααααΆαα
ααΆααααααΆ ααΎααααααΎαααααααΈααααααΆααααααααααααα‘αα (ααΆααααΎαααΆαααΌα ααααΆααΉαααΆααα·αααααΆααΆαααΎααα αα»αααααΆααααΆαααΆαααααΆαααΈααααΆαα α»α ααΆααΉααααααΆαα»αααα‘αααα αααα»αα―αααΆα)α
αααβααΆααααα:
python3 voice_db/record_voice.py test.wav
ααΎαααααα‘ααααααααα»αααααΆα αααΎαααΆαα (αααα»αααααΈααααααΎα αααΆαα·ααααα»αααΈααΆαα)
αααααΆααααααα αααααΆααααα‘αααααααΆαααααΈαα½αα ααΎαααααΎααΆαααααΆααααααΌααα½αααΏαααΆααα»α ααα½αααΆααα·ααΆααα αα·ααααααΆαα»αααΆααΆα’αΆαα numpy (.npy)αfor file in glob.glob("voice_db/*.wav"): spec = get_fft_spectrum(file) np.save(file[:-4] + '.npy', spec)
ααααααΆααααα’α·ααααααααα αααα»αα―αααΆα
create_base.py
ααΆαααααα αα ααααααααΎαααααΎαααΆαααααααΈααα ααΎαααΉαααα½αααΆαααΆαααααααααΈαα·ααΆαααααΆααααααα ααΎαααααΌααfor file in glob.glob("voice_db/*.npy"): spec = np.load(file) spec = spec.astype('float32') spec_reshaped = spec.reshape(1, 1, spec.shape[0], spec.shape[1]) srNet.setInput(spec_reshaped) pred = srNet.forward() emb = np.squeeze(pred)
αααααΆααααΈααα½αααΆαααΆαααααααααΈααααααααααΆαααα‘αα ααΎαααΉαα’αΆα αααααααΆααΎααΆααΆαααααα·αααα·ααααα’αααααΆαααααα ααααΆαααΌαααΈαα»αααΈααΆαα’αα»ααααα ααα‘ααααΆααα’αααα αααα»αααΌαααααΆααα·αααααα (ααΌα ααΆα ααααααΆααααα αααΎα) - αααααΆααααΆααααα αΆαααΎααααααααααα·α ααα 0.3):
dist_list = cdist(emb, enroll_embs, metric="cosine") distances = pd.DataFrame(dist_list, columns = df.speaker)
αα ααΈαααα αααααα»αα ααααααααααΆααααΆααααΏαααααΆαααααα·ααααΆαααΊααΏαα αΎαααααΎα±ααααΆα’αΆα ααααααααααΌ 1-2 ααααααααα (αααααΆααααααΌ 7 αα·ααΆααΈααΆα αααΆαααα 2.5 αααααΆααααΆαααααα·ααααΆα) α ααΎααααααΆαααααααααααααΌαααααααΈαααα αΎα α αΎααααααααΎααΆααααααααααΌαααααααα·ααΈααα αααααα
αααααα·ααΈαααααΆα
α ααα»α ααααΆαααα½αα ααΎααααααααααααΆαα½αααΎαααΈαααα α αΎααααα ααααααΆαααΌαααααΆαααααααΎα ααΆαα½αααααΆααα§ααααα αα·ααα»αααααΌααααα½αααααΆααααααΆαα
αααααααΆααααααααΊααΆααα»αααα·αααΆαααΈα α»ααααα α»ααααΆααααααααΆααα»α αα·α Raspberry Pi αααααα’ααααΎαα αα αααα·ααααΆ websocket (http over tcp protocol)α
ααααΆααααΆαααααΌαααΊααα½αααΆαααααααΆααααααΆαααααΎαααΆαααΈ raspberry αααααΊα’αααααααααααΆαααααααα»ααααα»α json αααααααΌαααΆααααααΆαα»ααααα»αααΌαααααΆααα·ααααααααΆαααααααΆαααααΆαααααΎααααΎααααααα½ααα ααΌα αααααααα·αα·α’αΆα ααααΌαααΆααααααΎαα’αααΈααααααΆααααααα’αΆααααααααααα’αααααααΎααααΆαααααααΆαααααααααααα αααααΆααβααβαααα ααβααααααΆαβαααβααααΌαβααΆαβααααΎβαα βαααααβααΆαβαα»α αααβααααΎβααΆαβααΆα αα·αβααα½αβαααα ααβααααααΆαβααΈβα ααα»α βα α»αβααααβαααααΆαα ααααααΆα backend ααΆααααΌαααααΌαααΆααααααΎαα‘αΎαααΆααΆααΆ golang ααΆααααΌαααΆαααααΎαααΎααααααααΆαααααα·αααααααΆαααα·α αα ααΆαα’ααααΆαααα goroutines αααααααΆαααΆαααα’α
αα αααα αΌααα ααΆααα ααα»α αααα αα α’αααααααΎααααΆααααααΌαααΆαα α»αααααα αα·ααααα αΌααα αααα»ααα ααΆαααααααα αααααΆααααααΆαααααααΆααααααΌαααΆαααα½αα ααΆααα’αααααααΎααααΆαα αα·αααΆαααααΌαααΆααααα αΌααα αααα»ααααααααααααΌαα αααααΆαααααΌαααΆαααααΎαα½α α αΎαααααααααα (αα ααΆαααααααααΆααα»ααααααΆαααΆα) α αΎαααααα·αααΎα’αααααααΎαα·αααΆααααααΆαα (raspberry α¬αααααααΆααα»α) αααααΆαααΆαααααααΆααααααΌαααΆααα»αα αα α αΎαααΆααααααΌαααΆαααα ααααΈ αααααααααα
ααΎααααα»ααααα αΆαααΆααααααΆααααΈααΆααααααFront-end ααΊααΆαααααα·ααΈααα ααααααααααααααααα»α JavaScript αααααααΎαααααΆααα React ααΎααααΈαααααΎαααααΏα αα·αααααα½αααααΎαααΆαα’αα·ααααααα ααααααααααααααα·ααΈαααααΊααΎααααΈααΎαααΎααα·αααααααααααα½αααΆααααααααΎαααα½ααααααααΆααααααααΎαααΆααα αααααααΆαααααα αα·ααααααααΆαααα ααΎ Raspberry Pi α ααααααααααΆαααΆααααααααααΌαααΆααααα αααααααΌαααΆαα’αα»αααααααααααΎαααααααααααα·αααα ααα»αααααααααααααΆαααααα αΆααα’αΆααααααααΊααΆαααααα αααα αααααΆαααααΆααααααααα·ααααααααααΌαααΆαααα½ααααα»ααααααααΆααΆαααααααααΈαααΆαααΈααααααααααΎαα αα αααα·ααααΆ WebSocket α Raspberry Pi ααααΎαααα‘αα αααααααΆααΎααΆααΆααααααα»αααααΆααααΆααααΆαα½αααΈααΌαααααΆααα·αααααααααααΆαα α»αααααα α αΎαααααΎαααααΈααααΌααΆαααΈααΈαααα αααΆαααΈααααααα αααΆαααΈαααααααααα αΆααα·αααααααααααΆαααααααα α»αααααααααα»α αααα αΆαααΌαααααΆααααααα»αααααααααααααΆαα·ααΆααα αααα»αααΈααααΌα αααΌα ααααΌα ααΆα’αΆαααααααααααΆαααααα ααααΆαααα
αααααααΎαααΆαα½αααΉαααΆαααααΆαααααααααΆαααααΎαα αα α»ααααααααΆαααα ααααΈααααα·ααααΆα
ααΆαα·αα’αΆα αααα ααα’αααΈααααααααΆαααΌα ααΆαααααααα»αααααα ααΎαααααΆαααααα·αααΆααααααααΆ ααΌα ααααααααΈαααααΉαα ααααααΊαα αααα»αααΆααααα αΆα ααΆα’αααΈαααΉαααααΎαααΆαα αααα»αβααβαααα αΆαβαα½αααβααΆαβαα·ααΆαβα’αααΈβααααβαααβα’αααΈαβααααΎαααΆαβαα βααΎβααααΌβα’αααΈβαααβαα½αααβααΆαβααβαααα αΆβα’αααΈβαααβαα½αααβαα½αβαααααα αααααΆααααΊααΆαααααααΆααααα - α’αααααααΆαααΆαααΎααα»ααα·ααααααααααα ααααα α αΎαα αΌααα αα·ααααα»αααΈαα½ααααΎααααΈααΎαααααΌααΆαααΆαα αα½αααααΆααα½ααααα½αααΎαααααα ααα»ααααααααααααΆααΆαααααΎαααααααααααα½ααα αα½αααααΆαα αΆαα ααααΈααα ααααααα ααΎαα»αααααΌααααα½ααα α αΎαα’αααΈααααααααΆααα·αααΆααααΎαααΆαααΌα ααΆαααααΉααα»αα
αααα»αααΌαααααααααΆααααΆααΆαα αααΆαααα»ααααααααααααΆαααααααΎαααΊ $ 150α
- Raspberry Pi 3 ~ α£α₯ αα»ααααΆα
- Google AIY Voice Bonnet (α’αααα’αΆα ααααααα’ααααα·ααΆαααΆα) ~ 15$
- Intel NCS 2 ~ 100 αα»ααααΆα
αα·ααΈαααααα’α
- ααααΎααΆαα α»ααααααααΈα’αα·αα·αα - αα»αα’αΆαα’αααααααααααααΎααααα ααααα
- ααααααααααΌαα½αα ααα½ααααα α’αααα’αΆα αααααααα αα·αα’αΆαα»ααΆαααα‘αα
- αααααααα‘αααααα»ααααααααΆαααααΆ (diarization)
ααααΆααα
https://github.com/vladimirwest/OpenEMO
α αααααααααΆαα α·αααααα»αααα ααααΈαα αααα»αααΌααααααα’ααααα»αα ααααα’ααααααα α αα·αα’αααα αΌααα½αα αααα»αβα ααααβααααααβααααβαααα»αβαααααβααα ααΎαβααααΆααβα αΌαβα α·αααβαααααβααααΆαβαααααΆααβααΆαβαααα½αβαα·αα·αααβααααααβα αβααααααβαααβα₯αβαα·αβααααα αααααΆαααα½αααΎα ααΆααΊααΆαααα·ααααααααααααΆααααααΆαααααα»ααα αααα»αααα·ααα αα·αααΆαα’αα·ααααααα αααα»ααααααΉαααΆααααΉαααα·ααΆααααα½αα±ααα αΆααα’αΆααααααααΆααααα αααΎαααΉαααααΌαααΆαααααΎα‘αΎααα αααα»αααααα αα½αααΆααααΎαααααΆααα AI αααααα
ααααα: www.habr.com