Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 28

Голосовое управление сайтом на питоне

23.02.2014, 00:37. Показов 5209. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста, возможно ли на питоне, создать сайт, которым можно было управлять голосом? Вот пример, простенький:

Человек заходит на сайт, и говорит: Перейти в раздел фото (и как бы срабатывает эффект нажатии по ссылке фото). Затем говорит: спустится вниз (пользователя спускает вниз сайта). Примерно так должно работать.

P.S. Я не прошу готовых решений, или решить это за меня, мне нужно знать, способен ли на это питон? Спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2014, 00:37
Ответы с готовыми решениями:

Голосовое управление
Мне надо добавить голосовое управление в игру, ну хотя бы 2 команды, библиотек в интернете куча, уже голова кругом идет. Если вам несложно...

Голосовое управление
Здравствуйте, никто не знает можно ли сделать голосовое управление плеером, word, калькулятором и всякое такое при помощи C#?

Голосовое управление
Стало интересно, есть ли какие-нибудь программы для голосового управления на win8?

9
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
23.02.2014, 00:47
Цитата Сообщение от aqwerty Посмотреть сообщение
способен ли на это питон?
В стандартной библиотеке функций для распознавания речи нет. Можно попробовать подключить Google Speech API или подобный функцинал. Записываете файл с командой, отсылаете на сервер и принимаете текст. Дальше простейший анализ текста.
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 28
23.02.2014, 02:19  [ТС]
ВАСИЛЕВС, можете пожалуйста сказать, какой язык веб программирования способен распознавать речь?

Добавлено через 3 минуты
Ведь же у гугла каким-то макаром это получилось. Слышал на каком-то форуме (сейчас не помню на каком), там говорилось, что распознавать речь может js, java, c#, ruby и еще там приводились несколько языков (мне не знакомых). Можете сказать что-то по этому поводу?
0
 Аватар для sanodins
52 / 51 / 15
Регистрация: 27.06.2013
Сообщений: 192
Записей в блоге: 1
23.02.2014, 08:33
Лучший ответ Сообщение было отмечено aqwerty как решение

Решение

распознавать и на python можно, но раз вы все равно в интернете работаете с сайтом, то лучше гугла, наверное никакой оффлайн распознователь не отработает, я сам писал прожку общения и управления голосом на python через google
pocketsphinx можно попробовать, но все равно, качество распознования хуже
И у гугла это получилось благодаря кластеру и огромной базы фонетики и голосовых баз
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 28
23.02.2014, 16:42  [ТС]
sanodins, спасибо

Добавлено через 23 минуты
Цитата Сообщение от sanodins Посмотреть сообщение
я сам писал прожку общения и управления голосом на python через google
pocketsphinx можно попробовать
Можете сказать, вот я хочу написать простой хостинг фотографий, управление которого при помощи голоса, но если я буду для этого использовать гугл, я должен буду платить ему за использование сервиса? Т.к. это уже будет коммерческий проект, или как? Можете пожалуйста дать ссылку на правила использования данного сервиса?

P.S. Я не нашел там такой ссылки. Где писались бы требования по использованию данного сервиса.
0
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
23.02.2014, 18:59
aqwerty, Гугл закрыл Google Translate API
Яндекс имеет нужный функционал и он вроде ещё открытый.
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 28
23.02.2014, 19:13  [ТС]
Цитата Сообщение от ВАСИЛЕВС Посмотреть сообщение
aqwerty, Гугл закрыл Google Translate API
Яндекс имеет нужный функционал и он вроде ещё открытый.
ВАСИЛЕВС, спасибо за ссылочку. А API google.voice закрыты тоже для коммерческих целей?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
23.02.2014, 20:52
aqwerty, я слышал народ находил куда нужно посылать данные. Погуглите это, человек таким макаром делал себе управление умным домом через голосовое управление.
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 28
23.02.2014, 20:57  [ТС]
Спасибо всем большое!
0
 Аватар для sanodins
52 / 51 / 15
Регистрация: 27.06.2013
Сообщений: 192
Записей в блоге: 1
23.02.2014, 22:54
функция преобразования голоса в текст, модули из основного проекта, не убирал, отдельно еще установил в директорию с проектом прогу sox под виндовс, ну а уже текст обрабатывать кто чем хочет и как может
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# -*- coding: utf-8 -*-
 
from os.path import exists
from array import array
from struct import unpack, pack
from subprocess import Popen, PIPE
import pyaudio
import wave
import os
import urllib2
import speech
import json
import time
from win32com.client import Dispatch
from grab import Grab
import threading
from subprocess import Popen, PIPE
 
THRESHOLD = 1500
CHUNK_SIZE = 1024
FORMAT = pyaudio.paInt16
RATE = 16000
 
def is_silent(L):
    "Returns `True` if below the 'silent' threshold"
    return max(L) < THRESHOLD
 
def normalize(L):
    "Average the volume out"
    MAXIMUM = 16384
    times = float(MAXIMUM)/max(abs(i) for i in L)
 
    LRtn = array('h')
    for i in L:
        LRtn.append(int(i*times))
    return LRtn
 
def trim(L):
    "Trim the blank spots at the start and end"
    def _trim(L):
        snd_started = False
        LRtn = array('h')
 
        for i in L:
            if not snd_started and abs(i)>THRESHOLD:
                snd_started = True
                LRtn.append(i)
 
            elif snd_started:
                LRtn.append(i)
        return LRtn
 
    # Trim to the left
    L = _trim(L)
 
    # Trim to the right
    L.reverse()
    L = _trim(L)
    L.reverse()
    return L
 
