Raspberry Pi Camera与Azure计算机视觉API代码连接问题求助
Hey Christy, let's work through these issues one by one—they're all common pitfalls when getting started with Raspberry Pi + Python projects, so don't worry!
1. Thonny报错"No module named 'urllib2'"
这是Python版本差异搞的鬼!urllib2是Python 2的专属模块,而Thonny默认使用Python 3(现在树莓派系统默认也是Python 3)。你需要把代码里的urllib2相关导入和调用替换成Python 3的对应写法:
- 把
import urllib2改成import urllib.request和import urllib.error(按需导入) - 把
urllib2.urlopen()替换为urllib.request.urlopen() - 把
urllib2.URLError替换为urllib.error.URLError
另外可以检查下Linux终端用的Python版本:输入python --version,如果显示2.x,那就是终端用了Python 2,而Thonny用3,所以代码要兼容Python 3才能在两个环境都正常运行。
2. 只有放在Adafruit_CharLCD/examples才能运行
这是Python找不到Adafruit_CharLCD模块的位置导致的,给你几个简单的解决办法:
- 全局安装模块(最省心):打开终端,运行
sudo pip3 install Adafruit-CharLCD(用pip3对应Python3),这样不管代码放在哪个文件夹,Python都能自动找到模块。 - 手动添加模块路径:如果不想全局安装,在你的代码开头加上这几行(替换成你Adafruit_CharLCD文件夹的实际路径):
import sys sys.path.append("/home/pi/Adafruit_CharLCD") # 改成你实际存放该文件夹的路径
- 检查模块结构:确保Adafruit_CharLCD文件夹里有
__init__.py文件(哪怕是空文件也行),这样Python才会把它识别为可导入的模块。
3. 按下按键后停在'capturing...'无法完成拍摄
这个问题得一步步排查,我们从基础到复杂来:
先验证PiCamera本身是否正常
先写个极简的测试代码,放在/home/pi文件夹里运行,确认相机硬件没问题:
from picamera import PiCamera from time import sleep camera = PiCamera() camera.start_preview() sleep(2) camera.capture('/home/pi/test_photo.jpg') camera.stop_preview()
如果能生成test_photo.jpg,说明相机硬件和基础驱动没问题,问题出在原代码的拍照逻辑或后续API调用。
检查文件路径与权限
原代码里保存照片的路径可能没有写入权限,或者用了相对路径导致找不到位置。建议改成绝对路径,比如/home/pi/photo.jpg,树莓派的pi用户对/home/pi文件夹是有完全写入权限的,不会出现权限问题。
检查Azure API调用是否卡住
如果拍照没问题,那可能是调用Azure计算机视觉API时卡住了。可以在代码里加一些打印日志,比如:
print("Starting capture...") # 拍照代码 print("Capture done, sending to Azure...") # API调用代码 print("Received Azure response...")
看看日志停在哪一步,就能定位是API请求卡住了。另外要确认你的API密钥、端点地址是否正确,树莓派是否能正常上网(可以终端输入ping azure.com测试网络连通性)。
检查按键触发逻辑
也有可能是按键事件没有被正确捕获,导致后续流程没启动。可以在按键触发的函数里加个打印,比如print("Key pressed!"),确认按键按下时能触发这个打印。
内容的提问来源于stack exchange,提问作者Christy Do

