roboforum.ru

Технический форум по робототехнике.

Робот Т-800 на 3D принтере и ПК в качестве системы управлени

Робот Т-800 на 3D принтере и ПК в качестве системы управлени

saifer » 27 июл 2016, 12:50

Здравствуйте.
Представляю свою работу в области ИИ

Программа может уже многое, а именно общаться, сопоставлять тексту графические образы, распознавать лица, вычислять выражения, определять интонацию собеседника.
Интересует есть ли возможность использовать распознавание Google офлайн на компьютере так же как на телефонах.
Программу пишу на Visual Basic 6.0
Также будут интересны любые отзывы, советы и предложения.

HUD дисплей системы
Изображение

Печать тела T-800 началась
Изображение

Голова напечатана, электроника установлена
Изображение

Компьютер установлен в грудную клетку
Изображение

В качестве сервоконтроллера использую Pololu Maestro

Плечи распечатаны и установлены
Изображение

Пробное включение
Изображение

Тазовая кость установлена
Изображение

Загрузка системы


Проверка гироскопа и системы свой чужой


Сейчас печатаются руки. Время завершения приблизительно 3-4 недели.

В скором времени выложу видео диалога.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

setar » 27 июл 2016, 13:50

браво, давно такой темы не было.
будет много вопросов от постояльцев, готовьтесь :)

Пока если есть возможность чуть больше про программу ?
что в качестве базовой ОС (или bare metal)

Какие технологии используются для ИИ ? (графы , нейросети , аппаратные AI ускорители итд?)

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

Dmitry__ » 27 июл 2016, 14:01

Ничоссе :shock: , круто. Скайнет отдыхает.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

saifer » 27 июл 2016, 15:24

Видео почему-то не добавилось.
Модератор setar:видео поправил в первом сообщении, здесь дубль убрал

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

setar » 27 июл 2016, 16:11

видео (https://youtu.be/wSdd3NYlq2Y) вставляется так:
Код: Выделить всёРазвернуть
[youtubе]wSdd3NYlq2Y[/youtubе]

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

saifer » 27 июл 2016, 17:59

Setar, спасибо.

ОС Windows XP, процессор Intel Core i7, Вся программа написана на Visual Basic 6.0
Может сам искать ответы на вопросы что, кто, как в интернете, если не находит в собственной базе знаний. Вопросы можно задавать свободно, т.е. одинаково поймет который час и сколько время. Собирает информацию в интенете о погоде, курсе доллара, гороскоп, новости. Подробнее возможности покажу в скором времени на видео. Осталось доделать, чтобы голову поворачивал в мою сторону.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

esisl » 27 июл 2016, 18:43

Обалденно! Вот это работа!

P.S. Блин... Аж стыдно за свои поделки.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

Scorpio » 27 июл 2016, 22:33

Ахренеть!!! Во что люди делают! А я уже опечалился было, что на форуме остались только теоретики и мечтатели...
saifer писал(а): Вся программа написана на Visual Basic 6.0

Я то думал, что единственный тут динозавр, который еще пописывает иногда на VB6 :)
Хотим про все и подробно!

Добавлено спустя 9 минут 23 секунды:
Re: Робот Т-800 на 3D принтере и ПК в качестве системы управлени
saifer писал(а):Интересует есть ли возможность использовать распознавание Google офлайн на компьютере так же как на телефонах.

Меня тоже. Русскоязычная распознавалка от Гугла по моему мнению самая лучшая из доступных. Но мне даже онлайн не удался в свое время. По крайней мере на XP и VB6

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

saifer » 28 июл 2016, 07:41

У меня как раз распознавание голоса работает на XP но неудобно, что нужно постоянное подключение к интернет. Как-то бы изловчиться, чтобы с телефона при оффлайн распознавании данные передавались скажем на SD карту, а тогда получить их в Vb6 будет уже не проблема. Но все готовые решения в PlayMarket типа голосовых блокнотов не имеют автоматического сохранения. Вот думаю. По подробнее про программу покажу на видео в скором времени.

Рабочее окно программы
Work.jpg


Командный режим для изменения некоторых параметров
com.jpg


Переключение режимов активации распознавания через Google
speak.jpg


Программирование
In.jpg

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

