【发布时间】:2021-02-25 21:23:33
【问题描述】:
我正在研究一种相机设置,当在某些伺服电机上旋转相机时,它可以跟踪人脸。我想要这样做的方式(我可能这样做的方式)是这样的:我使用 python openCV 来获取面部位置并生成一个向量,该向量告诉你转向哪个方向以便相机看起来直接打脸。然后将该向量发送到 Arduino Uno,在其中使用 Arduino IDE 将输入向量解码为伺服电机运动。问题是将在 python 脚本中计算的向量发送到 Arduino。我使用 PowerShell 命令通过 Windows 终端将所述向量发送到 COM10:
$port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one
$port.open()
$port.Writeline(vector)
$port.close()
当我像这样使用 python os 或 subprocess 命令时:
os.system("powershell $port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one")
os.system("powershell $port.open()")
或者
subprocess.run(["powershell", "-Command", "$port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one"])
subprocess.run(["powershell", "-Command", "$port.open()"])
第一行运行良好,但是我假设的 port 变量没有保存,第二行出现以下错误:
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $port.open()
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
在整个 python 脚本中,我只需要重复执行一行,因为我从摄像头获得了视频的实时提要:
$port.Writeline(vector)
其他行仅在脚本启动和停止运行时使用。
我尝试了很多其他的东西,比如在 PowerShell 脚本中编写这 4 行并执行它,但我什至无法让该脚本在我的终端上运行,等等。 这种方法是否可行,我可以修复它,还是我应该直接放弃它并使用其他东西? 如果有可能,那我做错了什么?
【问题讨论】:
标签: python windows powershell arduino