Python 在Raspberry Pi Zero上构建SeeingWand时存在编码问题
这是我第一次发帖,请原谅我的失礼 我正在制作一个SeeingWand,如MagPi第71期所述。 我已经安装并测试了所有硬件。然后安装python代码,原版;代码是python2.7,我已将代码更新为在python3下运行,但在运行代码时出现了一个奇怪的错误: 系统显示http模块没有.client属性 文件上说确实如此。我试过了。client和。server属性都给出了相同的错误。我做错了什么 我尝试过几种不同的编码方式,raspberry OS(Raspbian)的几种版本都会出现相同的错误Python 在Raspberry Pi Zero上构建SeeingWand时存在编码问题,python,Python,这是我第一次发帖,请原谅我的失礼 我正在制作一个SeeingWand,如MagPi第71期所述。 我已经安装并测试了所有硬件。然后安装python代码,原版;代码是python2.7,我已将代码更新为在python3下运行,但在运行代码时出现了一个奇怪的错误: 系统显示http模块没有.client属性 文件上说确实如此。我试过了。client和。server属性都给出了相同的错误。我做错了什么 我尝试过几种不同的编码方式,raspberry OS(Raspbian)的几种版本都会出现相同的错误
import picamera, http, urllib, base64, json, re
from os import system
from gpiozero import Button
使用您的MICROSOFT VISION API密钥更改下面的{MS_API_KEY}
摄像头按钮-这是BCM编号,而不是pin编号
设置摄像机
安装视觉API
循环永远等待按钮按下
如果为True:camera_button.wait_for_press()
camera.capture('/tmp/image.jpg')
系统显示一个错误,指出http模块没有.client属性 文件上说确实如此。我试过了。client和。server属性都给出了相同的错误。我做错了什么 预期结果如下: 当我按下按钮1时,我希望相机能拍照 当我按下按钮2时,我希望访问MSFT Azure以使用AI识别图片
最后的输出是让魔杖访问音频帽子,并描述魔杖正在“看”什么。尝试添加如下导入:
import http.client
编辑:
http
是一个Python包。即使软件包包含一些模块,在您导入软件包时,它也不会自动导入这些模块,除非该软件包的\uuu init\uuuu.py
代表您这样做。在http
的情况下,\uuuu init\uuuuuuuuuuuuuuupy
是空的,所以你只需要导入包就不会得到任何免费的东西。我不得不问谷歌什么是“SeeingWand”。。。有趣的项目,我很想知道它有多聪明。我有一个朋友成功地让它工作了,他说80%的时间魔杖都在现场。。。。但其他20%的描述都很搞笑。我仍在试图弄明白为什么我的工具不能工作-(当它出现时,我会让你知道我的情况。如果你看到新的错误并且搜索没有返回任何现有的答案,你可以发布另一个关于新错误的问题。我认为我的答案会让你克服你在这里描述的直接问题,但我建议你重新考虑你的方法:尝试更新一个非平凡大小的package(我认为这几乎就是您正在使用的所有软件包)从Python 2开始-->Python 3并不容易…除非有很好的理由说明您必须使用Python 3,否则我只需要安装Python 2并使用它。您的生活会轻松得多。这很有效!!,SeeingWand仍然不起作用,但去掉http模块后没有.client属性错误。谢谢
camera = picamera.PiCamera()
headers = {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key': ms_api_key,
}
params = urllib.parse.urlencode({
'visualFeatures': 'Description',
})
camera_button.wait_for_press()
camera.capture('/tmp/image.jpg')
body = open('/tmp/image.jpg', "rb").read()
try:
conn = http.client.HTTPsConnection('westcentralus.api.cognitive.microsoft.com')
conn.request("POST", "/vision/v1.0/analyze?%s"%params, body, headers)
response = conn.getresponse()
analysis=json.loads(response.read())
image_caption = analysis["description"]["captions"][0]["text"].capitalize()
# validate text before system() call; use subprocess in next version
if re.match("^[a-zA-z ]+$", image_caption):
system('espeak -ven+f3 -k5 -s120 "' + image_caption + '"')
else :
system('espeak -ven+f3 -k5 -s120 "i do not know what i just saw"')
conn.close()
except Exception as e:
print (e.args)
import http.client