Scorpio » 28 июл 2016, 17:31

Шикарный дизайн окон. Обычно, когда делаешь для себя,времени на красивое оформление всегда не хватает.
Какие стявяться цели перед проектом?
saifer писал(а):Как-то бы изловчиться...

Для "домашнего ассистента", написанного тоже на VB6, я пользовался смартфоном в качестве голосового пульта управления. Разпознавагием занимался сам смартфон в режиме офлайн, а асистенту скармливал результат в текстовом виде через ВТ.
Хотелось бы узнать подробнее про гугл распознавание на ХР. Я застрял на этапе получения правильного FLAC файла. Уже и не помню, что там не клеилось.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

ALS » 29 июл 2016, 03:56

Отличная работа. Можно тыкать носом всех апологетов Вин10 и .Net-а :)

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

saifer » 29 июл 2016, 07:51

Цели пока напечатать полностью тело и установить все сервоприводы. Передвигаться пока будет в моторизированном инвалидном кресле, управляемом тоже контроллером Pololu.
Для распознавания я переработал под себя проект с исходным кодом MSpeech http://programs74.ru/mspeech.html
А как у вас на смартфоне было реализовано начало записи файла. Мне нужно связь в обе стороны. Т.е. чтобы смартфон начинал запись голоса, когда моя программа скажем на его sd карту в файле скажем Control.txt записывает цифру 1, если 0, то он не пишет. Готовых решений в PlayMarket я не нашел. Можно конечно написать, но я не знаком с Android.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

Scorpio » 29 июл 2016, 17:11

Не совсем понял, зачем что-то записывать на sd. Запись начинается, когда пользователь готов говорить (т.е. что-нибудь нажимает на смартфоне), либо робот инициализирует начало записи по ВТ и запись идет, пока что-нибудь не распознается.
Разработчики позаботились, чтобы программить на андроиде смогла при желании любая домохозяйка. На appinventor, например.
Я сначала пользовался sl4a. Вот пример кода на питоне:
Код: Выделить всёРазвернуть
#_*_ coding: utf-8 _*_ 
import android
droid = android.Android()

SPP_ID='00001101-0000-1000-8000-00805F9B34FB' #SPP профиль
BT_DEVICE_ID = '11:11:11:11:11:11'   #устройство, с которым будем соединяться
cmd=""
#зададим словарь команд
comands={
   u"таймер":"TIM",
   u"прошло":"TPA",
   u"осталось":"TFA",
   u"напомни":"NAP",
   u"радио":"RAD",
   u"погода":"WEA",
   u"температура":"TEM",
   u"градусов":"TEM",
   u"тише":"VOL",
   u"громче":"VOH",
   u"молчи":"MUT",
   u"говори":"MUN",
   u"громкость":"VOZ",
   u"звук":"VOZ",
   u"время":"HOR",
   u"времени":"HOR",
   u"новости":"NEW",
   u"вперед":"NEX",
   u"следующий":"NEX",
   u"следующую":"NEX",
   u"назад":"BVD",
   u"играй":"PLY",
   u"стоп":"STP",
   u"пауза":"PAU",
   u"музыка":"MUZ",
   u"музыку":"MUZ",
   u"стой":"STO",
   u"будильник":"ALA",
   u"курс":"USD"
}
#зададим словарь параметров
parameters={
     u"выключи":"off",
   u"отключи":"off",
     u"включи":"on",
   u"эхо":"1",
   u"вести":"0",
   u"маяк":"3",
   u"джаз":"4",
   u"латино":"5",
   u"латина":"5",
   u"класика":"6",
   u"моцарт":"6",
   u"романтическое":"radioromantika"
}
#зададим словарь чисел
digits={
     u"один":"1",
     u"одна":"1",
     u"одну":"1",
     u"три":"3",
     u"пять":"5",
     u"десять":"10",
   u"пятнадцать":"15",
   u"двадцать":"20",
   u"тридцать":"30"
}

droid.vibrate() 
#примем голосовую команду
results = droid.recognizeSpeech(u"говори",None,None)   
instring=results.result
droid.makeToast(instring)
#включим bt
droid.toggleBluetoothState(True) 
droid.bluetoothConnect(SPP_ID, BT_DEVICE_ID) 