def add_silence(L, seconds):
    "Add silence to the start and end of `L` of length `seconds` (float)"
    LRtn = array('h', [0 for i in xrange(int(seconds*RATE))])
    LRtn.extend(L)
    LRtn.extend([0 for i in xrange(int(seconds*RATE))])
    return LRtn
 
def record():
    """
    Record a word or words from the microphone and 
    return the data as an array of signed shorts.
 
    Normalizes the audio, trims silence from the 
    start and end, and pads with 0.5 seconds of 
    blank sound to make sure VLC et al can play 
    it without getting chopped off.
    """
    p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT, channels=1, rate=RATE, 
                    input=True, output=True,
                    frames_per_buffer=CHUNK_SIZE)
 
    num_silent = 0
    snd_started = False
 
    LRtn = array('h')
 
    while 1:
        data = stream.read(CHUNK_SIZE)
        L = unpack('<' + ('h'*(len(data)/2)), data) # little endian, signed short
        L = array('h', L)
        LRtn.extend(L)
 
        silent = is_silent(L)
        #print silent, num_silent, L[:10]
 
        if silent and snd_started:
            num_silent += 1
        elif not silent and not snd_started:
            snd_started = True
 
        if snd_started and num_silent > 30:
            break
 
    sample_width = p.get_sample_size(FORMAT)
    stream.stop_stream()
    stream.close()
    p.terminate()
 
    LRtn = normalize(LRtn)
    LRtn = trim(LRtn)
    LRtn = add_silence(LRtn, 0.5)
    return sample_width, LRtn
 
def record_to_file(path):
    "Records from the microphone and outputs the resulting data to `path`"
    sample_width, data = record()
    data = pack('<' + ('h'*len(data)), *data)
 
    wf = wave.open(path, 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(sample_width)
    wf.setframerate(RATE)
    wf.writeframes(data)
    wf.close()
 
def exec_cmd(cmd_line):
        process = Popen(cmd_line.split(), shell=True, stdout=PIPE)
        stdout, stderr = process.communicate()
        return stdout.decode('cp866')
 
cmd = 'sox tmp.wav message.flac pad .1 0 rate 16k > /null 2>&1'
 
def wav():
    """ Play a WAVE file. """
    chunk = 1024
    wf = wave.open('R2D2.wav', 'rb')
    p = pyaudio.PyAudio()
            # open stream
    stream = p.open(format =
        p.get_format_from_width(wf.getsampwidth()),
        channels = wf.getnchannels(),
        rate = wf.getframerate(),
        output = True)
 
            # read data
    data = wf.readframes(chunk)
 
            # play stream
    while data != '':
        stream.write(data)
        data = wf.readframes(chunk)
 
    stream.close()
    p.terminate()
 
if __name__ == '__main__':
    while True:
        try:
            
            # Время начала работы программы
            tit1 = time.time()
            
            print(u"говорите в микрофон")
            record_to_file('tmp.wav')
            print(u"сделали-записываем в tmp.wav")
            
            
            # init events
            e1 = threading.Event()
            e2 = threading.Event()
 
            # init threads
            t1 = threading.Thread(target=wav)
            t2 = threading.Thread(target=exec_cmd(cmd))
 
            # start threads
            t1.start()
            t2.start()
 
            e1.set() # initiate the first event
 
            # join threads to the main thread
            t1.join()
            t2.join()
      
 
 
          
            FileNameTmp    = ('message.flac')#переменная определяет имя фала
            url = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU"#гуглосервис
            flac=open(FileNameTmp,"rb").read()#читаем файл
 
 
            header = {'Content-Type' : 'audio/x-flac; rate=16000'}#запрос
            req = urllib2.Request(url, flac, header)
            data = urllib2.urlopen(req)
 
            t=data.read()
            #print t.decode('utf-8')
 
 
            txt=t.decode('utf-8')
 
 
 
 
            for i in json.loads(txt)['hypotheses']:#ответ пришел в формате json
                k = i.keys()                      #находим по ключу нужный нам ответ
                print i['utterance']
                print i['confidence'],u'-уровень распознавания'
                #for j in k:
                    #print  i[j]
              
            #if i['confidence']<0.45: 
                #speech.say(u"Пожалуйста, повторите команду!")
          
            try:
                slovo=i['utterance']
            except: pass
 
            os.remove("message.flac")
 
            # Время завершения работы программы
            tit2 = time.time()
            print u'прошло времени: %.2f' % (tit2-tit1)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2014, 22:54
Помогаю со студенческими работами здесь

Голосовое управление
Здравствуйте! Пытаясь заняться голосовым управлением наткнулся на тему - https://msdn.microsoft.com/en-us/magazine/dn857362.aspx При...

Голосовое управление
Привет всем. Захотелось создать прогу с голосовым управлением. Как?) не знаю как сделать, что бы прога после фразы, поняла, что надо...

Голосовое управление
Здравствуйте уважаемые программисты возможно ли на vb.net написать программу которая управляется голосом.Например в TextBox вводит цифры...

Голосовое управление
Подскажите, пожалуйста, что не так делаю. Вываливает такую ошибку: &quot;Необработанное исключение типа...

Голосовое управление
Здравствуйте! Помогите разобраться. Раньше писал приложения для голосового управления на C#. На официальном сайте Майкрософт скачивал файлы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru