30æ1æ¥ããXNUMXæXNUMXæ¥ãŸã§ããžãã»ããŽãŽããã§éå¬ãããŸãã
ãã®èšäºã§ã¯ãæçµçã« XNUMX äœãç²åŸãã補åã®ãããã¿ã€ããã©ã®ããã«äœæãããã«ã€ããŠèª¬æããŸãã
ããã«ãœã³ã«ã¯ 10 ããŒã 以äžãåå ããŸããã ä»ã®å°åããæ¥ã人ãããã®ã¯å¬ããã§ããã ããã«ãœã³ã®äŒå Žã¯ãããã§ã€ã³ã®ã¯ã¬ã ãªã³ã¹ããŒãè€åæœèšã§ãå éšã«ã¯ããžãã»ããŽãŽããã®å€ä»£ã®åçãåãå·»ãã§é£ŸãããŠããŸããã (çŸæç¹ã§ã¯ã€ã³ãã«ã®æ¬ç€Ÿã¯ããžãã»ããŽãŽããã«ããããšãæãåºããŠãã ãã)ã åå è ã«ã¯ã³ãŒããæžãæéã 26 æéäžããããæåŸã«è§£æ±ºçãçºè¡šããå¿ èŠããããŸããã ãã XNUMX ã€ã®å©ç¹ã¯ãèšç»ããããã¹ãŠãå®éã«å®è£ ããããã¬ãŒã³ããŒã·ã§ã³ã«ã¢ã€ãã¢ãæ®ãããŠããªãããšã確èªããããã®ã㢠ã»ãã·ã§ã³ã®ååšã§ãã ã°ããºãã¹ããã¯ãé£ã¹ç©ãäœã§ããããŸããïŒ
ããã«ãIntel ã¯ãªãã·ã§ã³ã§ã«ã¡ã©ãRaspberry PIãNeural Compute Stick 2 ãæäŸããŸããã
ã¿ã¹ã¯éžæ
ããªãŒãã©ãŒã ããã«ãœã³ã®æºåã§æãé£ããéšåã® XNUMX ã€ã¯ã課é¡ãéžæããããšã§ãã çºè¡šã§ã¯ããã¯å€§æè¿ã ãšããããšã ã£ãã®ã§ãç§ãã¡ã¯ããã«è£œåã«ãŸã ãªããã®ãèãåºãããšã«ããŸããã
åæãããšãã
- çè«çã«ã¯ãé³å£°ãšç»åã®äž¡æ¹ã«äœçšããçµã¿åããã¢ã«ãŽãªãºã ãäœæããããšãå¯èœã§ãããããã«ãã粟床ãåäžããã¯ãã§ãã
- éåžžãã«ã¡ã©ã®èŠéè§ã¯çããåºããšãªã¢ãã«ããŒããã«ã¯è€æ°ã®ã«ã¡ã©ãå¿ èŠã§ãããé³å£°ã«ã¯ãã®ãããªå¶éããããŸããã
ã¢ã€ãã¢ãçºå±ãããŠã¿ãŸããããå°å£²éšéã®ã¢ã€ãã¢ãåºç€ãšããŠèããŠã¿ãŸãããã åºèã®ã¬ãžã§é¡§å®¢æºè¶³åºŠã枬å®ã§ããŸãã 顧客㮠XNUMX 人ããµãŒãã¹ã«äžæºãæ±ããå£èª¿ãäžãå§ããå Žåã¯ãããã«ç®¡çè
ã«é»è©±ããŠå©ããæ±ããããšãã§ããŸãã
ãã®å Žåã人éã®é³å£°èªèãè¿œå ããå¿
èŠããããŸããããã«ãããåºèã®åŸæ¥å¡ãšé¡§å®¢ãåºå¥ããåå人ã«åæãæäŸã§ããããã«ãªããŸãã ããã§ãããããã«å ããŠãåºå¡èªèº«ã®è¡åãåæããããããŒã å
ã®é°å²æ°ãè©äŸ¡ãããããããšãå¯èœã«ãªããŸããè¯ãããã§ããïŒ
ãœãªã¥ãŒã·ã§ã³ã®èŠä»¶ã次ã®ããã«å®åŒåããŸãã
- ã¿ãŒã²ããããã€ã¹ã®ãµã€ãºãå°ãã
- ãªã¢ã«ã¿ã€ã æäœ
- äœäŸ¡æ Œ
- ç°¡åãªæ¡åŒµæ§
çµæãšããŠãRaspberry Pi 3 c ãã¿ãŒã²ããããã€ã¹ãšããŠéžæããŸãã
ããã§ãNCS ã® XNUMX ã€ã®éèŠãªæ©èœã«æ³šæããããšãéèŠã§ããNCS ã¯æšæºã® CNN ã¢ãŒããã¯ãã£ã§æé©ã«åäœããŸãããã«ã¹ã¿ã ã¬ã€ã€ãå«ãã¢ãã«ãå®è¡ããå¿ èŠãããå Žåã¯ãäœã¬ãã«ã®æé©åãæåŸ ããŠãã ããã
ããã¹ãããšã¯ XNUMX ã€ã ãã§ãããã€ã¯ãçšæããå¿
èŠããããŸãã éåžžã® USB ãã€ã¯ã§ãååã§ãããRPI ãšçµã¿åããããšèŠæ ãããããããŸããã ããããããã§ã解決çã¯æåéããè¿ãã«ãããã®ã§ãã é³å£°ãé²é³ããã«ã¯ããããã®ãã€ã¹ãã³ãããããŒãã䜿çšããããšã«ããŸã
Raspbian ãããŠã³ããŒããã
arecord -d 5 -r 16000 test.wav
ãã€ã¯ãéåžžã«ææã§ããã€ãºãããæŸãããšã«ããã«æ³šæããŠãã ããã ãããä¿®æ£ããã«ã¯ãalsamixer ã«ç§»åããCapture devices ãéžæããŠãå ¥åä¿¡å·ã¬ãã«ã 50 ïœ 60% ã«äžããŸãããã
æ¬äœãã€ã¹ãªã§ä¿®æ£ãããšãã¹ãŠããã£ããããèã§éããããšãã§ããŸã
ã€ã³ãžã±ãŒã¿ãŒãã¿ã³ã®è¿œå
AIY Voice Kit ãå解ããŠãããšãRGB ãã¿ã³ãããããšã«æ°ã¥ããŸããããã®ããã¯ã©ã€ãã¯ãœãããŠã§ã¢ã§å¶åŸ¡ã§ããŸãã ãGoogle AIY Ledããæ€çŽ¢ãããšãããã¥ã¡ã³ããèŠã€ãããŸãã
ãã®ãã¿ã³ã䜿çšããŠãèªèãããææ
ã衚瀺ããŠã¿ãŠã¯ãããã§ãããããã¯ã©ã¹ã¯ 7 ã€ãããªãããã¿ã³ã«ã¯ 8 è²ããããååã§ãã
GPIO çµç±ã§ãã¿ã³ã Voice Bonnet ã«æ¥ç¶ããå¿ èŠãªã©ã€ãã©ãªãããŒãããŸã (ã©ã€ãã©ãªã¯ AIY ãããžã§ã¯ãã®é åžãããã«ãã§ã«ã€ã³ã¹ããŒã«ãããŠããŸã)ã
from aiy.leds import Leds, Color
from aiy.leds import RgbLeds
åææ ã RGB ã¿ãã«ã®åœ¢åŒã§å¯Ÿå¿ããè²ãš 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/30 ããªç§ã«çããå¿ èŠããããææ ãèªèããããã®ã¢ãã«ã®ãã¬ãŒãã³ã° (åŸã§åŠç¿ããŸã) 㯠48kHz ããŒã¿ã»ããã§å®è¡ãããããã次ã®ããã«ãªããŸãããµã€ãº 48000Ã20ms/1000Ã1(ã¢ãã©ã«)=960 ãã€ãã®ãã£ã³ã¯ããã£ããã£ããŸãã Webrtcvad ã¯ããããã®åãã£ã³ã¯ã«å¯Ÿã㊠True/False ãè¿ããŸããããã¯ããã£ã³ã¯å ã®æ祚ã®æç¡ã«å¯Ÿå¿ããŸãã
次ã®ããžãã¯ãå®è£ ããŠã¿ãŸãããã
- æ祚ããããã£ã³ã¯ããªã¹ãã«è¿œå ããŸããæ祚ããªãå Žåã¯ã空ã®ãã£ã³ã¯ã®ã«ãŠã³ã¿ãŒãã€ã³ã¯ãªã¡ã³ãããŸãã
- 空ã®ãã£ã³ã¯ã®ã«ãŠã³ã¿ãŒã >=30 (600 ããªç§) ã®å Žåã¯ãèç©ããããã£ã³ã¯ã®ãªã¹ãã®ãµã€ãºã確èªããŸãã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 (äžéè¡šçŸ) ã«å€æããå¿ èŠããããããããªãé£ããéšåã§ãã ç§ãã¡ã¯ Github ããçŽ 5 ïœ 7 ã®ç°ãªããœãªã¥ãŒã·ã§ã³ãè©ŠããŸããããææ ãèªèããã¢ãã«ãããã«æ©èœãããšããŠããé³å£°èªèã§ã¯ããè€éãªã¢ãŒããã¯ãã£ã䜿çšãããŠãããããããé·ãåŸ ã€å¿ èŠããããŸããã
ç§ãã¡ã¯æ¬¡ã®ããšã«éç¹ã眮ããŠããŸãã
- 声ããäŒããææ
-
https://github.com/alexmuhr/Voice_Emotion
ããã¯æ¬¡ã®ååã«åŸã£ãŠæ©èœããŸãããªãŒãã£ãªã¯ç¹å®ã®ãµã€ãºã®ããã»ãŒãžã«åå²ããããããã®ããã»ãŒãžããšã«éžæãããŸããMFCC ãããŠããããå ¥åãšã㊠CNN ã«éä¿¡ããŸã - é³å£°èªè -
https://github.com/linhdvu14/vggvox-speaker-identification
ããã§ã¯ãMFCC ã®ä»£ããã«ã¹ãã¯ããã°ã©ã ã䜿çšããFFT åŸã«ä¿¡å·ã CNN ã«éããåºåã§é³å£°ã®ãã¯ãã«è¡šçŸãååŸããŸãã
次ã«ãçè«ããå§ããŠã¢ãã«ã®å€æã«ã€ããŠèª¬æããŸãã OpenVINO ã«ã¯ããã€ãã®ã¢ãžã¥ãŒã«ãå«ãŸããŠããŸãã
- Open Model Zooã䜿çšããã³è£œåã«å«ãŸããã¢ãã«
- Model Optimzer ã®ãããã§ãã¢ãã«ãããŸããŸãªãã¬ãŒã ã¯ãŒã¯åœ¢åŒ (TensorflowãONNX ãªã©) ããäžéè¡šçŸåœ¢åŒã«å€æã§ããŸããããã䜿çšããŠããã«äœæ¥ãé²ããŸãã
- æšè«ãšã³ãžã³ã䜿çšãããšãIntel ããã»ããµãMyriad ããããNeural Compute Stick ã¢ã¯ã»ã©ã¬ãŒã¿äžã§ IR 圢åŒã®ã¢ãã«ãå®è¡ã§ããŸãã
- OpenCV ã®æãå¹ççãªããŒãžã§ã³ (æšè«ãšã³ãžã³ã®ãµããŒãä»ã)
IR 圢åŒã®åã¢ãã«ã¯ã.xml ãš .bin ã® XNUMX ã€ã®ãã¡ã€ã«ã§èšè¿°ãããŸãã
ã¢ãã«ã¯ã次ã®ããã« Model Optimizer ãä»ã㊠IR 圢åŒã«å€æãããŸãã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 ã«ããããã§ããããããŸã§ã¯æãäžãããåã«ã¢ãã«ã® XNUMX ã€ã«å¯ŸããŠä¿®æ£ããã ãã§ãã
次ã«ãå€ææžã¿ã®ã¢ãã«ã 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 ã®å Žåãããã¯æ©èœãããã¹ãã£ãã¯ãå¿ èŠã«ãªããŸãã
次ã«ãããžãã¯ã¯æ¬¡ã®ãšããã§ãããªãŒãã£ãªãç¹å®ã®ãµã€ãºã®ãŠã£ã³ã㊠(ããã§ã¯ 0.4 ç§) ã«åå²ãããããã®åãŠã£ã³ããŠã MFCC ã«å€æããŠãã°ãªããã«ãã£ãŒãããŸãã
emotionsNet.setInput(MFCC_from_window) result = emotionsNet.forward()
次ã«ããã¹ãŠã®ãŠã£ã³ããŠã«æãäžè¬çãªã¯ã©ã¹ãèããŠã¿ãŸãããã ã·ã³ãã«ãªè§£æ±ºçã§ãããããã«ãœã³ã®å Žåã¯ãæéãããã°ãããŸãé£è§£ãªããšãèããå¿ èŠã¯ãããŸããã ããã¹ãããšã¯ãŸã ããããããã®ã§ã次ã«é²ã¿ãŸããããé³å£°èªèãæ±ããŸãã äºåã«é²é³ãããé³å£°ã®ã¹ãã¯ããã°ã©ã ãä¿åãããããçš®ã®ããŒã¿ããŒã¹ãäœæããå¿ èŠããããŸãã æ®ãæéãå°ãªãã®ã§ãã§ããéããã®åé¡ã解決ããŠãããŸãã
ã€ãŸããé³å£°ã®æç²ãé²é³ããããã®ã¹ã¯ãªãããäœæããŸã (äžèšãšåãããã«æ©èœããŸãããããŒããŒãããäžæãããå Žåã«ã®ã¿é³å£°ããã¡ã€ã«ã«ä¿åãããŸã)ã
ãã£ãŠã¿ããïŒ
python3 voice_db/record_voice.py test.wav
æ°äººã®å£°ãé²é³ããŸãïŒç§ãã¡ã®å Žåã¯ããŒã ã¡ã³ããŒXNUMX人ïŒ
次ã«ãé²é³ãããé³å£°ããšã«é«éããŒãªãšå€æãå®è¡ããã¹ãã¯ããã°ã©ã ãååŸããŠãããã 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 æéãããããŸãã)ã æ°ããã¢ãã«ãè¿œå ããæéããªããªããWeb ã¢ããªã±ãŒã·ã§ã³ã®ãããã¿ã€ããäœæããããšã«éäžããŸããã
ãŠã§ãã¢ããªã±ãŒã·ã§ã³
éèŠãªç¹: èªå® ããã«ãŒã¿ãŒãæã£ãŠè¡ããããŒã«ã« ãããã¯ãŒã¯ãã»ããã¢ããããŸããããã¯ããããã¯ãŒã¯çµç±ã§ããã€ã¹ãšã©ããããããæ¥ç¶ããã®ã«åœ¹ç«ã¡ãŸãã
ããã¯ãšã³ãã¯ãWebSocket ãã¯ãããžãŒ (http over tcp ãããã³ã«) ã«åºã¥ãããããã³ããš Raspberry Pi éã®ãšã³ãããŒãšã³ãã®ã¡ãã»ãŒãž ãã£ãã«ã§ãã
æåã®æ®µéã¯ãã©ãºããªãŒããåŠçãããæ å ±ãã€ãŸã json ã«ããã¯ãããäºæž¬åãåãåãããšã§ãããããã®æ å ±ã¯ããã®æéã®ãŠãŒã¶ãŒã®ææ çèæ¯ã«é¢ããçµ±èšãçæã§ããããã«ãæ è¡ã®éäžã§ããŒã¿ããŒã¹ã«ä¿åãããŸãã ãã®ãã±ããã¯ãã®åŸããµãã¹ã¯ãªãã·ã§ã³ã䜿çšã㊠WebSocket ãšã³ããã€ã³ããããã±ãããåä¿¡ããããã³ããšã³ãã«éä¿¡ãããŸãã ããã¯ãšã³ã ã¡ã«ããºã å šäœã¯ golang èšèªã§æ§ç¯ãããŠããããŽã«ãŒãã³ãé©åã«åŠçããéåæã¿ã¹ã¯ã«é©ããŠãããããgolang èšèªãéžæãããŸããã
ãšã³ããã€ã³ãã«ã¢ã¯ã»ã¹ãããšããŠãŒã¶ãŒãç»é²ãããŠæ§é ã«å ¥ãããã®ã¡ãã»ãŒãžãåä¿¡ãããŸãã ãŠãŒã¶ãŒãšã¡ãã»ãŒãžã®äž¡æ¹ãå ±éã®ããã«å ¥åãããããããã¡ãã»ãŒãžãããã« (ãµãã¹ã¯ã©ã€ããããããã³ãã«) éä¿¡ãããŸãããŠãŒã¶ãŒãæ¥ç¶ (ã©ãºããªãŒãŸãã¯ããã³ã) ãéãããšããã®ãµãã¹ã¯ãªãã·ã§ã³ã¯ãã£ã³ã»ã«ããããŠãŒã¶ãŒã¯ããããåé€ãããŸããããã
åŸãããã®ãé£çµ¡ãåŸ ã¡ããŠãããŸãããã³ããšã³ãã¯ãéçºããã»ã¹ãé«éåããç°¡çŽ åããããã« React ã©ã€ãã©ãªã䜿çšã㊠JavaScript ã§èšè¿°ããã Web ã¢ããªã±ãŒã·ã§ã³ã§ãã ãã®ã¢ããªã±ãŒã·ã§ã³ã®ç®çã¯ãããã¯ãšã³ãåŽã§å®è¡ãããã¢ã«ãŽãªãºã ã䜿çšããŠååŸãããããŒã¿ã Raspberry Pi ã§çŽæ¥èŠèŠåããããšã§ãã ãã®ããŒãžã«ã¯ãreact-router ã䜿çšããŠã»ã¯ã·ã§ã³ ã«ãŒãã£ã³ã°ãå®è£ ãããŠããŸãããéèŠãªã¡ã€ã³ ããŒãžã¯ã¡ã€ã³ ããŒãžã§ãããWebSocket ãã¯ãããžã䜿çšããŠãµãŒããŒããããŒã¿ã®é£ç¶ã¹ããªãŒã ããªã¢ã«ã¿ã€ã ã§åä¿¡ããŸãã Raspberry Pi ã¯é³å£°ãæ€åºããç»é²ãããããŒã¿ããŒã¹ãããã®é³å£°ãç¹å®ã®äººç©ã®ãã®ã§ãããã©ãããå€æãã確çãªã¹ããã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãã ã¯ã©ã€ã¢ã³ãã¯ãææ°ã®é¢é£ããŒã¿ã衚瀺ãããã€ã¯ã«åãã£ãŠè©±ããå¯èœæ§ãæãé«ã人ã®ã¢ãã¿ãŒãšããã®äººãèšèãçºé³ãããšãã®ææ ã衚瀺ããŸãã
ææ°ã®äºæž¬ãæ²èŒããããŒã ããŒãžãŸãšã
èšç»ã©ããã«ãã¹ãŠãå®äºããããšã¯ã§ããŸããã§ãããåã«æéããªãã£ãã®ã§ããã¢ã§ã¯ãã¹ãŠãæ©èœããããšãäž»ãªæã¿ã§ããã ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ããã¹ãŠãã©ã®ããã«æ©èœããããã©ã®ãããªã¢ãã«ãæ¡çšããããã©ã®ãããªåé¡ã«ééãããã«ã€ããŠè©±ããŸããã 次ã¯ãã¢éšåã§ãå°é家ãã©ã³ãã ãªé åºã§éšå±ãæ©ãåããåããŒã ã«è¿ã¥ããŠå®éã«åäœãããããã¿ã€ãã確èªããŸããã 圌ããç§ãã¡ã«è³ªåãããå šå¡ãèªåã®æ åœã«çãããŠã§ããã©ãããããã«æ®ãããã¹ãŠãæåŸ ã©ããã«æ©èœããŸããã
ç§ãã¡ã®ãœãªã¥ãŒã·ã§ã³ã®ç·ã³ã¹ã㯠150 ãã«ã§ããã
- ã©ãºããªãŒã〠3 ~ $35
- Google AIY Voice Bonnet (ãªã¹ããŒã«ãŒæéãããããŸã) ~ 15$
- ã€ã³ãã« NCS 2 ~ 100$
æ¹åæ¹æ³ïŒ
- ã¯ã©ã€ã¢ã³ãããã®ç»é²ãäœ¿çš - ã©ã³ãã ã«çæãããããã¹ãã®èªã¿åããäŸé ŒããŸã
- ããã«ããã€ãã®ã¢ãã«ãè¿œå : é³å£°ã§æ§å¥ãšå¹Žéœ¢ãå€æã§ããŸã
- åæã«é³Žãé³å£°ãåé¢ããïŒãã€ã¢ã©ã€ãŒãŒã·ã§ã³ïŒ
ãªããžããª:
https://github.com/vladimirwest/OpenEMO
ç²ããŠããŸãããç§ãã¡ã¯å¹žãã§ãæåŸã«ãäž»å¬è ãšåå è ã®çæ§ã«æè¬ã®æãè¡šããããšæããŸãã ä»ã®ããŒã ã®ãããžã§ã¯ãã®äžã§ããç¡æé§è»ã¹ããŒã¹ãç£èŠãããœãªã¥ãŒã·ã§ã³ãå人çã«æ°ã«å ¥ããŸããã ç§ãã¡ã«ãšã£ãŠãããã¯è£œåãšéçºã«æ²¡é ããéåžžã«çŽ æŽãããçµéšã§ããã AIãå«ããèå³æ·±ãã€ãã³ããå°æ¹ã§ã©ãã©ãéå¬ãããããšãæåŸ ããŠããŸãã
åºæïŒ habr.com