#преобразуем исходную строку в список входящих в нее слов
string=instring.split(" ")
for x in string:  #проверим совпадение с командой для каждого слова
   if x in comands:
      cmd+=comands[x]
      break
if cmd:
   if (cmd=="TIM" or cmd=="NAP" or cmd=="VOZ" or cmd=="ALA"):
      for x in string:
         try:
            i=int(x) #проверка, является ли числом
            cmd+=x #если удалось преобразовать в число, добавляем к команде
         except Exception:
            pass
         if x in digits: #если числа распознались словами
            cmd+=digits[x]
            # break
   elif cmd=="RAD":
      for x in string:  #проверим совпадение с параметром для каждого слова
         if x in parameters:
            cmd+=parameters[x]
            break
   else:
      pass
else: cmd='NONE'
droid.makeToast(cmd)
cmd='*'+cmd+'!'
#отправим обработанный результат
droid.bluetoothWrite(cmd) 

Т.е. программа запускается один раз, распознает сказанное, расшифровывает команду и передает ее роботу по ВТ.
Расшифровкой можно было заняться и на стороне робота, но на питоне это сделать проще, чем на VB6.

Хотелось бы больше подробностей про робота: структурную схему, характеристики железа, что он будет делать руками...

Добавлено спустя 3 часа 29 минут 40 секунд:
saifer писал(а):Для распознавания я переработал под себя проект с исходным кодом

Было бы интересно посмотреть ваш вариант, если он не явлется комерческой тайной. Разбираться в исходниках на Delphi как-то не охота. И ообще было бы супер, сделать для этой цели готовую библиотеку для общего потребления (на входе - комманда начала записи, на выходе - распознанный гуглом результат). Я так в сети ничего такого не нашел.

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

saifer » 01 авг 2016, 07:42

