68 lines
1.5 KiB
Python
68 lines
1.5 KiB
Python
import cv2
|
|
import numpy as np
|
|
|
|
import ch340
|
|
|
|
flag = False
|
|
vidId = 1
|
|
cap = cv2.VideoCapture(vidId, cv2.CAP_DSHOW)
|
|
while not flag:
|
|
suc, im = cap.read()
|
|
cv2.imshow("image", im)
|
|
k = cv2.waitKey(0)
|
|
if k & 0xFF == ord("q"):
|
|
# cap.release()
|
|
# cv2.destroyAllWindows()
|
|
flag = True
|
|
else:
|
|
vidId += 1
|
|
cap.release()
|
|
cap.open(vidId, cv2.CAP_DSHOW)
|
|
print(f"使用摄像头索引: {vidId}")
|
|
|
|
|
|
base = 30
|
|
pump = ch340.CH340()
|
|
while True:
|
|
suc, im = cap.read()
|
|
hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
|
|
s = hsv[:, :, 1]
|
|
mask = s > base
|
|
cv2.imshow("mask", im * mask[:, :, np.newaxis])
|
|
tot = mask.shape[0] * mask.shape[1]
|
|
val = np.sum(mask)
|
|
rate = val / tot
|
|
thr = (0.05, 0.2, 0.5)
|
|
ret = ""
|
|
if rate < thr[0]:
|
|
ret = "transport"
|
|
elif rate < thr[1]:
|
|
ret = "middle"
|
|
elif rate < thr[2]:
|
|
ret = "about"
|
|
else:
|
|
ret = "colored"
|
|
im = cv2.putText(
|
|
im,
|
|
f"Rate: {rate:.2},base={base},{ret}",
|
|
(10, 30),
|
|
cv2.FONT_HERSHEY_SIMPLEX,
|
|
1,
|
|
(0, 255, 0),
|
|
2,
|
|
)
|
|
cv2.imshow("image", im)
|
|
k = cv2.waitKey(1)
|
|
if k & 0xFF == ord("w"):
|
|
base += 1
|
|
elif k & 0xFF == ord("s"):
|
|
base -= 1
|
|
elif k & 0xFF == ord("a"):
|
|
pump.push_async(speed=0.1, vol=0.1)
|
|
elif k & 0xFF == ord("q"):
|
|
print("Camera index = ", vidId)
|
|
print("k =", base)
|
|
cap.release()
|
|
cv2.destroyAllWindows()
|
|
break
|