多线程从一个函数到另一个函数再回到主函数
Multi Threading from a function to another function and back to the main function
目前这是我的设置,python 在 PyCharm 中,还有一个带有 MAX30100 心率传感器的 Arduino Uno。我目前能够通过 pyserial 将数据从 arduino 传输到我的 pycharm,并将在 pycharm 中显示心率。
但我希望我的程序 运行 网络摄像头馈送 WHILE 同时显示传感器读数。
目前我的 SIMPLIFIED 代码如下:
class start_workout_session():
def pushup(self):
#cam start here ~~!!
cap = cv2.VideoCapture(0)
with mp_pose.Pose(min_detection_confidence=1.5, min_tracking_confidence=1.5) as pose:
while cap.isOpened():
# Extract landmarks
try:
calculate angle here
Showing angle in frame by using putText method from cv2
Curl counter logic
Render curl counter
t1 = threading.Thread(target=arduino)
t1.start()
cv2.imshow('i-Trainer', image)
cap.release()
cv2.destroyAllWindows()
def arduino():
serialInst = serial.Serial()
serialInst.baudrate = 9600
serialInst.port = 'COM3'
serialInst.open()
while True:
if serialInst.inWaiting:
packet = serialInst.readline()
print(packet.decode('utf').rstrip('\n'))
time.sleep(1)
t2 = threading.Thread(target=pushup)
t2.start()
t1.join()
t2.join()
这个程序可以运行但是总是提示错误:
File "C:\Users\..\main.py", line 629, in arduino
serialInst.open()
File "C:\Users\..\Python36\lib\site-packages\serial\serialwin32.py", line 64, in open
raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM3': PermissionError(13, 'Access is denied.', None, 5)
感谢@cguk70,
我设法解决了这个问题,把
t1 = threading.Thread(target=arduino)
t1.start()
外面还有
#cam start here ~~!!
cap = cv2.VideoCapture(0)
原因是我正在相机循环中创建一个新的 Arduino 线程。所以第二次你会尝试再次打开串行端口并得到错误,因为它已经打开了。
目前这是我的设置,python 在 PyCharm 中,还有一个带有 MAX30100 心率传感器的 Arduino Uno。我目前能够通过 pyserial 将数据从 arduino 传输到我的 pycharm,并将在 pycharm 中显示心率。 但我希望我的程序 运行 网络摄像头馈送 WHILE 同时显示传感器读数。 目前我的 SIMPLIFIED 代码如下:
class start_workout_session():
def pushup(self):
#cam start here ~~!!
cap = cv2.VideoCapture(0)
with mp_pose.Pose(min_detection_confidence=1.5, min_tracking_confidence=1.5) as pose:
while cap.isOpened():
# Extract landmarks
try:
calculate angle here
Showing angle in frame by using putText method from cv2
Curl counter logic
Render curl counter
t1 = threading.Thread(target=arduino)
t1.start()
cv2.imshow('i-Trainer', image)
cap.release()
cv2.destroyAllWindows()
def arduino():
serialInst = serial.Serial()
serialInst.baudrate = 9600
serialInst.port = 'COM3'
serialInst.open()
while True:
if serialInst.inWaiting:
packet = serialInst.readline()
print(packet.decode('utf').rstrip('\n'))
time.sleep(1)
t2 = threading.Thread(target=pushup)
t2.start()
t1.join()
t2.join()
这个程序可以运行但是总是提示错误:
File "C:\Users\..\main.py", line 629, in arduino
serialInst.open()
File "C:\Users\..\Python36\lib\site-packages\serial\serialwin32.py", line 64, in open
raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port 'COM3': PermissionError(13, 'Access is denied.', None, 5)
感谢@cguk70,
我设法解决了这个问题,把
t1 = threading.Thread(target=arduino)
t1.start()
外面还有
#cam start here ~~!!
cap = cv2.VideoCapture(0)
原因是我正在相机循环中创建一个新的 Arduino 线程。所以第二次你会尝试再次打开串行端口并得到错误,因为它已经打开了。