Я изменил немного программу MSpeech чтобы она вставляла распознанный текст в активное поле TextBox, скомпилировал EXE`шник и вызываю его уже из VB6

1) Определяем в соответствии с выбраны режимом распознавания момент наступления события запись

Код: Выделить всёРазвернуть
Private Sub ModeVoiceRecord_Timer()
If CPU.StopSPK.Caption = 0 And CPU.Speakakt.Enabled = False Then
    If CommandView.Enabled = False And CPU.StartSpeak.Enabled = False Then
      CPU.JSOnActive.Caption = "1"
      If Res.VoiceRecognitionMode.Caption = "1" Then
          SiS1.Logic.Caption = "Continuous voice recording mode "
          ModeVoiceRecord.Enabled = False
          If Res.RecSay.Caption = "1" Then Code2.SRec.Enabled = True
          GoogleASR.Enabled = True
       End If
       If Res.VoiceRecognitionMode.Caption = "3" Then
          If Res.KeyD.Caption = "1" Then
             SiS1.Logic.Caption = "Recording is activated by pressing key "
             Res.KeyD.Caption = "0"
          If Res.RecSay.Caption = "1" Then Code2.SRec.Enabled = True
             GoogleASR.Enabled = True
             ModeVoiceRecord.Enabled = False
          End If
       End If
       If Res.VoiceRecognitionMode.Caption = "2" Then
          If Res.RecQu.Caption = "0" Then
             Rem If (SiS1.HALArray(1).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(2).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(3).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(4).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(5).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(6).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(7).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(8).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(9).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(0).Caption > SiS1.AudioLevelAverage.Caption + 10) Then
             If (SiS1.HALArray(code.Label12.Caption - 1)) > (SiS1.AudioLevelAverage.Caption + 10) Then
                PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
                SiS1.Logic.Caption = "AudioLevel Averrage:" + SiS1.AudioLevelAverage.Caption + " "
                GoogleASR.Enabled = True
                ModeVoiceRecord.Enabled = False
             End If
          Else
             Rem If (SiS1.HALArray(1).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(2).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(3).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(4).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(5).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(6).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(7).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(8).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(9).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(0).Caption > SiS1.AudioLevelAverage.Caption + 10) Then
              If (SiS1.HALArray(code.Label12.Caption - 1)) > (SiS1.AudioLevelAverage.Caption + 10) Then
                SiS1.Logic.Caption = "Trigger switched " + Res.ForN.Caption + " "
                If Res.ForN.Caption > 2 Then
                    PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
                    SiS1.Logic.Caption = "AudioLevel Averrage:" + SiS1.AudioLevelAverage.Caption + " "
                    GoogleASR.Enabled = True
                    ModeVoiceRecord.Enabled = False
                    Res.ForN.Caption = 0
                    Exit Sub
                  End If
                  Res.ForN.Caption = Res.ForN.Caption + 1
             Else
                  Res.ForN.Caption = 0
             End If
          End If
       End If
       If Res.VoiceRecognitionMode.Caption = "4" Then
          If SiS1.facedetect.Caption = "DETECT" Then
             PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
             SiS1.Logic.Caption = "Voice Record start face detect "
             GoogleASR.Enabled = True
             ModeVoiceRecord.Enabled = False
          End If
       End If
       If Res.VoiceRecognitionMode.Caption = "5" Then
          If Res.RecQu.Caption = "0" Then
             If SiS1.Mdetection.Visible = True Then
                PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
                SiS1.Logic.Caption = "Voice Record start motion detect "
                GoogleASR.Enabled = True
                ModeVoiceRecord.Enabled = False
             End If
          Else
             If SiS1.Mdetection.Visible = True Then
                SiS1.Logic.Caption = "Trigger switched " + Res.ForN.Caption + " "
                If Res.ForN.Caption > 15 Then
                   PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
                   SiS1.Logic.Caption = "Voice Record start motion detect "
                   GoogleASR.Enabled = True
                   ModeVoiceRecord.Enabled = False
                   Res.ForN.Caption = 0
                End If
                Res.ForN.Caption = Res.ForN.Caption + 1
             Else
                Res.ForN.Caption = 0
             End If
          End If
       End If
       If Res.VoiceRecognitionMode.Caption = "6" Then
          If SiS1.facedetect.Caption = "DETECT" Then
Rem             If (SiS1.HALArray(1).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(2).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(3).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(4).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(5).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(6).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(7).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(8).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(9).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(0).Caption > SiS1.AudioLevelAverage.Caption + 10) Then
Rem                PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
Rem                SiS1.Logic.Caption = "Voice Record start motion detect "
Rem                googleasr.Enabled = True
Rem                ModeVoiceRecord.Enabled = False
Rem             End If
          If Res.RecQu.Caption = "0" Then
             Rem If (SiS1.HALArray(1).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(2).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(3).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(4).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(5).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(6).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(7).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(8).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(9).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(0).Caption > SiS1.AudioLevelAverage.Caption + 10) Then
             If (SiS1.HALArray(code.Label12.Caption - 1)) > (SiS1.AudioLevelAverage.Caption + 10) Then
                PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
                SiS1.Logic.Caption = "AudioLevel Averrage:" + SiS1.AudioLevelAverage.Caption + " "
                GoogleASR.Enabled = True
                ModeVoiceRecord.Enabled = False
             End If
          Else
             Rem If (SiS1.HALArray(1).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(2).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(3).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(4).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(5).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(6).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(7).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(8).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(9).Caption > SiS1.AudioLevelAverage.Caption + 10) Or (SiS1.HALArray(0).Caption > SiS1.AudioLevelAverage.Caption + 10) Then
              If (SiS1.HALArray(code.Label12.Caption - 1)) > (SiS1.AudioLevelAverage.Caption + 10) Then
                SiS1.Logic.Caption = "Trigger switched " + Res.ForN.Caption + " "
                If Res.ForN.Caption > 2 Then
                    PlayWaveFile App.Path & "\snd\OkGoogle.sys", True
                    SiS1.Logic.Caption = "AudioLevel Averrage:" + SiS1.AudioLevelAverage.Caption + " "
                    GoogleASR.Enabled = True
                    ModeVoiceRecord.Enabled = False
                    Res.ForN.Caption = 0
                    Exit Sub
                  End If
                  Res.ForN.Caption = Res.ForN.Caption + 1
             Else
                  Res.ForN.Caption = 0
             End If
          End If
          End If
       End If
   End If
End If
End Sub


Открываем текстовое поле для приема распознанной фразы

Код: Выделить всёРазвернуть
Private Sub GoogleASRRead_Timer()
Label8.Caption = Label8.Caption + 1
If Label8.Caption = 2 Then SiS1.Logic.Caption = "call google asr "
If Label8.Caption = 3 Then SiS1.Logic.Caption = "recive wave data to google.com "
If Label8.Caption = 4 Then
    Label8.Caption = 0
    GoogleASRRead.Enabled = False
    SiS1.Logic.Caption = "run record voice "
    Rem If Res.VoiceRecognitionMode.Caption <> "3" Then Shell App.Path & "\exe\mspeech.exe"
    SiS1.ComActivation.Enabled = True
    Code2.NEndRecord.Caption = 100
    SiS1.HCalcEndRec.Visible = True
    Code2.CalculationEndRecording.Enabled = True
End If
End Sub


Проверяем на отсутствие данных

Код: Выделить всёРазвернуть
Private Sub CalculationEndRecording_Timer()
If (SiS1.HALArray(code.Label12.Caption - 1)) > (SiS1.AudioLevelAverage.Caption + 10) Then
    Rem
Else
    Code2.NEndRecord.Caption = Code2.NEndRecord.Caption - 1
End If
SiS1.HCalcEndRec.Caption = "Calculation of the end of recording: " + Code2.NEndRecord.Caption
If Code2.NEndRecord.Caption = 0 Then
    code.GoogleHudL.Enabled = True
    Code2.CalcEndRecFlash.Enabled = True
    SiS1.Logic.Caption = "Timeout voice record "
    SiS1.Elog.Text = "Îøèáêà ðàñïîçíàâàíèÿ ðå÷è. Íåò ñèãíàëà èëè äàííûå íå ðàñïîçíàíû. "
    CalculationEndRecording.Enabled = False
    Code2.ErrorRecordVoice.Enabled = True
End If
End Sub


Если получили строку отправляем в обработку

Код: Выделить всёРазвернуть
If CPU.JSOnActive.Caption = "1" And Len(Command.Text) > 1 Then
   Code2.CalcEndRecFlash.Enabled = True
   Code2.CalculationEndRecording.Enabled = False
End If

     Command.Text = UTF8ToWin(Command.Text)
    If CPU.JSOnActive.Caption = "1" And Len(Command.Text) > 1 And Command.Visible = True Then
       SiS1.VoiceCommandSentCPU.Enabled = True
       SiS1.Logic.Caption = "recive ASR data to v_cpu "
    End If

Private Sub VoiceCommandSentCPU_Timer()
Label15.Caption = Label15.Caption + 1
If Label15.Caption >= 4 Then
    code.GoogleHudL.Enabled = True
    SiS1.Logic.Caption = "terminate process mspeech.exe "
    strComputer = "."
    strProcsToKill = "mspeech.exe"
    Set wbemObjectSet = GetObject("winmgmts://" & strComputer).InstancesOf("Win32_Process")
    For Each wbemObject In wbemObjectSet
        If LCase(wbemObject.Name) = strProcsToKill Then wbemObject.Terminate
    Next
    Rem Label3.Caption = 0
    Label15.Caption = 0
    SiS1.Logic.Caption = "call v_cpu "
    Command.Visible = False
    PlayWaveFile App.Path & "\snd\l.snd", True
    code.Command.Text = code.Command.Text + Command.Text + Chr$(13)
    If code.HME.Caption = 1 Then
       Logic.Caption = "find human malfunction: " + Command.Text + " "
       code.hm1.Enabled = False
       code.hm2.Enabled = True
       Exit Sub
    End If
    Rem SiS1.GoogleL.Caption = ""
    CPU.ModeVoiceRecord.Enabled = True
    CPU.CommandView.Enabled = True
    VoiceCommandSentCPU.Enabled = False
End If
End Sub

Re: Робот Т-800 на 3D принтере и ПК в качестве системы управ

Madf » 01 авг 2016, 13:27

Dmitry__ писал(а):Ничоссе :shock: , круто. Скайнет отдыхает.

Ах-но!!! :shock: :good:
А главное, вин ХП и VB6! Выкуси! :P


Rambler\'s Top100 Mail.ru counter