gpt4 book ai didi

python - 在 PyObjC 中使用 NSSpeechRecognizer 类

转载 作者:行者123 更新时间:2023-12-01 04:01:36 25 4
gpt4 key购买 nike

我试图通过 PyObjC 在 python 中使用 OS X 内置语音识别引擎。

class Recognizer(NSSpeechRecognizer):

def __init__(self):

cmds = ['computer', 'keyboard']
self.setCommands_(cmds)
self.setDelegate_(self)

self.blocksOtherRecognizers = True
self.listensInForegroundOnly = False

return self

recognizer = Recognizer.alloc().init()

问题1:我需要将委托(delegate)分配给另一个类(class)吗?

问题2:我需要在类init方法中初始化实例识别器吗?

def speechRecognizer_didRecognizeCommand_(sender, command):

if command == 'computer':
print('computer')

问题3:我是否应该在类识别器中定义它?

recognizer.startListening()

问题4:当我运行脚本时,没有迹象表明识别器正在监听,脚本立即完成。

speechRecognizer_didRecognizeCommand_(sender, command)

**问题5:**我不知道在第二个参数命令中放入什么,因为我觉得这是它从识别器接收到的消息,而不是我应该放入的内容。

就是这样。正如你所看到的,我现在真的很困惑。非常感谢您的回答,谢谢。

此外,如果您除了这个 cocoa 类之外还有任何其他语音识别解决方案,请告诉我。

链接:

NSSpeechRecognizer

Example

最佳答案

您的示例存在许多问题:

  • 不要使用 __init__ 作为初始化程序,而使用 init 代替。这是必需的,因为 PyObjC 遵循 Cocoa 的约定而不是普通的 Python 约定。

  • 我不会子类化 NSSpeechRecognizer,但会使用更符合正常 Cocoa 风格的单独委托(delegate)类。

  • 您不能像您尝试那样使用赋值来设置属性,而是使用对 setter 的显式调用。即 self.setBlocksOtherRecognizers(True) 而不是 self.blocksOtherRecognizers = True

    原因是,在 Objective-C 中,方法和属性位于两个不同的命名空间中,而在 Python 中,它们位于同一命名空间中,并且不能拥有同名的方法和属性 (self.blocksOtherRecognizers 是属性的 getter 方法)。

  • 最后,您需要启动一个运行循环才能实际使用识别器:

    循环 = NSRunLoop.currentRunLoop()
    循环.run()

一个完整的例子:

from Cocoa import NSObject, NSSpeechRecognizer, NSRunLoop

class Controller (NSObject):
def init(self):
commands = [ "up", "down" ]

self.recognizer = NSSpeechRecognizer.alloc().init()
self.recognizer.setCommands_(commands)
self.recognizer.startListening()
self.recognizer.setDelegate_(self)

def speechRecognizer_didRecognizeCommand_(self, recognizer, command):
print(command)

controller = Controller.alloc().init()
loop = NSRunLoop.currentRunLoop()
loop.run()

请注意,这个示例不会停止,您必须强行终止它。

关于python - 在 PyObjC 中使用 NSSpeechRecognizer 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com